<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://ifzzh.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://ifzzh.github.io/" rel="alternate" type="text/html" /><updated>2025-08-03T08:29:40+00:00</updated><id>https://ifzzh.github.io/feed.xml</id><title type="html">ifzzh’s blog</title><subtitle>ifzzh的个人技术博客</subtitle><entry><title type="html">强化学习入门</title><link href="https://ifzzh.github.io/ReinforcementLearning.md/" rel="alternate" type="text/html" title="强化学习入门" /><published>2024-09-16T00:00:00+00:00</published><updated>2024-09-16T00:00:00+00:00</updated><id>https://ifzzh.github.io/ReinforcementLearning.md</id><content type="html" xml:base="https://ifzzh.github.io/ReinforcementLearning.md/"><![CDATA[<!-- ###### 说明： -->

<!-- more -->

<link rel="stylesheet" type="text/css" href="../css/auto-title-number.css" />

<h2 id="目录">目录</h2>

<ul>
  <li><a href="#目录">目录</a></li>
  <li><a href="#基本定义">基本定义</a></li>
  <li><a href="#基本元素">基本元素</a></li>
  <li><a href="#主要元素">主要元素</a></li>
  <li><a href="#核心元素">核心元素</a></li>
  <li><a href="#两大特点">两大特点</a></li>
  <li><a href="#k-armed-bandit多臂老虎机">K-armed Bandit（多臂老虎机）</a></li>
</ul>

<h2 id="基本定义">基本定义</h2>

<p>强化学习，是在于环境的互动当中为了达成一个目标而进行的学习过程</p>

<h2 id="基本元素">基本元素</h2>

<ol>
  <li>Agent：与环境进行互动的主体</li>
  <li>Environment</li>
  <li>Goal</li>
</ol>

<h2 id="主要元素">主要元素</h2>

<ol>
  <li>State：玩家和环境会处于某种state</li>
  <li>Action</li>
  <li>Reward：Agent在特定状态下采取了某种Action后得到的及时的反馈</li>
</ol>

<h2 id="核心元素">核心元素</h2>

<ol>
  <li>Policy：在某一个状态（输入）下，应该采取什么Action（输出）</li>
  <li>Value：预期将来会得到的所有奖励之和
    <ol>
      <li>State-Value函数</li>
      <li>(State, Action)-Value函数：在特定状态下，采取某种行动的价值</li>
    </ol>
  </li>
</ol>

<h2 id="两大特点">两大特点</h2>

<ol>
  <li>Trial and Error：试错学习</li>
  <li>Delayed Reward：延迟奖励，行动的及时奖励可能是0，但是它对最终的胜利是有价值的（即一个行动可能没有奖励，但一定有价值）</li>
</ol>

<h2 id="k-armed-bandit多臂老虎机">K-armed Bandit（多臂老虎机）</h2>

<p>从基本元素分析：</p>
<ul>
  <li>Agent： 我</li>
  <li>Environment：老虎机</li>
</ul>

<p>假设有左右两个老虎机
状态只有一个（老虎机不会动），行动得到的奖励是及时的，做出一个选择就会得到一个奖励，不会对以后的行动有影响。只需要学习不同的行动所具有的价值，即学习<code class="language-plaintext highlighter-rouge">State-Action Value</code>函数，可以简化为<code class="language-plaintext highlighter-rouge">Action Value</code>函数。</p>

<p>选择一个老虎机之后，可以得到一定的奖励。那么可以认为这个奖励是一个服从一定概率分布的随机变量。两个老虎机对应的概率分布可能是不同的，但概率分布是固定的，不会改变。概率分布有一个期望值，所以最优的情况就是选期望最高的那个。</p>

<p>定义一个行动具有的价值为对应奖励的期望值，设选择左边的价值为<code class="language-plaintext highlighter-rouge">q(L)</code>，右边的为<code class="language-plaintext highlighter-rouge">q(R)</code>，假设左边的奖励服从<code class="language-plaintext highlighter-rouge">N(500,50)</code>，右边的服从<code class="language-plaintext highlighter-rouge">N(550,100)</code>。显然右边是最优的选择。定义行动价值的估计值为<code class="language-plaintext highlighter-rouge">Q(L)</code>和<code class="language-plaintext highlighter-rouge">Q(R)</code>，初始值为0。</p>

<p>利用实际获取的奖励来估计价值（如利用奖励的平均值）</p>

<p>用$Q_t(a)$来代表t时刻对a这个行动的价值的一个估计：</p>

\[Q_(a)=\frac{\sum_{i=1}^{t-1}R_i*1(A_i=a)}{\sum_{i=1}^{t-1}1(A_i=a)}, a=L,R\]

\[A_t = argmax_aQ_t(a) (Greedy策略)\]

<blockquote>
  <p>贪婪策略会导致重复选第一次选择的老虎机</p>
</blockquote>

<p>一种补救的方法是，强行要求所有的行动都选择一遍，再做贪婪选择</p>

<blockquote>
  <p>由于随机性的存在，只尝试一次是不够的（我们实验的原理就是大数定律）</p>
</blockquote>

<p>另一种方法是反其道而行之，因为贪婪的问题是第一次选的会成为最大值，那么我们让价值函数的初始值特别大，因此选择任何一个行动后，其对应的价值会变小，迫使我们去尝试其他行动</p>

<p>需要注意，价值的初始值为0时，这个初始值不计入之后的平均计算，任何行动执行一次之后，就用实际获得的奖励值替代了初始值；当我们选择一个很高的初始值，同样不计入，实际的结果就相当于把所有的行动都尝试一遍。</p>

<p>我们这里说的方法，是将初始值计入之后平均值的计算，如果不计入，相当于只探索一遍，只有计入才能鼓励更多的探索。</p>

<p>这个方法只能考虑一开始的探索行为，一旦我们考虑状态会发生改变的情况，这个方法就不可行了。</p>

<p>归根结底，不能太贪婪！</p>

