<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kubernetes on 凌虚 Blog</title><link>https://rifewang.github.io/categories/kubernetes/</link><description>Recent content in Kubernetes on 凌虚 Blog</description><generator>Hugo</generator><language>zh-CN</language><copyright>Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)</copyright><lastBuildDate>Mon, 23 Dec 2024 18:39:10 +0800</lastBuildDate><atom:link href="https://rifewang.github.io/categories/kubernetes/index.xml" rel="self" type="application/rss+xml"/><item><title>Kubernetes APF（API 优先级和公平调度）简介</title><link>https://rifewang.github.io/k8s-apf/</link><pubDate>Mon, 23 Dec 2024 16:55:13 +0800</pubDate><guid>https://rifewang.github.io/k8s-apf/</guid><description>&lt;p&gt;在 Kubernetes 集群中，&lt;code&gt;kube-apiserver&lt;/code&gt; 是一个至关重要的组件，它不仅要对外响应客户端的 HTTPS 请求，还要对内与 &lt;code&gt;controller-manager&lt;/code&gt;、&lt;code&gt;scheduler&lt;/code&gt;、&lt;code&gt;kubelet&lt;/code&gt; …… 等等其它组件交互。&lt;/p&gt;</description></item><item><title>我对 OpenAI Kubernetes 集群故障的追问与疑惑</title><link>https://rifewang.github.io/openai-k8s-fail-confusion/</link><pubDate>Thu, 19 Dec 2024 15:06:08 +0800</pubDate><guid>https://rifewang.github.io/openai-k8s-fail-confusion/</guid><description>&lt;p&gt;2024 年 12 月 11 号，&lt;code&gt;OpenAI&lt;/code&gt; 的 &lt;code&gt;Kubernetes&lt;/code&gt; 集群发生故障，&lt;code&gt;API&lt;/code&gt;、&lt;code&gt;ChatGPT&lt;/code&gt;、&lt;code&gt;Sora&lt;/code&gt; 等服务都受到了影响，且时间长达 4 小时 22 分钟。&lt;/p&gt;
&lt;p&gt;关于这次故障，官方有公开复盘，也有很多媒体博主追踪报导。然而，我对此并不满意，&lt;strong&gt;本文我将会提出自己的疑惑与追问&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>Kubernetes：CPU 配置、Linux CFS、编程语言的性能问题</title><link>https://rifewang.github.io/k8s-cpu-linux-cfs-app-performance/</link><pubDate>Wed, 11 Dec 2024 15:44:11 +0800</pubDate><guid>https://rifewang.github.io/k8s-cpu-linux-cfs-app-performance/</guid><description>&lt;h2 id="kubernetes-cpu-配置---linux-cfs"&gt;Kubernetes CPU 配置 -&amp;gt; Linux CFS&lt;/h2&gt;
&lt;p&gt;在使用 Kubernetes 时，可以通过 &lt;code&gt;resources.requests&lt;/code&gt; 和 &lt;code&gt;resources.limits&lt;/code&gt; 配置资源的请求和限额，例如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;250m&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;limits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;500m&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;对容器的资源配置会通过 &lt;code&gt;CRI&lt;/code&gt; 组件（如 &lt;code&gt;containerd&lt;/code&gt;、&lt;code&gt;cri-o&lt;/code&gt; 交由更底层的 &lt;code&gt;runc&lt;/code&gt; 或 &lt;code&gt;kata-container&lt;/code&gt;）去设置 Linux 的 cgroup。&lt;/p&gt;</description></item><item><title>Kubernetes 集群网络：Flannel 与 Calico 的区别</title><link>https://rifewang.github.io/flannel-calico/</link><pubDate>Sat, 30 Nov 2024 10:23:42 +0800</pubDate><guid>https://rifewang.github.io/flannel-calico/</guid><description>&lt;p&gt;有读者提问：&lt;code&gt;Flannel&lt;/code&gt; 与 &lt;code&gt;Calico&lt;/code&gt; 的区别。文本将解析一下这两个组件。&lt;/p&gt;
&lt;h2 id="flannel"&gt;Flannel&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Flannel&lt;/code&gt; 的架构非常简单，只有两个组件：&lt;code&gt;flanneld&lt;/code&gt; 和 &lt;code&gt;flannel-cni-plugin&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;在功能特性上，&lt;code&gt;Flannel&lt;/code&gt; 有三个部分：&lt;/p&gt;</description></item><item><title>Kubernetes 10 问，测测你对 k8s 的理解程度</title><link>https://rifewang.github.io/k8s-10-questions/</link><pubDate>Sat, 16 Nov 2024 15:14:17 +0800</pubDate><guid>https://rifewang.github.io/k8s-10-questions/</guid><description>&lt;h2 id="kubernetes-10-问"&gt;Kubernetes 10 问&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;假设集群有 2 个 node 节点，其中一个有 pod，另一个则没有，那么新的 pod 会被调度到哪个节点上？&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;应用程序通过容器的形式运行，如果 OOM（Out-of-Memory）了，是容器重启还是所在的 Pod 被重建？&lt;/p&gt;</description></item><item><title>Kubernetes Extended Resource 扩展资源使用简介</title><link>https://rifewang.github.io/k8s-extended-resources/</link><pubDate>Wed, 06 Nov 2024 19:30:34 +0800</pubDate><guid>https://rifewang.github.io/k8s-extended-resources/</guid><description>&lt;p&gt;Kubernetes 除了提供基于 CPU 和内存的传统计算资源调度外，还支持自定义的 &lt;code&gt;Extended Resource&lt;/code&gt; 扩展资源，以便调度和管理其它各种类型的资源。&lt;/p&gt;
&lt;h2 id="extended-resource"&gt;Extended Resource&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Extended Resource&lt;/code&gt; 扩展资源的创建和使用过程如下图所示：&lt;/p&gt;</description></item><item><title>Kubernetes Node 节点的生命周期简述</title><link>https://rifewang.github.io/k8s-node-lifecycle/</link><pubDate>Fri, 01 Nov 2024 20:42:58 +0800</pubDate><guid>https://rifewang.github.io/k8s-node-lifecycle/</guid><description>&lt;p&gt;&lt;code&gt;Node&lt;/code&gt; 节点是 Kubernetes 的核心组件之一，其生命周期可以简要概括为：注册、运行、下线。本文将简要介绍 &lt;code&gt;Node&lt;/code&gt; 生命周期中发生的关键事件。&lt;/p&gt;
&lt;p&gt;&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet/node-lifecycle.drawio.png"
 data-srcset="https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet/node-lifecycle.drawio.png, https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet/node-lifecycle.drawio.png 1.5x, https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet/node-lifecycle.drawio.png 2x"
 data-sizes="auto"
 alt="https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet/node-lifecycle.drawio.png"
 title="https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet/node-lifecycle.drawio.png" /&gt;&lt;/p&gt;
