<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Gaussli&#39;s Blog</title>
  
  <subtitle>Learn More Everyday</subtitle>
  <link href="https://gaussli.com/atom.xml" rel="self"/>
  
  <link href="https://gaussli.com/"/>
  <updated>2025-05-18T13:13:32.923Z</updated>
  <id>https://gaussli.com/</id>
  
  <author>
    <name>gaussli</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>【Go】Context用法</title>
    <link href="https://gaussli.com/2025/05/18/%E3%80%90go%E3%80%91context%E7%94%A8%E6%B3%95/"/>
    <id>https://gaussli.com/2025/05/18/%E3%80%90go%E3%80%91context%E7%94%A8%E6%B3%95/</id>
    <published>2025-05-18T12:57:15.000Z</published>
    <updated>2025-05-18T13:13:32.923Z</updated>
    
    <content type="html"><![CDATA[<p>Context 主要被用于在并发的 goroutine 之间传递请求范围的数据、取消信号以及超时信息等。其中包含4个方法</p><ul><li>Done() &lt;-chan strct{}：当 Context 被取消或超时时，这个通道会被关闭。通常用于在 goroutine 中监听取消信号</li><li>Err() error：表示为什么 Context 被取消。当 Done() 通道关闭后调用 Err() 方法会返回非 nil 的错误。常见错误值：<ul><li>context.Canceled：表示 Context 被显式取消</li><li>context.DeadlineExceeded：表示 Context 超过了截止时间</li></ul></li><li>Value(key interface{}) interface{}：从 Context 中获取与 key 相关联的值。如果 key 不存在，则返回 nil。用于传递请求范围的上下文数据，如用户身份信息、请求 ID 等。</li><li>Deadline() (deadline time.Time, ok bool)：返回 Context 的截止时间以及一个布尔值 ok。如果 ok 为 true，表示 Context 有一个明确的截止时间；否则，表示没有截止时间。当前时间超过截止时间时，Context 会被自动取消。</li></ul><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> main</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> (</span><br><span class="line"><span class="string">&quot;context&quot;</span></span><br><span class="line"><span class="string">&quot;fmt&quot;</span></span><br><span class="line"><span class="string">&quot;time&quot;</span></span><br><span class="line">)</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">main</span><span class="params">()</span></span> &#123;</span><br><span class="line">createBackground()</span><br><span class="line"></span><br><span class="line">createTODO()</span><br><span class="line"></span><br><span class="line">createWithCancel()</span><br><span class="line"></span><br><span class="line">createWithTimeout()</span><br><span class="line"></span><br><span class="line">createWithDeadline()</span><br><span class="line"></span><br><span class="line">createWithValue()</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 说明：返回一个空的、不会被取消、没有截止时间的 Context, 通常用于整个请求处理的最顶层，作为其他 Context 的基础。这个</span></span><br><span class="line"><span class="comment">// Context 不包含任何值，也不能被取消。</span></span><br><span class="line"><span class="comment">// 场景：在构建一个 Web 服务器应用时，在处理 HTTP 请求的最开始，可以使用 Context.Background() 作为整个请求处理流程的起点，</span></span><br><span class="line"><span class="comment">// 后续基于它创建带有请求特定信息（如请求ID、用户信息等）或带有取消、超时等功能的 Context。</span></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">createBackground</span><span class="params">()</span></span> &#123;</span><br><span class="line">ctx := context.Background()</span><br><span class="line">fmt.Println(ctx)</span><br><span class="line"><span class="comment">// 可以将这个基础 Context 传递给其他函数</span></span><br><span class="line">doSomething(ctx)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 说明：返回一个空的、不会被取消、没有截止时间的 Context, 用于内部库中不确定应该使用什么 Context 时，或者在还没有确定具体的</span></span><br><span class="line"><span class="comment">// Context 使用方式时暂时使用这个 Context。它与 Context.Background() 类似，但更倾向于用于尚未确定具体使用场景的情况。</span></span><br><span class="line"><span class="comment">// 场景：在开发一个通用的工具库时，如果库的某些功能暂时不确定应该使用什么样的 Context （如是基于用户的请求 Context 还是全局的后台任务</span></span><br><span class="line"><span class="comment">// Context），可以先使用 Context.TODO()，后续根据实际业务需求再进行调整。</span></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">createTODO</span><span class="params">()</span></span> &#123;</span><br><span class="line">ctx := context.TODO()</span><br><span class="line">fmt.Println(ctx)</span><br><span class="line"><span class="comment">// 暂时不清楚如何使用这个 Context 时可以先用它</span></span><br><span class="line">doSomething(ctx)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">doSomething</span><span class="params">(ctx context.Context)</span></span> &#123;</span><br><span class="line"><span class="comment">// 在函数内部可以基于这个基础 Context 创建带有新特性的 Context</span></span><br><span class="line">fmt.Println(ctx, <span class="string">&quot;in doSomething method&quot;</span>)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 说明：这个函数创建一个带有取消功能的 Context。当调用返回的 cancel 函数时，它会取消这个新的 Context，并且通知所有监听这个</span></span><br><span class="line"><span class="comment">// Context 的 goroutine。</span></span><br><span class="line"><span class="comment">// 场景：在一个长时间运行的任务（如文件处理任务、网络请求任务等）中，当用户要求取消任务或者任务需要提前终止时，可以使用</span></span><br><span class="line"><span class="comment">// Context.WithCancel()。例如，在一个文件下载应用中，如果用户点击取消下载按钮，就可以调用 cancel 函数来取消下载任务。</span></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">createWithCancel</span><span class="params">()</span></span> &#123;</span><br><span class="line">ctx, cancel := context.WithCancel(context.Background())</span><br><span class="line"><span class="comment">// 启动一个 goroutine 执行任务</span></span><br><span class="line"><span class="keyword">go</span> doLongTaskWithCancel(ctx)</span><br><span class="line"><span class="comment">// 等待一段时间后取消任务</span></span><br><span class="line">time.Sleep(<span class="number">5</span> * time.Second)</span><br><span class="line">cancel()</span><br><span class="line"><span class="comment">// 确保 cancel 通知已经生效</span></span><br><span class="line">time.Sleep(<span class="number">2</span> * time.Second)</span><br><span class="line">fmt.Println(<span class="string">&quot;ctx.Err: &quot;</span>, ctx.Err())</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">doLongTaskWithCancel</span><span class="params">(ctx context.Context)</span></span> &#123;</span><br><span class="line"><span class="keyword">for</span> &#123;</span><br><span class="line"><span class="keyword">select</span> &#123;</span><br><span class="line"><span class="keyword">case</span> &lt;-ctx.Done():</span><br><span class="line">fmt.Println(<span class="string">&quot;[WithCancel] Task is cancelled&quot;</span>)</span><br><span class="line"><span class="keyword">return</span></span><br><span class="line"><span class="keyword">default</span>:</span><br><span class="line">fmt.Println(<span class="string">&quot;[WithCancel] Task is running&quot;</span>)</span><br><span class="line">time.Sleep(<span class="number">1</span> * time.Second)</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 说明：它创建一个带有超时时间的 Context。如果在这个超时时间之前任务没有完成，Context 会被自动取消。</span></span><br><span class="line"><span class="comment">// 场景：在调用外部服务（如 API 调用）时，为了避免长时间等待导致系统资源被占用，可以使用 Context.WithTimeout()。例如，在一个电商</span></span><br><span class="line"><span class="comment">// 应用中，当向支付网关发送支付请求时，可以设置一个超时时间，如果支付网关在超时时间内没有返回结果，就取消支付请求。</span></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">createWithTimeout</span><span class="params">()</span></span> &#123;</span><br><span class="line"><span class="comment">// 设置超时时间为 2 秒</span></span><br><span class="line">ctx, cancel := context.WithTimeout(context.Background(), <span class="number">2</span>*time.Second)</span><br><span class="line"><span class="keyword">defer</span> cancel() <span class="comment">// 确保释放资源</span></span><br><span class="line"><span class="keyword">go</span> doLongTaskWithTimeout(ctx)</span><br><span class="line"><span class="comment">// 等待一段时间</span></span><br><span class="line">time.Sleep(<span class="number">3</span> * time.Second)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">doLongTaskWithTimeout</span><span class="params">(ctx context.Context)</span></span> &#123;</span><br><span class="line"><span class="keyword">for</span> &#123;</span><br><span class="line"><span class="keyword">select</span> &#123;</span><br><span class="line"><span class="keyword">case</span> &lt;-ctx.Done():</span><br><span class="line">fmt.Println(<span class="string">&quot;[WithTimeout] Task is timed out&quot;</span>)</span><br><span class="line"><span class="keyword">return</span></span><br><span class="line"><span class="keyword">default</span>:</span><br><span class="line">fmt.Println(<span class="string">&quot;[WithTimeout] Task is running&quot;</span>)</span><br><span class="line">time.Sleep(<span class="number">500</span> * time.Millisecond)</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 说明：它创建一个带有截止时间的 Context。如果当前时间超过了这个截止时间，Context 会被自动取消。</span></span><br><span class="line"><span class="comment">// 场景：在一个任务调度系统中，有些任务必须在特定的时间点之前完成。比如，在一个实时数据处理系统中，处理某个时间段的数据必须在这个时间段结束后的一定时间内完</span></span><br><span class="line"><span class="comment">// 成，否则数据就会失去价值了，这时可以使用 Context.WithDeadline() 来确保任务在规定的时间内完成。</span></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">createWithDeadline</span><span class="params">()</span></span> &#123;</span><br><span class="line">deadline := time.Now().Add(<span class="number">2</span> * time.Second)</span><br><span class="line">ctx, cancel := context.WithDeadline(context.Background(), deadline)</span><br><span class="line"><span class="keyword">defer</span> cancel() <span class="comment">// 确保释放资源</span></span><br><span class="line"><span class="keyword">go</span> doLongTaskWithDeadline(ctx)</span><br><span class="line"><span class="comment">// 等待一段时间</span></span><br><span class="line">time.Sleep(<span class="number">3</span> * time.Second)</span><br><span class="line">fmt.Println(<span class="string">&quot;ctx.Err: &quot;</span>, ctx.Err())</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">doLongTaskWithDeadline</span><span class="params">(ctx context.Context)</span></span> &#123;</span><br><span class="line"><span class="keyword">for</span> &#123;</span><br><span class="line"><span class="keyword">select</span> &#123;</span><br><span class="line"><span class="keyword">case</span> &lt;-ctx.Done():</span><br><span class="line">fmt.Println(<span class="string">&quot;[WithDeadline] Task is beyond deadline&quot;</span>)</span><br><span class="line"><span class="keyword">return</span></span><br><span class="line"><span class="keyword">default</span>:</span><br><span class="line">fmt.Println(<span class="string">&quot;[WithDeadline] Task is running&quot;</span>)</span><br><span class="line">time.Sleep(<span class="number">500</span> * time.Millisecond)</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 说明：用于向 Context 中添加键值对数据。这可以在整个请求链中传递一些与请求相关的上下文信息，比如用户身份信息、请求 ID 等。</span></span><br><span class="line"><span class="comment">// 场景：在一个分布式系统中，当处理一个用户请求时，可以在请求进入系统的入口处（如 API 网关）使用 Context.WithValue() 向</span></span><br><span class="line"><span class="comment">// Context 添加用户身份信息，然后这个 Context 会随着请求在系统内部的各个服务之间传递，后续的服务就可以从 Context 中获取用户身份信</span></span><br><span class="line"><span class="comment">// 息来执行相应的操作，如权限验证等。</span></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">createWithValue</span><span class="params">()</span></span> &#123;</span><br><span class="line"><span class="comment">// 创建一个带有值的 Context，添加用户 ID 信息</span></span><br><span class="line">ctx := context.WithValue(context.Background(), <span class="string">&quot;userID&quot;</span>, <span class="string">&quot;12345&quot;</span>)</span><br><span class="line"><span class="comment">// 在函数中使用这个 Context</span></span><br><span class="line">doSomethingWithValue(ctx)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">doSomethingWithValue</span><span class="params">(ctx context.Context)</span></span> &#123;</span><br><span class="line"><span class="comment">// 从 Context 中获取值</span></span><br><span class="line"><span class="keyword">if</span> userID, ok := ctx.Value(<span class="string">&quot;userID&quot;</span>).(<span class="type">string</span>); ok &#123;</span><br><span class="line">fmt.Println(<span class="string">&quot;[WithValue] User ID:&quot;</span>, userID)</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line">fmt.Println(<span class="string">&quot;[WithValue] No User ID found&quot;</span>)</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;Context 主要被用于在并发的 goroutine 之间传递请求范围的数据、取消信号以及超时信息等。其中包含4个方法&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Done() &amp;lt;-chan strct{}：当 Context 被取消或超时时，这个通道会被关闭。通常用于在 gorou</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Go" scheme="https://gaussli.com/categories/tech/go/"/>
    
    
    <category term="代码" scheme="https://gaussli.com/tags/%E4%BB%A3%E7%A0%81/"/>
    
    <category term="go" scheme="https://gaussli.com/tags/go/"/>
    
    <category term="context" scheme="https://gaussli.com/tags/context/"/>
    
  </entry>
  
  <entry>
    <title>主流开源协议</title>
    <link href="https://gaussli.com/2025/05/17/%E4%B8%BB%E6%B5%81%E5%BC%80%E6%BA%90%E5%8D%8F%E8%AE%AE/"/>
    <id>https://gaussli.com/2025/05/17/%E4%B8%BB%E6%B5%81%E5%BC%80%E6%BA%90%E5%8D%8F%E8%AE%AE/</id>
    <published>2025-05-17T07:43:01.000Z</published>
    <updated>2025-05-17T07:47:24.586Z</updated>
    
    <content type="html"><![CDATA[<p>Git 上的开源协议是定义开源软件使用规则和条款的许可证。这些协议规定了用户如何使用、修改和分发开源软件。以下是一些主流的开源协议及其特点的通俗解释：</p><h3 id="1-MIT-协议"><a href="#1-MIT-协议" class="headerlink" title="1. MIT 协议"></a>1. <strong>MIT 协议</strong></h3><ul><li><strong>特点</strong>：用户可以自由使用、复制、修改、合并、发布和分发软件，包括原始版本和修改版本。</li><li><strong>适用场景</strong>：适用于希望软件被广泛使用和修改的开发者，适合小型项目或个人项目。</li><li><strong>优点</strong>：简单、灵活、限制少，用户拥有极大的自由度。</li><li><strong>缺点</strong>：缺乏对软件的商业使用的限制，用户可以将开源软件用于商业产品而无需开源其衍生产品。</li></ul><h3 id="2-Apache-协议"><a href="#2-Apache-协议" class="headerlink" title="2. Apache 协议"></a>2. <strong>Apache 协议</strong></h3><ul><li><strong>特点</strong>：与 MIT 协议类似，用户可以自由使用、修改和分发软件，但需要保留版权声明和许可证声明。</li><li><strong>适用场景</strong>：适用于需要保留版权声明和许可证声明的项目。适合大型开源项目和企业级项目。</li><li><strong>优点</strong>：保留版权和许可证声明，提供知识产权保护。</li><li><strong>缺点</strong>：需要在分发时保留版权声明和许可证声明，增加了分发的复杂性。</li></ul><h3 id="3-GPL-协议（GNU-General-Public-License）"><a href="#3-GPL-协议（GNU-General-Public-License）" class="headerlink" title="3. GPL 协议（GNU General Public License）"></a>3. <strong>GPL 协议（GNU General Public License）</strong></h3><ul><li><strong>特点</strong>：要求任何基于该软件修改或分发的版本也必须采用相同的许可证，即“传染性”。</li><li><strong>适用场景</strong>：适用于希望确保软件及其衍生产品保持开源的项目，适合需要保护软件不被闭源的项目。</li><li><strong>优点</strong>：保护软件不被闭源，确保所有衍生产品都保持开源。</li><li><strong>缺点</strong>：要求所有基于 GPL 软件的修改和分发必须采用相同的许可证，限制了商业使用的灵活性。</li></ul><h3 id="4-LGPL-协议（GNU-Lesser-General-Public-License）"><a href="#4-LGPL-协议（GNU-Lesser-General-Public-License）" class="headerlink" title="4. LGPL 协议（GNU Lesser General Public License）"></a>4. <strong>LGPL 协议（GNU Lesser General Public License）</strong></h3><ul><li><strong>特点</strong>：比 GPL 更加宽松，允许将 LGPL 软件作为库被闭源软件使用，但要求库本身的修改部分保持开源。</li><li><strong>适用场景</strong>：适用于希望软件作为库被广泛使用，但要求库本身保持开源的项目。</li><li><strong>优点</strong>：允许闭源软件使用 LGPL 库，促进了库的广泛使用。</li><li><strong>缺点</strong>：库的修改部分必须保持开源，限制了闭源软件对库的修改自由度。</li></ul><h3 id="5-BSD-协议"><a href="#5-BSD-协议" class="headerlink" title="5. BSD 协议"></a>5. <strong>BSD 协议</strong></h3><ul><li><strong>特点</strong>：类似于 MIT 协议，用户可以自由使用、修改和分发软件，但需要保留版权声明和免责声明。</li><li><strong>适用场景</strong>：适用于希望软件被广泛使用和修改的项目，适合需要保留版权声明的开源项目。</li><li><strong>优点</strong>：简单、灵活，保留版权声明和免责声明。</li><li><strong>缺点</strong>：缺乏对商业使用的限制，用户可以将开源软件用于商业产品而无需开源其衍生产品。</li></ul><h3 id="6-MPL-协议（Mozilla-Public-License）"><a href="#6-MPL-协议（Mozilla-Public-License）" class="headerlink" title="6. MPL 协议（Mozilla Public License）"></a>6. <strong>MPL 协议（Mozilla Public License）</strong></h3><ul><li><strong>特点</strong>：要求任何基于该软件修改或分发的版本必须开源，但允许与其他协议的代码集成。</li><li><strong>适用场景</strong>：适用于需要保护软件不被闭源但允许与其他协议代码集成的项目。</li><li><strong>优点</strong>：保护软件不被闭源，允许与其他协议的代码集成。</li><li><strong>缺点</strong>：要求修改部分开源，增加了分发的复杂性。</li></ul><h3 id="7-CC-协议（Creative-Commons）"><a href="#7-CC-协议（Creative-Commons）" class="headerlink" title="7. CC 协议（Creative Commons）"></a>7. <strong>CC 协议（Creative Commons）</strong></h3><ul><li><strong>特点</strong>：主要用于内容创作（如文档、图片、音乐等），允许用户以特定方式使用和分发内容。</li><li><strong>适用场景</strong>：适用于非软件内容的开源项目，如文档、教程、图片等。</li><li><strong>优点</strong>：灵活地定义内容的使用方式，适用于不同类型的创作内容。</li><li><strong>缺点</strong>：不适合用于软件项目，主要用于内容创作。</li></ul><h3 id="8-Unlicense-协议"><a href="#8-Unlicense-协议" class="headerlink" title="8. Unlicense 协议"></a>8. <strong>Unlicense 协议</strong></h3><ul><li><strong>特点</strong>：完全放弃软件的版权，允许用户以任何方式使用、修改和分发软件，没有任何限制。</li><li><strong>适用场景</strong>：适用于开发者希望完全放弃软件的版权，没有任何限制的项目。</li><li><strong>优点</strong>：完全自由，没有任何限制。</li><li><strong>缺点</strong>：缺乏法律保护，用户可以随意使用和分发软件。</li></ul><h3 id="9-AGPL-协议（Affero-General-Public-License）"><a href="#9-AGPL-协议（Affero-General-Public-License）" class="headerlink" title="9. AGPL 协议（Affero General Public License）"></a>9. <strong>AGPL 协议（Affero General Public License）</strong></h3><ul><li><strong>特点</strong>：与 GPL 类似，但更严格，要求任何基于该软件的修改和分发都必须开源，包括通过网络服务的方式分发。</li><li><strong>适用场景</strong>：适用于需要保护软件不被闭源，包括通过网络服务分发的项目。</li><li><strong>优点</strong>：保护软件不被闭源，包括通过网络服务分发的场景。</li><li><strong>缺点</strong>：限制了商业使用的灵活性，用户必须开源所有基于该软件的修改和分发版本。</li></ul><h3 id="10-Eclipse-Public-License-EPL"><a href="#10-Eclipse-Public-License-EPL" class="headerlink" title="10. Eclipse Public License (EPL)"></a>10. <strong>Eclipse Public License (EPL)</strong></h3><ul><li><strong>特点</strong>：要求基于该软件的修改和分发版本必须开源，但允许与其他协议的代码集成。</li><li><strong>适用场景</strong>：适用于 Eclipse 项目和其他需要保护软件不被闭源但允许与其他协议代码集成的项目。</li><li><strong>优点</strong>：保护软件不被闭源，允许与其他协议的代码集成。</li><li><strong>缺点</strong>：要求修改部分开源，增加了分发的复杂性。</li></ul><h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3><table><thead><tr><th>协议</th><th>主要特点</th><th>适用场景</th></tr></thead><tbody><tr><td>MIT</td><td>用户可自由使用、修改、分发，无限制</td><td>小型项目、个人项目</td></tr><tr><td>Apache</td><td>用户可自由使用、修改、分发，需保留版权声明和许可证声明</td><td>大型开源项目、企业级项目</td></tr><tr><td>GPL</td><td>修改和分发必须开源，传染性</td><td>需保护软件不被闭源的项目</td></tr><tr><td>LGPL</td><td>修改和分发可闭源，但库本身修改部分需开源</td><td>作为库被广泛使用的项目</td></tr><tr><td>BSD</td><td>用户可自由使用、修改、分发，需保留版权声明和免责声明</td><td>小型项目、个人项目，需保留版权声明</td></tr><tr><td>MPL</td><td>修改和分发必须开源，允许与其他协议代码集成</td><td>需保护软件不被闭源但允许与其他协议代码集成的项目</td></tr><tr><td>CC</td><td>适用于内容创作，如文档、图片、音乐等</td><td>内容创作项目</td></tr><tr><td>Unlicense</td><td>完全放弃版权，无限制</td><td>开发者希望完全放弃版权的项目</td></tr><tr><td>AGPL</td><td>修改和分发必须开源，包括通过网络服务分发</td><td>需保护软件不被闭源包括通过网络服务分发的项目</td></tr><tr><td>EPL</td><td>修改和分发必须开源，允许与其他协议代码集成</td><td>Eclipse 项目，需保护软件不被闭源但允许与其他协议代码集成的项目</td></tr></tbody></table><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;Git 上的开源协议是定义开源软件使用规则和条款的许可证。这些协议规定了用户如何使用、修改和分发开源软件。以下是一些主流的开源协议及其特点的通俗解释：&lt;/p&gt;
&lt;h3 id=&quot;1-MIT-协议&quot;&gt;&lt;a href=&quot;#1-MIT-协议&quot; class=&quot;headerlink&quot; </summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="License" scheme="https://gaussli.com/categories/tech/license/"/>
    
    
    <category term="license" scheme="https://gaussli.com/tags/license/"/>
    
    <category term="开源协议" scheme="https://gaussli.com/tags/%E5%BC%80%E6%BA%90%E5%8D%8F%E8%AE%AE/"/>
    
  </entry>
  
  <entry>
    <title>SOURCECODE-Kubernetes项目依赖的框架及作用</title>
    <link href="https://gaussli.com/2025/05/16/sourcecode-kubernetes%E9%A1%B9%E7%9B%AE%E4%BE%9D%E8%B5%96%E7%9A%84%E6%A1%86%E6%9E%B6%E5%8F%8A%E4%BD%9C%E7%94%A8/"/>
    <id>https://gaussli.com/2025/05/16/sourcecode-kubernetes%E9%A1%B9%E7%9B%AE%E4%BE%9D%E8%B5%96%E7%9A%84%E6%A1%86%E6%9E%B6%E5%8F%8A%E4%BD%9C%E7%94%A8/</id>
    <published>2025-05-16T08:30:21.000Z</published>
    <updated>2025-05-16T08:34:48.900Z</updated>
    
    <content type="html"><![CDATA[<p>Kubernetes 作为云原生很重要的一环，自然是学习 go 以及云原生知识必不可少的内容。Kubernetes 在代码架构设计和编写方面，都有很多我们需要学习的。本文说一下 Kubernetes 使用了哪些第三方框架，以及这些框架一般的作用。</p><h1 id=""><a href="#" class="headerlink" title=""></a></h1><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;Kubernetes 作为云原生很重要的一环，自然是学习 go 以及云原生知识必不可少的内容。Kubernetes 在代码架构设计和编写方面，都有很多我们需要学习的。本文说一下 Kubernetes 使用了哪些第三方框架，以及这些框架一般的作用。&lt;/p&gt;
&lt;h1 id=&quot;&quot;</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Sourcecode" scheme="https://gaussli.com/categories/tech/sourcecode/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/sourcecode/kubernetes/"/>
    
    
    <category term="sourcecode" scheme="https://gaussli.com/tags/sourcecode/"/>
    
    <category term="kubernetes" scheme="https://gaussli.com/tags/kubernetes/"/>
    
    <category term="依赖" scheme="https://gaussli.com/tags/%E4%BE%9D%E8%B5%96/"/>
    
    <category term="第三方" scheme="https://gaussli.com/tags/%E7%AC%AC%E4%B8%89%E6%96%B9/"/>
    
    <category term="third party" scheme="https://gaussli.com/tags/third-party/"/>
    
  </entry>
  
  <entry>
    <title>COOKBOOK-Kubernetes二进制高可用部署-Flannel</title>
    <link href="https://gaussli.com/2025/05/10/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-flannel/"/>
    <id>https://gaussli.com/2025/05/10/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-flannel/</id>
    <published>2025-05-10T13:09:02.000Z</published>
    <updated>2025-05-10T14:37:03.734Z</updated>
    
    <content type="html"><![CDATA[<h1 id="下载-Flannel-相关文件"><a href="#下载-Flannel-相关文件" class="headerlink" title="下载 Flannel 相关文件"></a>下载 Flannel 相关文件</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 选用版本：0.26.7</span></span><br><span class="line">wget -P /usr/local/src https://github.com/flannel-io/flannel/releases/download/v0.26.7/kube-flannel.yml</span><br></pre></td></tr></table></figure><h1 id="修改-Yaml-内容"><a href="#修改-Yaml-内容" class="headerlink" title="修改 Yaml 内容"></a>修改 Yaml 内容</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改 pod cidr 信息</span></span><br><span class="line">sed -i <span class="string">&#x27;s/\(&quot;Network&quot;: \).*/\1&quot;20.20.0.0\/16&quot;,/&#x27;</span> /usr/local/src/kube-flannel.yml</span><br><span class="line"><span class="comment"># 新增指定网卡信息</span></span><br><span class="line">sed -i <span class="string">&#x27;/--kube-subnet-mgr/a\        - --iface=enp0s8&#x27;</span> /usr/local/src/kube-flannel.yml</span><br></pre></td></tr></table></figure><h1 id="运行-Flannel"><a href="#运行-Flannel" class="headerlink" title="运行 Flannel"></a>运行 Flannel</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kubectl --kubeconfig=/etc/kubernetes/admin.kubeconfig create -f /usr/local/src/kube-flannel.yml</span><br></pre></td></tr></table></figure><h1 id="结果"><a href="#结果" class="headerlink" title="结果"></a>结果</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br></pre></td><td class="code"><pre><span class="line"># kubectl get node 命令结果，节点从 NotReady 转变为 Ready</span><br><span class="line">NAME             STATUS   ROLES    AGE   VERSION</span><br><span class="line">192.168.56.109   Ready    &lt;none&gt;   47h   v1.31.2</span><br><span class="line">192.168.56.110   Ready    &lt;none&gt;   47h   v1.31.2</span><br><span class="line">192.168.56.111   Ready    &lt;none&gt;   47h   v1.31.2</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"># 产生 kube-flannel 命名空间下 kube-flannel-ds 的 daemonset 以及它对应的 pod</span><br><span class="line">NAMESPACE      NAME                             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE</span><br><span class="line">kube-flannel   daemonset.apps/kube-flannel-ds   3         3         3       3            3           &lt;none&gt;          7h19m</span><br><span class="line"></span><br><span class="line">NAMESPACE      NAME                        READY   STATUS    RESTARTS        AGE</span><br><span class="line">kube-flannel   pod/kube-flannel-ds-775kd   1/1     Running   10 (147m ago)   165m</span><br><span class="line">kube-flannel   pod/kube-flannel-ds-fxw76   1/1     Running   5 (158m ago)    165m</span><br><span class="line">kube-flannel   pod/kube-flannel-ds-zwfqg   1/1     Running   0               165m</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"># 产生名为 flannel.1 的网络接口，ip 由 pod cidr 配置信息确定</span><br><span class="line">flannel.1: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UNKNOWN group default </span><br><span class="line">    link/ether be:69:89:e5:1a:66 brd ff:ff:ff:ff:ff:ff</span><br><span class="line">    inet 20.20.0.0/32 scope global flannel.1</span><br><span class="line">       valid_lft forever preferred_lft forever</span><br><span class="line">    inet6 fe80::bc69:89ff:fee5:1a66/64 scope link </span><br><span class="line">       valid_lft forever preferred_lft forever</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"># 产生 /etc/cni/net.d/10-flannel.conflist 文件</span><br><span class="line">&#123;</span><br><span class="line">  &quot;name&quot;: &quot;cbr0&quot;,</span><br><span class="line">  &quot;cniVersion&quot;: &quot;0.3.1&quot;,</span><br><span class="line">  &quot;plugins&quot;: [</span><br><span class="line">    &#123;</span><br><span class="line">      &quot;type&quot;: &quot;flannel&quot;,</span><br><span class="line">      &quot;delegate&quot;: &#123;</span><br><span class="line">        &quot;hairpinMode&quot;: true,</span><br><span class="line">        &quot;isDefaultGateway&quot;: true</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">      &quot;type&quot;: &quot;portmap&quot;,</span><br><span class="line">      &quot;capabilities&quot;: &#123;</span><br><span class="line">        &quot;portMappings&quot;: true</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  ]</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;下载-Flannel-相关文件&quot;&gt;&lt;a href=&quot;#下载-Flannel-相关文件&quot; class=&quot;headerlink&quot; title=&quot;下载 Flannel 相关文件&quot;&gt;&lt;/a&gt;下载 Flannel 相关文件&lt;/h1&gt;&lt;figure class=&quot;highli</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Cookbook" scheme="https://gaussli.com/categories/tech/cookbook/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/cookbook/kubernetes/"/>
    
    
    <category term="Cookbook" scheme="https://gaussli.com/tags/cookbook/"/>
    
    <category term="Kubernets" scheme="https://gaussli.com/tags/kubernets/"/>
    
    <category term="k8s" scheme="https://gaussli.com/tags/k8s/"/>
    
    <category term="部署" scheme="https://gaussli.com/tags/%E9%83%A8%E7%BD%B2/"/>
    
    <category term="cni" scheme="https://gaussli.com/tags/cni/"/>
    
    <category term="网络插件" scheme="https://gaussli.com/tags/%E7%BD%91%E7%BB%9C%E6%8F%92%E4%BB%B6/"/>
    
    <category term="flannel" scheme="https://gaussli.com/tags/flannel/"/>
    
  </entry>
  
  <entry>
    <title>COOKBOOK-Kubernetes二进制高可用部署-Calico</title>
    <link href="https://gaussli.com/2025/05/08/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-calico/"/>
    <id>https://gaussli.com/2025/05/08/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-calico/</id>
    <published>2025-05-08T14:50:25.000Z</published>
    <updated>2025-05-08T16:20:56.517Z</updated>
    
    <content type="html"><![CDATA[<h1 id="下载-Calico-相关文件"><a href="#下载-Calico-相关文件" class="headerlink" title="下载 Calico 相关文件"></a>下载 Calico 相关文件</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 选用版本：3.28.2</span></span><br><span class="line"><span class="comment"># 推荐使用 Tigera operator 来安装部署 Calico，并且同时能管理 Calico 的生命周期</span></span><br><span class="line">wget -P /usr/local/src https://raw.githubusercontent.com/projectcalico/calico/v3.30.0/manifests/operator-crds.yaml</span><br><span class="line">wget -P /usr/local/src https://raw.githubusercontent.com/projectcalico/calico/v3.30.0/manifests/tigera-operator.yaml</span><br><span class="line">wget -P /usr/local/src https://raw.githubusercontent.com/projectcalico/calico/v3.30.0/manifests/custom-resources.yaml</span><br></pre></td></tr></table></figure><h1 id="修改-Pod-CIDR-信息"><a href="#修改-Pod-CIDR-信息" class="headerlink" title="修改 Pod CIDR 信息"></a>修改 Pod CIDR 信息</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sed -i <span class="string">&#x27;s/\(cidr: \).*/\120.20.0.0\/16/&#x27;</span> /usr/local/src/custom-resources.yaml</span><br></pre></td></tr></table></figure><h1 id="运行-Tigera-operator"><a href="#运行-Tigera-operator" class="headerlink" title="运行 Tigera operator"></a>运行 Tigera operator</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">kubectl --kubeconfig=/etc/kubernetes/admin.kubeconfig create -f /usr/local/src/operator-crds.yaml</span><br><span class="line">kubectl --kubeconfig=/etc/kubernetes/admin.kubeconfig create -f /usr/local/src/tigera-operator.yaml</span><br><span class="line">kubectl --kubeconfig=/etc/kubernetes/admin.kubeconfig create -f /usr/local/src/custom-resources.yaml</span><br></pre></td></tr></table></figure><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;下载-Calico-相关文件&quot;&gt;&lt;a href=&quot;#下载-Calico-相关文件&quot; class=&quot;headerlink&quot; title=&quot;下载 Calico 相关文件&quot;&gt;&lt;/a&gt;下载 Calico 相关文件&lt;/h1&gt;&lt;figure class=&quot;highlight </summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Cookbook" scheme="https://gaussli.com/categories/tech/cookbook/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/cookbook/kubernetes/"/>
    
    
    <category term="Cookbook" scheme="https://gaussli.com/tags/cookbook/"/>
    
    <category term="Kubernets" scheme="https://gaussli.com/tags/kubernets/"/>
    
    <category term="k8s" scheme="https://gaussli.com/tags/k8s/"/>
    
    <category term="部署" scheme="https://gaussli.com/tags/%E9%83%A8%E7%BD%B2/"/>
    
    <category term="calico" scheme="https://gaussli.com/tags/calico/"/>
    
    <category term="cni" scheme="https://gaussli.com/tags/cni/"/>
    
    <category term="网络插件" scheme="https://gaussli.com/tags/%E7%BD%91%E7%BB%9C%E6%8F%92%E4%BB%B6/"/>
    
  </entry>
  
  <entry>
    <title>COOKBOOK-Kubernetes二进制高可用部署-Kube-Proxy</title>
    <link href="https://gaussli.com/2025/05/08/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-kube-proxy/"/>
    <id>https://gaussli.com/2025/05/08/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-kube-proxy/</id>
    <published>2025-05-08T14:38:09.000Z</published>
    <updated>2025-05-08T14:48:51.613Z</updated>
    
    <content type="html"><![CDATA[<h1 id="所有虚拟机移动可执行文件"><a href="#所有虚拟机移动可执行文件" class="headerlink" title="所有虚拟机移动可执行文件"></a>所有虚拟机移动可执行文件</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 移动可执行文件到bin目录</span></span><br><span class="line"><span class="built_in">mv</span> /usr/local/src/kubernetes/server/bin/kube-proxy /usr/local/bin/</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置可执行文件的属性</span></span><br><span class="line"><span class="built_in">chmod</span> 755 /usr/local/bin/kube-proxy</span><br></pre></td></tr></table></figure><h1 id="所有虚拟机创建-kube-proxy-systemd-服务"><a href="#所有虚拟机创建-kube-proxy-systemd-服务" class="headerlink" title="所有虚拟机创建 kube-proxy systemd 服务"></a>所有虚拟机创建 kube-proxy systemd 服务</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建 kube-proxy systemd 服务文件</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-proxy.service</span></span><br><span class="line"><span class="string">[Unit]</span></span><br><span class="line"><span class="string">Description=Kubernetes Kube-Proxy Server</span></span><br><span class="line"><span class="string">Documentation=https://github.com/kubernetes/kubernetes</span></span><br><span class="line"><span class="string">After=network.target</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Service]</span></span><br><span class="line"><span class="string">EnvironmentFile=/etc/kubernetes/kube-proxy.arg</span></span><br><span class="line"><span class="string">ExecStart=/usr/local/bin/kube-proxy \$KUBE_PROXY_ARGS</span></span><br><span class="line"><span class="string">Restart=always</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Install]</span></span><br><span class="line"><span class="string">WantedBy=multi-user.target</span></span><br><span class="line"><span class="string">EOF</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 软链到系统服务目录</span></span><br><span class="line"><span class="built_in">ln</span> -s /etc/kubernetes/kube-proxy.service /usr/lib/systemd/system/kube-proxy.service</span><br></pre></td></tr></table></figure><h1 id="创建-kube-proxy-启动参数配置文件"><a href="#创建-kube-proxy-启动参数配置文件" class="headerlink" title="创建 kube-proxy 启动参数配置文件"></a>创建 kube-proxy 启动参数配置文件</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.109执行</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-proxy.arg</span></span><br><span class="line"><span class="string">KUBE_PROXY_ARGS=&quot;--kubeconfig=/etc/kubernetes/admin.kubeconfig \</span></span><br><span class="line"><span class="string">--bind-address=192.168.56.109 \</span></span><br><span class="line"><span class="string">--hostname-override=192.168.56.109 \</span></span><br><span class="line"><span class="string">--proxy-mode=iptables&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.110执行</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-proxy.arg</span></span><br><span class="line"><span class="string">KUBE_PROXY_ARGS=&quot;--kubeconfig=/etc/kubernetes/admin.kubeconfig \</span></span><br><span class="line"><span class="string">--bind-address=192.168.56.110 \</span></span><br><span class="line"><span class="string">--hostname-override=192.168.56.110 \</span></span><br><span class="line"><span class="string">--proxy-mode=iptables&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.111执行</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-proxy.arg</span></span><br><span class="line"><span class="string">KUBE_PROXY_ARGS=&quot;--kubeconfig=/etc/kubernetes/admin.kubeconfig \</span></span><br><span class="line"><span class="string">--bind-address=192.168.56.111 \</span></span><br><span class="line"><span class="string">--hostname-override=192.168.56.111 \</span></span><br><span class="line"><span class="string">--proxy-mode=iptables&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><h1 id="所有虚拟机启动-kube-proxy-服务"><a href="#所有虚拟机启动-kube-proxy-服务" class="headerlink" title="所有虚拟机启动 kube-proxy 服务"></a>所有虚拟机启动 kube-proxy 服务</h1><pre><code class="bash">systemctl start kube-proxy &amp;&amp; systemctl enable kube-proxy(•̀ᴗ•́)و ̑̑</code></pre>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;所有虚拟机移动可执行文件&quot;&gt;&lt;a href=&quot;#所有虚拟机移动可执行文件&quot; class=&quot;headerlink&quot; title=&quot;所有虚拟机移动可执行文件&quot;&gt;&lt;/a&gt;所有虚拟机移动可执行文件&lt;/h1&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;t</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Cookbook" scheme="https://gaussli.com/categories/tech/cookbook/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/cookbook/kubernetes/"/>
    
    
    <category term="Cookbook" scheme="https://gaussli.com/tags/cookbook/"/>
    
    <category term="Kubernets" scheme="https://gaussli.com/tags/kubernets/"/>
    
    <category term="k8s" scheme="https://gaussli.com/tags/k8s/"/>
    
    <category term="部署" scheme="https://gaussli.com/tags/%E9%83%A8%E7%BD%B2/"/>
    
    <category term="kube-proxy" scheme="https://gaussli.com/tags/kube-proxy/"/>
    
  </entry>
  
  <entry>
    <title>COOKBOOK-Kubernetes二进制高可用部署-Containerd</title>
    <link href="https://gaussli.com/2025/05/08/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-containerd/"/>
    <id>https://gaussli.com/2025/05/08/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-containerd/</id>
    <published>2025-05-07T16:52:57.000Z</published>
    <updated>2025-05-10T13:03:40.362Z</updated>
    
    <content type="html"><![CDATA[<h1 id="准备"><a href="#准备" class="headerlink" title="准备"></a>准备</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装runc工具</span></span><br><span class="line">yum install -y runc</span><br><span class="line"></span><br><span class="line"><span class="comment"># 安装cni plugin</span></span><br><span class="line"><span class="comment"># 创建 cni plugin 目录</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /opt/cni/bin</span><br><span class="line"><span class="comment"># 下载cni1.5.1版本</span></span><br><span class="line">wget -P /usr/local/src https://github.com/containernetworking/plugins/releases/download/v1.5.1/cni-plugins-linux-amd64-v1.5.1.tgz</span><br><span class="line"><span class="comment"># 解压</span></span><br><span class="line">tar -C /opt/cni/bin -zxvf /usr/local/src/cni-plugins-linux-amd64-v1.5.1.tgz</span><br></pre></td></tr></table></figure><h1 id="安装-containerd"><a href="#安装-containerd" class="headerlink" title="安装 containerd"></a>安装 containerd</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载containerd</span></span><br><span class="line">wget -P /usr/local/src https://github.com/containerd/containerd/releases/download/v1.7.7/containerd-1.7.7-linux-amd64.tar.gz</span><br><span class="line"></span><br><span class="line"><span class="comment"># 解压</span></span><br><span class="line">tar -C /usr/local/ -zxvf /usr/local/src/containerd-1.7.7-linux-amd64.tar.gz</span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建 containerd 服务文件</span></span><br><span class="line"><span class="comment"># wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /usr/lib/systemd/system/containerd.service</span></span><br><span class="line"><span class="string"># Copyright The containerd Authors.</span></span><br><span class="line"><span class="string">#</span></span><br><span class="line"><span class="string"># Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></span><br><span class="line"><span class="string"># you may not use this file except in compliance with the License.</span></span><br><span class="line"><span class="string"># You may obtain a copy of the License at</span></span><br><span class="line"><span class="string">#</span></span><br><span class="line"><span class="string">#     http://www.apache.org/licenses/LICENSE-2.0</span></span><br><span class="line"><span class="string">#</span></span><br><span class="line"><span class="string"># Unless required by applicable law or agreed to in writing, software</span></span><br><span class="line"><span class="string"># distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></span><br><span class="line"><span class="string"># WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></span><br><span class="line"><span class="string"># See the License for the specific language governing permissions and</span></span><br><span class="line"><span class="string"># limitations under the License.</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Unit]</span></span><br><span class="line"><span class="string">Description=containerd container runtime</span></span><br><span class="line"><span class="string">Documentation=https://containerd.io</span></span><br><span class="line"><span class="string">After=network.target dbus.service</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Service]</span></span><br><span class="line"><span class="string">ExecStartPre=-/sbin/modprobe overlay</span></span><br><span class="line"><span class="string">ExecStart=/usr/local/bin/containerd</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">Type=notify</span></span><br><span class="line"><span class="string">Delegate=yes</span></span><br><span class="line"><span class="string">KillMode=process</span></span><br><span class="line"><span class="string">Restart=always</span></span><br><span class="line"><span class="string">RestartSec=5</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string"># Having non-zero Limit*s causes performance problems due to accounting overhead</span></span><br><span class="line"><span class="string"># in the kernel. We recommend using cgroups to do container-local accounting.</span></span><br><span class="line"><span class="string">LimitNPROC=infinity</span></span><br><span class="line"><span class="string">LimitCORE=infinity</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string"># Comment TasksMax if your systemd version does not supports it.</span></span><br><span class="line"><span class="string"># Only systemd 226 and above support this version.</span></span><br><span class="line"><span class="string">TasksMax=infinity</span></span><br><span class="line"><span class="string">OOMScoreAdjust=-999</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Install]</span></span><br><span class="line"><span class="string">WantedBy=multi-user.target</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><h1 id="配置国内代理源"><a href="#配置国内代理源" class="headerlink" title="配置国内代理源"></a>配置国内代理源</h1><p>推荐使用DaoCloud的代理源，稳定可靠：<img src="https://github.com/DaoCloud/public-image-mirror" alt="DaoCloud Mirror"></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建 containerd 默认配置文件</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /etc/containerd</span><br><span class="line">containerd config default &gt; /etc/containerd/config.toml</span><br><span class="line"></span><br><span class="line"><span class="comment"># 修改 /etc/containerd/config.toml 中的 [plugins.&quot;io.containerd.grpc.v1.cri&quot;.registry] 的 config_path 内容</span></span><br><span class="line"><span class="comment"># 改为 config_path = &quot;/etc/containerd/certs.d&quot;</span></span><br><span class="line">sed -i <span class="string">&#x27;/\[plugins.&quot;io.containerd.grpc.v1.cri&quot;.registry\]/ &#123;</span></span><br><span class="line"><span class="string">n</span></span><br><span class="line"><span class="string">s/\(config_path = \).*/\1&quot;\/etc\/containerd\/certs.d&quot;/</span></span><br><span class="line"><span class="string">&#125;&#x27;</span> /etc/containerd/config.toml</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证修改是否成功，有输出为成功，无输出为失败</span></span><br><span class="line">grep <span class="string">&#x27;config_path = &quot;/etc/containerd/certs.d&quot;&#x27;</span> -C 3 /etc/containerd/config.toml</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置 containerd 使用 cgroupfs Cgroup 驱动（需同 kubelet 配置参数一致）</span></span><br><span class="line">sed -i <span class="string">&#x27;s/\(SystemdCgroup = \).*/\1false/&#x27;</span> /etc/containerd/config.toml</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证修改是否成功，SystemdCgroup = true 时使用 Systemd Cgroup；SystemCgroup = false 时使用 Cgroupfs Cgroup</span></span><br><span class="line">grep <span class="string">&#x27;SystemdCgroup&#x27;</span> -C 12 /etc/containerd/config.toml</span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建 certs.d 目录</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /etc/containerd/certs.d</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置 docker.io 代理源</span></span><br><span class="line"><span class="built_in">mkdir</span> /etc/containerd/certs.d/docker.io</span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/containerd/certs.d/docker.io/hosts.toml</span></span><br><span class="line"><span class="string">server = &quot;https://docker.io&quot;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[host.&quot;docker.m.daocloud.io&quot;]</span></span><br><span class="line"><span class="string">  capabilities = [&quot;pull&quot;, &quot;resolve&quot;]</span></span><br><span class="line"><span class="string">EOF</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置 registry.k8s.io 代理源</span></span><br><span class="line"><span class="built_in">mkdir</span> /etc/containerd/certs.d/registry.k8s.io</span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/containerd/certs.d/registry.k8s.io/hosts.toml</span></span><br><span class="line"><span class="string">server = &quot;https://registry.k8s.io&quot;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[host.&quot;k8s.m.daocloud.io&quot;]</span></span><br><span class="line"><span class="string">  capabilities = [&quot;pull&quot;, &quot;resolve&quot;]</span></span><br><span class="line"><span class="string">EOF</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置 quay.io 代理源</span></span><br><span class="line"><span class="built_in">mkdir</span> /etc/containerd/certs.d/quay.io</span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/containerd/certs.d/quay.io/hosts.toml</span></span><br><span class="line"><span class="string">server = &quot;https://quay.io&quot;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[host.&quot;quay.m.daocloud.io&quot;]</span></span><br><span class="line"><span class="string">  capabilities = [&quot;pull&quot;, &quot;resolve&quot;]</span></span><br><span class="line"><span class="string">EOF</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置 ghcr.io 代理源</span></span><br><span class="line"><span class="built_in">mkdir</span> /etc/containerd/certs.d/ghcr.io</span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/containerd/certs.d/ghcr.io/hosts.toml</span></span><br><span class="line"><span class="string">server = &quot;https://ghcr.io&quot;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[host.&quot;ghcr.m.daocloud.io&quot;]</span></span><br><span class="line"><span class="string">  capabilities = [&quot;pull&quot;, &quot;resolve&quot;]</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><h1 id="启动-containerd-服务"><a href="#启动-containerd-服务" class="headerlink" title="启动 containerd 服务"></a>启动 containerd 服务</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">systemctl daemon-reload</span><br><span class="line">systemctl start containerd &amp;&amp; systemctl <span class="built_in">enable</span> containerd</span><br></pre></td></tr></table></figure><h1 id="查看-containerd-配置是否生效"><a href="#查看-containerd-配置是否生效" class="headerlink" title="查看 containerd 配置是否生效"></a>查看 containerd 配置是否生效</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">containerd config dump</span><br></pre></td></tr></table></figure><h1 id="安装-nerdctl"><a href="#安装-nerdctl" class="headerlink" title="安装 nerdctl"></a>安装 nerdctl</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载nerdctl</span></span><br><span class="line">wget -P /usr/local/src https://github.com/containerd/nerdctl/releases/download/v1.7.7/nerdctl-1.7.7-linux-amd64.tar.gz</span><br><span class="line"></span><br><span class="line"><span class="comment"># 解压</span></span><br><span class="line">tar -C /usr/local/bin/ -zxvf /usr/local/src/nerdctl-1.7.7-linux-amd64.tar.gz</span><br></pre></td></tr></table></figure><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;准备&quot;&gt;&lt;a href=&quot;#准备&quot; class=&quot;headerlink&quot; title=&quot;准备&quot;&gt;&lt;/a&gt;准备&lt;/h1&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span c</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Cookbook" scheme="https://gaussli.com/categories/tech/cookbook/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/cookbook/kubernetes/"/>
    
    
    <category term="Cookbook" scheme="https://gaussli.com/tags/cookbook/"/>
    
    <category term="Kubernets" scheme="https://gaussli.com/tags/kubernets/"/>
    
    <category term="k8s" scheme="https://gaussli.com/tags/k8s/"/>
    
    <category term="部署" scheme="https://gaussli.com/tags/%E9%83%A8%E7%BD%B2/"/>
    
    <category term="cni" scheme="https://gaussli.com/tags/cni/"/>
    
    <category term="containerd" scheme="https://gaussli.com/tags/containerd/"/>
    
    <category term="nerdctl" scheme="https://gaussli.com/tags/nerdctl/"/>
    
    <category term="cri" scheme="https://gaussli.com/tags/cri/"/>
    
    <category term="runc" scheme="https://gaussli.com/tags/runc/"/>
    
  </entry>
  
  <entry>
    <title>COOKBOOK-Kubernetes二进制高可用部署-Kubelet</title>
    <link href="https://gaussli.com/2025/05/08/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-kubelet/"/>
    <id>https://gaussli.com/2025/05/08/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-kubelet/</id>
    <published>2025-05-07T16:23:55.000Z</published>
    <updated>2025-05-10T13:43:19.106Z</updated>
    
    <content type="html"><![CDATA[<h1 id="所有虚拟机移动可执行文件"><a href="#所有虚拟机移动可执行文件" class="headerlink" title="所有虚拟机移动可执行文件"></a>所有虚拟机移动可执行文件</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 移动可执行文件到bin目录</span></span><br><span class="line"><span class="built_in">mv</span> /usr/local/src/kubernetes/server/bin/kubelet /usr/local/bin/</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置可执行文件的属性</span></span><br><span class="line"><span class="built_in">chmod</span> 755 /usr/local/bin/kubelet</span><br></pre></td></tr></table></figure><h1 id="所有虚拟机创建-kubelet-systemd-服务"><a href="#所有虚拟机创建-kubelet-systemd-服务" class="headerlink" title="所有虚拟机创建 kubelet systemd 服务"></a>所有虚拟机创建 kubelet systemd 服务</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建 kubelet systemd 服务文件</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kubelet.service</span></span><br><span class="line"><span class="string">[Unit]</span></span><br><span class="line"><span class="string">Description=Kubernetes Kubelet Server</span></span><br><span class="line"><span class="string">Documentation=https://github.com/kubernetes/kubernetes</span></span><br><span class="line"><span class="string">After=network.target containerd.service</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Service]</span></span><br><span class="line"><span class="string">EnvironmentFile=/etc/kubernetes/kubelet.arg</span></span><br><span class="line"><span class="string">ExecStart=/usr/local/bin/kubelet \$KUBELET_ARGS</span></span><br><span class="line"><span class="string">Restart=always</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Install]</span></span><br><span class="line"><span class="string">WantedBy=multi-user.target</span></span><br><span class="line"><span class="string">EOF</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 软链到系统服务目录</span></span><br><span class="line"><span class="built_in">ln</span> -s /etc/kubernetes/kubelet.service /usr/lib/systemd/system/kubelet.service</span><br></pre></td></tr></table></figure><h1 id="创建-kubelet-启动参数配置文件"><a href="#创建-kubelet-启动参数配置文件" class="headerlink" title="创建 kubelet 启动参数配置文件"></a>创建 kubelet 启动参数配置文件</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.109执行</span></span><br><span class="line"><span class="comment"># 其中 cgroup-driver 需同 containerd 配置一致</span></span><br><span class="line"><span class="comment"># 其中 pod-cidr 需同 kube-controller-manager、calico（或flannel）配置一致</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kubelet.arg</span></span><br><span class="line"><span class="string">KUBELET_ARGS=&quot;--kubeconfig=/etc/kubernetes/admin.kubeconfig \</span></span><br><span class="line"><span class="string">--anonymous-auth=true \</span></span><br><span class="line"><span class="string">--address=192.168.56.109 \</span></span><br><span class="line"><span class="string">--hostname-override=192.168.56.109 \</span></span><br><span class="line"><span class="string">--node-ip=192.168.56.109 \</span></span><br><span class="line"><span class="string">--port=10250 \</span></span><br><span class="line"><span class="string">--cluster-dns=169.169.0.100 \</span></span><br><span class="line"><span class="string">--cluster-domain=cluster.local \</span></span><br><span class="line"><span class="string">--cgroup-driver=cgroupfs \</span></span><br><span class="line"><span class="string">--containerd=/run/containerd/containerd.sock \</span></span><br><span class="line"><span class="string">--pod-infra-container-image=registry.k8s.io/pause:3.10 \</span></span><br><span class="line"><span class="string">--pod-cidr=20.20.0.0/16&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.110执行</span></span><br><span class="line"><span class="comment"># 其中 cgroup-driver 需同 containerd 配置一致</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kubelet.arg</span></span><br><span class="line"><span class="string">KUBELET_ARGS=&quot;--kubeconfig=/etc/kubernetes/admin.kubeconfig \</span></span><br><span class="line"><span class="string">--anonymous-auth=true \</span></span><br><span class="line"><span class="string">--address=192.168.56.110 \</span></span><br><span class="line"><span class="string">--hostname-override=192.168.56.110 \</span></span><br><span class="line"><span class="string">--node-ip=192.168.56.110 \</span></span><br><span class="line"><span class="string">--port=10250 \</span></span><br><span class="line"><span class="string">--cluster-dns=169.169.0.100 \</span></span><br><span class="line"><span class="string">--cluster-domain=cluster.local \</span></span><br><span class="line"><span class="string">--cgroup-driver=cgroupfs \</span></span><br><span class="line"><span class="string">--containerd=/run/containerd/containerd.sock \</span></span><br><span class="line"><span class="string">--pod-infra-container-image=registry.k8s.io/pause:3.10 \</span></span><br><span class="line"><span class="string">--pod-cidr=20.20.0.0/16&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.111执行</span></span><br><span class="line"><span class="comment"># 其中 cgroup-driver 需同 containerd 配置一致</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kubelet.arg</span></span><br><span class="line"><span class="string">KUBELET_ARGS=&quot;--kubeconfig=/etc/kubernetes/admin.kubeconfig \</span></span><br><span class="line"><span class="string">--anonymous-auth=true \</span></span><br><span class="line"><span class="string">--address=192.168.56.111 \</span></span><br><span class="line"><span class="string">--hostname-override=192.168.56.111 \</span></span><br><span class="line"><span class="string">--node-ip=192.168.56.111 \</span></span><br><span class="line"><span class="string">--port=10250 \</span></span><br><span class="line"><span class="string">--cluster-dns=169.169.0.100 \</span></span><br><span class="line"><span class="string">--cluster-domain=cluster.local \</span></span><br><span class="line"><span class="string">--cgroup-driver=cgroupfs \</span></span><br><span class="line"><span class="string">--containerd=/run/containerd/containerd.sock \</span></span><br><span class="line"><span class="string">--pod-infra-container-image=registry.k8s.io/pause:3.10 \</span></span><br><span class="line"><span class="string">--pod-cidr=20.20.0.0/16&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><h1 id="所有虚拟机启动-kubelet-服务"><a href="#所有虚拟机启动-kubelet-服务" class="headerlink" title="所有虚拟机启动 kubelet 服务"></a>所有虚拟机启动 kubelet 服务</h1><pre><code class="bash">systemctl start kubelet &amp;&amp; systemctl enable kubelet(•̀ᴗ•́)و ̑̑</code></pre>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;所有虚拟机移动可执行文件&quot;&gt;&lt;a href=&quot;#所有虚拟机移动可执行文件&quot; class=&quot;headerlink&quot; title=&quot;所有虚拟机移动可执行文件&quot;&gt;&lt;/a&gt;所有虚拟机移动可执行文件&lt;/h1&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;t</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Cookbook" scheme="https://gaussli.com/categories/tech/cookbook/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/cookbook/kubernetes/"/>
    
    
    <category term="Cookbook" scheme="https://gaussli.com/tags/cookbook/"/>
    
    <category term="Kubernets" scheme="https://gaussli.com/tags/kubernets/"/>
    
    <category term="k8s" scheme="https://gaussli.com/tags/k8s/"/>
    
    <category term="部署" scheme="https://gaussli.com/tags/%E9%83%A8%E7%BD%B2/"/>
    
    <category term="kubelet" scheme="https://gaussli.com/tags/kubelet/"/>
    
  </entry>
  
  <entry>
    <title>COOKBOOK-Kubernetes二进制高可用部署-Kube-Controller-Manager和kube-Scheduler高可用</title>
    <link href="https://gaussli.com/2025/05/07/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-kube-controller-manager%E5%92%8Ckube-scheduler%E9%AB%98%E5%8F%AF%E7%94%A8/"/>
    <id>https://gaussli.com/2025/05/07/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-kube-controller-manager%E5%92%8Ckube-scheduler%E9%AB%98%E5%8F%AF%E7%94%A8/</id>
    <published>2025-05-07T15:34:23.000Z</published>
    <updated>2025-05-10T13:42:25.249Z</updated>
    
    <content type="html"><![CDATA[<h1 id="所有虚拟机移动可执行文件"><a href="#所有虚拟机移动可执行文件" class="headerlink" title="所有虚拟机移动可执行文件"></a>所有虚拟机移动可执行文件</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 移动可执行文件到bin目录</span></span><br><span class="line"><span class="built_in">mv</span> /usr/local/src/kubernetes/server/bin/kube-controller-manager /usr/local/bin/</span><br><span class="line"><span class="built_in">mv</span> /usr/local/src/kubernetes/server/bin/kube-scheduler /usr/local/bin/</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置可执行文件的属性</span></span><br><span class="line"><span class="built_in">chmod</span> 755 /usr/local/bin/kube-controller-manager</span><br><span class="line"><span class="built_in">chmod</span> 755 /usr/local/bin/kube-scheduler</span><br></pre></td></tr></table></figure><h1 id="所有虚拟机创建-kubeconfig-文件"><a href="#所有虚拟机创建-kubeconfig-文件" class="headerlink" title="所有虚拟机创建 kubeconfig 文件"></a>所有虚拟机创建 kubeconfig 文件</h1><p>供 kube-controller-manager、kube-scheduler、kubelet、kube-proxy 服务连接 kube-apiserver 使用。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/admin.kubeconfig</span></span><br><span class="line"><span class="string">apiVersion: v1</span></span><br><span class="line"><span class="string">kind: Config</span></span><br><span class="line"><span class="string">clusters:</span></span><br><span class="line"><span class="string">- name: default</span></span><br><span class="line"><span class="string">  cluster: </span></span><br><span class="line"><span class="string">    server: https://192.168.56.109:6443</span></span><br><span class="line"><span class="string">    certificate-authority: /etc/kubernetes/pki/ca.crt</span></span><br><span class="line"><span class="string">users:</span></span><br><span class="line"><span class="string">- name: admin</span></span><br><span class="line"><span class="string">  user:</span></span><br><span class="line"><span class="string">    client-certificate: /etc/kubernetes/pki/apiserver_client.crt</span></span><br><span class="line"><span class="string">    client-key: /etc/kubernetes/pki/apiserver_client.key</span></span><br><span class="line"><span class="string">contexts:</span></span><br><span class="line"><span class="string">- name: default</span></span><br><span class="line"><span class="string">  context:</span></span><br><span class="line"><span class="string">    cluster: default</span></span><br><span class="line"><span class="string">    user: admin</span></span><br><span class="line"><span class="string">current-context: default</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><h1 id="所有虚拟机创建-kube-controller-manager-systemd-服务"><a href="#所有虚拟机创建-kube-controller-manager-systemd-服务" class="headerlink" title="所有虚拟机创建 kube-controller-manager systemd 服务"></a>所有虚拟机创建 kube-controller-manager systemd 服务</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建 kube-controller-manager systemd 服务文件</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-controller-manager.service</span></span><br><span class="line"><span class="string">[Unit]</span></span><br><span class="line"><span class="string">Description=Kubernetes Controller Manager</span></span><br><span class="line"><span class="string">Documentation=https://github.com/kubernetes/kubernetes</span></span><br><span class="line"><span class="string">After=network.target etcd.service kube-apiserver.service</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Service]</span></span><br><span class="line"><span class="string">EnvironmentFile=/etc/kubernetes/kube-controller-manager.arg</span></span><br><span class="line"><span class="string">ExecStart=/usr/local/bin/kube-controller-manager \$KUBE_CONTROLLER_MANAGER_ARGS</span></span><br><span class="line"><span class="string">Restart=always</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Install]</span></span><br><span class="line"><span class="string">WantedBy=multi-user.target</span></span><br><span class="line"><span class="string">EOF</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 软链到系统服务目录</span></span><br><span class="line"><span class="built_in">ln</span> -s /etc/kubernetes/kube-controller-manager.service /usr/lib/systemd/system/kube-controller-manager.service</span><br></pre></td></tr></table></figure><h1 id="创建-kube-controller-manager-启动参数配置文件"><a href="#创建-kube-controller-manager-启动参数配置文件" class="headerlink" title="创建 kube-controller-manager 启动参数配置文件"></a>创建 kube-controller-manager 启动参数配置文件</h1><p>其中 –cluster-cidr 为 Pod 的IP 范围，需要和 kubelet、calico（或flannel）配置一致</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.109执行</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-controller-manager.arg</span></span><br><span class="line"><span class="string">KUBE_CONTROLLER_MANAGER_ARGS=&quot;--kubeconfig=/etc/kubernetes/admin.kubeconfig \</span></span><br><span class="line"><span class="string">--leader-elect=true \</span></span><br><span class="line"><span class="string">--bind-address=192.168.56.109 \</span></span><br><span class="line"><span class="string">--secure-port=10257 \</span></span><br><span class="line"><span class="string">--service-cluster-ip-range=169.169.0.0/16 \</span></span><br><span class="line"><span class="string">--allocate-node-cidrs=true \</span></span><br><span class="line"><span class="string">--cluster-cidr=20.20.0.0/16 \</span></span><br><span class="line"><span class="string">--root-ca-file=/etc/kubernetes/pki/ca.crt \</span></span><br><span class="line"><span class="string">--service-account-private-key-file=/etc/kubernetes/pki/apiserver_server.key&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.110执行</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-controller-manager.arg</span></span><br><span class="line"><span class="string">KUBE_CONTROLLER_MANAGER_ARGS=&quot;--kubeconfig=/etc/kubernetes/admin.kubeconfig \</span></span><br><span class="line"><span class="string">--leader-elect=true \</span></span><br><span class="line"><span class="string">--bind-address=192.168.56.110 \</span></span><br><span class="line"><span class="string">--secure-port=10257 \</span></span><br><span class="line"><span class="string">--service-cluster-ip-range=169.169.0.0/16 \</span></span><br><span class="line"><span class="string">--allocate-node-cidrs=true \</span></span><br><span class="line"><span class="string">--cluster-cidr=20.20.0.0/16 \</span></span><br><span class="line"><span class="string">--root-ca-file=/etc/kubernetes/pki/ca.crt \</span></span><br><span class="line"><span class="string">--service-account-private-key-file=/etc/kubernetes/pki/apiserver_server.key&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.111执行</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-controller-manager.arg</span></span><br><span class="line"><span class="string">KUBE_CONTROLLER_MANAGER_ARGS=&quot;--kubeconfig=/etc/kubernetes/admin.kubeconfig \</span></span><br><span class="line"><span class="string">--leader-elect=true \</span></span><br><span class="line"><span class="string">--bind-address=192.168.56.111 \</span></span><br><span class="line"><span class="string">--secure-port=10257 \</span></span><br><span class="line"><span class="string">--service-cluster-ip-range=169.169.0.0/16 \</span></span><br><span class="line"><span class="string">--allocate-node-cidrs=true \</span></span><br><span class="line"><span class="string">--cluster-cidr=20.20.0.0/16 \</span></span><br><span class="line"><span class="string">--root-ca-file=/etc/kubernetes/pki/ca.crt \</span></span><br><span class="line"><span class="string">--service-account-private-key-file=/etc/kubernetes/pki/apiserver_server.key&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><h1 id="所有虚拟机启动-kube-controller-manager-服务"><a href="#所有虚拟机启动-kube-controller-manager-服务" class="headerlink" title="所有虚拟机启动 kube-controller-manager 服务"></a>所有虚拟机启动 kube-controller-manager 服务</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl start kube-controller-manager &amp;&amp; systemctl <span class="built_in">enable</span> kube-controller-manager</span><br></pre></td></tr></table></figure><h1 id="所有虚拟机创建-kube-scheduler-systemd-服务"><a href="#所有虚拟机创建-kube-scheduler-systemd-服务" class="headerlink" title="所有虚拟机创建 kube-scheduler systemd 服务"></a>所有虚拟机创建 kube-scheduler systemd 服务</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建 kube-scheduler systemd 服务文件</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-scheduler.service</span></span><br><span class="line"><span class="string">[Unit]</span></span><br><span class="line"><span class="string">Description=Kubernetes Scheduler</span></span><br><span class="line"><span class="string">Documentation=https://github.com/kubernetes/kubernetes</span></span><br><span class="line"><span class="string">After=network.target etcd.service kube-apiserver.service</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Service]</span></span><br><span class="line"><span class="string">EnvironmentFile=/etc/kubernetes/kube-scheduler.arg</span></span><br><span class="line"><span class="string">ExecStart=/usr/local/bin/kube-scheduler \$KUBE_SCHEDULER_ARGS</span></span><br><span class="line"><span class="string">Restart=always</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Install]</span></span><br><span class="line"><span class="string">WantedBy=multi-user.target</span></span><br><span class="line"><span class="string">EOF</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 软链到系统服务目录</span></span><br><span class="line"><span class="built_in">ln</span> -s /etc/kubernetes/kube-scheduler.service /usr/lib/systemd/system/kube-scheduler.service</span><br></pre></td></tr></table></figure><h1 id="创建-kube-scheduler-启动参数配置文件"><a href="#创建-kube-scheduler-启动参数配置文件" class="headerlink" title="创建 kube-scheduler 启动参数配置文件"></a>创建 kube-scheduler 启动参数配置文件</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.109执行</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-scheduler.arg</span></span><br><span class="line"><span class="string">KUBE_SCHEDULER_ARGS=&quot;--kubeconfig=/etc/kubernetes/admin.kubeconfig \</span></span><br><span class="line"><span class="string">--leader-elect=true \</span></span><br><span class="line"><span class="string">--bind-address=192.168.56.109 \</span></span><br><span class="line"><span class="string">--secure-port=10259&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.110执行</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-scheduler.arg</span></span><br><span class="line"><span class="string">KUBE_SCHEDULER_ARGS=&quot;--kubeconfig=/etc/kubernetes/admin.kubeconfig \</span></span><br><span class="line"><span class="string">--leader-elect=true \</span></span><br><span class="line"><span class="string">--bind-address=192.168.56.110 \</span></span><br><span class="line"><span class="string">--secure-port=10259&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.111执行</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-scheduler.arg</span></span><br><span class="line"><span class="string">KUBE_SCHEDULER_ARGS=&quot;--kubeconfig=/etc/kubernetes/admin.kubeconfig \</span></span><br><span class="line"><span class="string">--leader-elect=true \</span></span><br><span class="line"><span class="string">--bind-address=192.168.56.111 \</span></span><br><span class="line"><span class="string">--secure-port=10259&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><h1 id="所有虚拟机启动-kube-scheduler-服务"><a href="#所有虚拟机启动-kube-scheduler-服务" class="headerlink" title="所有虚拟机启动 kube-scheduler 服务"></a>所有虚拟机启动 kube-scheduler 服务</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl start kube-scheduler &amp;&amp; systemctl <span class="built_in">enable</span> kube-scheduler</span><br></pre></td></tr></table></figure><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;所有虚拟机移动可执行文件&quot;&gt;&lt;a href=&quot;#所有虚拟机移动可执行文件&quot; class=&quot;headerlink&quot; title=&quot;所有虚拟机移动可执行文件&quot;&gt;&lt;/a&gt;所有虚拟机移动可执行文件&lt;/h1&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;t</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Cookbook" scheme="https://gaussli.com/categories/tech/cookbook/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/cookbook/kubernetes/"/>
    
    
    <category term="Cookbook" scheme="https://gaussli.com/tags/cookbook/"/>
    
    <category term="Kubernets" scheme="https://gaussli.com/tags/kubernets/"/>
    
    <category term="k8s" scheme="https://gaussli.com/tags/k8s/"/>
    
    <category term="部署" scheme="https://gaussli.com/tags/%E9%83%A8%E7%BD%B2/"/>
    
    <category term="高可用" scheme="https://gaussli.com/tags/%E9%AB%98%E5%8F%AF%E7%94%A8/"/>
    
    <category term="kube-controller-manager" scheme="https://gaussli.com/tags/kube-controller-manager/"/>
    
    <category term="kube-scheduler" scheme="https://gaussli.com/tags/kube-scheduler/"/>
    
  </entry>
  
  <entry>
    <title>COOKBOOK-Kubernetes二进制高可用部署-Apiserver高可用</title>
    <link href="https://gaussli.com/2025/05/07/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-apiserver%E9%AB%98%E5%8F%AF%E7%94%A8/"/>
    <id>https://gaussli.com/2025/05/07/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-apiserver%E9%AB%98%E5%8F%AF%E7%94%A8/</id>
    <published>2025-05-07T11:43:28.000Z</published>
    <updated>2025-05-09T17:51:51.656Z</updated>
    
    <content type="html"><![CDATA[<h1 id="所有虚拟机下载-kubernetes-二进制文件并解压"><a href="#所有虚拟机下载-kubernetes-二进制文件并解压" class="headerlink" title="所有虚拟机下载 kubernetes 二进制文件并解压"></a>所有虚拟机下载 kubernetes 二进制文件并解压</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载kubernetes 二进制文件</span></span><br><span class="line">wget -P /usr/local/src https://dl.k8s.io/v1.31.2/kubernetes-server-linux-amd64.tar.gz</span><br><span class="line"></span><br><span class="line"><span class="comment"># 解压</span></span><br><span class="line">tar -C /usr/local/src -zxvf kubernetes-server-linux-amd64.tar.gz</span><br><span class="line"></span><br><span class="line"><span class="comment"># 移动可执行文件到bin目录</span></span><br><span class="line"><span class="built_in">mv</span> /usr/local/src/kubernetes/server/bin/kube-apiserver /usr/local/bin/</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置可执行文件的属性</span></span><br><span class="line"><span class="built_in">chmod</span> 755 /usr/local/bin/kube-apiserver</span><br></pre></td></tr></table></figure><h1 id="所有虚拟机创建-apiserver-systemd-服务"><a href="#所有虚拟机创建-apiserver-systemd-服务" class="headerlink" title="所有虚拟机创建 apiserver systemd 服务"></a>所有虚拟机创建 apiserver systemd 服务</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建 apiserver systemd 服务文件</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-apiserver.service</span></span><br><span class="line"><span class="string">[Unit]</span></span><br><span class="line"><span class="string">Description=Kubernetes API Server</span></span><br><span class="line"><span class="string">Documentation=https://github.com/kubernetes/kubernetes</span></span><br><span class="line"><span class="string">After=network.target etcd.service</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Service]</span></span><br><span class="line"><span class="string">EnvironmentFile=/etc/kubernetes/kube-apiserver.arg</span></span><br><span class="line"><span class="string">ExecStart=/usr/local/bin/kube-apiserver \$KUBE_API_ARGS</span></span><br><span class="line"><span class="string">Restart=always</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Install]</span></span><br><span class="line"><span class="string">WantedBy=multi-user.target</span></span><br><span class="line"><span class="string">EOF</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 软链到系统服务目录</span></span><br><span class="line"><span class="built_in">ln</span> -s /etc/kubernetes/kube-apiserver.service /usr/lib/systemd/system/kube-apiserver.service</span><br></pre></td></tr></table></figure><h1 id="创建-apiserver-启动参数配置文件"><a href="#创建-apiserver-启动参数配置文件" class="headerlink" title="创建 apiserver 启动参数配置文件"></a>创建 apiserver 启动参数配置文件</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.109执行</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-apiserver.arg</span></span><br><span class="line"><span class="string">KUBE_API_ARGS=&quot;--advertise-address=192.168.56.109 \</span></span><br><span class="line"><span class="string">--external-hostname=192.168.56.109 \</span></span><br><span class="line"><span class="string">--enable-aggregator-routing=true \</span></span><br><span class="line"><span class="string">--etcd-cafile=/etc/etcd/pki/ca.crt \</span></span><br><span class="line"><span class="string">--etcd-certfile=/etc/etcd/pki/etcd_client.crt \</span></span><br><span class="line"><span class="string">--etcd-keyfile=/etc/etcd/pki/etcd_client.key \</span></span><br><span class="line"><span class="string">--etcd-servers=https://192.168.56.109:2379,https://192.168.56.110:2379,https://192.168.56.111:2379 \</span></span><br><span class="line"><span class="string">--bind-address=192.168.56.109 \</span></span><br><span class="line"><span class="string">--secure-port=6443 \</span></span><br><span class="line"><span class="string">--tls-cert-file=/etc/kubernetes/pki/apiserver_server.crt \</span></span><br><span class="line"><span class="string">--tls-private-key-file=/etc/kubernetes/pki/apiserver_server.key \</span></span><br><span class="line"><span class="string">--client-ca-file=/etc/kubernetes/pki/ca.crt \</span></span><br><span class="line"><span class="string">--api-audiences=https://kubernetes.default.svc \</span></span><br><span class="line"><span class="string">--service-account-issuer=https://kubernetes.default.svc.cluster.local \</span></span><br><span class="line"><span class="string">--service-account-key-file=/etc/kubernetes/pki/apiserver_server.crt \</span></span><br><span class="line"><span class="string">--service-account-signing-key-file=/etc/kubernetes/pki/apiserver_server.key \</span></span><br><span class="line"><span class="string">--allow-privileged=true \</span></span><br><span class="line"><span class="string">--service-cluster-ip-range=169.169.0.0/16 \</span></span><br><span class="line"><span class="string">--service-node-port-range=30000-32767&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.110执行</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-apiserver.arg</span></span><br><span class="line"><span class="string">KUBE_API_ARGS=&quot;--advertise-address=192.168.56.110 \</span></span><br><span class="line"><span class="string">--external-hostname=192.168.56.110 \</span></span><br><span class="line"><span class="string">--enable-aggregator-routing=true \</span></span><br><span class="line"><span class="string">--etcd-cafile=/etc/etcd/pki/ca.crt \</span></span><br><span class="line"><span class="string">--etcd-certfile=/etc/etcd/pki/etcd_client.crt \</span></span><br><span class="line"><span class="string">--etcd-keyfile=/etc/etcd/pki/etcd_client.key \</span></span><br><span class="line"><span class="string">--etcd-servers=https://192.168.56.109:2379,https://192.168.56.110:2379,https://192.168.56.111:2379 \</span></span><br><span class="line"><span class="string">--bind-address=192.168.56.110 \</span></span><br><span class="line"><span class="string">--secure-port=6443 \</span></span><br><span class="line"><span class="string">--tls-cert-file=/etc/kubernetes/pki/apiserver_server.crt \</span></span><br><span class="line"><span class="string">--tls-private-key-file=/etc/kubernetes/pki/apiserver_server.key \</span></span><br><span class="line"><span class="string">--client-ca-file=/etc/kubernetes/pki/ca.crt \</span></span><br><span class="line"><span class="string">--api-audiences=https://kubernetes.default.svc \</span></span><br><span class="line"><span class="string">--service-account-issuer=https://kubernetes.default.svc.cluster.local \</span></span><br><span class="line"><span class="string">--service-account-key-file=/etc/kubernetes/pki/apiserver_server.crt \</span></span><br><span class="line"><span class="string">--service-account-signing-key-file=/etc/kubernetes/pki/apiserver_server.key \</span></span><br><span class="line"><span class="string">--allow-privileged=true \</span></span><br><span class="line"><span class="string">--service-cluster-ip-range=169.169.0.0/16 \</span></span><br><span class="line"><span class="string">--service-node-port-range=30000-32767&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.111执行</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/kube-apiserver.arg</span></span><br><span class="line"><span class="string">KUBE_API_ARGS=&quot;--advertise-address=192.168.56.111 \</span></span><br><span class="line"><span class="string">--external-hostname=192.168.56.111 \</span></span><br><span class="line"><span class="string">--enable-aggregator-routing=true \</span></span><br><span class="line"><span class="string">--etcd-cafile=/etc/etcd/pki/ca.crt \</span></span><br><span class="line"><span class="string">--etcd-certfile=/etc/etcd/pki/etcd_client.crt \</span></span><br><span class="line"><span class="string">--etcd-keyfile=/etc/etcd/pki/etcd_client.key \</span></span><br><span class="line"><span class="string">--etcd-servers=https://192.168.56.109:2379,https://192.168.56.110:2379,https://192.168.56.111:2379 \</span></span><br><span class="line"><span class="string">--bind-address=192.168.56.111 \</span></span><br><span class="line"><span class="string">--secure-port=6443 \</span></span><br><span class="line"><span class="string">--tls-cert-file=/etc/kubernetes/pki/apiserver_server.crt \</span></span><br><span class="line"><span class="string">--tls-private-key-file=/etc/kubernetes/pki/apiserver_server.key \</span></span><br><span class="line"><span class="string">--client-ca-file=/etc/kubernetes/pki/ca.crt \</span></span><br><span class="line"><span class="string">--api-audiences=https://kubernetes.default.svc \</span></span><br><span class="line"><span class="string">--service-account-issuer=https://kubernetes.default.svc.cluster.local \</span></span><br><span class="line"><span class="string">--service-account-key-file=/etc/kubernetes/pki/apiserver_server.crt \</span></span><br><span class="line"><span class="string">--service-account-signing-key-file=/etc/kubernetes/pki/apiserver_server.key \</span></span><br><span class="line"><span class="string">--allow-privileged=true \</span></span><br><span class="line"><span class="string">--service-cluster-ip-range=169.169.0.0/16 \</span></span><br><span class="line"><span class="string">--service-node-port-range=30000-32767&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><h1 id="所有虚拟机启动-kube-apiserver-服务"><a href="#所有虚拟机启动-kube-apiserver-服务" class="headerlink" title="所有虚拟机启动 kube-apiserver 服务"></a>所有虚拟机启动 kube-apiserver 服务</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl start kube-apiserver &amp;&amp; systemctl <span class="built_in">enable</span> kube-apiserver</span><br></pre></td></tr></table></figure><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;所有虚拟机下载-kubernetes-二进制文件并解压&quot;&gt;&lt;a href=&quot;#所有虚拟机下载-kubernetes-二进制文件并解压&quot; class=&quot;headerlink&quot; title=&quot;所有虚拟机下载 kubernetes 二进制文件并解压&quot;&gt;&lt;/a&gt;所有虚拟机</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Cookbook" scheme="https://gaussli.com/categories/tech/cookbook/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/cookbook/kubernetes/"/>
    
    
    <category term="Cookbook" scheme="https://gaussli.com/tags/cookbook/"/>
    
    <category term="Kubernets" scheme="https://gaussli.com/tags/kubernets/"/>
    
    <category term="k8s" scheme="https://gaussli.com/tags/k8s/"/>
    
    <category term="部署" scheme="https://gaussli.com/tags/%E9%83%A8%E7%BD%B2/"/>
    
    <category term="高可用" scheme="https://gaussli.com/tags/%E9%AB%98%E5%8F%AF%E7%94%A8/"/>
    
    <category term="apiserver" scheme="https://gaussli.com/tags/apiserver/"/>
    
  </entry>
  
  <entry>
    <title>COOKBOOK-Kubernetes二进制高可用部署-Etcd高可用</title>
    <link href="https://gaussli.com/2025/05/07/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-etcd%E9%AB%98%E5%8F%AF%E7%94%A8/"/>
    <id>https://gaussli.com/2025/05/07/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-etcd%E9%AB%98%E5%8F%AF%E7%94%A8/</id>
    <published>2025-05-07T10:13:17.000Z</published>
    <updated>2025-05-08T13:27:32.153Z</updated>
    
    <content type="html"><![CDATA[<h1 id="所有虚拟机创建-etcd-目录"><a href="#所有虚拟机创建-etcd-目录" class="headerlink" title="所有虚拟机创建 etcd 目录"></a>所有虚拟机创建 etcd 目录</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> -p /etc/etcd/data</span><br></pre></td></tr></table></figure><h1 id="所有虚拟机下载-etcd-并解压"><a href="#所有虚拟机下载-etcd-并解压" class="headerlink" title="所有虚拟机下载 etcd 并解压"></a>所有虚拟机下载 etcd 并解压</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载etcd</span></span><br><span class="line">wget -P /usr/local/src https://github.com/etcd-io/etcd/releases/download/v3.5.14/etcd-v3.5.14-linux-amd64.tar.gz</span><br><span class="line"></span><br><span class="line"><span class="comment"># 解压</span></span><br><span class="line">tar -C /usr/local/src -zxvf etcd-v3.5.14-linux-amd64.tar.gz</span><br><span class="line"></span><br><span class="line"><span class="comment"># 移动可执行文件到bin目录</span></span><br><span class="line"><span class="built_in">mv</span> /usr/local/src/etcd-v3.5.14-linux-amd64/etcd /usr/local/bin/</span><br><span class="line"><span class="built_in">mv</span> /usr/local/src/etcd-v3.5.14-linux-amd64/etcdctl /usr/local/bin/</span><br><span class="line"><span class="built_in">mv</span> /usr/local/src/etcd-v3.5.14-linux-amd64/etcdutl /usr/local/bin/</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置可执行文件的属性</span></span><br><span class="line"><span class="built_in">chmod</span> 755 /usr/local/bin/etcd</span><br><span class="line"><span class="built_in">chmod</span> 755 /usr/local/bin/etcdctl</span><br><span class="line"><span class="built_in">chmod</span> 755 /usr/local/bin/etcdutl</span><br></pre></td></tr></table></figure><h1 id="所有虚拟机创建-etcd-systemd-服务"><a href="#所有虚拟机创建-etcd-systemd-服务" class="headerlink" title="所有虚拟机创建 etcd systemd 服务"></a>所有虚拟机创建 etcd systemd 服务</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建 etcd systemd 服务文件</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/etcd/etcd.service</span></span><br><span class="line"><span class="string">[Unit]</span></span><br><span class="line"><span class="string">Description=etcd key-value store</span></span><br><span class="line"><span class="string">Documentation=https://github.com/etcd-io/etcd</span></span><br><span class="line"><span class="string">After=network.target</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Service]</span></span><br><span class="line"><span class="string">EnvironmentFile=/etc/etcd/etcd.env</span></span><br><span class="line"><span class="string">ExecStart=/usr/local/bin/etcd</span></span><br><span class="line"><span class="string">Restart=always</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Install]</span></span><br><span class="line"><span class="string">WantedBy=multi-user.target</span></span><br><span class="line"><span class="string">EOF</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 软链到系统服务目录</span></span><br><span class="line"><span class="built_in">ln</span> -s /etc/etcd/etcd.service /usr/lib/systemd/system/etcd.service</span><br></pre></td></tr></table></figure><h1 id="创建-etcd-环境变量配置文件"><a href="#创建-etcd-环境变量配置文件" class="headerlink" title="创建 etcd 环境变量配置文件"></a>创建 etcd 环境变量配置文件</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.109执行</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/etcd/etcd.env</span></span><br><span class="line"><span class="string">ETCD_NAME=etcd1</span></span><br><span class="line"><span class="string">ETCD_DATA_DIR=/etc/etcd/data</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">ETCD_CLIENT_CERT_AUTH=true</span></span><br><span class="line"><span class="string">ETCD_TRUSTED_CA_FILE=/etc/etcd/pki/ca.crt</span></span><br><span class="line"><span class="string">ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt</span></span><br><span class="line"><span class="string">ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key</span></span><br><span class="line"><span class="string">ETCD_LISTEN_CLIENT_URLS=https://192.168.56.109:2379</span></span><br><span class="line"><span class="string">ETCD_ADVERTISE_CLIENT_URLS=https://192.168.56.109:2379</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">ETCD_PEER_CLIENT_CERT_AUTH=true</span></span><br><span class="line"><span class="string">ETCD_PEER_TRUSTED_CA_FILE=/etc/etcd/pki/ca.crt</span></span><br><span class="line"><span class="string">ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_peer.crt</span></span><br><span class="line"><span class="string">ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_peer.key</span></span><br><span class="line"><span class="string">ETCD_LISTEN_PEER_URLS=https://192.168.56.109:2380</span></span><br><span class="line"><span class="string">ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.56.109:2380</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">ETCD_INITIAL_CLUSTER=&quot;etcd1=https://192.168.56.109:2380,etcd2=https://192.168.56.110:2380,etcd3=https://192.168.56.111:2380&quot;</span></span><br><span class="line"><span class="string">ETCD_INITIAL_CLUSTER_STATE=new</span></span><br><span class="line"><span class="string">ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.110执行</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/etcd/etcd.env</span></span><br><span class="line"><span class="string">ETCD_NAME=etcd2</span></span><br><span class="line"><span class="string">ETCD_DATA_DIR=/etc/etcd/data</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">ETCD_CLIENT_CERT_AUTH=true</span></span><br><span class="line"><span class="string">ETCD_TRUSTED_CA_FILE=/etc/etcd/pki/ca.crt</span></span><br><span class="line"><span class="string">ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt</span></span><br><span class="line"><span class="string">ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key</span></span><br><span class="line"><span class="string">ETCD_LISTEN_CLIENT_URLS=https://192.168.56.110:2379</span></span><br><span class="line"><span class="string">ETCD_ADVERTISE_CLIENT_URLS=https://192.168.56.110:2379</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">ETCD_PEER_CLIENT_CERT_AUTH=true</span></span><br><span class="line"><span class="string">ETCD_PEER_TRUSTED_CA_FILE=/etc/etcd/pki/ca.crt</span></span><br><span class="line"><span class="string">ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_peer.crt</span></span><br><span class="line"><span class="string">ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_peer.key</span></span><br><span class="line"><span class="string">ETCD_LISTEN_PEER_URLS=https://192.168.56.110:2380</span></span><br><span class="line"><span class="string">ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.56.110:2380</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">ETCD_INITIAL_CLUSTER=&quot;etcd1=https://192.168.56.109:2380,etcd2=https://192.168.56.110:2380,etcd3=https://192.168.56.111:2380&quot;</span></span><br><span class="line"><span class="string">ETCD_INITIAL_CLUSTER_STATE=new</span></span><br><span class="line"><span class="string">ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.111执行</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/etcd/etcd.env</span></span><br><span class="line"><span class="string">ETCD_NAME=etcd3</span></span><br><span class="line"><span class="string">ETCD_DATA_DIR=/etc/etcd/data</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">ETCD_CLIENT_CERT_AUTH=true</span></span><br><span class="line"><span class="string">ETCD_TRUSTED_CA_FILE=/etc/etcd/pki/ca.crt</span></span><br><span class="line"><span class="string">ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt</span></span><br><span class="line"><span class="string">ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key</span></span><br><span class="line"><span class="string">ETCD_LISTEN_CLIENT_URLS=https://192.168.56.111:2379</span></span><br><span class="line"><span class="string">ETCD_ADVERTISE_CLIENT_URLS=https://192.168.56.111:2379</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">ETCD_PEER_CLIENT_CERT_AUTH=true</span></span><br><span class="line"><span class="string">ETCD_PEER_TRUSTED_CA_FILE=/etc/etcd/pki/ca.crt</span></span><br><span class="line"><span class="string">ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_peer.crt</span></span><br><span class="line"><span class="string">ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_peer.key</span></span><br><span class="line"><span class="string">ETCD_LISTEN_PEER_URLS=https://192.168.56.111:2380</span></span><br><span class="line"><span class="string">ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.56.111:2380</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">ETCD_INITIAL_CLUSTER=&quot;etcd1=https://192.168.56.109:2380,etcd2=https://192.168.56.110:2380,etcd3=https://192.168.56.111:2380&quot;</span></span><br><span class="line"><span class="string">ETCD_INITIAL_CLUSTER_STATE=new</span></span><br><span class="line"><span class="string">ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><h1 id="所有虚拟机启动-etcd-服务"><a href="#所有虚拟机启动-etcd-服务" class="headerlink" title="所有虚拟机启动 etcd 服务"></a>所有虚拟机启动 etcd 服务</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl start etcd &amp;&amp; systemctl <span class="built_in">enable</span> etcd</span><br></pre></td></tr></table></figure><h1 id="验证-etcd-服务"><a href="#验证-etcd-服务" class="headerlink" title="验证 etcd 服务"></a>验证 etcd 服务</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">etcdctl --cacert=/etc/etcd/pki/ca.crt --cert=/etc/etcd/pki/etcd_client.crt --key=/etc/etcd/pki/etcd_client.key --endpoints=https://192.168.56.109:2379,https://192.168.56.110:2379,https://192.168.56.111:2379 endpoint health</span><br><span class="line"></span><br><span class="line"><span class="comment"># 结果如下：</span></span><br><span class="line"><span class="comment"># https://192.168.56.109:2379 is healthy: successfully committed proposal: took = 36.035318ms</span></span><br><span class="line"><span class="comment"># https://192.168.56.110:2379 is healthy: successfully committed proposal: took = 38.578044ms</span></span><br><span class="line"><span class="comment"># https://192.168.56.111:2379 is healthy: successfully committed proposal: took = 38.20696ms</span></span><br></pre></td></tr></table></figure><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;所有虚拟机创建-etcd-目录&quot;&gt;&lt;a href=&quot;#所有虚拟机创建-etcd-目录&quot; class=&quot;headerlink&quot; title=&quot;所有虚拟机创建 etcd 目录&quot;&gt;&lt;/a&gt;所有虚拟机创建 etcd 目录&lt;/h1&gt;&lt;figure class=&quot;highli</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Cookbook" scheme="https://gaussli.com/categories/tech/cookbook/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/cookbook/kubernetes/"/>
    
    
    <category term="Cookbook" scheme="https://gaussli.com/tags/cookbook/"/>
    
    <category term="Kubernets" scheme="https://gaussli.com/tags/kubernets/"/>
    
    <category term="k8s" scheme="https://gaussli.com/tags/k8s/"/>
    
    <category term="部署" scheme="https://gaussli.com/tags/%E9%83%A8%E7%BD%B2/"/>
    
    <category term="高可用" scheme="https://gaussli.com/tags/%E9%AB%98%E5%8F%AF%E7%94%A8/"/>
    
    <category term="etcd" scheme="https://gaussli.com/tags/etcd/"/>
    
  </entry>
  
  <entry>
    <title>COOKBOOK-Kubernetes二进制高可用部署-证书</title>
    <link href="https://gaussli.com/2025/05/07/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-%E8%AF%81%E4%B9%A6/"/>
    <id>https://gaussli.com/2025/05/07/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-%E8%AF%81%E4%B9%A6/</id>
    <published>2025-05-07T09:09:49.000Z</published>
    <updated>2025-05-07T11:37:44.139Z</updated>
    
    <content type="html"><![CDATA[<h1 id="所有虚拟机创建目录"><a href="#所有虚拟机创建目录" class="headerlink" title="所有虚拟机创建目录"></a>所有虚拟机创建目录</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建 etcd pki 目录</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /etc/etcd/pki</span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建 kubernetes pki 目录</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /etc/kubernetes/pki</span><br></pre></td></tr></table></figure><h1 id="【etcd】CA根证书"><a href="#【etcd】CA根证书" class="headerlink" title="【etcd】CA根证书"></a>【etcd】CA根证书</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.109 执行</span></span><br><span class="line">openssl genrsa -out /etc/etcd/pki/ca.key 2048</span><br><span class="line">openssl req -x509 -new -nodes -key /etc/etcd/pki/ca.key -subj <span class="string">&quot;/CN=etcd-ca&quot;</span> -days 36500 -out /etc/etcd/pki/ca.crt</span><br></pre></td></tr></table></figure><h1 id="【etcd】x509-v3-配置文件"><a href="#【etcd】x509-v3-配置文件" class="headerlink" title="【etcd】x509 v3 配置文件"></a>【etcd】x509 v3 配置文件</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.109 执行</span></span><br><span class="line"><span class="comment"># x509 v3 配置文件</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/etcd/pki/etcd_ssl.cnf</span></span><br><span class="line"><span class="string">[ req ]</span></span><br><span class="line"><span class="string">req_extensions = v3_req</span></span><br><span class="line"><span class="string">distinguished_name = req_distinguished_name</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[ req_distinguished_name ]</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[ v3_req ]</span></span><br><span class="line"><span class="string">basicConstraints = CA:FALSE</span></span><br><span class="line"><span class="string">keyUsage = nonRepudiation, digitalSignature, keyEncipherment</span></span><br><span class="line"><span class="string">subjectAltName = @alt_names</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[ alt_names ]</span></span><br><span class="line"><span class="string">IP.1 = 192.168.56.109</span></span><br><span class="line"><span class="string">IP.2 = 192.168.56.110</span></span><br><span class="line"><span class="string">IP.3 = 192.168.56.111</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><h1 id="【etcd】服务端证书"><a href="#【etcd】服务端证书" class="headerlink" title="【etcd】服务端证书"></a>【etcd】服务端证书</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.109 执行</span></span><br><span class="line"><span class="comment"># server证书</span></span><br><span class="line">openssl genrsa -out /etc/etcd//pki/etcd_server.key 2048</span><br><span class="line">openssl req -new -key /etc/etcd/pki/etcd_server.key -config /etc/etcd/pki/etcd_ssl.cnf -subj <span class="string">&quot;/CN=etcd-server&quot;</span> -out /etc/etcd//pki/etcd_server.csr</span><br><span class="line">openssl x509 -req -<span class="keyword">in</span> /etc/etcd/pki/etcd_server.csr -CA /etc/etcd/pki/ca.crt -CAkey /etc/etcd/pki/ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile /etc/etcd/pki/etcd_ssl.cnf -out /etc/etcd/pki/etcd_server.crt</span><br><span class="line"><span class="comment"># peer证书</span></span><br><span class="line">openssl genrsa -out /etc/etcd//pki/etcd_peer.key 2048</span><br><span class="line">openssl req -new -key /etc/etcd/pki/etcd_peer.key -config /etc/etcd/pki/etcd_ssl.cnf -subj <span class="string">&quot;/CN=etcd-peer&quot;</span> -out /etc/etcd//pki/etcd_peer.csr</span><br><span class="line">openssl x509 -req -<span class="keyword">in</span> /etc/etcd/pki/etcd_peer.csr -CA /etc/etcd/pki/ca.crt -CAkey /etc/etcd/pki/ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile /etc/etcd/pki/etcd_ssl.cnf -out /etc/etcd/pki/etcd_peer.crt</span><br></pre></td></tr></table></figure><h1 id="【etcd】客户端证书"><a href="#【etcd】客户端证书" class="headerlink" title="【etcd】客户端证书"></a>【etcd】客户端证书</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.109 执行</span></span><br><span class="line"><span class="comment"># client证书</span></span><br><span class="line">openssl genrsa -out /etc/etcd//pki/etcd_client.key 2048</span><br><span class="line">openssl req -new -key /etc/etcd/pki/etcd_client.key -config /etc/etcd/pki/etcd_ssl.cnf -subj <span class="string">&quot;/CN=etcd-client&quot;</span> -out /etc/etcd//pki/etcd_client.csr</span><br><span class="line">openssl x509 -req -<span class="keyword">in</span> /etc/etcd/pki/etcd_client.csr -CA /etc/etcd/pki/ca.crt -CAkey /etc/etcd/pki/ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile /etc/etcd/pki/etcd_ssl.cnf -out /etc/etcd/pki/etcd_client.crt</span><br></pre></td></tr></table></figure><h1 id="【kubernetes】CA根证书"><a href="#【kubernetes】CA根证书" class="headerlink" title="【kubernetes】CA根证书"></a>【kubernetes】CA根证书</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.109 执行</span></span><br><span class="line">openssl genrsa -out /etc/kubernetes/pki/ca.key 2048</span><br><span class="line">openssl req -x509 -new -nodes -key /etc/kubernetes/pki/ca.key -subj <span class="string">&quot;/CN=kubernetes-ca&quot;</span> -days 36500 -out /etc/kubernetes/pki/ca.crt</span><br></pre></td></tr></table></figure><h1 id="【kubernetes】x509-v3-配置文件"><a href="#【kubernetes】x509-v3-配置文件" class="headerlink" title="【kubernetes】x509 v3 配置文件"></a>【kubernetes】x509 v3 配置文件</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.109 执行</span></span><br><span class="line"><span class="comment"># x509 v3 配置文件</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/kubernetes/pki/kubernetes_ssl.cnf</span></span><br><span class="line"><span class="string">[ req ]</span></span><br><span class="line"><span class="string">req_extensions = v3_req</span></span><br><span class="line"><span class="string">distinguished_name = req_distinguished_name</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[ req_distinguished_name ]</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[ v3_req ]</span></span><br><span class="line"><span class="string">basicConstraints = CA:FALSE</span></span><br><span class="line"><span class="string">keyUsage = nonRepudiation, digitalSignature, keyEncipherment</span></span><br><span class="line"><span class="string">subjectAltName = @alt_names</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[ alt_names ]</span></span><br><span class="line"><span class="string">DNS.1 = kubernetes</span></span><br><span class="line"><span class="string">DNS.2 = kubernetes.default</span></span><br><span class="line"><span class="string">DNS.3 = kubernetes.default.svc</span></span><br><span class="line"><span class="string">DNS.4 = kubernetes.default.svc.cluster.local</span></span><br><span class="line"><span class="string">DNS.5 = centos1</span></span><br><span class="line"><span class="string">DNS.6 = centos2</span></span><br><span class="line"><span class="string">DNS.7 = centos3</span></span><br><span class="line"><span class="string">IP.1 = 169.169.0.1</span></span><br><span class="line"><span class="string">IP.2 = 192.168.56.109</span></span><br><span class="line"><span class="string">IP.3 = 192.168.56.110</span></span><br><span class="line"><span class="string">IP.4 = 192.168.56.111</span></span><br><span class="line"><span class="string">IP.5 = 192.168.56.250</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><p>其中<code>169.169.0.1</code>为 kubernetes service 的 ClusterIP，用于 pod 内部直接访问 kubernetes。<code>192.168.56.250</code>为3个master对应的VIP，后续使用HAProxy和keepalive来实现VIP。</p><h1 id="【kubernetes】apiserver-服务端证书"><a href="#【kubernetes】apiserver-服务端证书" class="headerlink" title="【kubernetes】apiserver 服务端证书"></a>【kubernetes】apiserver 服务端证书</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.109 执行</span></span><br><span class="line"><span class="comment"># server证书</span></span><br><span class="line">openssl genrsa -out /etc/kubernetes/pki/apiserver_server.key 2048</span><br><span class="line">openssl req -new -key /etc/kubernetes/pki/apiserver_server.key -config /etc/kubernetes/pki/kubernetes_ssl.cnf -subj <span class="string">&quot;/CN=apiserver-server&quot;</span> -out /etc/kubernetes/pki/apiserver_server.csr</span><br><span class="line">openssl x509 -req -<span class="keyword">in</span> /etc/kubernetes/pki/apiserver_server.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile /etc/kubernetes/pki/kubernetes_ssl.cnf -out /etc/kubernetes/pki/apiserver_server.crt</span><br></pre></td></tr></table></figure><h1 id="【kubernetes】apiserver-客户端证书"><a href="#【kubernetes】apiserver-客户端证书" class="headerlink" title="【kubernetes】apiserver 客户端证书"></a>【kubernetes】apiserver 客户端证书</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.109 执行</span></span><br><span class="line"><span class="comment"># client证书</span></span><br><span class="line">openssl genrsa -out /etc/kubernetes/pki/apiserver_client.key 2048</span><br><span class="line">openssl req -new -key /etc/kubernetes/pki/apiserver_client.key -config /etc/kubernetes/pki/kubernetes_ssl.cnf -subj <span class="string">&quot;/CN=admin&quot;</span> -out /etc/kubernetes/pki/apiserver_client.csr</span><br><span class="line">openssl x509 -req -<span class="keyword">in</span> /etc/kubernetes/pki/apiserver_client.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile /etc/kubernetes/pki/kubernetes_ssl.cnf -out /etc/kubernetes/pki/apiserver_client.crt</span><br></pre></td></tr></table></figure><p>此客户端证书供kube-controller-manager、kube-scheduler、kubelet、kube-proxy、kubectl作为客户端连接kube-apiserver服务使用。CN 中的<code>admin</code>作为连接kube-apiserver的客户端用户名称。</p><h1 id="3台虚拟机同步证书文件"><a href="#3台虚拟机同步证书文件" class="headerlink" title="3台虚拟机同步证书文件"></a>3台虚拟机同步证书文件</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 192.168.56.109 执行</span></span><br><span class="line">scp /etc/etcd/pki/* root@192.168.56.110:/etc/etcd/pki/</span><br><span class="line">scp /etc/kubernetes/pki/* root@192.168.56.110:/etc/kubernetes/pki/</span><br><span class="line">scp /etc/etcd/pki/* root@192.168.56.111:/etc/etcd/pki/</span><br><span class="line">scp /etc/kubernetes/pki/* root@192.168.56.111:/etc/kubernetes/pki/</span><br></pre></td></tr></table></figure><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;所有虚拟机创建目录&quot;&gt;&lt;a href=&quot;#所有虚拟机创建目录&quot; class=&quot;headerlink&quot; title=&quot;所有虚拟机创建目录&quot;&gt;&lt;/a&gt;所有虚拟机创建目录&lt;/h1&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Cookbook" scheme="https://gaussli.com/categories/tech/cookbook/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/cookbook/kubernetes/"/>
    
    
    <category term="Cookbook" scheme="https://gaussli.com/tags/cookbook/"/>
    
    <category term="Kubernets" scheme="https://gaussli.com/tags/kubernets/"/>
    
    <category term="k8s" scheme="https://gaussli.com/tags/k8s/"/>
    
    <category term="部署" scheme="https://gaussli.com/tags/%E9%83%A8%E7%BD%B2/"/>
    
    <category term="高可用" scheme="https://gaussli.com/tags/%E9%AB%98%E5%8F%AF%E7%94%A8/"/>
    
    <category term="证书" scheme="https://gaussli.com/tags/%E8%AF%81%E4%B9%A6/"/>
    
    <category term="CA" scheme="https://gaussli.com/tags/ca/"/>
    
  </entry>
  
  <entry>
    <title>COOKBOOK-Kubernetes二进制高可用部署-准备</title>
    <link href="https://gaussli.com/2025/05/07/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-%E5%87%86%E5%A4%87/"/>
    <id>https://gaussli.com/2025/05/07/cookbook-kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2-%E5%87%86%E5%A4%87/</id>
    <published>2025-05-07T08:37:08.000Z</published>
    <updated>2025-05-07T11:37:00.418Z</updated>
    
    <content type="html"><![CDATA[<h1 id="版本说明"><a href="#版本说明" class="headerlink" title="版本说明"></a>版本说明</h1><ul><li>kubernetes：1.31.2</li><li>containerd：1.7.7</li><li>etcd：3.5.14</li><li>nerdctl：1.7.7</li></ul><h1 id="虚拟机信息"><a href="#虚拟机信息" class="headerlink" title="虚拟机信息"></a>虚拟机信息</h1><ul><li>IP<ul><li>192.168.56.109，hostname：centos1</li><li>192.168.56.110，hostname：centos2</li><li>192.168.56.111，hostname：centos3</li></ul></li><li>操作系统：CentOS7</li><li>内核版本：3.10.0</li></ul><h1 id="系统准备"><a href="#系统准备" class="headerlink" title="系统准备"></a>系统准备</h1><h2 id="所有虚拟机禁用swap虚拟内存"><a href="#所有虚拟机禁用swap虚拟内存" class="headerlink" title="所有虚拟机禁用swap虚拟内存"></a>所有虚拟机禁用swap虚拟内存</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看默认是否开启swap虚拟内存，swap端不为0则说明开启</span></span><br><span class="line">free -h</span><br><span class="line"><span class="comment"># 临时禁用swap</span></span><br><span class="line">swapoff -a</span><br><span class="line"><span class="comment"># 永久禁用swap，需重启服务生效</span></span><br><span class="line">sed -i <span class="string">&#x27;s/.*swap.*/#&amp;/&#x27;</span> /etc/fstab</span><br><span class="line"><span class="comment"># 再次查看swap是否已关闭</span></span><br><span class="line">free -h</span><br></pre></td></tr></table></figure><h2 id="所有虚拟机禁用SELinux"><a href="#所有虚拟机禁用SELinux" class="headerlink" title="所有虚拟机禁用SELinux"></a>所有虚拟机禁用SELinux</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看默认是否已关闭</span></span><br><span class="line">getenforce</span><br><span class="line"><span class="comment"># 临时禁用</span></span><br><span class="line">setenforce 0</span><br><span class="line"><span class="comment"># 永久禁用，需重启服务器生效</span></span><br><span class="line">sed -i <span class="string">&quot;s/^SELINUX=.*/SELINUX=disabled/g&quot;</span> /etc/selinux/config</span><br><span class="line"><span class="comment"># 再次查看是否已关闭</span></span><br><span class="line">getenforce</span><br></pre></td></tr></table></figure><h2 id="所有虚拟机关闭防火墙"><a href="#所有虚拟机关闭防火墙" class="headerlink" title="所有虚拟机关闭防火墙"></a>所有虚拟机关闭防火墙</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 所有主机执行</span></span><br><span class="line">systemctl stop firewalld</span><br><span class="line">systemctl <span class="built_in">disable</span> firewalld</span><br></pre></td></tr></table></figure><h2 id="所有虚拟机开启ipv4转发内核能力"><a href="#所有虚拟机开启ipv4转发内核能力" class="headerlink" title="所有虚拟机开启ipv4转发内核能力"></a>所有虚拟机开启ipv4转发内核能力</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建k8s特有的内核能力配置文件</span></span><br><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt; /etc/sysctl.d/k8s-sysctl.conf</span></span><br><span class="line"><span class="string">net.ipv4.ip_forward = 1</span></span><br><span class="line"><span class="string">EOF</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 开启内核能力</span></span><br><span class="line">sysctl -p /etc/sysctl.d/k8s-sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核能力开启情况</span></span><br><span class="line">sysctl -a |grep ipv4.ip-forward</span><br></pre></td></tr></table></figure><h2 id="所有虚拟机配置host"><a href="#所有虚拟机配置host" class="headerlink" title="所有虚拟机配置host"></a>所有虚拟机配置host</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cat</span> &lt;&lt; <span class="string">EOF &gt;&gt; /etc/hosts</span></span><br><span class="line"><span class="string">192.168.56.109 centos1</span></span><br><span class="line"><span class="string">192.168.56.110 centos2</span></span><br><span class="line"><span class="string">192.168.56.111 centos3</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><h2 id="所有虚拟机安装必要工具"><a href="#所有虚拟机安装必要工具" class="headerlink" title="所有虚拟机安装必要工具"></a>所有虚拟机安装必要工具</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install -y net-tools tree wget</span><br></pre></td></tr></table></figure><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;版本说明&quot;&gt;&lt;a href=&quot;#版本说明&quot; class=&quot;headerlink&quot; title=&quot;版本说明&quot;&gt;&lt;/a&gt;版本说明&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;kubernetes：1.31.2&lt;/li&gt;
&lt;li&gt;containerd：1.7.7&lt;/li&gt;
&lt;li&gt;etc</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Cookbook" scheme="https://gaussli.com/categories/tech/cookbook/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/cookbook/kubernetes/"/>
    
    
    <category term="Cookbook" scheme="https://gaussli.com/tags/cookbook/"/>
    
    <category term="Kubernets" scheme="https://gaussli.com/tags/kubernets/"/>
    
    <category term="k8s" scheme="https://gaussli.com/tags/k8s/"/>
    
    <category term="部署" scheme="https://gaussli.com/tags/%E9%83%A8%E7%BD%B2/"/>
    
    <category term="高可用" scheme="https://gaussli.com/tags/%E9%AB%98%E5%8F%AF%E7%94%A8/"/>
    
  </entry>
  
  <entry>
    <title>【Kubernetes】pod的QoS</title>
    <link href="https://gaussli.com/2024/12/07/%E3%80%90kubernetes%E3%80%91pod%E7%9A%84qos/"/>
    <id>https://gaussli.com/2024/12/07/%E3%80%90kubernetes%E3%80%91pod%E7%9A%84qos/</id>
    <published>2024-12-07T04:02:01.000Z</published>
    <updated>2024-12-09T15:55:44.701Z</updated>
    
    <content type="html"><![CDATA[<p><code>QoS</code>，全称<code>Quality of Service</code>，中文称为<code>服务质量</code>。<code>Kubernetes</code>依赖这个来确认当节点不够资源时，哪些<code>pod</code>优先被驱逐。当节点出现资源压力而触发驱逐动作时，只有超过了配置的request的资源可能会被驱逐。</p><p><code>Qos</code>分为以下3种：</p><ul><li>Guaranteed<ul><li>这些<code>pod</code>最后被驱逐。</li><li>这些<code>pod</code>能通过cpu管理策略（CPU management policy）中的静态（static）策略来使用独占cpu。</li><li>标准：<ul><li><code>pod</code>所有容器必须有memory limit和request配置</li><li>所有容器的memory limit必须等于memory request</li><li>所有容器必须有cpu limit和request配置</li><li>所有容器的cpu limit必须等于cpu request</li></ul></li></ul></li><li>Burstable<ul><li>这些<code>pod</code>优先于<code>Guaranteed</code>被驱逐。</li><li>标准：<ul><li>不满足<code>Guaranteed</code>的标准</li><li>至少一个容器有memory或cpu的request或limit配置。</li></ul></li></ul></li><li>BestEffort<ul><li>这些<code>pod</code>最优先被驱逐。</li><li>无限制是有node节点的memory和cpu资源。</li><li>标准；<ul><li>不满足<code>Guaranteed</code>和<code>Burstable</code>的标准。</li><li>所有容器都没有配置memory和cpu的request和limit。</li></ul></li></ul></li></ul><p>Memory QoS使用cgroup v2的内存管理控制器（<code>memory controller</code>），<code>v1.22</code>版本中处于<code>Alpha</code>阶段并且默认为false不开启。这里使用cgroup v2的内存管理控制器的<code>memory.min</code>来处理容器中的memory request的值，使用<code>memory.high</code>来处理容器中的memory limit的值。</p><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;code&gt;QoS&lt;/code&gt;，全称&lt;code&gt;Quality of Service&lt;/code&gt;，中文称为&lt;code&gt;服务质量&lt;/code&gt;。&lt;code&gt;Kubernetes&lt;/code&gt;依赖这个来确认当节点不够资源时，哪些&lt;code&gt;pod&lt;/code&gt;优先被驱逐。当</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/kubernetes/"/>
    
    <category term="Pod" scheme="https://gaussli.com/categories/tech/kubernetes/pod/"/>
    
    
    <category term="Kubernetes" scheme="https://gaussli.com/tags/kubernetes/"/>
    
    <category term="Pod" scheme="https://gaussli.com/tags/pod/"/>
    
    <category term="QoS" scheme="https://gaussli.com/tags/qos/"/>
    
    <category term="服务质量" scheme="https://gaussli.com/tags/%E6%9C%8D%E5%8A%A1%E8%B4%A8%E9%87%8F/"/>
    
  </entry>
  
  <entry>
    <title>【Kubernetes】pod的优先级</title>
    <link href="https://gaussli.com/2024/12/06/%E3%80%90kubernetes%E3%80%91pod%E7%9A%84%E4%BC%98%E5%85%88%E7%BA%A7/"/>
    <id>https://gaussli.com/2024/12/06/%E3%80%90kubernetes%E3%80%91pod%E7%9A%84%E4%BC%98%E5%85%88%E7%BA%A7/</id>
    <published>2024-12-05T17:51:26.000Z</published>
    <updated>2024-12-06T15:40:31.500Z</updated>
    
    <content type="html"><![CDATA[<p>在<code>Kubernetes</code>中，支持给<code>pod</code>配置更高的优先级属性，使pod的重要程度提升，从而降低被驱逐的可能。特别地，可以用在一些<code>Kubernetes</code>关键组件的<code>pod</code>上，如<code>metrics-server</code>、<code>DNS</code>等服务，毕竟这些服务一旦出现异常，可能会导致<code>Kubernetes</code>部分功能不可用。</p><p>而配置<code>pod</code>的优先级，使用的是<code>PriorityClassName</code>资源，模版如下：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">apiVersion:</span> <span class="string">schedule.k8s.io/v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">PriorityClassName</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">xxx</span></span><br><span class="line"><span class="attr">value:</span> <span class="number">1000</span> <span class="comment"># 数值越大，表明优先级越高</span></span><br><span class="line"><span class="attr">globalDefault:</span> <span class="literal">false</span> <span class="comment"># 全局默认优先级，一个Kubernetes集群只能有一个为true的PriorityClassName</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">xxx</span></span><br></pre></td></tr></table></figure><p>在<code>pod</code>中指定<code>PriorityClassName</code>资源，从而配置<code>pod</code>的优先级属性</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">apiVersion:</span> <span class="string">v1</span></span><br><span class="line"><span class="attr">kind:</span> <span class="string">pod</span></span><br><span class="line"><span class="attr">metadata:</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">xxx</span></span><br><span class="line"><span class="attr">spec:</span></span><br><span class="line">  <span class="attr">containers:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">xxx</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">xxx</span></span><br><span class="line">  <span class="attr">priorityClassName:</span> <span class="string">xxx</span> <span class="comment"># 指定PriorityClassName的metadata.name，此属性缺省表明pod优先级为0（即最低优先级）</span></span><br></pre></td></tr></table></figure><p>默认地，<code>Kubernetes</code>初始会有两个PriorityClassName资源</p><ul><li><p>system-cluster-critical<br>用于系统关键的<code>pod</code>，<code>Kubernetes</code>系统运行依赖这些<code>pod</code>。</p></li><li><p>system-node-critical:<br>用于节点关键的<code>pod</code>，节点运行依赖这些<code>pod</code>，优先级会比<code>system-cluster-critical</code>更高，因为<code>Kubernetes</code>系统的正常运行首要条件是节点正常，即只有在节点关键<code>pod</code>正常运行，系统关键<code>pod</code>运行才有意义。</p></li></ul><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;在&lt;code&gt;Kubernetes&lt;/code&gt;中，支持给&lt;code&gt;pod&lt;/code&gt;配置更高的优先级属性，使pod的重要程度提升，从而降低被驱逐的可能。特别地，可以用在一些&lt;code&gt;Kubernetes&lt;/code&gt;关键组件的&lt;code&gt;pod&lt;/code&gt;上，如&lt;</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/kubernetes/"/>
    
    <category term="Pod" scheme="https://gaussli.com/categories/tech/kubernetes/pod/"/>
    
    
    <category term="Kubernetes" scheme="https://gaussli.com/tags/kubernetes/"/>
    
    <category term="关键pod" scheme="https://gaussli.com/tags/%E5%85%B3%E9%94%AEpod/"/>
    
    <category term="priorityClassName" scheme="https://gaussli.com/tags/priorityclassname/"/>
    
    <category term="优先级" scheme="https://gaussli.com/tags/%E4%BC%98%E5%85%88%E7%BA%A7/"/>
    
  </entry>
  
  <entry>
    <title>【Kubernetes】关闭节点</title>
    <link href="https://gaussli.com/2024/12/06/%E3%80%90kubernetes%E3%80%91%E5%85%B3%E9%97%AD%E8%8A%82%E7%82%B9/"/>
    <id>https://gaussli.com/2024/12/06/%E3%80%90kubernetes%E3%80%91%E5%85%B3%E9%97%AD%E8%8A%82%E7%82%B9/</id>
    <published>2024-12-05T17:23:27.000Z</published>
    <updated>2024-12-06T15:40:23.573Z</updated>
    
    <content type="html"><![CDATA[<p>在Kubernetes中，节点可以分为优雅关闭（<code>Graceful node shutdown</code>）及非优雅关闭（<code>Non-graceful node shutdown</code>）。优雅关闭可以理解为有计划的关闭节点；而非优雅关闭，一般就出现在断电或一些集群外在因素导致节点所在宿主机异常。</p><h1 id="优雅关闭（Graceful-node-shutdown）"><a href="#优雅关闭（Graceful-node-shutdown）" class="headerlink" title="优雅关闭（Graceful node shutdown）"></a>优雅关闭（Graceful node shutdown）</h1><p><code>kubelet</code>会去检测os系统的关机事件，并且终结节点上的所有<code>pod</code>。此外，节点也不再接收新的<code>pod</code>创建请求。</p><p>节点优雅关闭功能开始于<code>v1.21</code>版本的特性<code>GracefulNodeShutdown</code>，此特性默认为<code>true</code>。</p><p>一旦<code>kubelet</code>检测到os系统的关机事件，则会把节点状态改为<code>NotReady</code>，且<code>reason</code>配置为<code>node is shutting down</code>。此时，kube-scheduler发现这个节点状态，将不再调度<code>pod</code>到该节点。而且，<code>kubelet</code>会在<code>PodAdmission</code>阶段拒绝<code>pod</code>的相关请求，即使<code>pod</code>打上了<code>node.kubernetes.io/not-ready:NoSchedule</code>的容忍。接着<code>kubelet</code>会驱逐节点上的所有<code>pod</code>.</p><p>一般地，节点优雅关闭受限于以下2个配置参数，参数配置为<code>0</code>时，则不启动节点优雅关闭功能</p><ul><li><p>shutdownGracePeriod<br>控制优雅关闭节点的时间</p></li><li><p>shutdownGracePeriodCriticalPods<br>控制优雅关闭关键<code>pod</code>的时间，该时间要比<code>shutdownGracePeriod</code>小。这里，非关键<code>pod</code>会比关键<code>pod</code>更快驱逐。</p><blockquote><a href="/2024/12/06/%E3%80%90kubernetes%E3%80%91pod%E7%9A%84%E4%BC%98%E5%85%88%E7%BA%A7/" title="【Kubernetes】pod的优先级">如何定义关键pod</a></blockquote></li></ul><p>此外，还有一种更细粒度控制节点优雅关闭的能力，基于<code>kubelet configuration</code>文件配置<code>shutdownGracePeriodByPodPriority</code>，这个是基于<code>pod</code>优先级来控制<code>pod</code>的驱逐顺序。此能力需要<code>kubelet</code>打开名为<code>GracefulNodeShutdownBaseOnPodPriority</code>的<code>feature gate</code>，此<code>feature gate</code>在版本<code>v1.23</code>进入<code>Alpha</code>阶段，在版本<code>v1.31</code>进入<code>Beta</code>阶段并默认配置为<code>enabled</code>。</p><p>具体的配置示例如下：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">shutdownGracePeriodByPodPriority:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">priority:</span> <span class="number">10000</span></span><br><span class="line">    <span class="attr">shutdownGracePeriodSeconds:</span> <span class="number">10</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">priority:</span> <span class="number">1000</span></span><br><span class="line">    <span class="attr">shutdownGracePeriodSeconds:</span> <span class="number">180</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">priority:</span> <span class="number">100</span></span><br><span class="line">    <span class="attr">shutdownGracePeriodSeconds:</span> <span class="number">120</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">priority:</span> <span class="number">0</span></span><br><span class="line">    <span class="attr">shutdownGracePeriodSeconds:</span> <span class="number">60</span></span><br></pre></td></tr></table></figure><p><code>kubelet</code>监控指标，用于提供节点关闭的指标数据</p><ul><li>graceful_shutdown_start_time_seconds</li><li>graceful_shutdown_end_time_seconds</li></ul><h1 id="非优雅关闭（Non-graceful-node-shutdown）"><a href="#非优雅关闭（Non-graceful-node-shutdown）" class="headerlink" title="非优雅关闭（Non-graceful node shutdown）"></a>非优雅关闭（Non-graceful node shutdown）</h1><p>在非优雅关闭的场景下，节点上的<code>StatefulSet</code>的<code>pod</code>会转变为<code>terminating</code>状态，但<code>pod</code>不会被delete以及不会调度重新运行一个新的。这是因为在非优雅关闭的场景下，<code>kubelet</code>无法感知关闭事件，并作出正确的<code>delete</code>操作。与此同时，如果<code>pod</code>关联了存储卷，该存储卷也无法完成解绑。所以这会导致<code>StatefulSet</code>应用无法提供正常的服务。</p><p>要解决上述的问题，<code>Kubernetes</code>已经无法自动完成处理，需要引入人工操作。在<code>kube-controller-manager</code>打开<code>NodeOutOfServiceVolumeDetach</code>的特性下，可以通过给节点打上污点：<code>node.kubernetes.io/out-of-service</code>，来表明节点已经无法提供服务了。此时当节点被非优雅关闭了，<code>pod</code>能直接自动被强制删除，并且关联存储卷也会被立即解绑，从而触发新的<code>pod</code>在其他节点重新拉起，<code>StatefulSet</code>重新提供正常的服务。</p><p>随后，一旦节点回复运行后，需要手动移除节点上<code>node.kubernetes.io/out-of-service</code>的污点，<code>pod</code>才会正常地再调度到此节点上。</p><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;在Kubernetes中，节点可以分为优雅关闭（&lt;code&gt;Graceful node shutdown&lt;/code&gt;）及非优雅关闭（&lt;code&gt;Non-graceful node shutdown&lt;/code&gt;）。优雅关闭可以理解为有计划的关闭节点；而非优雅关闭，一般就出</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/kubernetes/"/>
    
    <category term="Node" scheme="https://gaussli.com/categories/tech/kubernetes/node/"/>
    
    
    <category term="Kubernetes" scheme="https://gaussli.com/tags/kubernetes/"/>
    
    <category term="Node" scheme="https://gaussli.com/tags/node/"/>
    
    <category term="shutdown" scheme="https://gaussli.com/tags/shutdown/"/>
    
    <category term="graceful" scheme="https://gaussli.com/tags/graceful/"/>
    
  </entry>
  
  <entry>
    <title>【CentOS】yum工具问题</title>
    <link href="https://gaussli.com/2022/04/19/%E3%80%90centos%E3%80%91yum%E5%B7%A5%E5%85%B7%E9%97%AE%E9%A2%98/"/>
    <id>https://gaussli.com/2022/04/19/%E3%80%90centos%E3%80%91yum%E5%B7%A5%E5%85%B7%E9%97%AE%E9%A2%98/</id>
    <published>2022-04-19T15:56:47.000Z</published>
    <updated>2022-04-19T16:05:01.552Z</updated>
    
    <content type="html"><![CDATA[<h1 id="BDB1507-Thread-died-in-Berkeley-DB-library"><a href="#BDB1507-Thread-died-in-Berkeley-DB-library" class="headerlink" title="BDB1507 Thread died in Berkeley DB library"></a>BDB1507 Thread died in Berkeley DB library</h1><h2 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a>问题描述</h2><p>yum搜索、安装或更新时报错，看意思是数据库出错。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">错误：rpmdb: BDB0113 Thread/process 19822/139881366214720 failed: BDB1507 Thread died in Berkeley DB library</span><br><span class="line">错误：db5 错误(-30973) 来自 dbenv-&gt;failchk：BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery</span><br><span class="line">错误：无法使用 db5 -  (-30973) 打开 Packages 索引</span><br><span class="line">错误：无法从 /var/lib/rpm 打开软件包数据库</span><br><span class="line">CRITICAL:yum.main:</span><br><span class="line"></span><br><span class="line">Error: rpmdb open failed</span><br></pre></td></tr></table></figure><p>如图<br><img src="/2022/04/19/%E3%80%90centos%E3%80%91yum%E5%B7%A5%E5%85%B7%E9%97%AE%E9%A2%98/1.png"></p><h2 id="问题解决"><a href="#问题解决" class="headerlink" title="问题解决"></a>问题解决</h2><ol><li><p>删除yum临时库文件</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">rm</span> -fr /var/lib/rpm/__db.*</span><br></pre></td></tr></table></figure></li><li><p>重建rpm数据库</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rpm –rebuilddb</span><br></pre></td></tr></table></figure></li><li><p>清理缓存及生产yumdb缓存</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">yum clean all</span><br><span class="line">yum makecache</span><br></pre></td></tr></table></figure></li></ol><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;BDB1507-Thread-died-in-Berkeley-DB-library&quot;&gt;&lt;a href=&quot;#BDB1507-Thread-died-in-Berkeley-DB-library&quot; class=&quot;headerlink&quot; title=&quot;BDB1507 </summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Linux" scheme="https://gaussli.com/categories/tech/linux/"/>
    
    
    <category term="CentOS" scheme="https://gaussli.com/tags/centos/"/>
    
    <category term="yum" scheme="https://gaussli.com/tags/yum/"/>
    
    <category term="Linux" scheme="https://gaussli.com/tags/linux/"/>
    
    <category term="问题" scheme="https://gaussli.com/tags/%E9%97%AE%E9%A2%98/"/>
    
  </entry>
  
  <entry>
    <title>【SpringCloud】版本兼容性</title>
    <link href="https://gaussli.com/2022/03/17/%E3%80%90springcloud%E3%80%91%E7%89%88%E6%9C%AC%E5%85%BC%E5%AE%B9%E6%80%A7/"/>
    <id>https://gaussli.com/2022/03/17/%E3%80%90springcloud%E3%80%91%E7%89%88%E6%9C%AC%E5%85%BC%E5%AE%B9%E6%80%A7/</id>
    <published>2022-03-17T06:48:26.000Z</published>
    <updated>2022-03-17T07:02:48.630Z</updated>
    
    <content type="html"><![CDATA[<p><a href="https://spring.io/projects/spring-cloud">SpringCloud兼容性官方说明（https://spring.io/projects/spring-cloud）</a></p><table><thead><tr><th>SpringCloud版本</th><th>SpringBoot版本</th></tr></thead><tbody><tr><td><a href="https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2021.0-Release-Notes">2021.0.x</a> aka Jubilee</td><td>2.6.x</td></tr><tr><td><a href="https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2020.0-Release-Notes">2020.0.x</a> aka Ilford</td><td>2.4.x,2.5.x(Starting with 2020.0.3)</td></tr><tr><td><a href="https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-Hoxton-Release-Notes">Hoxton</a></td><td>2.2.x,2.3.x(Starting with SR5)</td></tr><tr><td><a href="https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-Greenwith-Release-Notes">Greenwith</a></td><td>2.1.x</td></tr><tr><td><a href="https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-Finchley-Release-Notes">Finchley</a></td><td>2.0.x</td></tr><tr><td><a href="https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-Edgware-Release-Notes">Edgware</a></td><td>1.5.x</td></tr><tr><td><a href="https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-Dalston-Release-Notes">Dalston</a></td><td>1.5.x</td></tr></tbody></table><blockquote><p>Spring Cloud Dalston, Edgware, Finchley, and Greenwich have all reached end of life status and are no longer supported.<br>Dalston, Edgware, Finchley 和 Greenwich 版本不再更新支持。</p></blockquote><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;a href=&quot;https://spring.io/projects/spring-cloud&quot;&gt;SpringCloud兼容性官方说明（https://spring.io/projects/spring-cloud）&lt;/a&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="JavaWeb" scheme="https://gaussli.com/categories/tech/javaweb/"/>
    
    <category term="Spring" scheme="https://gaussli.com/categories/tech/javaweb/spring/"/>
    
    
    <category term="SpringCloud" scheme="https://gaussli.com/tags/springcloud/"/>
    
    <category term="兼容性" scheme="https://gaussli.com/tags/%E5%85%BC%E5%AE%B9%E6%80%A7/"/>
    
  </entry>
  
  <entry>
    <title>【容器化】Kubernetes二进制高可用部署10-Coredns部署</title>
    <link href="https://gaussli.com/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B210-coredns%E9%83%A8%E7%BD%B2/"/>
    <id>https://gaussli.com/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B210-coredns%E9%83%A8%E7%BD%B2/</id>
    <published>2022-01-16T09:11:56.000Z</published>
    <updated>2024-12-01T08:46:07.033Z</updated>
    
    <content type="html"><![CDATA[<h1 id="零、目录"><a href="#零、目录" class="headerlink" title="零、目录"></a>零、目录</h1><ul><li><a href="/2021/09/12/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B21-%E5%87%86%E5%A4%87/" title="【容器化】Kubernetes二进制高可用部署1-准备">【容器化】Kubernetes二进制高可用部署1-准备</a></li><li><a href="/2022/01/15/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B22-ca%E6%A0%B9%E8%AF%81%E4%B9%A6/" title="【容器化】Kubernetes二进制高可用部署2-ca根证书">【容器化】Kubernetes二进制高可用部署2-ca根证书</a></li><li><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B23-etcd%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署3-etcd高可用部署">【容器化】kubernetes二进制高可用部署3-etcd高可用部署</a></li><li><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B24-kube-apiserver%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署4-kube-apiserver高可用部署">【容器化】kubernetes二进制高可用部署4-kube-apiserver高可用部署</a></li><li><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B25-ha%E5%92%8Ckeepalived%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署5-HA和Keepalived部署">【容器化】kubernetes二进制高可用部署5-HA和Keepalived部署</a></li><li><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B26-kube-controller%E5%92%8Ckube-scheduler%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署6-kube-controller和kube-scheduler部署">【容器化】kubernetes二进制高可用部署6-kube-controller和kube-scheduler部署</a></li><li><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B27-kubelet%E5%92%8Ckube-proxy%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署7-kubelet和kube-proxy部署">【容器化】kubernetes二进制高可用部署7-kubelet和kube-proxy部署</a></li><li><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B28-calico%E7%BD%91%E7%BB%9C%E6%8F%92%E4%BB%B6%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署8-Calico网络插件部署">【容器化】kubernetes二进制高可用部署8-Calico网络插件部署</a></li><li><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B29-flannel%E7%BD%91%E7%BB%9C%E6%8F%92%E4%BB%B6%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署9-Flannel网络插件部署">【容器化】kubernetes二进制高可用部署9-Flannel网络插件部署</a></li><li><strong><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B210-coredns%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署10-coredns部署">【容器化】kubernetes二进制高可用部署10-coredns部署</a></strong></li></ul><h1 id="一、说明"><a href="#一、说明" class="headerlink" title="一、说明"></a>一、说明</h1><p>本文将部署Kubernetes的dns服务插件-coredns</p><p><a href="https://github.com/coredns/deployment">github: https://github.com/coredns/deployment</a><br><a href="https://coredns.io/">official: https://coredns.io/</a></p><p>版本对应：</p><table><thead><tr><th>CoreDNS版本</th><th>Kubernetes版本</th></tr></thead><tbody><tr><td>v1.8.4</td><td>v1.22</td></tr><tr><td>v1.8.0</td><td>v1.21</td></tr><tr><td>v1.7.0</td><td>v1.19 v1.20</td></tr><tr><td>v1.6.7</td><td>v1.18</td></tr><tr><td>v1.6.5</td><td>v1.17</td></tr></tbody></table><h1 id="二、获取coredns的部署文件"><a href="#二、获取coredns的部署文件" class="headerlink" title="二、获取coredns的部署文件"></a>二、获取coredns的部署文件</h1><p>当前Kubernetes压缩包中已包含了一些扩展插件的部署yaml文件，其中就包括coredns的，在<code>kubernetes-src.tar.gz</code>文件中，解压出来进入<code>cluster/addons/dns/coredns</code>目录就能找到coredns相关的部署yaml文件</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 解压文件</span></span><br><span class="line">tar -C /usr/local/src/kubernetes/kubernetes-src/ -zxvf /usr/local/src/kubernetes/kubernetes-src.tar.gz</span><br><span class="line"><span class="comment"># 进入coredns相关文件目录</span></span><br><span class="line"><span class="built_in">cd</span> /usr/local/src/kubernetes/kubernetes-src/cluster/addons/dns/coredns/</span><br></pre></td></tr></table></figure><h1 id="三、参数配置"><a href="#三、参数配置" class="headerlink" title="三、参数配置"></a>三、参数配置</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改其中的文件transforms2sed.sed</span></span><br><span class="line"><span class="comment"># 把$DNS_SERVER_IP改为kubelet启动时的DNS服务IP参数，当前为169.169.0.100</span></span><br><span class="line"><span class="comment"># 把$DNS_DOMAIN改为kubelet启动时的DNS域名参数，当前为cluster.local</span></span><br><span class="line"><span class="comment"># $SERVICE_CLUSTER_IP_RANGE此值貌似没有使用，暂不用更改</span></span><br><span class="line"><span class="comment"># 把$DNS_MEMORY_LIMIT改为自己设定的pod内存limit大小，官方推荐是170Mi</span></span><br><span class="line">s/__PILLAR__DNS__SERVER__/<span class="variable">$DNS_SERVER_IP</span>/g</span><br><span class="line">s/__PILLAR__DNS__DOMAIN__/<span class="variable">$DNS_DOMAIN</span>/g</span><br><span class="line">s/__PILLAR__CLUSTER_CIDR__/<span class="variable">$SERVICE_CLUSTER_IP_RANGE</span>/g</span><br><span class="line">s/__PILLAR__DNS__MEMORY__LIMIT__/<span class="variable">$DNS_MEMORY_LIMIT</span>/g</span><br><span class="line">s/__MACHINE_GENERATED_WARNING__/Warning: This is a file generated from the base underscore template file: __SOURCE_FILENAME__/g</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 执行参数更新</span></span><br><span class="line">sed -f transforms2sed.sed coredns.yaml.base &gt; coredns.yaml</span><br></pre></td></tr></table></figure><h1 id="四、部署coredns服务"><a href="#四、部署coredns服务" class="headerlink" title="四、部署coredns服务"></a>四、部署coredns服务</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kubectl apply -f coredns.yaml</span><br></pre></td></tr></table></figure><h1 id="五、验证测试"><a href="#五、验证测试" class="headerlink" title="五、验证测试"></a>五、验证测试</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看coredns的相关资源是否启动成功，包含一个coredns的deployment，一个kube-dns的service，对应一个kube-dns的endpoints</span></span><br><span class="line">kubectl get deploy,pod,svc,endpoints -A -owide</span><br></pre></td></tr></table></figure><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;零、目录&quot;&gt;&lt;a href=&quot;#零、目录&quot; class=&quot;headerlink&quot; title=&quot;零、目录&quot;&gt;&lt;/a&gt;零、目录&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/2021/09/12/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%9</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Container" scheme="https://gaussli.com/categories/tech/container/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/container/kubernetes/"/>
    
    
    <category term="Kubernetes" scheme="https://gaussli.com/tags/kubernetes/"/>
    
    <category term="部署" scheme="https://gaussli.com/tags/%E9%83%A8%E7%BD%B2/"/>
    
    <category term="二进制" scheme="https://gaussli.com/tags/%E4%BA%8C%E8%BF%9B%E5%88%B6/"/>
    
    <category term="coredns" scheme="https://gaussli.com/tags/coredns/"/>
    
  </entry>
  
  <entry>
    <title>【容器化】Kubernetes二进制高可用部署9-Flannel网络插件部署</title>
    <link href="https://gaussli.com/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B29-flannel%E7%BD%91%E7%BB%9C%E6%8F%92%E4%BB%B6%E9%83%A8%E7%BD%B2/"/>
    <id>https://gaussli.com/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B29-flannel%E7%BD%91%E7%BB%9C%E6%8F%92%E4%BB%B6%E9%83%A8%E7%BD%B2/</id>
    <published>2022-01-16T09:11:46.000Z</published>
    <updated>2024-12-01T08:46:23.359Z</updated>
    
    <content type="html"><![CDATA[<h1 id="零、目录"><a href="#零、目录" class="headerlink" title="零、目录"></a>零、目录</h1><ul><li><a href="/2021/09/12/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B21-%E5%87%86%E5%A4%87/" title="【容器化】Kubernetes二进制高可用部署1-准备">【容器化】Kubernetes二进制高可用部署1-准备</a></li><li><a href="/2022/01/15/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B22-ca%E6%A0%B9%E8%AF%81%E4%B9%A6/" title="【容器化】Kubernetes二进制高可用部署2-ca根证书">【容器化】Kubernetes二进制高可用部署2-ca根证书</a></li><li><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B23-etcd%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署3-etcd高可用部署">【容器化】kubernetes二进制高可用部署3-etcd高可用部署</a></li><li><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B24-kube-apiserver%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署4-kube-apiserver高可用部署">【容器化】kubernetes二进制高可用部署4-kube-apiserver高可用部署</a></li><li><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B25-ha%E5%92%8Ckeepalived%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署5-HA和Keepalived部署">【容器化】kubernetes二进制高可用部署5-HA和Keepalived部署</a></li><li><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B26-kube-controller%E5%92%8Ckube-scheduler%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署6-kube-controller和kube-scheduler部署">【容器化】kubernetes二进制高可用部署6-kube-controller和kube-scheduler部署</a></li><li><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B27-kubelet%E5%92%8Ckube-proxy%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署7-kubelet和kube-proxy部署">【容器化】kubernetes二进制高可用部署7-kubelet和kube-proxy部署</a></li><li><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B28-calico%E7%BD%91%E7%BB%9C%E6%8F%92%E4%BB%B6%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署8-Calico网络插件部署">【容器化】kubernetes二进制高可用部署8-Calico网络插件部署</a></li><li><strong><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B29-flannel%E7%BD%91%E7%BB%9C%E6%8F%92%E4%BB%B6%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署9-Flannel网络插件部署">【容器化】kubernetes二进制高可用部署9-Flannel网络插件部署</a></strong></li><li><a href="/2022/01/16/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%96%E3%80%91kubernetes%E4%BA%8C%E8%BF%9B%E5%88%B6%E9%AB%98%E5%8F%AF%E7%94%A8%E9%83%A8%E7%BD%B210-coredns%E9%83%A8%E7%BD%B2/" title="【容器化】kubernetes二进制高可用部署10-coredns部署">【容器化】kubernetes二进制高可用部署10-coredns部署</a></li></ul><h1 id="一、说明"><a href="#一、说明" class="headerlink" title="一、说明"></a>一、说明</h1><p>本文将部署Kubernetes的网络插件Flannel</p><p>占坑</p><p>(•̀ᴗ•́)و ̑̑</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;零、目录&quot;&gt;&lt;a href=&quot;#零、目录&quot; class=&quot;headerlink&quot; title=&quot;零、目录&quot;&gt;&lt;/a&gt;零、目录&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/2021/09/12/%E3%80%90%E5%AE%B9%E5%99%A8%E5%8C%9</summary>
      
    
    
    
    <category term="Tech" scheme="https://gaussli.com/categories/tech/"/>
    
    <category term="Container" scheme="https://gaussli.com/categories/tech/container/"/>
    
    <category term="Kubernetes" scheme="https://gaussli.com/categories/tech/container/kubernetes/"/>
    
    
    <category term="Kubernetes" scheme="https://gaussli.com/tags/kubernetes/"/>
    
    <category term="部署" scheme="https://gaussli.com/tags/%E9%83%A8%E7%BD%B2/"/>
    
    <category term="cni" scheme="https://gaussli.com/tags/cni/"/>
    
    <category term="网络插件" scheme="https://gaussli.com/tags/%E7%BD%91%E7%BB%9C%E6%8F%92%E4%BB%B6/"/>
    
    <category term="flannel" scheme="https://gaussli.com/tags/flannel/"/>
    
    <category term="二进制" scheme="https://gaussli.com/tags/%E4%BA%8C%E8%BF%9B%E5%88%B6/"/>
    
  </entry>
  
</feed>