<p>一种有效解决方法，成为$\epsilon-Greedy$，其含义是在大多数情况下，作出贪婪的选择；以一定的概率$\epsilon$，做出随机的选择。</p>]]></content><author><name>ifzzh</name></author><category term="RL" /><category term="Reinforcement Learning" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">HorizontalPodAutoscaler演练</title><link href="https://ifzzh.github.io/HPA-deploy/" rel="alternate" type="text/html" title="HorizontalPodAutoscaler演练" /><published>2024-08-07T00:00:00+00:00</published><updated>2024-08-07T00:00:00+00:00</updated><id>https://ifzzh.github.io/HPA-deploy</id><content type="html" xml:base="https://ifzzh.github.io/HPA-deploy/"><![CDATA[<!-- ###### 说明： -->

<!-- more -->

<link rel="stylesheet" type="text/css" href="../css/auto-title-number.css" />

<h2 id="目录">目录</h2>

<ul>
  <li><a href="#目录">目录</a></li>
  <li><a href="#运行一个php-apache服务器并暴露服务">运行一个php-apache服务器并暴露服务</a></li>
  <li><a href="#创建-horizontalpodautoscaler">创建 HorizontalPodAutoscaler</a></li>
  <li><a href="#增加负载">增加负载</a></li>
</ul>

<h2 id="运行一个php-apache服务器并暴露服务">运行一个php-apache服务器并暴露服务</h2>

<p>为了演示 HorizontalPodAutoscaler，你将首先启动一个 Deployment 用 hpa-example 镜像运行一个容器， 然后使用以下清单文件将其暴露为一个服务（Service）：</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">apiVersion</span><span class="pi">:</span> <span class="s">apps/v1</span>
<span class="na">kind</span><span class="pi">:</span> <span class="s">Deployment</span>
<span class="na">metadata</span><span class="pi">:</span>
  <span class="na">name</span><span class="pi">:</span> <span class="s">php-apache</span>
<span class="na">spec</span><span class="pi">:</span>
  <span class="na">selector</span><span class="pi">:</span>
    <span class="na">matchLabels</span><span class="pi">:</span>
      <span class="na">run</span><span class="pi">:</span> <span class="s">php-apache</span>
  <span class="na">template</span><span class="pi">:</span>
    <span class="na">metadata</span><span class="pi">:</span>
      <span class="na">labels</span><span class="pi">:</span>
        <span class="na">run</span><span class="pi">:</span> <span class="s">php-apache</span>
    <span class="na">spec</span><span class="pi">:</span>
      <span class="na">containers</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">php-apache</span>
        <span class="na">image</span><span class="pi">:</span> <span class="s">registry.k8s.io/hpa-example</span>
        <span class="na">ports</span><span class="pi">:</span>
        <span class="pi">-</span> <span class="na">containerPort</span><span class="pi">:</span> <span class="m">80</span>
        <span class="na">resources</span><span class="pi">:</span>
          <span class="na">limits</span><span class="pi">:</span>
            <span class="na">cpu</span><span class="pi">:</span> <span class="s">500m</span>
          <span class="na">requests</span><span class="pi">:</span>
            <span class="na">cpu</span><span class="pi">:</span> <span class="s">200m</span>
<span class="nn">---</span>
<span class="na">apiVersion</span><span class="pi">:</span> <span class="s">v1</span>
<span class="na">kind</span><span class="pi">:</span> <span class="s">Service</span>
<span class="na">metadata</span><span class="pi">:</span>
  <span class="na">name</span><span class="pi">:</span> <span class="s">php-apache</span>
  <span class="na">labels</span><span class="pi">:</span>
    <span class="na">run</span><span class="pi">:</span> <span class="s">php-apache</span>
<span class="na">spec</span><span class="pi">:</span>
  <span class="na">ports</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">port</span><span class="pi">:</span> <span class="m">80</span>
  <span class="na">selector</span><span class="pi">:</span>
    <span class="na">run</span><span class="pi">:</span> <span class="s">php-apache</span>
</code></pre></div></div>

<p>可以手动创建，在本地离线部署。也可以直接运行以下命令：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kubectl apply <span class="nt">-f</span> https://k8s.io/examples/application/php-apache.yaml
</code></pre></div></div>

<h2 id="创建-horizontalpodautoscaler">创建 HorizontalPodAutoscaler</h2>

<p>现在服务器正在运行，使用 kubectl 创建自动扩缩器。 kubectl autoscale 子命令是 kubectl 的一部分， 可以帮助你执行此操作。</p>

<p>你将很快运行一个创建 HorizontalPodAutoscaler 的命令， 该 HorizontalPodAutoscaler 维护由你在这些说明的第一步中创建的 php-apache Deployment 控制的 Pod 存在 1 到 10 个副本。</p>

<p>粗略地说，HPA 控制器将增加和减少副本的数量 （通过更新 Deployment）以保持所有 Pod 的平均 CPU 利用率为 50%。 Deployment 然后更新 ReplicaSet —— 这是所有 Deployment 在 Kubernetes 中工作方式的一部分 —— 然后 ReplicaSet 根据其 .spec 的更改添加或删除 Pod。</p>

<p>由于每个 Pod 通过 kubectl run 请求 200 milli-cores，这意味着平均 CPU 使用率为 100 milli-cores。 有关算法的更多详细信息， 请参阅算法详细信息。</p>

<p>创建 HorizontalPodAutoscaler：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kubectl autoscale deployment php-apache <span class="nt">--cpu-percent</span><span class="o">=</span>50 <span class="nt">--min</span><span class="o">=</span>1 <span class="nt">--max</span><span class="o">=</span>10
</code></pre></div></div>

<p>你可以通过运行以下命令检查新制作的 HorizontalPodAutoscaler 的当前状态：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 你可以使用 “hpa” 或 “horizontalpodautoscaler”；任何一个名字都可以。</span>
kubectl get hpa
</code></pre></div></div>

<p>请注意当前的 CPU 利用率是 0%，这是由于我们尚未发送任何请求到服务器 （TARGET 列显示了相应 Deployment 所控制的所有 Pod 的平均 CPU 利用率）。</p>

<h2 id="增加负载">增加负载</h2>

<p>接下来，看看自动扩缩器如何对增加的负载做出反应。 为此，你将启动一个不同的 Pod 作为客户端。 客户端向 php-apache 服务发送查询。</p>

<p>这里使用<a href="https://www.cnblogs.com/jspider/p/16004848.html">hey</a>来测试</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#下载hey</span>
wget https://hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64
<span class="c">#如果下载速度较慢，可使用xiaoz软件库链接</span>
wget http://soft.xiaoz.org/linux/hey_linux_amd64
<span class="c">#赋予执行权限</span>
<span class="nb">chmod</span> +x hey_linux_amd64
<span class="c">#移动文件到sbin目录</span>
<span class="nb">mv </span>hey_linux_amd64 /usr/sbin/hey
</code></pre></div></div>