&lt;h3 id="节点注册"&gt;节点注册&lt;/h3&gt;
&lt;p&gt;每个 &lt;code&gt;node&lt;/code&gt; 节点都需要运行 &lt;code&gt;kubelet&lt;/code&gt;，&lt;code&gt;kubelet&lt;/code&gt; 启动后会向 &lt;code&gt;kube-apiserver&lt;/code&gt; 发起节点的注册请求，即创建一个新的 &lt;code&gt;node&lt;/code&gt; 资源对象。&lt;/p&gt;</description></item><item><title>Kubernetes Node 节点上的镜像管理</title><link>https://rifewang.github.io/k8s-image-gc/</link><pubDate>Mon, 28 Oct 2024 23:10:53 +0800</pubDate><guid>https://rifewang.github.io/k8s-image-gc/</guid><description>&lt;p&gt;本文将详细介绍 Kubernetes 如何管理节点上的镜像。&lt;/p&gt;
&lt;h2 id="拉取镜像"&gt;拉取镜像&lt;/h2&gt;
&lt;p&gt;&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet/kubelet-image-gc.drawio.png"
 data-srcset="https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet/kubelet-image-gc.drawio.png, https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet/kubelet-image-gc.drawio.png 1.5x, https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet/kubelet-image-gc.drawio.png 2x"
 data-sizes="auto"
 alt="https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet/kubelet-image-gc.drawio.png"
 title="https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet/kubelet-image-gc.drawio.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Kubelet&lt;/code&gt; 通过 gRPC 协议与 &lt;code&gt;CRI&lt;/code&gt; 组件（如 &lt;code&gt;containerd&lt;/code&gt;、&lt;code&gt;cri-o&lt;/code&gt;）进行交互。在创建新 Pod 时，&lt;code&gt;kubelet&lt;/code&gt; 调用 gRPC 的 &lt;code&gt;ImageService.PullImage&lt;/code&gt; 方法，由 &lt;code&gt;CRI&lt;/code&gt; 组件将镜像下载到节点上。镜像在磁盘上的组织和管理由 &lt;code&gt;CRI&lt;/code&gt; 组件负责，不同的 CRI 组件存在差异。&lt;/p&gt;</description></item><item><title>Kubernetes GPU 调度和 Device Plugin、CDI、NFD、GPU Operator 概述</title><link>https://rifewang.github.io/k8s-gpu-deviceplugin-cdi-nfd/</link><pubDate>Sun, 20 Oct 2024 12:56:58 +0800</pubDate><guid>https://rifewang.github.io/k8s-gpu-deviceplugin-cdi-nfd/</guid><description>&lt;p&gt;随着人工智能（&lt;code&gt;AI&lt;/code&gt;）和机器学习（&lt;code&gt;ML&lt;/code&gt;）的快速发展，&lt;code&gt;GPU&lt;/code&gt; 已成为 Kubernetes 中不可或缺的资源。然而，Kubernetes 最初设计的调度机制主要针对 CPU 和内存等常规资源，未对异构硬件（如 GPU）提供原生支持。&lt;/p&gt;</description></item><item><title>Kubernetes：Seccomp、AppArmor、SELinux &amp; Pod 安全性标准和准入</title><link>https://rifewang.github.io/k8s-pod-security/</link><pubDate>Fri, 11 Oct 2024 16:46:19 +0800</pubDate><guid>https://rifewang.github.io/k8s-pod-security/</guid><description>&lt;p&gt;在云原生环境中，为确保容器化应用的安全运行，Kubernetes 利用了 Linux 内核的三大安全机制：&lt;code&gt;Seccomp&lt;/code&gt;、&lt;code&gt;AppArmor&lt;/code&gt; 和 &lt;code&gt;SELinux&lt;/code&gt;，并引入了 Pod 安全性标准与准入控制来增强 Pod 的安全性。&lt;/p&gt;</description></item><item><title>Kubernetes: kube-proxy 和 CNI 是如何协作的？</title><link>https://rifewang.github.io/kube-proxy-cni/</link><pubDate>Mon, 07 Oct 2024 19:06:17 +0800</pubDate><guid>https://rifewang.github.io/kube-proxy-cni/</guid><description>&lt;p&gt;在 Kubernetes 中，&lt;code&gt;kube-proxy&lt;/code&gt; 和 &lt;code&gt;CNI&lt;/code&gt; 插件协同工作，确保集群内 Pod 之间的互联互通。&lt;/p&gt;
&lt;h2 id="kube-proxy--cni"&gt;Kube-proxy &amp;amp; CNI&lt;/h2&gt;
&lt;p&gt;&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://raw.githubusercontent.com/RifeWang/images/master/k8s/network/kube-proxy&amp;amp;cni.png"
 data-srcset="https://raw.githubusercontent.com/RifeWang/images/master/k8s/network/kube-proxy&amp;amp;cni.png, https://raw.githubusercontent.com/RifeWang/images/master/k8s/network/kube-proxy&amp;amp;cni.png 1.5x, https://raw.githubusercontent.com/RifeWang/images/master/k8s/network/kube-proxy&amp;amp;cni.png 2x"
 data-sizes="auto"
 alt="https://raw.githubusercontent.com/RifeWang/images/master/k8s/network/kube-proxy&amp;amp;cni.png"
 title="https://raw.githubusercontent.com/RifeWang/images/master/k8s/network/kube-proxy&amp;amp;cni.png" /&gt;&lt;/p&gt;
&lt;p&gt;如上图所示，假设我们有一个类型为 &lt;code&gt;ClusterIP&lt;/code&gt; 的 &lt;code&gt;Service&lt;/code&gt;，它对应两个位于不同节点的 Pod。&lt;/p&gt;</description></item><item><title>Kubernetes CSI 简介：工作流程和原理</title><link>https://rifewang.github.io/k8s-csi/</link><pubDate>Sun, 29 Sep 2024 17:11:31 +0800</pubDate><guid>https://rifewang.github.io/k8s-csi/</guid><description>&lt;p&gt;本文将会以 &lt;a href="https://github.com/kubernetes-csi/csi-driver-nfs" target="_blank" rel="noopener noreffer "&gt;CSI driver - NFS&lt;/a&gt; 为例，讲述 &lt;code&gt;CSI&lt;/code&gt; 驱动的工作流程和原理。&lt;/p&gt;
&lt;h2 id="csi-概述"&gt;CSI 概述&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;CSI&lt;/code&gt; 驱动通常分为两个部分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Controller plugin&lt;/code&gt;: 负责存储资源的管理，如卷的创建、删除、扩容、快照等。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Node plugin&lt;/code&gt;: 处理节点级别的存储操作，负责在具体的节点上执行卷的挂载和卸载等任务。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://raw.githubusercontent.com/RifeWang/images/master/k8s/k8s-csi.drawio.png"
 data-srcset="https://raw.githubusercontent.com/RifeWang/images/master/k8s/k8s-csi.drawio.png, https://raw.githubusercontent.com/RifeWang/images/master/k8s/k8s-csi.drawio.png 1.5x, https://raw.githubusercontent.com/RifeWang/images/master/k8s/k8s-csi.drawio.png 2x"
 data-sizes="auto"
 alt="https://raw.githubusercontent.com/RifeWang/images/master/k8s/k8s-csi.drawio.png"
 title="https://raw.githubusercontent.com/RifeWang/images/master/k8s/k8s-csi.drawio.png" /&gt;&lt;/p&gt;</description></item><item><title>OCI 简介：Kubernetes 环境下从代码到容器的全流程</title><link>https://rifewang.github.io/oci/</link><pubDate>Thu, 26 Sep 2024 14:30:07 +0800</pubDate><guid>https://rifewang.github.io/oci/</guid><description>&lt;h2 id="oci-简介"&gt;OCI 简介&lt;/h2&gt;
