<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kubelet on 我的博客</title><link>https://hugo.kkun.top/tags/kubelet/</link><description>Recent content from 我的博客</description><generator>Hugo</generator><language>zh-cn</language><managingEditor>your@email.com (你的名字)</managingEditor><webMaster>your@email.com (你的名字)</webMaster><copyright>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</copyright><lastBuildDate>Thu, 05 Jan 2023 08:54:38 +0000</lastBuildDate><atom:link href="https://hugo.kkun.top/tags/kubelet/index.xml" rel="self" type="application/rss+xml"/><item><title>配置Kubelet的垃圾回收</title><link>https://hugo.kkun.top/post/%E9%85%8D%E7%BD%AEkubelet%E7%9A%84%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6/</link><pubDate>Thu, 05 Jan 2023 08:54:38 +0000</pubDate><author>your@email.com (你的名字)</author><guid>https://hugo.kkun.top/post/%E9%85%8D%E7%BD%AEkubelet%E7%9A%84%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6/</guid><description>
<![CDATA[<h1>配置Kubelet的垃圾回收</h1><p>作者：你的名字（your@email.com）</p>
        
          <p>Kubelet的垃圾回收功能可以清理不再使用的容器和镜像，kubelet对容器进行垃圾回收的频率是每分钟一次，对镜像进行垃圾回收的频率是每五分钟一次。</p>
        
        <hr><p>本文2023-01-05首发于<a href='https://hugo.kkun.top/'>我的博客</a>，最后修改于2023-01-05</p>]]></description><category>kubernetes</category><category>Kubelet</category></item><item><title>kubelet垃圾回收机制</title><link>https://hugo.kkun.top/post/kubelet%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%E6%9C%BA%E5%88%B6/</link><pubDate>Thu, 29 Dec 2022 13:57:33 +0000</pubDate><author>your@email.com (你的名字)</author><guid>https://hugo.kkun.top/post/kubelet%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%E6%9C%BA%E5%88%B6/</guid><description>