<p>现在执行：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>hey <span class="nt">-n</span> 10000 <span class="nt">-c</span> 10 http://php-apache/
</code></pre></div></div>

<p>如果这里找不到服务器，可以修改php-apache服务，改为NodePort方式：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kubectl edit svc php-apache

<span class="c"># 把type从ClusterIP改为NodePort</span>
<span class="nb">type</span> : NodePort

<span class="c"># 保存，退出，查看服务</span>
kubectl get svc php-apache

<span class="c"># 采用IP：Port的方式测试</span>
hey <span class="nt">-n</span> 10000 <span class="nt">-c</span> 10 http://IP:Port
</code></pre></div></div>

<p>观察负载</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 准备好后按 Ctrl+C 结束观察</span>
kubectl get hpa php-apache <span class="nt">--watch</span>
</code></pre></div></div>

<p>一分钟时间左右之后，通过以下命令，我们可以看到 CPU 负载升高了；例如：</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   305% / 50%  1         10        1          3m
</code></pre></div></div>

<p>然后，更多的副本被创建。例如：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   305% / 50%  1         10        7          3m
</code></pre></div></div>

<p>这时，由于请求增多，CPU 利用率已经升至请求值的 305%。 可以看到，Deployment 的副本数量已经增长到了 7：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kubectl get deployment php-apache
</code></pre></div></div>

<p>你应该会看到与 HorizontalPodAutoscaler 中的数字与副本数匹配</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>NAME         READY   UP-TO-DATE   AVAILABLE   AGE
php-apache   7/7      7           7           19m
</code></pre></div></div>

<blockquote>
  <p>说明：
有时最终副本的数量可能需要几分钟才能稳定下来。由于环境的差异， 不同环境中最终的副本数量可能与本示例中的数量不同。</p>
</blockquote>]]></content><author><name>ifzzh</name></author><category term="k8s" /><category term="Pod Autoscaling" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">重建服务器记录</title><link href="https://ifzzh.github.io/vm-rebuild/" rel="alternate" type="text/html" title="重建服务器记录" /><published>2024-08-05T00:00:00+00:00</published><updated>2024-08-05T00:00:00+00:00</updated><id>https://ifzzh.github.io/vm-rebuild</id><content type="html" xml:base="https://ifzzh.github.io/vm-rebuild/"><![CDATA[<!-- ###### 说明： -->

<!-- more -->

<link rel="stylesheet" type="text/css" href="../css/auto-title-number.css" />

<h2 id="目录">目录</h2>

<ul>
  <li><a href="#目录">目录</a></li>
  <li><a href="#进入虚拟机镜像所在目录">进入虚拟机镜像所在目录</a></li>
  <li><a href="#删除需要重建的虚拟机的镜像文件">删除需要重建的虚拟机的镜像文件</a></li>
  <li><a href="#将对应虚拟机关闭">将对应虚拟机关闭</a></li>
  <li><a href="#从bak复制对应镜像到镜像目录">从bak复制对应镜像到镜像目录</a></li>
  <li><a href="#启动对应虚拟机">启动对应虚拟机</a></li>
</ul>

<h2 id="进入虚拟机镜像所在目录">进入虚拟机镜像所在目录</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">[</span>root@master01 ~]# <span class="nb">cd</span> /home/zhengzihao/
<span class="o">[</span>root@master01 zhengzihao]# <span class="nb">ls
</span>aware  bak  master01.qcow2  master02.qcow2  node01.qcow2  node02.qcow2
<span class="c"># bak 是备份镜像</span>
<span class="o">[</span>root@master01 zhengzihao]# <span class="nb">cd </span>bak/
<span class="o">[</span>root@master01 bak]# <span class="nb">ls
</span>master01.qcow2  master02.qcow2  node01.qcow2  node02.qcow2
<span class="o">[</span>root@master01 bak]# <span class="nb">cd</span> ..
<span class="o">[</span>root@master01 zhengzihao]# ll
total 32600724
drwxr-xr-x. 10 root root       4096 Aug  4 03:53 aware
drwxr-xr-x.  2 root root         90 Aug  2 03:55 bak
<span class="nt">-rw-------</span><span class="nb">.</span>  1 qemu qemu 8603369472 Aug  4 23:26 master01.qcow2
<span class="nt">-rw-------</span><span class="nb">.</span>  1 qemu qemu 8352104448 Aug  4 23:25 master02.qcow2
<span class="nt">-rw-------</span><span class="nb">.</span>  1 qemu qemu 8307736576 Aug  4 23:26 node01.qcow2
<span class="nt">-rw-------</span><span class="nb">.</span>  1 qemu qemu 8118075392 Aug  4 23:26 node02.qcow2
</code></pre></div></div>

<h2 id="删除需要重建的虚拟机的镜像文件">删除需要重建的虚拟机的镜像文件</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">[</span>root@master01 zhengzihao]# <span class="nb">rm</span> <span class="nt">-rf</span> master01.qcow2
<span class="o">[</span>root@master01 zhengzihao]# <span class="nb">ls
</span>aware  bak  master02.qcow2  node01.qcow2  node02.qcow2
</code></pre></div></div>

<h2 id="将对应虚拟机关闭">将对应虚拟机关闭</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">[</span>root@master01 zhengzihao]# virsh list <span class="nt">--all</span>
 Id   Name                   State
<span class="nt">---------------------------------------</span>
 5    zzh-master01           running
 7    zzh-node01             running
 8    zzh-node02             running
 10   zzh-master02           running
 -    centos-stream8         shut off
 -    centos-stream8-clone   shut off
 -    master01               shut off
 -    master02               shut off
 -    node01                 shut off
 -    node02                 shut off
 -    origal                 shut off
 -    origal-clone           shut off
 -    overlay-master01       shut off
 -    overlay-master02       shut off

<span class="o">[</span>root@master01 zhengzihao]# virsh shutdown zzh-master01
Domain <span class="s1">'zzh-master01'</span> is being shutdown

<span class="o">[</span>root@master01 zhengzihao]# virsh list <span class="nt">--all</span>
 Id   Name                   State