&lt;p&gt;在容器化技术的演进中，&lt;code&gt;OCI&lt;/code&gt;（Open Container Initiative）提供了一套标准化的规范，帮助统一容器的构建、分发和运行。&lt;code&gt;OCI&lt;/code&gt; 规范包含三个部分：&lt;/p&gt;</description></item><item><title>kubectl 执行一条命令之后发生了什么？</title><link>https://rifewang.github.io/kubectl-to-k8s/</link><pubDate>Sun, 22 Sep 2024 14:34:08 +0800</pubDate><guid>https://rifewang.github.io/kubectl-to-k8s/</guid><description>&lt;p&gt;&lt;code&gt;kubectl&lt;/code&gt; 是与 Kubernetes 集群交互的命令行工具，用户通过它可以对集群资源进行操作和管理。你有没有想过，当我们执行一条 &lt;code&gt;kubectl&lt;/code&gt; 命令之后，背后都发生了什么？&lt;/p&gt;
&lt;h2 id="详细过程"&gt;详细过程&lt;/h2&gt;
&lt;h3 id="kubectl---kube-api-server"&gt;kubectl -&amp;gt; kube-api-server&lt;/h3&gt;
&lt;p&gt;根据通信类型，我把 &lt;code&gt;kubectl&lt;/code&gt; 命令分为两类：单向通信和双向通信。&lt;/p&gt;</description></item><item><title>Kubernetes 集群内 DNS</title><link>https://rifewang.github.io/k8s-dns/</link><pubDate>Tue, 17 Sep 2024 19:50:36 +0800</pubDate><guid>https://rifewang.github.io/k8s-dns/</guid><description>&lt;h2 id="dns-简介"&gt;DNS 简介&lt;/h2&gt;
&lt;p&gt;在互联网早期，随着连接设备数量的增加，IP 地址的管理与记忆变得越来越复杂。为了简化网络资源的访问，&lt;code&gt;DNS&lt;/code&gt;（Domain Name System）应运而生。&lt;code&gt;DNS&lt;/code&gt; 的核心作用是将用户可读的域名（如 &lt;a href="https://www.example.com" target="_blank" rel="noopener noreffer "&gt;www.example.com&lt;/a&gt;）解析为对应的 IP 地址（如 93.184.215.34），从而使用户无需记忆复杂的数字串，便能轻松访问全球各地的网络资源。&lt;/p&gt;</description></item><item><title>Kubernetes CNI 网络模型概览：VETH &amp; Bridge / Overlay / BGP</title><link>https://rifewang.github.io/k8s-cni-network-model/</link><pubDate>Fri, 13 Sep 2024 12:11:23 +0800</pubDate><guid>https://rifewang.github.io/k8s-cni-network-model/</guid><description>&lt;h2 id="序言"&gt;序言&lt;/h2&gt;
&lt;p&gt;网络是容器通信的基础，Kubernetes 本身并未提供开箱即用的网络互通功能，只提出了两点基本要求：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;pods can communicate with all other pods on any other node without NAT&lt;/li&gt;
&lt;li&gt;agents on a node (e.g. system daemons, kubelet) can communicate with all pods on that node&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;至于如何实现这些通信能力，通常依赖于 &lt;code&gt;CNI&lt;/code&gt; 插件来完成。&lt;/p&gt;</description></item><item><title>Kubernetes 之 kubelet 与 CRI、CNI 的交互过程</title><link>https://rifewang.github.io/kubelet-cri-cni/</link><pubDate>Sat, 07 Sep 2024 14:46:34 +0800</pubDate><guid>https://rifewang.github.io/kubelet-cri-cni/</guid><description>&lt;h2 id="序言"&gt;序言&lt;/h2&gt;
&lt;p&gt;当一个新的 Pod 被提交创建之后，&lt;code&gt;Kubelet&lt;/code&gt;、&lt;code&gt;CRI&lt;/code&gt;、&lt;code&gt;CNI&lt;/code&gt; 这三个组件之间进行了哪些交互？&lt;/p&gt;
&lt;h2 id="kubelet---cri---cni"&gt;Kubelet -&amp;gt; CRI -&amp;gt; CNI&lt;/h2&gt;
&lt;p&gt;&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet-cri-cni-sequence.png"
 data-srcset="https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet-cri-cni-sequence.png, https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet-cri-cni-sequence.png 1.5x, https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet-cri-cni-sequence.png 2x"
 data-sizes="auto"
 alt="https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet-cri-cni-sequence.png"
 title="https://raw.githubusercontent.com/RifeWang/images/master/k8s/kubelet-cri-cni-sequence.png" /&gt;&lt;/p&gt;
