<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>K8s on </title>
    <link>http://blog.chuckchan.top/tags/k8s/</link>
    <description>Recent content in K8s on </description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-cn</language>
    <copyright>© 2026 Chuck Chan</copyright>
    <lastBuildDate>Fri, 08 Nov 2024 00:00:00 +0000</lastBuildDate><atom:link href="http://blog.chuckchan.top/tags/k8s/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>无头service</title>
      <link>http://blog.chuckchan.top/posts/middleware/k8s/%E6%97%A0%E5%A4%B4service/</link>
      <pubDate>Fri, 08 Nov 2024 00:00:00 +0000</pubDate>
      
      <guid>http://blog.chuckchan.top/posts/middleware/k8s/%E6%97%A0%E5%A4%B4service/</guid>
      <description></description>
      
    </item>
    
    <item>
      <title>pod流程状态</title>
      <link>http://blog.chuckchan.top/posts/middleware/k8s/pod%E6%B5%81%E7%A8%8B%E7%8A%B6%E6%80%81/</link>
      <pubDate>Tue, 07 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>http://blog.chuckchan.top/posts/middleware/k8s/pod%E6%B5%81%E7%A8%8B%E7%8A%B6%E6%80%81/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;pod状态分析&#xA;    &lt;div id=&#34;pod状态分析&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#pod%e7%8a%b6%e6%80%81%e5%88%86%e6%9e%90&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h1&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;1. 一个pod的状态之旅&#xA;    &lt;div id=&#34;1-一个pod的状态之旅&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-%e4%b8%80%e4%b8%aapod%e7%9a%84%e7%8a%b6%e6%80%81%e4%b9%8b%e6%97%85&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;从宏观的角度上来看，pod的一生要经历以下5个状态：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Pending&lt;/strong&gt;：Pod被K8s创建出来后，起始于Pending阶段。在Pending阶段，Pod将经过调度，被分配至目标节点开始拉取镜像、加载依赖项、创建容器。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Running&lt;/strong&gt;：当Pod所有容器都已被创建，且至少一个容器已经在运行中，Pod将进入Running阶段。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Succeeded&lt;/strong&gt;：当Pod中的所有容器都执行完成后终止，并且不会再重启，Pod将进入Succeeded阶段。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Failed&lt;/strong&gt;：若Pod中的所有容器都已终止，并且至少有一个容器是因为失败终止，也就是说容器以非0状态异常退出或被系统终止，Pod将进入Failed阶段。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Unkonwn&lt;/strong&gt;：因为某些原因无法取得 Pod 状态，这种情况Pod将被置为Unkonwn状态。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;一般来说，对于Job类型的负载，Pod在成功执行完任务之后将会以Succeeded状态为终态。而对于Deployment等负载，一般期望Pod能够持续提供服务，直到Pod因删除消失，或者因异常退出/被系统终止而进入Failed阶段。&lt;/p&gt;&#xA;&lt;img src=&#34;http://storage.chuckchan.top/uploads/v2-c1f0ef376ba1a8b5661d8c4c7939b8f4_1440w.jpg&#34; alt=&#34;v2-c1f0ef376ba1a8b5661d8c4c7939b8f4_1440w&#34; style=&#34;zoom:50%;&#34; /&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;2. pod的异常场景&#xA;    &lt;div id=&#34;2-pod的异常场景&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#2-pod%e7%9a%84%e5%bc%82%e5%b8%b8%e5%9c%ba%e6%99%af&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;上面从宏观角度上介绍了pod的几种状态，但pod还有一些细分的状态如：Ready/NotReady、Initialized、 PodScheduled/Unschedulable 等等。这些细分状态描述造成Pod所处阶段的具体成因是什么。比如，Pod 当前阶段是Pending，对应的细分状态是 Unschedulable，这就意味着Pod调度出现了问题。&lt;/p&gt;&#xA;&lt;p&gt;与此同时，容器也有自己的生命周期：Waiting、Running和 Terminated，并且也有其对应的状态原因（Reason），例如ContainerCreating、Error、OOMKilled、CrashLoopBackOff、Completd等。而对于发生过重启或终止的容器，上一个状态（LastState）字段不仅包含状态原因，还包含上一次退出的状态码（Exit Code）。例如容器上一次退出状态码是137，状态原因是OOMKilled，说明容器是因为OOM被系统强行终止。在异常诊断过程中，&lt;strong&gt;容器的退出状态&lt;/strong&gt;是至关重要的信息。&lt;/p&gt;&#xA;&lt;p&gt;Pod在其生命周期的许多时间点可能发生不同的异常，按照Pod容器是否运行为标志点，我们将异常场景大致分为两类：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;在pod进行调度并创建容器的过程中发生异常，此时pod将卡在pending阶段。&lt;/li&gt;&#xA;&lt;li&gt;在pod容器运行中发生异常，此时pod按照具体的场景处于不同的阶段。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;img src=&#34;http://storage.chuckchan.top/uploads/v2-fcfebbc2fbcafff21d56c94cf7590c99_1440w (1).webp&#34; alt=&#34;v2-fcfebbc2fbcafff21d56c94cf7590c99_1440w (1)&#34; style=&#34;zoom:67%;&#34; /&gt;&#xA;&lt;p&gt;具体场景分析：&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;pod异常场景&#34;&#xA;    src=&#34;http://storage.chuckchan.top/uploads/pod%e5%bc%82%e5%b8%b8%e5%9c%ba%e6%99%af.jpg&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>k8s组件</title>
      <link>http://blog.chuckchan.top/posts/middleware/k8s/k8s%E7%BB%84%E4%BB%B6/</link>
      <pubDate>Mon, 27 Feb 2023 00:00:00 +0000</pubDate>
      
      <guid>http://blog.chuckchan.top/posts/middleware/k8s/k8s%E7%BB%84%E4%BB%B6/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;k8s组件&#xA;    &lt;div id=&#34;k8s组件&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#k8s%e7%bb%84%e4%bb%b6&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h1&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;1. 控制平面与工作节点&#xA;    &lt;div id=&#34;1-控制平面与工作节点&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-%e6%8e%a7%e5%88%b6%e5%b9%b3%e9%9d%a2%e4%b8%8e%e5%b7%a5%e4%bd%9c%e8%8a%82%e7%82%b9&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;一组工作机器，称为&lt;em&gt;节点&lt;/em&gt;， &lt;em&gt;节点&lt;/em&gt;会运行容器化的应用程序。整个k8s集群由控制平面（master节点）与worker节点构成。&lt;/p&gt;&#xA;&lt;p&gt;控制平面的组件用来存储、管理集群状态，其中包括：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;etcd分布式持久化存储&lt;/li&gt;&#xA;&lt;li&gt;API服务器&lt;/li&gt;&#xA;&lt;li&gt;调度器&lt;/li&gt;&#xA;&lt;li&gt;控制器管理器&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;而运行容器的任务依赖千每个工作节点上运行的组件：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Kubelet&lt;/li&gt;&#xA;&lt;li&gt;Kubelet服务代理( kube-proxy)&lt;/li&gt;&#xA;&lt;li&gt;容器运行时(Docker、rkt或者其他）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;出了这些组件外，还有一些附加组件，他们共同构成了整个k8s集群。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Kubemetes DNS服务器&lt;/li&gt;&#xA;&lt;li&gt;仪表板&lt;/li&gt;&#xA;&lt;li&gt;Ingress控制器&lt;/li&gt;&#xA;&lt;li&gt;Heapster (容器集群监控）&lt;/li&gt;&#xA;&lt;li&gt;容器网络接口插件&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;整体构造入下图所示：&lt;/p&gt;&#xA;&lt;img src=&#34;http://storage.chuckchan.top/uploads/Xnip2022-12-17_15-30-10.jpg&#34; alt=&#34;Xnip2022-12-17_15-30-10&#34; style=&#34;zoom:50%;&#34; /&gt;&#xA;&lt;p&gt;可以使用如下命令来查看当前k8s集群的组件状态：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubect1 get componentstatuses&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;2. 组件分析&#xA;    &lt;div id=&#34;2-组件分析&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#2-%e7%bb%84%e4%bb%b6%e5%88%86%e6%9e%90&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;2.1 etcd&#xA;    &lt;div id=&#34;21-etcd&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#21-etcd&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;负责存储集群中各种资源对象的信息，k/v方式存储，所有的 k8s 集群数据存放在此&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>k8s服务发现</title>
      <link>http://blog.chuckchan.top/posts/middleware/k8s/k8s%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0/</link>
      <pubDate>Sat, 07 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>http://blog.chuckchan.top/posts/middleware/k8s/k8s%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;K8S之服务发现&#xA;    &lt;div id=&#34;k8s之服务发现&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#k8s%e4%b9%8b%e6%9c%8d%e5%8a%a1%e5%8f%91%e7%8e%b0&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h1&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Serivce&#xA;    &lt;div id=&#34;serivce&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#serivce&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;概念&#xA;    &lt;div id=&#34;概念&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e6%a6%82%e5%bf%b5&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Pod存在生命周期，有销毁，有重建，无法提供一个固定的访问接口给客户端。并且为了同类的Pod都能够实现工作负载的价值，由此Service资源出现了，可以为一类Pod资源对象提供一个固定的访问接口和负载均衡。当Pod宕机后重新生成时，其IP等状态信息可能会变动，Service会根据Pod的Label对这些状态信息进行监控和变更，保证上游服务不受Pod的变动而影响。&lt;/p&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;类型&#xA;    &lt;div id=&#34;类型&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e7%b1%bb%e5%9e%8b&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Service一共有四种类型，分别是ClusterIP、NodePort、LoadBalancer、ExternaName。&lt;/p&gt;&#xA;&#xA;&lt;h4 class=&#34;relative group&#34;&gt;&lt;em&gt;1.ClusterIP&lt;/em&gt;&#xA;    &lt;div id=&#34;1clusterip&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1clusterip&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h4&gt;&#xA;&lt;p&gt;默认类型，自动分配一个仅Cluster内部可以访问的虚拟IP。&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