<span class="nt">---------------------------------------</span>
 7    zzh-node01             running
 8    zzh-node02             running
 10   zzh-master02           running
 -    centos-stream8         shut off
 -    centos-stream8-clone   shut off
 -    master01               shut off
 -    master02               shut off
 -    node01                 shut off
 -    node02                 shut off
 -    origal                 shut off
 -    origal-clone           shut off
 -    overlay-master01       shut off
 -    overlay-master02       shut off
 -    zzh-master01           shut off

 <span class="c"># 如果关不掉可以使用destroy</span>
</code></pre></div></div>

<h2 id="从bak复制对应镜像到镜像目录">从bak复制对应镜像到镜像目录</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">[</span>root@master01 zhengzihao]# <span class="nb">ls
</span>aware  bak  master02.qcow2  node01.qcow2  node02.qcow2
<span class="o">[</span>root@master01 zhengzihao]# <span class="nb">cp</span> ./bak/master01.qcow2 ./
<span class="o">[</span>root@master01 zhengzihao]# <span class="nb">ls
</span>aware  bak  master01.qcow2  master02.qcow2  node01.qcow2  node02.qcow2
</code></pre></div></div>

<h2 id="启动对应虚拟机">启动对应虚拟机</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">[</span>root@master01 zhengzihao]# virsh start zzh-master01
Domain <span class="s1">'zzh-master01'</span> started

<span class="o">[</span>root@master01 zhengzihao]# watch virsh list <span class="nt">--all</span>
</code></pre></div></div>]]></content><author><name>ifzzh</name></author><category term="cnic" /><category term="server" /><category term="Virtual Machine" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">拥有root权限后以root用户登录的方法</title><link href="https://ifzzh.github.io/ssh-login-as-root/" rel="alternate" type="text/html" title="拥有root权限后以root用户登录的方法" /><published>2024-08-03T00:00:00+00:00</published><updated>2024-08-03T00:00:00+00:00</updated><id>https://ifzzh.github.io/ssh-login-as-root</id><content type="html" xml:base="https://ifzzh.github.io/ssh-login-as-root/"><![CDATA[<!-- ###### 说明： -->

<!-- more -->

<link rel="stylesheet" type="text/css" href="../css/auto-title-number.css" />

<h2 id="目录">目录</h2>

<ul>
  <li><a href="#目录">目录</a></li>
  <li><a href="#获取root权限">获取root权限</a></li>
  <li><a href="#修改配置文件">修改配置文件</a></li>
  <li><a href="#重启sshd服务">重启sshd服务</a></li>
</ul>

<h2 id="获取root权限">获取root权限</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>su
</code></pre></div></div>

<h2 id="修改配置文件">修改配置文件</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 进入配置文件</span>
vi /etc/ssh/sshd_config

<span class="c"># 定位到 PermitRootLogin</span>
/PermitRootLogin

<span class="c"># 将注释符删掉，进行如下修改</span>
PermitRootLogin <span class="nb">yes</span>
</code></pre></div></div>

<h2 id="重启sshd服务">重启sshd服务</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>service sshd restart
</code></pre></div></div>]]></content><author><name>ifzzh</name></author><category term="root" /><category term="ssh" /><category term="Virtual Machine" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">在CentOS上修改DNS的记录</title><link href="https://ifzzh.github.io/dns-on-CentOS/" rel="alternate" type="text/html" title="在CentOS上修改DNS的记录" /><published>2024-07-31T00:00:00+00:00</published><updated>2024-07-31T00:00:00+00:00</updated><id>https://ifzzh.github.io/dns-on-CentOS</id><content type="html" xml:base="https://ifzzh.github.io/dns-on-CentOS/"><![CDATA[<!-- ###### 说明： -->

<!-- more -->

<link rel="stylesheet" type="text/css" href="../css/auto-title-number.css" />

<h2 id="目录">目录</h2>

<ul>
  <li><a href="#目录">目录</a></li>
  <li><a href="#前言">前言</a></li>
  <li><a href="#方法一限制networkmanager修改resolvconf的能力">方法一：限制NetworkManager修改resolv.conf的能力</a></li>
  <li><a href="#方法二利用networkmanager自定义dns">方法二：利用NetworkManager自定义DNS</a></li>
</ul>

<h2 id="前言">前言</h2>

<p>目前比较新的Linux发行版都已经采用<code class="language-plaintext highlighter-rouge">NetworkManager</code>来管理网络了，自定义DNS变得更加麻烦：每次<code class="language-plaintext highlighter-rouge">NetworkManager</code>启动都会覆盖<code class="language-plaintext highlighter-rouge">/etc/resolv.conf</code>，因此仅仅在<code class="language-plaintext highlighter-rouge">/etc/resolv.conf</code>中修改是不保险的。</p>

<h2 id="方法一限制networkmanager修改resolvconf的能力">方法一：限制NetworkManager修改resolv.conf的能力</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>chattr +i /etc/resolv.conf
</code></pre></div></div>
<p>这个命令将<code class="language-plaintext highlighter-rouge">/etc/resolv.conf</code>设置为不可修改，如此一来自定义DNS就不会被覆盖了</p>

<h2 id="方法二利用networkmanager自定义dns">方法二：利用NetworkManager自定义DNS</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>nano /etc/NetworkManager/conf.d/dns.conf
<span class="c"># 增加如下两行</span>
<span class="o">[</span>main]
<span class="nv">dns</span><span class="o">=</span>null

<span class="nb">sudo </span>nano /etc/NetworkManager/conf.d/dns-servers.conf
<span class="c"># 自定义DNS</span>
<span class="o">[</span>global-dns-domain-<span class="k">*</span><span class="o">]</span>
<span class="nv">servers</span><span class="o">=</span>::1,127.0.0.1,8.8.8.8

<span class="c"># 最后重启软件</span>
<span class="nb">sudo </span>systemctl restart NetworkManager
</code></pre></div></div>]]></content><author><name>ifzzh</name></author><category term="CentOS" /><category term="DNS" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">使用kubeadm部署k8s（v1.23，基于docker）</title><link href="https://ifzzh.github.io/k8s-setup/" rel="alternate" type="text/html" title="使用kubeadm部署k8s（v1.23，基于docker）" /><published>2024-07-31T00:00:00+00:00</published><updated>2024-07-31T00:00:00+00:00</updated><id>https://ifzzh.github.io/k8s-setup</id><content type="html" xml:base="https://ifzzh.github.io/k8s-setup/"><![CDATA[<!-- ###### 说明： -->