&lt;p&gt;如上图所示：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Kubelet&lt;/code&gt; 从 kube-api-server 处监听到有新的 pod 被调度到了自己的节点且需要创建。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Kubelet&lt;/code&gt; 创建 sandbox 并配置好 Pod 的环境，其中包括：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Kubelet&lt;/code&gt; 通过 gRPC 调用 &lt;code&gt;CRI&lt;/code&gt; 组件创建 sandbox。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CRI&lt;/code&gt; 通过命令行调用 &lt;code&gt;CNI&lt;/code&gt; 设置 pod 的网络。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Kubelet&lt;/code&gt; 创建 container 阶段：
&lt;ul&gt;
&lt;li&gt;调用 &lt;code&gt;CRI&lt;/code&gt; 拉取镜像。&lt;/li&gt;
&lt;li&gt;调用 &lt;code&gt;CRI&lt;/code&gt; 创建 container。&lt;/li&gt;
&lt;li&gt;调用 &lt;code&gt;CRI&lt;/code&gt; 启动 container。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;注意：&lt;/p&gt;</description></item><item><title>Kubernetes 网关流量管理：Ingress 与 Gateway API</title><link>https://rifewang.github.io/k8s-ingress-vs-gateway/</link><pubDate>Sat, 31 Aug 2024 17:09:40 +0800</pubDate><guid>https://rifewang.github.io/k8s-ingress-vs-gateway/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;随着 Kubernetes 在云原生领域的广泛使用，流量管理成为了至关重要的一环。为了有效地管理从外部流入集群的流量，Kubernetes 提供了多种解决方案，其中最常见的是 &lt;code&gt;Ingress&lt;/code&gt; 和新兴的 &lt;code&gt;Gateway API&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>Kubernetes scheduler 概述及自定义调度器</title><link>https://rifewang.github.io/k8s-custom-scheduler/</link><pubDate>Sat, 15 Jun 2024 20:04:06 +0800</pubDate><guid>https://rifewang.github.io/k8s-custom-scheduler/</guid><description>&lt;h2 id="kube-scheduler"&gt;kube-scheduler&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;kube-scheduler&lt;/code&gt; 是 k8s 集群中控制平面的一个重要组件，其负责的工作简单且专一：给未分配的 pod 分配一个 node 节点。&lt;/p&gt;
&lt;p&gt;调度器的大致工作过程可以分为以下几步：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;监听到未绑定 node 的 pod。&lt;/li&gt;
&lt;li&gt;过滤节点：挑选出来适合分配这个 pod 的 node 节点（可能有多个）。&lt;/li&gt;
&lt;li&gt;节点打分：给过滤出来的节点进行打分。&lt;/li&gt;
&lt;li&gt;最后选择得分最高的那个 node 与 pod 绑定（如果最高得分有多个 node 则随机选择一个）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;更加详细的步骤则参考下图所示：&lt;/p&gt;</description></item><item><title>Kubernetes Service 与 long-lived connections</title><link>https://rifewang.github.io/k8s-service-long-lived-connection/</link><pubDate>Wed, 12 Jun 2024 16:14:46 +0800</pubDate><guid>https://rifewang.github.io/k8s-service-long-lived-connection/</guid><description>&lt;p&gt;本文将会介绍：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从 pod 到 service 再到 pod，kubernetes 中的流量是怎么走的？&lt;/li&gt;
&lt;li&gt;对于 long-lived connection 长连接又是怎样的情况？&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="从-pod-到-service-再到-pod"&gt;从 pod 到 service 再到 pod&lt;/h2&gt;
&lt;p&gt;&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://raw.githubusercontent.com/RifeWang/images/master/k8s/service1.png"
 data-srcset="https://raw.githubusercontent.com/RifeWang/images/master/k8s/service1.png, https://raw.githubusercontent.com/RifeWang/images/master/k8s/service1.png 1.5x, https://raw.githubusercontent.com/RifeWang/images/master/k8s/service1.png 2x"
 data-sizes="auto"
 alt="https://raw.githubusercontent.com/RifeWang/images/master/k8s/service1.png"
 title="https://raw.githubusercontent.com/RifeWang/images/master/k8s/service1.png" /&gt;&lt;/p&gt;
&lt;p&gt;如上图所示：&lt;/p&gt;</description></item><item><title>我的 2024 年 CKA 认证两天速通攻略</title><link>https://rifewang.github.io/2024-cka-cert/</link><pubDate>Sat, 27 Jan 2024 23:23:16 +0800</pubDate><guid>https://rifewang.github.io/2024-cka-cert/</guid><description>&lt;h2 id="背景说明"&gt;背景说明&lt;/h2&gt;
&lt;p&gt;&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://raw.githubusercontent.com/RifeWang/images/master/k8s/cka-exam.jpeg"
 data-srcset="https://raw.githubusercontent.com/RifeWang/images/master/k8s/cka-exam.jpeg, https://raw.githubusercontent.com/RifeWang/images/master/k8s/cka-exam.jpeg 1.5x, https://raw.githubusercontent.com/RifeWang/images/master/k8s/cka-exam.jpeg 2x"
 data-sizes="auto"
 alt="https://raw.githubusercontent.com/RifeWang/images/master/k8s/cka-exam.jpeg"
 title="https://raw.githubusercontent.com/RifeWang/images/master/k8s/cka-exam.jpeg" /&gt;&lt;/p&gt;
&lt;p&gt;如上图所示，本人于 2024 年 1 月 22 号晚上 11 点进行了 CKA 的认证考试，并以 95 分（满分100）顺利通过拿证。本文将会介绍我的 CKA 考试心得和速通攻略。&lt;/p&gt;</description></item><item><title>Kubernetes 外部 HTTP 请求到达 Pod 容器的全过程</title><link>https://rifewang.github.io/http-flow-to-container/</link><pubDate>Sat, 30 Dec 2023 16:38:11 +0800</pubDate><guid>https://rifewang.github.io/http-flow-to-container/</guid><description>&lt;p&gt;&lt;code&gt;Kubernetes&lt;/code&gt; 集群外部的 HTTP/HTTPS 请求是如何达到 Pod 中的 &lt;code&gt;container&lt;/code&gt; 的？&lt;/p&gt;
&lt;h2 id="http-请求流转过程概述"&gt;HTTP 请求流转过程概述&lt;/h2&gt;
&lt;p&gt;&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://raw.githubusercontent.com/RifeWang/images/master/k8s/k8s-http-flow-simple.png"
 data-srcset="https://raw.githubusercontent.com/RifeWang/images/master/k8s/k8s-http-flow-simple.png, https://raw.githubusercontent.com/RifeWang/images/master/k8s/k8s-http-flow-simple.png 1.5x, https://raw.githubusercontent.com/RifeWang/images/master/k8s/k8s-http-flow-simple.png 2x"
 data-sizes="auto"
 alt="https://raw.githubusercontent.com/RifeWang/images/master/k8s/k8s-http-flow-simple.png"
 title="https://raw.githubusercontent.com/RifeWang/images/master/k8s/k8s-http-flow-simple.png" /&gt;&lt;/p&gt;
&lt;p&gt;如上图所示，全过程大致为：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;用户从 web/mobile/pc 等客户端发出 HTTP/HTTPS 请求。&lt;/li&gt;
&lt;li&gt;由于应用服务通常是通过域名的形式对外暴露，所以请求将会先进行 &lt;code&gt;DNS&lt;/code&gt; 域名解析，得到对应的公网 &lt;code&gt;IP&lt;/code&gt; 地址。&lt;/li&gt;
&lt;li&gt;公网 &lt;code&gt;IP&lt;/code&gt; 地址通常会绑定一个 &lt;code&gt;Load Balancer&lt;/code&gt; 负载均衡器，此时请求会进入此负载均衡器。
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Load Balancer&lt;/code&gt; 负载均衡器可以是硬件，也可以是软件，它通常会保持稳定（固定的公网 IP 地址），因为如果切换 IP 地址会因为 DNS 缓存的原因导致服务某段时间内不可达。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Load Balancer&lt;/code&gt; 负载均衡器是一个重要的中间层，对外承接公网流量，对内进行流量的管理和转发。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Load Balancer&lt;/code&gt; 再将请求转发到 &lt;code&gt;kubernetes&lt;/code&gt; 集群的某个流量入口点，通常是 &lt;code&gt;ingress&lt;/code&gt;。
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ingress&lt;/code&gt; 负责集群内部的路由转发，可以看成是集群内部的网关。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ingress&lt;/code&gt; 只是配置，具体进行流量转发的是 &lt;code&gt;ingress-controller&lt;/code&gt;，后者有多种选择，比如 Nginx、HAProxy、Traefik、Kong 等等。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ingress&lt;/code&gt; 根据用户自定义的路由规则进一步转发到 &lt;code&gt;service&lt;/code&gt;。
&lt;ul&gt;
&lt;li&gt;比如根据请求的 path 路径或 host 做转发。
&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://raw.githubusercontent.com/RifeWang/images/master/k8s/ingress-fanout.png"
 data-srcset="https://raw.githubusercontent.com/RifeWang/images/master/k8s/ingress-fanout.png, https://raw.githubusercontent.com/RifeWang/images/master/k8s/ingress-fanout.png 1.5x, https://raw.githubusercontent.com/RifeWang/images/master/k8s/ingress-fanout.png 2x"
 data-sizes="auto"
 alt="https://raw.githubusercontent.com/RifeWang/images/master/k8s/ingress-fanout.png"
 title="https://raw.githubusercontent.com/RifeWang/images/master/k8s/ingress-fanout.png" /&gt;