<![CDATA[<h1>kubelet垃圾回收机制</h1><p>作者：你的名字（your@email.com）</p>
        
          <h3 id="一tips">
<a class="header-anchor" href="#%e4%b8%80tips"></a>
<strong>一、Tips</strong>
</h3><ol>
<li>Kubernetes的垃圾回收由kubelet进行管理，每分钟会查询清理一次容器，每五分钟查询清理一次镜像。在kubelet刚启动时并不会立即进行GC，即第一次进行容器回收为kubelet启动一分钟后，第一次进行镜像回收为kubelet启动五分钟后。</li>
<li>不推荐使用其它管理工具或手工进行容器和镜像的清理，因为kubelet需要通过容器来判断pod的运行状态，如果使用其它方式清除容器有可能影响kubelet的正常工作。</li>
<li>镜像的回收针对node结点上由docker管理的所有镜像，无论该镜像是否是在创建pod时pull的。而容器的回收策略只应用于通过kubelet管理的容器。</li>
<li>Kubernetes通过kubelet集成的cadvisor进行镜像的回收，有两个参数可以设置：<code>--image-gc-high-threshold</code>和<code>--image-gc-low-threshold</code>。当用于存储镜像的磁盘使用率达到百分之&ndash;image-gc-high-threshold时将触发镜像回收，删除最近最久未使用（LRU，Least Recently Used）的镜像直到磁盘使用率降为百分之<code>--image-gc-low-threshold</code>或无镜像可删为止。默认<code>--image-gc-high-threshold</code>为90，``&ndash;image-gc-low-threshold`为80。</li>
<li>容器的回收有三个参数可设置：<code>--minimum-container-ttl-duration</code>，<code>--maximum-dead-containers-per-container</code>和<code>--maximum-dead-containers</code>。从容器停止运行时起经过<code>--minimum-container-ttl-duration</code>时间后，该容器标记为已过期将来可以被回收（只是标记，不是回收），默认值为1m0s。一般情况下每个pod最多可以保留<code>--maximum-dead-containers-per-container</code>个已停止运行的容器集，默认值为2。整个node节点可以保留<code>--maximum-dead-containers</code>个已停止运行的容器，默认值为100。</li>
<li>如果需要关闭容器的垃圾回收策略，可以将<code>--minimum-container-ttl-duration</code>设为0（表示无限制），<code>--maximum-dead-containers-per-container</code>和<code>--maximum-dead-containers</code>设为负数。</li>
<li><code>--minimum-container-ttl-duration</code>的值可以使用单位后缀，如h表示小时，m表示分钟，s表示秒。</li>
<li>当<code>--maximum-dead-containers-per-container</code>和<code>--maximum-dead-containers</code>冲突时，``&ndash;maximum-dead-containers`优先考虑。</li>
<li>对于那些由kubelet创建的但由于某些原因导致无名字（）的容器，会在到达GC时间点时被删除。</li>
<li>回收容器时，按创建时间排序，优先删除那些创建时间最早的容器。</li>
<li>到达GC时间点时，具体的GC过程如下：1）遍历所有pod，使其满足<code>--maximum-dead-containers-per-container</code>；2）经过上一步后如果不满足<code>--maximum-dead-containers</code>，计算值<code>X=（--maximum-dead-containers）/（pod总数）</code>，再遍历所有pod，使其满足已停止运行的容器集个数不大于X且至少为1；3）经过以上两步后如果还不满足<code>--maximum-dead-containers</code>，则对所有已停止的容器排序，优先删除创建时间最早的容器直到满足<code>--maximum-dead-containers</code>为止。</li>
<li>当某个镜像重新pull或启动某个pod用到该镜像时，该镜像的最近使用时间都会被更新。</li>
<li>Kubernetes的垃圾回收在1.1.4版本开始才渐渐完善，之前的版本存在比较多bug甚至不能发挥作用。</li>
<li>关于容器的回收需要特别注意pod的概念，比如，通过同一个yaml文件create一个pod，再delete这个pod，然后再create这个pod，此时之前的那个pod对应的容器并不会作为新创建pod的已停止容器集，因为这两个pod虽然同名，但已经不是同一个pod了。只有同一个pod中在运行过程中由于意外或其它情况停止的容器才算是这个pod的已停止容器集。</li>
</ol>
<h3 id="二experiments">
<a class="header-anchor" href="#%e4%ba%8cexperiments"></a>
<strong>二、Experiments</strong>
</h3><ol>
<li>镜像回收（使用docker默认 <code>--graph</code> 参数：<code>/var/lib/docker</code>）</li>
</ol>
<p>结点上运行的docker设置的参数 <code>--graph</code> 使用默认的<code>/var/lib/docker</code>，指向/var文件系统，通过df -lh查看目前 /var 磁盘使用率为30%，启动kubelet设置镜像回收相关参数如下：</p>
        
        <hr><p>本文2022-12-29首发于<a href='https://hugo.kkun.top/'>我的博客</a>，最后修改于2022-12-29</p>]]></description><category>kubernetes</category><category>Kubelet</category></item><item><title>kubelet源码执行流程分析</title><link>https://hugo.kkun.top/post/kubelet%E6%BA%90%E7%A0%81%E6%89%A7%E8%A1%8C%E6%B5%81%E7%A8%8B%E5%88%86%E6%9E%90/</link><pubDate>Thu, 29 Dec 2022 13:48:33 +0000</pubDate><author>your@email.com (你的名字)</author><guid>https://hugo.kkun.top/post/kubelet%E6%BA%90%E7%A0%81%E6%89%A7%E8%A1%8C%E6%B5%81%E7%A8%8B%E5%88%86%E6%9E%90/</guid><description>
<![CDATA[<h1>kubelet源码执行流程分析</h1><p>作者：你的名字（your@email.com）</p>
        
          <h2 id="k8s学习kubelet源码执行流程分析">
<a class="header-anchor" href="#k8s%e5%ad%a6%e4%b9%a0kubelet%e6%ba%90%e7%a0%81%e6%89%a7%e8%a1%8c%e6%b5%81%e7%a8%8b%e5%88%86%e6%9e%90"></a>
k8s学习：kubelet源码执行流程分析
</h2><p>容器技术应用范围越来越广，通过理解整个框架的执行流程，学习源码执行思路，对以后的编程很有帮助， kubernetes有很多组件，我们今天通过kubelet这个组件来进行深入的分析，来看看里面的执行流程，kubelet里面涉及的方法非常多且层层嵌套，通过我这一篇文章肯定是讲不全的，大家可以根据自己的情况不断深入来学习。我们这篇文章主要分析其执行流程，不深入底层的执行细节。抓主干。学习源码版本：1.19</p>
        
        <hr><p>本文2022-12-29首发于<a href='https://hugo.kkun.top/'>我的博客</a>，最后修改于2022-12-29</p>]]></description><category>kubernetes</category><category>Kubelet</category></item></channel></rss>