<!-- more -->

<link rel="stylesheet" type="text/css" href="../css/auto-title-number.css" />

<h2 id="目录">目录</h2>

<ul>
  <li><a href="#目录">目录</a></li>
  <li><a href="#主机硬件配置说明">主机硬件配置说明</a></li>
  <li><a href="#docker安装">docker安装</a>
    <ul>
      <li><a href="#卸载旧版本">卸载旧版本</a></li>
      <li><a href="#设置存储库">设置存储库</a></li>
      <li><a href="#安装最新版本的docker引擎和容器">安装最新版本的Docker引擎和容器</a></li>
      <li><a href="#安装指定版本">安装指定版本</a></li>
      <li><a href="#启动docker">启动docker</a></li>
      <li><a href="#卸载docker如需要">卸载docker（如需要）</a></li>
    </ul>
  </li>
  <li><a href="#docker配置">docker配置</a></li>
  <li><a href="#k8s-节点-linux-环境配置">k8s 节点 Linux 环境配置</a>
    <ul>
      <li><a href="#关闭swap分区">关闭swap分区</a></li>
      <li><a href="#节点网卡硬件编号验证是否冲突">节点网卡硬件编号验证是否冲突</a></li>
      <li><a href="#节点配置允许iptables转发桥接流量">节点配置允许iptables转发桥接流量</a></li>
      <li><a href="#关闭防火墙和selinux">关闭防火墙和SELinux</a></li>
    </ul>
  </li>
  <li><a href="#kubeadm方式部署k8s">kubeadm方式部署k8s</a>
    <ul>
      <li><a href="#所有节点安装部署组件kubeadm">所有节点安装部署组件kubeadm</a></li>
      <li><a href="#初始化master节点">初始化master节点</a></li>
    </ul>
  </li>
</ul>

<h2 id="主机硬件配置说明">主机硬件配置说明</h2>

<table>
  <thead>
    <tr>
      <th style="text-align: center">主机名</th>
      <th style="text-align: center">IP</th>
      <th style="text-align: center">角色</th>
      <th style="text-align: center">CPU</th>
      <th style="text-align: center">内存</th>
      <th style="text-align: center">系统</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">master01</td>
      <td style="text-align: center">223.193.36.152</td>
      <td style="text-align: center">master,etcd</td>
      <td style="text-align: center">8C</td>
      <td style="text-align: center">32G</td>
      <td style="text-align: center">CentOS 7</td>
    </tr>
    <tr>
      <td style="text-align: center">master02</td>
      <td style="text-align: center">223.193.36.155</td>
      <td style="text-align: center">master,etcd</td>
      <td style="text-align: center">8C</td>
      <td style="text-align: center">32G</td>
      <td style="text-align: center">CentOS 7</td>
    </tr>
    <tr>
      <td style="text-align: center">node01</td>
      <td style="text-align: center">223.193.36.179</td>
      <td style="text-align: center">worker</td>
      <td style="text-align: center">8C</td>
      <td style="text-align: center">32G</td>
      <td style="text-align: center">CentOS 7</td>
    </tr>
    <tr>
      <td style="text-align: center">node02</td>
      <td style="text-align: center">223.193.36.182</td>
      <td style="text-align: center">worker</td>
      <td style="text-align: center">8C</td>
      <td style="text-align: center">32G</td>
      <td style="text-align: center">CentOS 7</td>
    </tr>
    <tr>
      <td style="text-align: center">harbor</td>
      <td style="text-align: center">223.193.36.117</td>
      <td style="text-align: center">repository</td>
      <td style="text-align: center">8C</td>
      <td style="text-align: center">32G</td>
      <td style="text-align: center">CentOS 7</td>
    </tr>
  </tbody>
</table>

<!-- 
## 配置主机

### 主机名
```bash
# master01
hostnamectl set-hostname master01
# 以此类推
```

### 配置为静态IP地址

### 主机名与IP地址解析
在`/etc/hosts`中加入
```bash
223.193.36.152 master01
223.193.36.155 master02
223.193.36.179 node01
223.193.36.182 node02
```

### 关闭防火墙
```bash
# 检查方法
firewall-cmd --state

# 关闭方法
systemctl stop firewalld

# 加上开机禁用
systemctl disable --now firewalld
```

### 关闭SELinux

```bash
# 检查
sestatus

# 关闭方法：打开config文件，修改为disabled
sudo nano /etc/selinux/config

# 修改SELinux配置后需要重启操作系统
reboot
```

### 时间同步配置
```bash
# 编写同步规则
crontab -e
0 */1 * * * ntptable time1.aliyun.com

# 现在先同步一次
ntpdate time1.aliyun.com
```
### 升级操作系统内核
```bash
# 导入elrepo gpg key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

# 安装elrepo YUM源仓库
sudo yum -y install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

# 安装kernel-ml版本，ml为长期稳定版本，lt为长期维护版本
yum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64

# 设置grub2默认引导为0
grub2-set-default 0

# 重新生成grub2引导文件
grub2-mkconfig -o /boot/grub2/grub.cfg

# 更新后，需要重启，使用升级的内核生效
reboot
``` -->

<p><a href="https://pan.baidu.com/s/1PP0aGw4QdO0DdOvmddisXQ?pwd=nhht">安装包地址</a></p>

<h2 id="docker安装">docker安装</h2>

<h3 id="卸载旧版本">卸载旧版本</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 1. 卸载之前安装的组件</span>
<span class="nb">sudo </span>yum remove docker <span class="se">\</span>
                  docker-client <span class="se">\</span>
                  docker-client-latest <span class="se">\</span>
                  docker-common <span class="se">\</span>
                  docker-latest <span class="se">\</span>
                  docker-latest-logrotate <span class="se">\</span>
                  docker-logrotate <span class="se">\</span>
                  docker-engine

</code></pre></div></div>

<h3 id="设置存储库">设置存储库</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 1.安装yum-utils</span>
<span class="nb">sudo </span>yum <span class="nb">install</span> <span class="nt">-y</span> yum-utils