&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://raw.githubusercontent.com/RifeWang/images/master/k8s/ingress-namebased.png"
 data-srcset="https://raw.githubusercontent.com/RifeWang/images/master/k8s/ingress-namebased.png, https://raw.githubusercontent.com/RifeWang/images/master/k8s/ingress-namebased.png 1.5x, https://raw.githubusercontent.com/RifeWang/images/master/k8s/ingress-namebased.png 2x"
 data-sizes="auto"
 alt="https://raw.githubusercontent.com/RifeWang/images/master/k8s/ingress-namebased.png"
 title="https://raw.githubusercontent.com/RifeWang/images/master/k8s/ingress-namebased.png" /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;service&lt;/code&gt; 根据 selector（匹配 label 标签）将请求转发到 &lt;code&gt;pod&lt;/code&gt;。
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;service&lt;/code&gt; 有多种类型，集群内部最常用的类型就是 &lt;code&gt;ClusterIP&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;service&lt;/code&gt; 本质上也只是一种配置，这种配置最终会作用到 node 节点上的 &lt;code&gt;kube-proxy&lt;/code&gt; 组件，后者会通过设置 &lt;code&gt;iptables/ipvs&lt;/code&gt; 来完成实际的请求转发。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;service&lt;/code&gt; 可能会对应多个 &lt;code&gt;pod&lt;/code&gt;，但最终请求只会被随机转发到一个 &lt;code&gt;pod&lt;/code&gt; 上。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pod&lt;/code&gt; 最后将请求发送给其中的 &lt;code&gt;container&lt;/code&gt; 容器。
&lt;ul&gt;
&lt;li&gt;同一个 &lt;code&gt;pod&lt;/code&gt; 内部可能有多个 &lt;code&gt;container&lt;/code&gt;，但是多个容器不能共用同一个端口，因此这里会根据具体的端口号将请求发给对应的 &lt;code&gt;container&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以上就是一种典型的集群外部 HTTP 请求如何达到 Pod 中的 &lt;code&gt;container&lt;/code&gt; 的全过程。&lt;/p&gt;</description></item><item><title>Kubernetes Lease 及分布式选主</title><link>https://rifewang.github.io/lease/</link><pubDate>Tue, 26 Dec 2023 11:42:30 +0800</pubDate><guid>https://rifewang.github.io/lease/</guid><description>&lt;h2 id="分布式选主"&gt;分布式选主&lt;/h2&gt;
&lt;p&gt;在分布式系统中，应用服务常常会通过多个节点（或实例）的方式来保证高可用。然而在某些场景下，有些数据或者任务无法被并行操作，此时就需要由一个特定的节点来执行这些特殊的任务（或者进行协调及决策），这个特定的节点也就是领导者（Leader），而在多个节点中选择领导者的机制也就是分布式选主（Leader Election）。&lt;/p&gt;</description></item><item><title>Kubernetes 从提交 deployment 到 pod 运行的全过程</title><link>https://rifewang.github.io/k8s-from-deploy-to-pod/</link><pubDate>Sat, 23 Dec 2023 18:26:15 +0800</pubDate><guid>https://rifewang.github.io/k8s-from-deploy-to-pod/</guid><description>&lt;p&gt;当用户向 &lt;code&gt;Kubernetes&lt;/code&gt; 提交了一个创建 &lt;code&gt;deployment&lt;/code&gt; 的请求后，&lt;code&gt;Kubernetes&lt;/code&gt; 从接收请求直至创建对应的 &lt;code&gt;pod&lt;/code&gt; 运行这整个过程中都发生了什么呢？&lt;/p&gt;
&lt;h2 id="kubernetes-架构简述"&gt;kubernetes 架构简述&lt;/h2&gt;
&lt;p&gt;在搞清楚从 &lt;code&gt;deployment&lt;/code&gt; 提交到 &lt;code&gt;pod&lt;/code&gt; 运行整个过程之前，我们有先来看看 &lt;code&gt;Kubernetes&lt;/code&gt; 的集群架构：&lt;/p&gt;</description></item><item><title>Kubernetes CRD &amp; Operator 简介</title><link>https://rifewang.github.io/k8s-crd-operator/</link><pubDate>Tue, 19 Dec 2023 10:37:48 +0800</pubDate><guid>https://rifewang.github.io/k8s-crd-operator/</guid><description>&lt;h2 id="kubernetes-crd"&gt;Kubernetes CRD&lt;/h2&gt;
&lt;p&gt;在 kubernetes 中有一系列内置的资源，诸如：&lt;code&gt;pod&lt;/code&gt;、&lt;code&gt;deployment&lt;/code&gt;、&lt;code&gt;configmap&lt;/code&gt;、&lt;code&gt;service&lt;/code&gt; …… 等等，它们由 k8s 的内部组件管理。而除了这些内置资源之外，k8s 还提供了另外一种方式让用户可以随意地自定义资源，这就是 &lt;code&gt;CRD&lt;/code&gt; (全称 &lt;code&gt;CustomResourceDefinitions&lt;/code&gt;) 。&lt;/p&gt;</description></item><item><title>容器运行时的内部结构和最新趋势（2023）</title><link>https://rifewang.github.io/the-internals-and-the-latest-trends-of-container-runtimes/</link><pubDate>Tue, 11 Jul 2023 10:07:05 +0800</pubDate><guid>https://rifewang.github.io/the-internals-and-the-latest-trends-of-container-runtimes/</guid><description>&lt;h1 id="容器运行时的内部结构和最新趋势2023"&gt;容器运行时的内部结构和最新趋势（2023）&lt;/h1&gt;
&lt;p&gt;原文为 Akihiro Suda 在日本京都大学做的在线讲座，完整的 PPT 可 &lt;a href="https://github.com/AkihiroSuda/AkihiroSuda/raw/5d9f0b1cd9b8c37cb1951768a3bebdb08a3a469e/slides/2023/20230615%20%5BKyoto%20University%5D%20The%20internals%20and%20the%20latest%20trends%20of%20container%20runtimes.pdf" target="_blank" rel="noopener noreffer "&gt;点击此处下载&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;本文内容分为以下三个部分：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;容器简介&lt;/li&gt;
&lt;li&gt;容器运行时的内部结构&lt;/li&gt;
&lt;li&gt;容器运行时的最新趋势&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="1-容器简介"&gt;1. 容器简介&lt;/h2&gt;
&lt;h3 id="什么是容器"&gt;什么是容器？&lt;/h3&gt;
&lt;p&gt;容器是一组用于隔离文件系统、CPU 资源、内存资源、系统权限等的各种轻量级方法。容器在很多意义上类似于虚拟机，但它们比虚拟机更高效，而安全性则往往低于虚拟机。&lt;/p&gt;</description></item><item><title>Java 应用程序在 Kubernetes 上棘手的内存管理</title><link>https://rifewang.github.io/k8s-memory-management-for-java-applications/</link><pubDate>Sun, 23 Apr 2023 15:17:18 +0800</pubDate><guid>https://rifewang.github.io/k8s-memory-management-for-java-applications/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;如何结合使用 JVM Heap 堆和 Kubernetes 内存的 requests 和 limits 并远离麻烦。&lt;/p&gt;
&lt;p&gt;在容器环境中运行 Java 应用程序需要了解两者 —— JVM 内存机制和 Kubernetes 内存管理。这两个环境一起工作会产生一个稳定的应用程序，但是，错误配置最多可能导致基础设施超支，最坏情况下可能会导致应用程序不稳定或崩溃。我们将首先仔细研究 JVM 内存的工作原理，然后我们将转向 Kubernetes，最后，我们将把这两个概念放在一起。&lt;/p&gt;</description></item><item><title>Kubernetes Admission Controller 简介 - 注入 sidacar 示例</title><link>https://rifewang.github.io/k8s-admission-controller-sidacar-example/</link><pubDate>Sun, 16 Apr 2023 14:22:36 +0800</pubDate><guid>https://rifewang.github.io/k8s-admission-controller-sidacar-example/</guid><description>&lt;h2 id="admission-controller"&gt;Admission Controller&lt;/h2&gt;
&lt;p&gt;Kubernetes Admission Controller（准入控制器）是什么？&lt;/p&gt;
&lt;p&gt;如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://d33wubrfki0l68.cloudfront.net/af21ecd38ec67b3d81c1b762221b4ac777fcf02d/7c60e/images/blog/2019-03-21-a-guide-to-kubernetes-admission-controllers/admission-controller-phases.png"
 data-srcset="https://d33wubrfki0l68.cloudfront.net/af21ecd38ec67b3d81c1b762221b4ac777fcf02d/7c60e/images/blog/2019-03-21-a-guide-to-kubernetes-admission-controllers/admission-controller-phases.png, https://d33wubrfki0l68.cloudfront.net/af21ecd38ec67b3d81c1b762221b4ac777fcf02d/7c60e/images/blog/2019-03-21-a-guide-to-kubernetes-admission-controllers/admission-controller-phases.png 1.5x, https://d33wubrfki0l68.cloudfront.net/af21ecd38ec67b3d81c1b762221b4ac777fcf02d/7c60e/images/blog/2019-03-21-a-guide-to-kubernetes-admission-controllers/admission-controller-phases.png 2x"
 data-sizes="auto"
 alt="https://d33wubrfki0l68.cloudfront.net/af21ecd38ec67b3d81c1b762221b4ac777fcf02d/7c60e/images/blog/2019-03-21-a-guide-to-kubernetes-admission-controllers/admission-controller-phases.png"
 title="Admission Controller Phases" /&gt;&lt;/p&gt;
&lt;p&gt;当我们向 k8s api-server 提交了请求之后，需要经过认证鉴权、mutation admission、validation 校验等一系列过程，最后才会将资源对象持久化到 etcd 中（其它组件诸如 controller 或 scheduler 等操作的也是持久化之后的对象）。而所谓的 Kubernetes Admission Controller 其实就是在这个过程中所提供的 webhook 机制，让用户能够在资源对象被持久化之前任意地修改资源对象并进行自定义的校验。&lt;/p&gt;</description></item><item><title>我们为何选择 Cilium 作为 Kubernetes 的网络接口</title><link>https://rifewang.github.io/why-cilium-for-k8s/</link><pubDate>Mon, 03 Apr 2023 15:12:11 +0800</pubDate><guid>https://rifewang.github.io/why-cilium-for-k8s/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;文本翻译自: &lt;a href="https://blog.palark.com/why-cilium-for-kubernetes-networking/" target="_blank" rel="noopener noreffer "&gt;https://blog.palark.com/why-cilium-for-kubernetes-networking/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;原文作者是 Palark 平台工程师 Anton Kuliashov，其说明了选择 Cilium 作为 Kubernetes 网络接口的原因以及喜爱 Cilium 的地方。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;多亏了 CNI（容器网络接口），Kubernetes 提供了大量选项来满足您的网络需求。在多年依赖简单的解决方案之后，我们面临着对高级功能日益增长的客户需求。Cilium 将我们 K8s 平台中的网络提升到了一个新的水平。&lt;/p&gt;</description></item><item><title>在 Kubernetes 中应该如何设置 CPU 的 requests 和 limits</title><link>https://rifewang.github.io/k8s-cpu-request-limit/</link><pubDate>Fri, 31 Mar 2023 16:11:20 +0800</pubDate><guid>https://rifewang.github.io/k8s-cpu-request-limit/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;文本翻译自: &lt;a href="https://itnext.io/cpu-limits-and-requests-in-kubernetes-fa9d55948b7c" target="_blank" rel="noopener noreffer "&gt;https://itnext.io/cpu-limits-and-requests-in-kubernetes-fa9d55948b7c&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://miro.medium.com/v2/0*ikA_Xbhg7x4goOIW.png"
 data-srcset="https://miro.medium.com/v2/0*ikA_Xbhg7x4goOIW.png, https://miro.medium.com/v2/0*ikA_Xbhg7x4goOIW.png 1.5x, https://miro.medium.com/v2/0*ikA_Xbhg7x4goOIW.png 2x"
 data-sizes="auto"
 alt="https://miro.medium.com/v2/0*ikA_Xbhg7x4goOIW.png"
 title="https://miro.medium.com/v2/0*ikA_Xbhg7x4goOIW.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;在 Kubernetes 中，我应该如何设置 CPU 的 requests 和 limits？&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;热门答案包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;始终使用 limits !&lt;/li&gt;