<span class="c"># 2.设置稳定的存储库</span>
<span class="nb">sudo </span>yum-config-manager <span class="se">\</span>
    <span class="nt">--add-repo</span> <span class="se">\</span>
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
<span class="c"># 下面是官网的, 上面使用阿里云的 国内比较快</span>
<span class="c">#    https://download.docker.com/linux/centos/docker-ce.repo</span>
</code></pre></div></div>

<h3 id="安装最新版本的docker引擎和容器">安装最新版本的Docker引擎和容器</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 1. 直接安装最新docker版本</span>
<span class="nb">sudo </span>yum <span class="nt">-y</span> <span class="nb">install </span>docker-ce docker-ce-cli containerd.io

<span class="c"># 2. 安装完成后查看版本</span>
docker <span class="nt">-v</span>
</code></pre></div></div>

<h3 id="安装指定版本">安装指定版本</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 如果想安装不同版本</span>
<span class="c"># 1.列出可用版本</span>
yum list docker-ce <span class="nt">--showduplicates</span> | <span class="nb">sort</span> <span class="nt">-r</span>

<span class="c"># 2.安装指定版本</span>
<span class="nb">sudo </span>yum <span class="nb">install </span>docker-ce-&lt;VERSION_STRING&gt; docker-ce-cli-&lt;VERSION_STRING&gt; containerd.io
如:
<span class="nb">sudo </span>yum <span class="nb">install </span>docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io

</code></pre></div></div>

<h3 id="启动docker">启动docker</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 启动docker</span>
systemctl start docker

<span class="c"># 停止docker</span>
systemctl stop docker

<span class="c"># 重启</span>
systemctl restart docker

<span class="c"># 查看状态</span>
systemctl status docker

<span class="c"># 设置开机自启动</span>
systemctl <span class="nb">enable </span>docker

<span class="c"># 查看信息</span>
docker info

<span class="c"># 查看帮助文档</span>
docker <span class="nt">--help</span>
</code></pre></div></div>
<h3 id="卸载docker如需要">卸载docker（如需要）</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 1.卸载 Docker 引擎、CLI 和容器包</span>
<span class="nb">sudo </span>yum remove docker-ce docker-ce-cli containerd.io

<span class="c"># 2.主机上的图像、容器、卷或自定义配置文件不会自动删除。要删除所有图像、容器和卷</span>
<span class="nb">sudo rm</span> <span class="nt">-rf</span> /var/lib/docker

<span class="c"># 3.必须手动删除任何编辑的配置文件。</span>
</code></pre></div></div>

<h2 id="docker配置">docker配置</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 给所有k8s主机配置docker</span>
<span class="nb">sudo </span>nano /etc/docker/daemon.json

<span class="c"># 改为如下内容</span>
<span class="o">{</span>
  <span class="s2">"registry-mirrors"</span>: <span class="o">[</span><span class="s2">"https://tuv7rqqq.mirror.aliyuncs.com"</span><span class="o">]</span>,
  <span class="s2">"insecure-registries"</span>: <span class="o">[</span><span class="s2">"http://harbor.ifzzh.com"</span><span class="o">]</span>,
  <span class="s2">"exec-opts"</span>: <span class="o">[</span><span class="s2">"native.cgroupdriver=systemd"</span><span class="o">]</span>
<span class="o">}</span>

<span class="c"># 参数说明：</span>
<span class="c"># "registry-mirrors": ["https://tuv7rqqq.mirror.aliyuncs.com"],</span>
<span class="c"># "insecure-registries": ["http://harbor.xinjizhiwa.com"], #允许拉取自建仓库harbor仓库的镜像；</span>
<span class="c"># "exec-opts": ["native.cgroupdriver=systemd"]   #kubeadm去寻找的cgroup默认是systemd，而docker不配置的话，默认是cgroupfs，不配置这个，部署k8s时会报错；</span>



<span class="c"># 重启docker服务</span>

systemctl restart docker.service
</code></pre></div></div>

<h2 id="k8s-节点-linux-环境配置">k8s 节点 Linux 环境配置</h2>

<h3 id="关闭swap分区">关闭swap分区</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 查看swap</span>
free <span class="nt">-h</span>

<span class="c"># 临时关闭swap分区</span>
swapoff <span class="nt">-a</span> <span class="o">&amp;&amp;</span> sysctl <span class="nt">-w</span> vm.swappiness<span class="o">=</span>0

<span class="c"># 永久关闭，把fstab中swap那一行注释掉</span>
<span class="nb">sed</span> <span class="nt">-ni</span> <span class="s1">'/^[^#]*swap/s@^@#@p'</span> /etc/fstab
</code></pre></div></div>

<h3 id="节点网卡硬件编号验证是否冲突">节点网卡硬件编号验证是否冲突</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 网卡编号验证</span>
ifconfig eth0 |grep ether |awk <span class="s1">'{print $2}'</span>

<span class="c"># 硬件编号验证</span>
<span class="nb">cat</span> /sys/class/dmi/id/product_uuid

</code></pre></div></div>

<h3 id="节点配置允许iptables转发桥接流量">节点配置允许iptables转发桥接流量</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cat</span> <span class="o">&gt;</span> /etc/modules-load.d/k8s.conf <span class="o">&lt;&lt;</span> <span class="no">EOF</span><span class="sh">
br_netfilter
</span><span class="no">EOF

</span><span class="nb">cat</span> <span class="o">&gt;</span> /etc/sysctl.d/k8s.conf <span class="o">&lt;&lt;</span> <span class="no">EOF</span><span class="sh">
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
</span><span class="no">EOF

</span>sysctl <span class="nt">--system</span>
</code></pre></div></div>

<h3 id="关闭防火墙和selinux">关闭防火墙和SELinux</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 关闭防火墙</span>
systemctl stop firewalld
systemctl disable firewalld
</code></pre></div></div>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 关闭SELinux</span>
setenforce 0
<span class="nb">sed</span> <span class="nt">-i</span> <span class="s1">'7c SELINUX=disabled'</span> /etc/selinux/config
</code></pre></div></div>

<h2 id="kubeadm方式部署k8s">kubeadm方式部署k8s</h2>

<h3 id="所有节点安装部署组件kubeadm">所有节点安装部署组件kubeadm</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 1. 配置yum源</span>
<span class="nb">cat</span>  <span class="o">&gt;</span> /etc/yum.repos.d/kubernetes.repo <span class="o">&lt;&lt;</span><span class="no">EOF</span><span class="sh">
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
</span><span class="no">EOF