&lt;li&gt;永远不要使用 limits，只使用 requests !&lt;/li&gt;
&lt;li&gt;都不用；可以吗？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;让我们深入研究它。&lt;/p&gt;</description></item><item><title>Kubernetes Gateway API 介绍</title><link>https://rifewang.github.io/intro-k8s-gateway-api/</link><pubDate>Tue, 28 Mar 2023 18:47:47 +0800</pubDate><guid>https://rifewang.github.io/intro-k8s-gateway-api/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;文本翻译自: &lt;a href="https://medium.com/geekculture/kubernetes-gateway-api-the-intro-you-need-to-read-80965f7acd82" target="_blank" rel="noopener noreffer "&gt;https://medium.com/geekculture/kubernetes-gateway-api-the-intro-you-need-to-read-80965f7acd82&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;您以前听说过 &lt;a href="https://github.com/kubernetes/community/tree/master/sig-network" target="_blank" rel="noopener noreffer "&gt;SIG-NETWORK&lt;/a&gt; 的 Kubernetes Gateway API 吗？好吧，可能你们中的大多数人都是第一次遇到这个话题。尽管如此，无论您是第一次听说还是已经以某种方式使用过它，本博客的目的都是为您提供一个基本的和高度的概述来理解这个主题。&lt;/p&gt;</description></item><item><title>提速 30 倍！OCI 容器启动优化的历程</title><link>https://rifewang.github.io/the-journey-to-speed-up-oci-containers/</link><pubDate>Tue, 28 Mar 2023 16:16:36 +0800</pubDate><guid>https://rifewang.github.io/the-journey-to-speed-up-oci-containers/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;文本翻译自: &lt;a href="https://www.scrivano.org/posts/2022-10-21-the-journey-to-speed-up-oci-containers/" target="_blank" rel="noopener noreffer "&gt;https://www.scrivano.org/posts/2022-10-21-the-journey-to-speed-up-oci-containers/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;原文作者是 Red Hat 工程师 &lt;a href="https://github.com/giuseppe/" target="_blank" rel="noopener noreffer "&gt;Giuseppe Scrivano&lt;/a&gt; ，其回顾了将 OCI 容器启动的时间提速 30 倍的历程。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;当我开始研究 crun (&lt;a href="https://github.com/containers/crun" target="_blank" rel="noopener noreffer "&gt;https://github.com/containers/crun&lt;/a&gt;) 时，我正在寻找一种通过改进 OCI 运行时来更快地启动和停止容器的方法，OCI 运行时是 OCI 堆栈中负责最终与内核交互并设置容器所在环境的组件。&lt;/p&gt;</description></item><item><title>Kubernetes 优雅终止 pod</title><link>https://rifewang.github.io/gracefully-shut-down/</link><pubDate>Sat, 25 Mar 2023 21:06:05 +0800</pubDate><guid>https://rifewang.github.io/gracefully-shut-down/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;文本翻译自: &lt;a href="https://itnext.io/how-do-you-gracefully-shut-down-pods-in-kubernetes-fb19f617cd67" target="_blank" rel="noopener noreffer "&gt;https://itnext.io/how-do-you-gracefully-shut-down-pods-in-kubernetes-fb19f617cd67&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://miro.medium.com/v2/0*95EBbIEaG9T2_N5V.png"
 data-srcset="https://miro.medium.com/v2/0*95EBbIEaG9T2_N5V.png, https://miro.medium.com/v2/0*95EBbIEaG9T2_N5V.png 1.5x, https://miro.medium.com/v2/0*95EBbIEaG9T2_N5V.png 2x"
 data-sizes="auto"
 alt="https://miro.medium.com/v2/0*95EBbIEaG9T2_N5V.png"
 title="https://miro.medium.com/v2/0*95EBbIEaG9T2_N5V.png" /&gt;&lt;/p&gt;
&lt;p&gt;当你执行 &lt;code&gt;kubectl delete pod&lt;/code&gt; 时，pod 被删除， endpoint 控制器从 service 和 etcd 中删除该 pod 的 IP 地址和端口。&lt;/p&gt;
&lt;p&gt;你可以使用 &lt;code&gt;kubectl describe service&lt;/code&gt; 观察到这一点。&lt;/p&gt;
&lt;p&gt;&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://miro.medium.com/v2/0*u1dqT-9CWfJPzSz-.png"
 data-srcset="https://miro.medium.com/v2/0*u1dqT-9CWfJPzSz-.png, https://miro.medium.com/v2/0*u1dqT-9CWfJPzSz-.png 1.5x, https://miro.medium.com/v2/0*u1dqT-9CWfJPzSz-.png 2x"
 data-sizes="auto"
 alt="https://miro.medium.com/v2/0*u1dqT-9CWfJPzSz-.png"
 title="使用 kubectl describe 列出 endpoint" /&gt;&lt;/p&gt;</description></item><item><title>Kubernetes 节点的预留资源</title><link>https://rifewang.github.io/reserved-cpu-memory-in-nodes/</link><pubDate>Sat, 25 Mar 2023 16:42:31 +0800</pubDate><guid>https://rifewang.github.io/reserved-cpu-memory-in-nodes/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;文本翻译自: &lt;a href="https://medium.com/@danielepolencic/reserved-cpu-and-memory-in-kubernetes-nodes-65aee1946afd" target="_blank" rel="noopener noreffer "&gt;https://medium.com/@danielepolencic/reserved-cpu-and-memory-in-kubernetes-nodes-65aee1946afd&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;在 Kubernetes 中，运行多个集群节点是否存在隐形成本？&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;是的，因为&lt;a href="https://learnk8s.io/allocatable-resources" target="_blank" rel="noopener noreffer "&gt;并非 Kubernetes 节点中的所有 CPU 和内存都可用于运行 Pod。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在一个 Kubernetes 节点中，CPU 和内存分为：&lt;/p&gt;</description></item><item><title>EKS 集群中的 IP 地址分配问题</title><link>https://rifewang.github.io/ip-and-pod-allocations-in-eks/</link><pubDate>Thu, 23 Mar 2023 18:34:51 +0800</pubDate><guid>https://rifewang.github.io/ip-and-pod-allocations-in-eks/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;文本翻译自: &lt;a href="https://itnext.io/ip-and-pod-allocations-in-eks-5be6612b8325" target="_blank" rel="noopener noreffer "&gt;https://itnext.io/ip-and-pod-allocations-in-eks-5be6612b8325&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://miro.medium.com/v2/0*5ASKzTbKkuNTFjOn.png"
 data-srcset="https://miro.medium.com/v2/0*5ASKzTbKkuNTFjOn.png, https://miro.medium.com/v2/0*5ASKzTbKkuNTFjOn.png 1.5x, https://miro.medium.com/v2/0*5ASKzTbKkuNTFjOn.png 2x"
 data-sizes="auto"
 alt="https://miro.medium.com/v2/0*5ASKzTbKkuNTFjOn.png"
 title="https://miro.medium.com/v2/0*5ASKzTbKkuNTFjOn.png" /&gt;&lt;/p&gt;
&lt;p&gt;运行 EKS 集群时，你可能会遇到两个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;分配给 pod 的 IP 地址用完了。&lt;/li&gt;
&lt;li&gt;每个节点的 pod 数量少（由于 ENI 限制）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在本文中，你将学习如何克服这些问题。&lt;/p&gt;</description></item><item><title>使用 Kubernetes API</title><link>https://rifewang.github.io/working-with-k8s-api/</link><pubDate>Wed, 22 Mar 2023 17:47:12 +0800</pubDate><guid>https://rifewang.github.io/working-with-k8s-api/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;文本翻译自: &lt;a href="https://itnext.io/working-with-the-kubernetes-api-587bc5941992" target="_blank" rel="noopener noreffer "&gt;https://itnext.io/working-with-the-kubernetes-api-587bc5941992&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://rifewang.github.io/images/k8s/0_Th5qU5L4AOg9QC5Q.png"
 data-srcset="https://rifewang.github.io/images/k8s/0_Th5qU5L4AOg9QC5Q.png, https://rifewang.github.io/images/k8s/0_Th5qU5L4AOg9QC5Q.png 1.5x, https://rifewang.github.io/images/k8s/0_Th5qU5L4AOg9QC5Q.png 2x"
 data-sizes="auto"
 alt="/images/k8s/0_Th5qU5L4AOg9QC5Q.png"
 title="/images/k8s/0_Th5qU5L4AOg9QC5Q.png" /&gt;&lt;/p&gt;
&lt;p&gt;Kubernetes 公开了一个强大的 API，可让您控制集群的各个方面。&lt;/p&gt;
&lt;p&gt;大多数时候，它隐藏在 kubectl 后面，但没有人会阻止您直接使用它。&lt;/p&gt;
&lt;p&gt;在本文中，您将学习如何使用 &lt;code&gt;curl&lt;/code&gt; 或者您喜欢的编程语言向 Kubernetes API 发出请求。&lt;/p&gt;</description></item><item><title>谈谈 Kubernetes 的匿名访问</title><link>https://rifewang.github.io/anonymous-access-to-k8s/</link><pubDate>Tue, 21 Mar 2023 17:12:37 +0800</pubDate><guid>https://rifewang.github.io/anonymous-access-to-k8s/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;文本翻译自: &lt;a href="https://raesene.github.io/blog/2023/03/18/lets-talk-about-anonymous-access-to-Kubernetes/" target="_blank" rel="noopener noreffer "&gt;https://raesene.github.io/blog/2023/03/18/lets-talk-about-anonymous-access-to-Kubernetes/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本周有一些关于 &lt;a href="https://www.bleepingcomputer.com/news/security/first-known-dero-cryptojacking-operation-seen-targeting-kubernetes/" target="_blank" rel="noopener noreffer "&gt;Dero Cryptojacking operation&lt;/a&gt; 的文章，其中关于攻击者所实施的细节之一引起了我的注意。有人提到他们正在攻击允许匿名访问 Kubernetes API 的集群。究竟如何以及为什么可以匿名访问 Kubernetes 是一个有趣的话题，涉及几个不同的领域，所以我想我会写一些关于它的内容。&lt;/p&gt;</description></item><item><title>Kubernetes snapshots 快照是什么以及如何使用快照？</title><link>https://rifewang.github.io/k8s-snapshots-usage/</link><pubDate>Mon, 20 Mar 2023 11:09:26 +0800</pubDate><guid>https://rifewang.github.io/k8s-snapshots-usage/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;文本翻译自: &lt;a href="https://blog.palark.com/kubernetes-snaphots-usage/" target="_blank" rel="noopener noreffer "&gt;https://blog.palark.com/kubernetes-snaphots-usage/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;随着 Kubernetes 中快照控制器的引入，现在可以为支持此功能的 CSI 驱动程序和云提供商创建快照。&lt;/p&gt;
&lt;p&gt;API 是通用的且独立于供应商，这对于 Kubernetes 来说是典型的，因此我们可以探索它而无需深入了解特定实现的细节。让我们仔细看看快照，看看它们如何使 Kubernetes 用户受益。&lt;/p&gt;</description></item><item><title>Kubernetes 的 secret 并不是真正的 secret</title><link>https://rifewang.github.io/k8s-secret-management/</link><pubDate>Sun, 19 Mar 2023 10:50:21 +0800</pubDate><guid>https://rifewang.github.io/k8s-secret-management/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;文本翻译自: &lt;a href="https://auth0.com/blog/kubernetes-secrets-management/#Sealed-Secrets" target="_blank" rel="noopener noreffer "&gt;https://auth0.com/blog/kubernetes-secrets-management/#Sealed-Secrets&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;Kubernetes 已经成为现代软件基础设施中不可或缺的一部分。因此，管理 Kubernetes 上的敏感数据也是现代软件工程的一个重要方面，这样您就可以将安全性重新置于 DevSecOps 中。Kubernetes 提供了一种使用 &lt;code&gt;Secret&lt;/code&gt; 对象存储敏感数据的方法。虽然总比没有好，但它并不是真正的加密，因为它只是 base64 编码的字符串，任何有权访问集群或代码的人都可以对其进行解码。&lt;/p&gt;</description></item><item><title>加速 Kubernetes 镜像拉取</title><link>https://rifewang.github.io/speed-up-image-pull/</link><pubDate>Sun, 13 Mar 2022 00:00:00 +0800</pubDate><guid>https://rifewang.github.io/speed-up-image-pull/</guid><description>&lt;h2 id="加速-kubernetes-镜像拉取"&gt;加速 Kubernetes 镜像拉取&lt;/h2&gt;
&lt;p&gt;Kubernetes pod 启动时会拉取用户指定的镜像，一旦这个过程耗时太久就会导致 pod 长时间处于 pending 的状态，从而无法快速提供服务。&lt;/p&gt;
&lt;p&gt;镜像拉取的过程参考下图所示：&lt;/p&gt;</description></item><item><title>Dockerfile 最佳实践</title><link>https://rifewang.github.io/dockerfile-best-practice/</link><pubDate>Wed, 10 Jul 2019 16:32:36 +0800</pubDate><guid>https://rifewang.github.io/dockerfile-best-practice/</guid><description>&lt;p&gt;Dockerfile 是用来构建 docker 镜像的配置文件，语法简单上手容易，你可以很轻松的就编写一个能正常使用的 Dockerfile ，但是它很有可能还不够好，本文将会从细节上介绍一些 tips 助你实现最佳实践。&lt;/p&gt;</description></item><item><title>Docker 入门教程</title><link>https://rifewang.github.io/docker-guide/</link><pubDate>Tue, 17 Apr 2018 10:50:21 +0800</pubDate><guid>https://rifewang.github.io/docker-guide/</guid><description>&lt;h1 id="一"&gt;一&lt;/h1&gt;
&lt;p&gt;程序明明在我本地跑得好好的，怎么部署上去就出问题了？如果要在同一台物理机上同时部署多个 node 版本并独立运行互不影响，这又该怎么做？如何更快速的将服务部署到多个物理机上？&lt;/p&gt;</description></item></channel></rss>