</span><span class="c"># 2.查看安装源中的k8s都有什么版本？</span>

yum <span class="nt">-y</span> list kubeadm <span class="nt">--showduplicates</span> | <span class="nb">sort</span> <span class="nt">-r</span>

<span class="c"># 3. yum安装组件</span>

yum <span class="nt">-y</span> <span class="nb">install </span>kubeadm-1.23.17-0 kubelet-1.23.17-0 kubectl-1.23.17-0 

<span class="c"># 4. 设置开机自启动</span>
systemctl <span class="nb">enable</span> <span class="nt">--now</span> kubelet.service

<span class="c"># 5. 查看状态（此时启动失败，不用管，因为还没配置完成，配置完成后自动会启动）</span>
systemctl status kubelet.service
</code></pre></div></div>

<h3 id="初始化master节点">初始化master节点</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kubeadm init <span class="nt">--kubernetes-version</span><span class="o">=</span>v1.23.17 <span class="nt">--image-repository</span> registry.aliyuncs.com/google_containers  <span class="nt">--pod-network-cidr</span><span class="o">=</span>10.100.0.0/16 <span class="nt">--service-cidr</span><span class="o">=</span>10.200.0.0/16  <span class="nt">--service-dns-domain</span><span class="o">=</span>ifzzh.com

<span class="c"># 参数释义：</span>

<span class="nt">--pod-network-cidr</span><span class="o">=</span>10.100.0.0/16   <span class="c">#pod的网段</span>
<span class="nt">--service-cidr</span><span class="o">=</span>10.200.0.0/16    <span class="c">#service资源的网段</span>
<span class="nt">--service-dns-domain</span><span class="o">=</span>ifzzh.com  <span class="c">#service集群的dns解析名称</span>
</code></pre></div></div>]]></content><author><name>ifzzh</name></author><category term="k8s" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">升级CentOS内核</title><link href="https://ifzzh.github.io/CentOS-kernel-update/" rel="alternate" type="text/html" title="升级CentOS内核" /><published>2024-07-29T00:00:00+00:00</published><updated>2024-07-29T00:00:00+00:00</updated><id>https://ifzzh.github.io/CentOS-kernel-update</id><content type="html" xml:base="https://ifzzh.github.io/CentOS-kernel-update/"><![CDATA[<!-- ###### 说明： -->

<!-- more -->

<link rel="stylesheet" type="text/css" href="../css/auto-title-number.css" />

<h2 id="目录">目录</h2>

<ul>
  <li><a href="#目录">目录</a></li>
  <li><a href="#选定版本">选定版本</a></li>
  <li><a href="#下载内核rpm">下载内核RPM</a></li>
  <li><a href="#安装内核">安装内核</a></li>
  <li><a href="#确认已安装内核版本">确认已安装内核版本</a></li>
  <li><a href="#设置启动顺序">设置启动顺序</a></li>
</ul>

<h2 id="选定版本">选定版本</h2>

<p><a href="https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/">查找 kernel rpm 历史版本</a></p>

<p>这里以安装 LT 内核的5.4.278版本为例</p>

<h2 id="下载内核rpm">下载内核RPM</h2>

<p>共需下载三个类型rpm</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.278-1.el7.elrepo.x86_64.rpm
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.278-1.el7.elrepo.x86_64.rpm
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-headers-5.4.278-1.el7.elrepo.x86_64.rpm
</code></pre></div></div>

<h2 id="安装内核">安装内核</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>rpm <span class="nt">-ivh</span> kernel-lt-5.4.278-1.el7.elrepo.x86_64.rpm
rpm <span class="nt">-ivh</span> kernel-lt-devel-5.4.278-1.el7.elrepo.x86_64.rpm
</code></pre></div></div>

<h2 id="确认已安装内核版本">确认已安装内核版本</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>rpm <span class="nt">-qa</span> | <span class="nb">grep </span>kernel
</code></pre></div></div>

<h2 id="设置启动顺序">设置启动顺序</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
</code></pre></div></div>]]></content><author><name>ifzzh</name></author><category term="CentOS" /><category term="kernel" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Docker的安装与卸载</title><link href="https://ifzzh.github.io/Docker-install/" rel="alternate" type="text/html" title="Docker的安装与卸载" /><published>2024-07-28T00:00:00+00:00</published><updated>2024-07-28T00:00:00+00:00</updated><id>https://ifzzh.github.io/Docker-install</id><content type="html" xml:base="https://ifzzh.github.io/Docker-install/"><![CDATA[<blockquote>
  <p>CentOS 7</p>
</blockquote>

<!-- ###### 说明： -->

<!-- more -->

<link rel="stylesheet" type="text/css" href="../css/auto-title-number.css" />

<h2 id="目录">目录</h2>

<ul>
  <li><a href="#目录">目录</a></li>
  <li><a href="#docker安装">docker安装</a>
    <ul>
      <li><a href="#卸载旧版本">卸载旧版本</a></li>
      <li><a href="#设置存储库">设置存储库</a></li>
      <li><a href="#安装最新版本的docker引擎和容器">安装最新版本的Docker引擎和容器</a></li>
      <li><a href="#安装指定版本">安装指定版本</a></li>
      <li><a href="#启动docker">启动docker</a></li>
    </ul>
  </li>
  <li><a href="#卸载docker如需要">卸载docker（如需要）</a></li>
</ul>

<h2 id="docker安装">docker安装</h2>

<h3 id="卸载旧版本">卸载旧版本</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 1. 卸载之前安装的组件</span>
<span class="nb">sudo </span>yum remove docker <span class="se">\</span>
                  docker-client <span class="se">\</span>
                  docker-client-latest <span class="se">\</span>
                  docker-common <span class="se">\</span>
                  docker-latest <span class="se">\</span>
                  docker-latest-logrotate <span class="se">\</span>
                  docker-logrotate <span class="se">\</span>
                  docker-engine

</code></pre></div></div>

<h3 id="设置存储库">设置存储库</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 1.安装yum-utils</span>
<span class="nb">sudo </span>yum <span class="nb">install</span> <span class="nt">-y</span> yum-utils

<span class="c"># 2.设置稳定的存储库</span>
<span class="nb">sudo </span>yum-config-manager <span class="se">\</span>
    <span class="nt">--add-repo</span> <span class="se">\</span>
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
<span class="c"># 下面是官网的, 上面使用阿里云的 国内比较快</span>
<span class="c">#    https://download.docker.com/linux/centos/docker-ce.repo</span>
</code></pre></div></div>

<h3 id="安装最新版本的docker引擎和容器">安装最新版本的Docker引擎和容器</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 1. 直接安装最新docker版本</span>
<span class="nb">sudo </span>yum <span class="nt">-y</span> <span class="nb">install </span>docker-ce docker-ce-cli containerd.io

<span class="c"># 2. 安装完成后查看版本</span>
docker <span class="nt">-v</span>
</code></pre></div></div>

<h3 id="安装指定版本">安装指定版本</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 如果想安装不同版本</span>
<span class="c"># 1.列出可用版本</span>
yum list docker-ce <span class="nt">--showduplicates</span> | <span class="nb">sort</span> <span class="nt">-r</span>

<span class="c"># 2.安装指定版本</span>
<span class="nb">sudo </span>yum <span class="nb">install </span>docker-ce-&lt;VERSION_STRING&gt; docker-ce-cli-&lt;VERSION_STRING&gt; containerd.io
如:
<span class="nb">sudo </span>yum <span class="nb">install </span>docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io

</code></pre></div></div>

<h3 id="启动docker">启动docker</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 启动docker</span>
systemctl start docker

<span class="c"># 停止docker</span>
systemctl stop docker

<span class="c"># 重启</span>
systemctl restart docker

<span class="c"># 查看状态</span>
systemctl status docker

<span class="c"># 设置开机自启动</span>
systemctl <span class="nb">enable </span>docker

<span class="c"># 查看信息</span>
docker info

<span class="c"># 查看帮助文档</span>
docker <span class="nt">--help</span>
</code></pre></div></div>
<h2 id="卸载docker如需要">卸载docker（如需要）</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 1.卸载 Docker 引擎、CLI 和容器包</span>
<span class="nb">sudo </span>yum remove docker-ce docker-ce-cli containerd.io

<span class="c"># 2.主机上的图像、容器、卷或自定义配置文件不会自动删除。要删除所有图像、容器和卷</span>
<span class="nb">sudo rm</span> <span class="nt">-rf</span> /var/lib/docker

<span class="c"># 3.必须手动删除任何编辑的配置文件。</span>
</code></pre></div></div>]]></content><author><name>ifzzh</name></author><category term="docker" /><summary type="html"><![CDATA[CentOS 7]]></summary></entry><entry><title type="html">K8S集群删除Pod方法</title><link href="https://ifzzh.github.io/K8S-delete-pod/" rel="alternate" type="text/html" title="K8S集群删除Pod方法" /><published>2024-07-26T00:00:00+00:00</published><updated>2024-07-26T00:00:00+00:00</updated><id>https://ifzzh.github.io/K8S-delete-pod</id><content type="html" xml:base="https://ifzzh.github.io/K8S-delete-pod/"><![CDATA[<!-- ###### 说明： -->

<!-- more -->

<h2 id="目录">目录</h2>

<ul>
  <li><a href="#目录">目录</a></li>
  <li><a href="#常规方法">常规方法</a></li>
  <li><a href="#强制删除">强制删除</a></li>
  <li><a href="#强制删除无法解决时">强制删除无法解决时</a></li>
</ul>

<h2 id="常规方法">常规方法</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kubectl delete deployment <span class="o">[</span>deployment-name]
kubectl delete pod <span class="o">[</span>pod-name]
</code></pre></div></div>

<h2 id="强制删除">强制删除</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kubectl delete pod &lt;pod-name&gt; <span class="nt">--force</span> <span class="nt">--grace-period</span><span class="o">=</span>0
</code></pre></div></div>

<h2 id="强制删除无法解决时">强制删除无法解决时</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 先查看pod的名字</span>
kubectl get pod <span class="nt">-n</span> <span class="o">[</span>ns]
<span class="c"># 查看该pod的类型（Controlled By字段）</span>
kubectl describe pod <span class="nt">-n</span> <span class="o">[</span>ns] <span class="o">[</span>pod-name]
<span class="c"># 查看对应的类型，获得pod对应的name</span>
kubectl get <span class="o">[</span>pod <span class="nb">type</span><span class="o">]</span> <span class="nt">-n</span> ns
<span class="c"># 在namespace之前加上刚刚查到的name</span>
kubectl delete <span class="o">[</span><span class="nb">type</span><span class="o">]</span> <span class="o">[</span>name] <span class="nt">-n</span> <span class="o">[</span>ns] <span class="nt">--force</span> <span class="nt">--grace-period</span><span class="o">=</span>0
</code></pre></div></div>]]></content><author><name>ifzzh</name></author><category term="k8s" /><category term="delete-pod" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">K8S集群整体架构</title><link href="https://ifzzh.github.io/K8S-intro/" rel="alternate" type="text/html" title="K8S集群整体架构" /><published>2024-07-26T00:00:00+00:00</published><updated>2024-07-26T00:00:00+00:00</updated><id>https://ifzzh.github.io/K8S-intro</id><content type="html" xml:base="https://ifzzh.github.io/K8S-intro/"><![CDATA[<!-- ###### 说明： -->

<!-- more -->

<h2 id="目录">目录</h2>

<ul>
  <li><a href="#目录">目录</a></li>
  <li><a href="#整体架构">整体架构</a></li>
</ul>

<h2 id="整体架构">整体架构</h2>
<p><a href="https://www.processon.com/diagraming/66a3410f5959ba6da94f0440?from=pwa">修改链接</a></p>

<p><a href="https://www.processon.com/embed/66a3410f5959ba6da94f0440?cid=66a3410f5959ba6da94f0443">查看大图</a></p>

<iframe id="embed_dom" name="embed_dom" frameborder="0" style="display:block;margin-left:0px; margin-top:0px;width:100%; height:640px;" src="https://www.processon.com/embed/66a3410f5959ba6da94f0440?cid=66a3410f5959ba6da94f0443"></iframe>]]></content><author><name>ifzzh</name></author><category term="k8s" /><summary type="html"><![CDATA[]]></summary></entry></feed>