最爱酸辣鸡杂 發表於 2025-4-17 09:53:00

Ubuntu K8S完全安装指南2025最新版!(小白也能学会,超详细)

<p>Ubuntu K8S完全安装指南2025最新版!(小白也能学会,超详细)2025 k8s 最新版安装指南(小白版) Ub - 掘金</p>
<p><strong>声明:k8s安装比较不易,本文适用于Ubuntu22.04~Ubuntu24.04版本,本文使用Ubuntu24.04演示。其它版本可以作为参考使用</strong></p>
<p><strong>k8s版本:1.32.2最新版!同时也适用于1.30之后的版本</strong></p>
<p><strong>容器运行时:本文介绍了k8s两种容器运行时docker和containerd案例</strong></p>
<p>🎉🎉🎉&nbsp;<strong>真心的祝你有一个愉快的k8s学习之旅!^_^</strong>&nbsp;🎉🎉🎉</p>
<h2 data-id="heading-0">总览</h2>
<ol>
<li>准备三台虚拟机Ubuntu系统</li>
<li>为Ubuntu系统初始化一些配置</li>
<li>安装容器运行时(cri-docker或者containerd,两种方式都介绍)</li>
<li>安装并部署k8s集群</li>
<li>验证集群</li>
<li>如果安装错了,回退它!<code>kubeadm reset</code></li>
</ol>
<h2 data-id="heading-1">一、准备三台虚拟机</h2>
<p>k8s集群至少准备3台机器,一台master,两台worker。</p>
<p>安装教程我放在了文章末尾,可以到末尾[附录1]章节查看</p>
<h2 data-id="heading-2">二、为Ubuntu系统初始化一些配置</h2>
<p>安装k8s之前,必须对系统做一些配置,否则k8s无法启动。</p>
<h3 data-id="heading-3">2.1 IP规划</h3>
<p>我的网段是&nbsp;<code>192.168.31.0/24</code>,所以我的虚拟机地址都在这个网段。可以根据你自己的网段设置IP。至少准备三台虚拟机,我的三台虚拟机IP分配如下,一台master节点,两台worker节点。配置有点多,如果有些配置你不懂,没关系,代码我都准备好了,只要没有特殊说明,就可以直接copy代码执行。^_^</p>
<blockquote>
<p>我采用的是桥接网络模式,相当于局域网的一台机器,可以与局域网互相连通</p>
<p><strong>第2章节的所有命令,如果没有特殊说明,表示在三台机器上都要执行</strong></p>
</blockquote>
<table>
<thead>
<tr>
<th>名称</th>
<th>ip</th>
</tr>
</thead>
<tbody>
<tr>
<td>k8smaster</td>
<td>192.168.31.224</td>
</tr>
<tr>
<td>k8snode1</td>
<td>192.168.31.225</td>
</tr>
<tr>
<td>k8snode2</td>
<td>192.168.31.226</td>
</tr>
</tbody>
</table>
<h3 data-id="heading-4">2.2 准备Root用户</h3>
<p>因为ubuntu默认没有开启root用户,而使用root操作会方便很多。 设置root密码</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>sudo passwd root</code></pre>
<p>切换root</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>su - root</code></pre>
<h3 data-id="heading-5">2.3 设置主机名</h3>
<blockquote>
<p>分别为三台机器设置主机名</p>
</blockquote>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>sudo hostnamectl set-hostname "k8smaster"      
sudo hostnamectl set-hostname "k8snode1"   
sudo hostnamectl set-hostname "k8snode2"    </code></pre>
<h3 data-id="heading-6">2.4 域名写入host文件</h3>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">shell</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-shell" tabindex="0" data-dark-theme="true"><code>cat &gt;&gt; /etc/hosts &lt;&lt; EOF
192.168.31.224 k8smaster
192.168.31.225 k8snode1
192.168.31.226 k8snode2
# 如果你想多玩几台机器,也可以自行添加
192.168.31.227 k8snode3
EOF</code></pre>
<p>可以在master上使用<code>ping</code>命令验证</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>ping -c 2 k8snode1</code></pre>
<h3 data-id="heading-7">2.5 时间同步</h3>
<p>分布式要解决的一个问题就是时钟同步,这里我们借助阿里云服务,实现集群节点与阿里云时钟同步 设置时区为上海</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">shell</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-shell" tabindex="0" data-dark-theme="true"><code>timedatectl set-timezone Asia/Shanghai</code></pre>
<h4 data-id="heading-8">安装ntpdate并与阿里云同步</h4>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>sudo apt install -y ntpsec-ntpdate
ntpdate ntp.aliyun.com</code></pre>
<h4 data-id="heading-9">配置自动同步</h4>
<p>使用<code>crontab</code>设置定时任务,每天晚上0点执行 终端输入</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>crontab -e</code></pre>
<p>选择一个合适的编辑器,然后在配置末尾加上如下代码,表示每晚0点执行同步命令</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">c</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-c" tabindex="0" data-dark-theme="true"><code>0 0 * * * ntpdate ntp.aliyun.com</code></pre>
<h3 data-id="heading-10">2.6 配置内核转发和网桥过滤</h3>
<p>生成配置</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>cat &lt;&lt; EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF</code></pre>
<p>如上配置需要加在如下两个模块</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>modprobe overlay
modprobe br_netfilter</code></pre>
<p>写到配置文件,永久生效</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>cat &lt;&lt; EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF</code></pre>
<p>应用配置</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>sysctl --system</code></pre>
<h3 data-id="heading-11">2.7 安装ipvs</h3>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>apt install -y ipset ipvsadm</code></pre>
<p>配置ipvsadm的模块,这些都是算法模块,目的是为了让开机自动加载</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">shell</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-shell" tabindex="0" data-dark-theme="true"><code>cat &lt;&lt; EOF | tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_VS_wrr
ip_vs_sh
nf_conntrack
EOF</code></pre>
<p>编写脚本自动加载</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>cat &lt;&lt; EOF | tee ipvs.sh
#!/bin/sh
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF</code></pre>
<p>执行脚本</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>sh ipvs.sh</code></pre>
<p>验证脚本是否生效</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>lsmod | grep ip_vs</code></pre>
<h3 data-id="heading-12">2.8 关闭swap分区</h3>
<p><strong>步骤1:首先,查看当前启用的交换分区,可以使用 swapon 命令:</strong></p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">shell</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-shell" tabindex="0" data-dark-theme="true"><code>sudo swapon --show</code></pre>
<p>输出会类似于:</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">plain</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs language-plain prismjs-lines-highlighted" tabindex="0" data-dark-theme="true"><code>NAME      TYPESIZE   USEDPRIO
/dev/sda2 partition 4G    0B    -2</code></pre>
<p><strong>步骤2:禁用交换分区</strong>&nbsp;下面命令只是临时禁用</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">shell</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-shell" tabindex="0" data-dark-theme="true"><code>sudo swapoff -a</code></pre>
<p><strong>步骤 3:禁止交换分区在系统启动时自动挂载</strong></p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">shell</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-shell" tabindex="0" data-dark-theme="true"><code>sudo vim /etc/fstab</code></pre>
<p>注释掉如下行</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">plain</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs language-plain prismjs-lines-highlighted" tabindex="0" data-dark-theme="true"><code>/dev/sda2 none swap sw 0 0</code></pre>
<blockquote>
<p>至此,Ubuntu服务器配置就初始化成功了,下面可以开始准备集群环境了!</p>
</blockquote>
<h2 data-id="heading-13">三、安装容器运行时</h2>
<blockquote>
<p><strong>第三章节的所有命令,如果没有特殊说明,表示在三台机器上都要执行</strong></p>
</blockquote>
<p>k8s1.24(包含1.24)版本后移除了内置的docker引擎,推荐使用<code>containerd</code>容器运行时。官网大势所趋,没什么好说的。但是!!!国内的网络实在是无法拉取镜像,导致集群根本搭建不起来。尝试了以下各种方法都没解决</p>
<ul>
<li>宿主机使用魔法上网,虚拟机使用NAT网络,共享宿主机的魔法网络。(失败!)</li>
<li>为containerd配置国内镜像源,特指阿里云(失败)</li>
</ul>
<blockquote>
<p>无奈之下,还是使用<code>cri-docker</code>作为容器运行时吧!但是安装containerd的内容我也会放到[附录2],有哪位大神可以分享containerd拉取镜像不失败的办法可以评论区留下链接!</p>
</blockquote>
<h3 data-id="heading-14">3.1 安装Docker</h3>
<p>可参考官网安装,也可以按照如下步骤安装,</p>
<ol>
<li>安装apt仓库</li>
</ol>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">shell</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-shell" tabindex="0" data-dark-theme="true"><code># Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
"deb https://download.docker.com/linux/ubuntu \
$(. /etc/os-release &amp;&amp; echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
sudo apt-get update</code></pre>
<ol start="2">
<li>安装最新版docker</li>
</ol>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">shell</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-shell" tabindex="0" data-dark-theme="true"><code>sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</code></pre>
<ol start="3">
<li>使用&nbsp;<code>docker --version</code>&nbsp;检查</li>
</ol>
<h3 data-id="heading-15">3.2 配置Docker镜像加速</h3>
<p>众所周知,国内docker下载镜像很困难,需要我们手动设置国内的镜像源。</p>
<p>修改&nbsp;<code>/etc/docker/daemon.json</code>,如果该文件不存在就创建该文件并把以下内容写入文件。</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">json</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-json" tabindex="0" data-dark-theme="true"><code>{
"registry-mirrors": [
    "https://docker.1ms.run",
    "https://doublezonline.cloud",
    "https://dislabaiot.xyz",
    "https://docker.fxxk.dedyn.io",
    "https://dockerpull.org",
    "https://docker.unsee.tech",
    "https://hub.rat.dev",
    "https://docker.1panel.live",
    "https://docker.nastool.de",
    "https://docker.zhai.cm",
    "https://docker.5z5f.com",
    "https://a.ussh.net",
    "https://docker.udayun.com",
    "https://hub.geekery.cn"
],
"insecure-registries": ["kubernetes-register.sswang.com"],
"exec-opts": [
    "native.cgroupdriver=systemd"
]
}</code></pre>
<p>然后重启</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>systemctl daemon-reload
systemctl restart docker</code></pre>
<p>设置开机重启</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>systemctl enable docker</code></pre>
<h3 data-id="heading-16">3.3 安装cri-docker</h3>
<p>为什么需要安装cri-docker?他相当于一个桥梁,k8s通过调用cri-docker来间接调用docker服务&nbsp;官网安装最新版本,这里为&nbsp;<code>0.3.16</code></p>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/ad8af5fea98849c8a5f76b6b30b8556e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=UNQttGaAftKdCEI1pZg7reeOVN0%3D" alt="20250221212350cri-docker-github.png" class="medium-zoom-image"></p>
<p>使用wget(或其他方式)下载到服务器上</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.16/cri-dockerd-0.3.16.amd64.tgz</code></pre>
<h3 data-id="heading-17">3.3.1 配置cri-docker</h3>
<p>解压</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>tar xf cri-dockerd-0.3.16.amd64.tgz</code></pre>
<p>解压完成后,其实只有一个文件:<code>cri-dockerd</code></p>
<p>我们只需要把它移动到&nbsp;<code>/usr/bin</code>&nbsp;下即可 移动文件到&nbsp;<code>/usr/bin</code>&nbsp;目录</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>mv cri-dockerd/cri-dockerd /usr/local/bin/
mv cri-dockerd/cri-dockerd /usr/bin/</code></pre>
<p>查看版本号(只为验证)</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>cri-dockerd --version</code></pre>
<p>设置开机启动脚本,创建文件&nbsp;<code>/etc/systemd/system/cri-dockerd.service</code>&nbsp;,写入如下内容(完全复制即可)</p>
<blockquote>
<p>k8s1.32版本对应的pause是3.10</p>
</blockquote>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">toml</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-toml" tabindex="0" data-dark-theme="true"><code>cat &gt; /etc/systemd/system/cri-dockerd.service&lt;&lt;-EOF

Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket   #system cri-docker.socket文件名


Type=notify
ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10
--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --docker-endpoint=unix:///var/run/docker.sock --cri-dockerd-root-directory=/var/lib/docker
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process

WantedBy=multi-user.target
EOF</code></pre>
<p>创建&nbsp;<code>/etc/systemd/system/cri-docker.socket</code>&nbsp;文件,并写入如下内容</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">toml</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-toml" tabindex="0" data-dark-theme="true"><code>cat &gt; /etc/systemd/system/cri-docker.socket &lt;&lt;-EOF

Description=CRI Docker Socket for the API
PartOf=cri-docker.service    #systemd cri-docker.servics 文件名


ListenStream=/var/run/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker


WantedBy=sockets.target
EOF</code></pre>
<p>执行开机启动</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>systemctl daemon-reload
systemctl enable cri-dockerd.service
systemctl restart cri-dockerd.service</code></pre>
<p>验证启动信息</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">ruby</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-ruby" tabindex="0" data-dark-theme="true"><code>root@k8snode2:~# ls/var/run | grep docker
cri-dockerd.sock
docker
docker.pid
docker.sock</code></pre>
<h2 data-id="heading-18">四、安装&amp;部署k8s集群</h2>
<blockquote>
<p><strong>第4章节的所有命令,有的需要在三台机器上都执行,有的只需要在worker上执行,有的只需要在master上执行。我会标注</strong></p>
</blockquote>
<p>激动(≧▽≦)/,终于开始安装k8s本体了!这里以安装1.32版本为例</p>
<h3 data-id="heading-19">4.1 基本工具</h3>
<ol>
<li>更新&nbsp;<code>apt</code>&nbsp;包索引并安装使用 Kubernetes&nbsp;<code>apt</code>&nbsp;仓库所需要的包:</li>
</ol>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">shell</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-shell" tabindex="0" data-dark-theme="true"><code># 三台机器都执行
sudo apt-get update
# apt-transport-https 可能是一个虚拟包(dummy package);如果是的话,你可以跳过安装这个包
sudo apt-get install -y apt-transport-https ca-certificates curl gpg</code></pre>
<h3 data-id="heading-20">4.2 公共签名密钥(1.32)</h3>
<p>如果&nbsp;<code>/etc/apt/keyrings</code>&nbsp;目录不存在,则应在 curl 命令之前创建它,请阅读下面的注释。&nbsp;<code>sudo mkdir -p -m 755 /etc/apt/keyrings</code></p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">shell</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-shell" tabindex="0" data-dark-theme="true"><code># 三台机器都执行
# 如果 `/etc/apt/keyrings` 目录不存在,则应在 curl 命令之前创建它,请阅读下面的注释。
# sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg</code></pre>
<p>验证</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">ruby</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-ruby" tabindex="0" data-dark-theme="true"><code>root@k8smaster:~# ls /etc/apt/keyrings/
kubernetes-apt-keyring.gpg</code></pre>
<h3 data-id="heading-21">4.3 准备源仓库</h3>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">shell</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-shell" tabindex="0" data-dark-theme="true"><code># 三台机器都执行
# 此操作会覆盖 /etc/apt/sources.list.d/kubernetes.list 中现存的所有配置。
echo 'deb https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list</code></pre>
<p>验证</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">ruby</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-ruby" tabindex="0" data-dark-theme="true"><code>root@k8smaster:~# ls /etc/apt/sources.list.d/
kubernetes.listubuntu.sources.curtin.orig
ubuntu.sources</code></pre>
<h4 data-id="heading-22">查看软件依赖(非必看章节,可直接跳到4.4开始安装)</h4>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>apt update
apt-cache policy kubeadm</code></pre>
<p>输出结果</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">ruby</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-ruby" tabindex="0" data-dark-theme="true"><code>root@k8smaster:~# apt-cache policy kubeadm
kubeadm:
Installed: 1.32.2-1.1
Candidate: 1.32.2-1.1
Version table:
*** 1.32.2-1.1 500
      500 https://pkgs.k8s.io/core:/stable:/v1.32/debPackages
      100 /var/lib/dpkg/status
   1.32.1-1.1 500
      500 https://pkgs.k8s.io/core:/stable:/v1.32/debPackages
   1.32.0-1.1 500
      500 https://pkgs.k8s.io/core:/stable:/v1.32/debPackages</code></pre>
<h4 data-id="heading-23">查看软件依赖树(非必看章节,可直接跳到4.4开始安装)</h4>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>apt-cache showpkg kubeadm</code></pre>
<h4 data-id="heading-24">查看软件版本(非必看章节,可直接跳到4.4开始安装)</h4>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>apt-cache madison kubeadm</code></pre>
<p>输出结果</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">ruby</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-ruby" tabindex="0" data-dark-theme="true"><code>root@k8smaster:~# apt-cache policy kubeadm
kubeadm:
Installed: 1.32.2-1.1
Candidate: 1.32.2-1.1
Version table:
*** 1.32.2-1.1 500
      500 https://pkgs.k8s.io/core:/stable:/v1.32/debPackages
      100 /var/lib/dpkg/status
   1.32.1-1.1 500
      500 https://pkgs.k8s.io/core:/stable:/v1.32/debPackages
   1.32.0-1.1 500
      500 https://pkgs.k8s.io/core:/stable:/v1.32/debPackages
root@k8smaster:~# apt-cache madison kubeadm
   kubeadm | 1.32.2-1.1 | https://pkgs.k8s.io/core:/stable:/v1.32/debPackages
   kubeadm | 1.32.1-1.1 | https://pkgs.k8s.io/core:/stable:/v1.32/debPackages
   kubeadm | 1.32.0-1.1 | https://pkgs.k8s.io/core:/stable:/v1.32/debPackages</code></pre>
<h3 data-id="heading-25">4.4 安装</h3>
<p><code>kubeadm kubectl kubelet</code>是安装k8s的工具。</p>
<p>安装默认版本</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code># 三台机器都执行
sudo apt-get install -y kubelet kubeadm kubectl</code></pre>
<blockquote>
<p>参考:安装指定版本 比如,当前版本是1.32.2,但是我想安装<code>1.31.0-1.1</code>版本,可以使用如下命令 sudo apt-get install -y kubelet=1.31.0-1.1 kubeadm=1.31.0-1.1 kubectl=1.31.0-1.1</p>
</blockquote>
<h4 data-id="heading-26">锁定版本</h4>
<p>为了防止自动更新</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code># 三台机器都执行
apt-mark hold kubelet kubeadm kubectl</code></pre>
<p>如果想升级版本,可以解锁</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>apt-mark unhold kubelet kubeadm kubectl</code></pre>
<h3 data-id="heading-27">4.5 配置kubelet</h3>
<p>进入文件kubelet,1.30版本之后都是在&nbsp;<code>/etc/default/kubelet</code>,之前字啊&nbsp;<code>/etc/sysconfig/kubelet</code></p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code># 三台机器都执行
vim /etc/default/kubelet</code></pre>
<p>添加为如下配置,配置cgroup管理</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">ini</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-ini" tabindex="0" data-dark-theme="true"><code># 三台机器都执行
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"</code></pre>
<p>设置开机自启动</p>
<p><strong>注意:</strong>&nbsp;这里只是设置开机启动,但是并没有启动&nbsp;<code>kubelet</code>。请不要在此刻启动kubelet。那什么时候启动呢?等kubeadm init 的时候会自动带起来&nbsp;<code>kubelet</code></p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code># 三台机器都执行
systemctl enable kubelet</code></pre>
<h3 data-id="heading-28">4.6 初始化集群</h3>
<p><strong>初始化集群的操作,请在master上操作,加入集群的命令请在worker节点操作。命令会详细说明</strong></p>
<h4 data-id="heading-29">4.6.1 规划集群网段</h4>
<p>规划pod/service网段,这两个网段和宿主机网段不能重复!原则只有一个:三个网段不重复,没有交叉即可!</p>
<ul>
<li>宿主机网段:前面已经规划过。即:192.168.31.0/24</li>
<li>service网段:10.96.0.0/12</li>
<li>pod网段:10.244.0.0/16</li>
</ul>
<h4 data-id="heading-30">4.6.2 执行kubeadm init命令</h4>
<p>执行kubeadm来初始化集群,注意不要完全抄如下命令,请自行更改参数值。下面有参数释义。</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code># master节点执行
kubeadm init\
--kubernetes-version=1.32.2\
--control-plane-endpoint=k8smaster\
--apiserver-advertise-address=192.168.31.224\
--pod-network-cidr=10.244.0.0/16\
--service-cidr=10.96.0.0/12\
--image-repository=registry.aliyuncs.com/google_containers   \
--cri-socket=unix:///var/run/cri-dockerd.sock\
--upload-certs   \
--v=9</code></pre>
<p>参数释义:</p>
<ul>
<li>kubernetes-version:指定k8s的版本,我这里是1.32.2,你的也许是1.31.1-1.1等</li>
<li>control-plane-endpoint:可以理解为集群master的命名,随意写即可</li>
<li>apiserver-advertise-address:集群中master的地址!注意不要抄,写你自己虚拟机的ip地址</li>
<li>pod-network-cidr:pod网段地址,4.6.1已经规划过了,只要不与集群网段和service网段重复即可</li>
<li>service-cidr:service网段地址,4.6.1已经规划过了,只要不与集群网段和pod网段重复即可</li>
<li>image-repository:指定使用国内镜像</li>
<li>cri-socket:指定使用的容器运行时,如果你使用的containerd容器,那就不用写这个参数</li>
<li>v:日志级别,9表示输出的信息会很详细</li>
</ul>
<p>根据自己的ip设置好参数后,在master!注意是master节点,上执行<code>kubeadm init</code>命令。可能会需要一两分钟下载镜像,执行完毕后输出如下:</p>
<blockquote>
<p>执行的时候如果出错可能是因为命令里有空格,实在不行你可以手敲。命令是对的。问题已修正,修正日期:2025/03/01</p>
</blockquote>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/e016c3f4ef194457ba3823d0e2ce6c37~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=SQfKlOWkDusNBRrknn85bfq81i0%3D" alt="20250217224808kubeadm-init.png" class="medium-zoom-image"></p>
<p>输出中有两段非常重要的命令(请注意,不要copy我的命令1、命令2.请使用你自己控制台输出的命令)</p>
<p>命令1:</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">shell</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-shell" tabindex="0" data-dark-theme="true"><code># master节点执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config</code></pre>
<p>命令2:命令2的意思是使当前节点加入k8s集群。<strong>其中cri-socket是指定容器运行时,如果你是containerd,可以不用写该参数。</strong></p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">shell</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-shell" tabindex="0" data-dark-theme="true"><code># 其余worker节点执行
kubeadm join k8smaster:6443 --token xz5yda.n039y3u3vhr7r79e \
        --discovery-token-ca-cert-hash sha256:a352ce9721a4ff2cec99275309c2373cbd9815ba36193b957871c0b09862d6c6 \
   --cri-socket=unix:///var/run/cri-dockerd.sock</code></pre>
<p>请把命令1在master节点执行。命令2分别在其他的worker节点执行</p>
<p>然后执行&nbsp;<code>kubectl get nodes</code>命令就可以看到三台机器都在同一个集群了。</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sql</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sql" tabindex="0" data-dark-theme="true"><code>root@k8smaster:~# kubectl get nodes
NAME      STATUS      ROLES         AGE   VERSION
k8smaster   NotReady    control-plane   15h   v1.32.2
k8snode1    NotReady    &lt;none&gt;          15h   v1.32.2
k8snode2    NotReady    &lt;none&gt;          15h   v1.32.2</code></pre>
<p>但是节点都还是<code>NoteReady</code>状态,接下来我们来配置Pod网络,让集群变成<code>Ready</code>状态。需要使用calico组件完成</p>
<h3 data-id="heading-31">4.7 安装calico</h3>
<p><strong>4.7 章节的命令,请在master上操作</strong></p>
<p>官网:calico:docs.tigera.io/calico/late…</p>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/bc02d67aea2b486c8552d135499c9f56~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=N38fMV%2F3FftM%2F2kMaqrszBrYeb8%3D" alt="image.png" class="medium-zoom-image"></p>
<h4 data-id="heading-32">4.7.1 安装</h4>
<p>直接copy官网的第一步命令,在master节点上安装</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.2/manifests/tigera-operator.yaml</code></pre>
<h4 data-id="heading-33">4.7.2 下载配置文件</h4>
<p>不能直接按照官网的第二步操作 官网第二步为:</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code># master执行
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.2/manifests/custom-resources.yaml</code></pre>
<p>应当先下载里面的配置文件,我们去修改配置文件</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code># master执行
wgethttps://raw.githubusercontent.com/projectcalico/calico/v3.29.2/manifests/custom-resources.yaml</code></pre>
<h4 data-id="heading-34">4.7.3 编辑配置文件修改pod网段</h4>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code># master执行
vim custom-resources.yaml</code></pre>
<p>修改其中的网段为之前规划好的pod网段<code>10.244.0.0/16</code>(4.6.1规划的,可以回去看一看)</p>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/43afcec9d60e411bbd4666a12fa09180~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=lD4kxAE%2FMaWLglNlevkghN1HEqg%3D" alt="image.png" class="medium-zoom-image"></p>
<h4 data-id="heading-35">4.7.4 运行calico</h4>
<p>使用create而不是apply</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code># master节点执行
kubectl create -f custom-resources.yaml</code></pre>
<p>如果安装过程中由于网络或其他问题,安装失败,想删除资源,可以使用。一般只要是镜像源配置对了就不会失败</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code># master节点执行
kubectl delete -f custom-resources.yaml</code></pre>
<p>检查calico是否运行成功</p>
<p>执行如下命令,可以看到命名空间&nbsp;<code>calico-system</code>&nbsp;下正在运行的容器</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>kubectl get pod -n calico-system</code></pre>
<p>使用<code>watch</code>命令可以持续监视pod状态</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sql</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sql" tabindex="0" data-dark-theme="true"><code>watch kubectl get pod -n calico-system</code></pre>
<p>所有STATUS=Running表示运行成功</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sql</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sql" tabindex="0" data-dark-theme="true"><code>NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-676b574787-jjgj2   1/1   Running   0          15h
calico-node-j7ggr                        1/1   Running   0          15h
calico-node-pzwk7                        1/1   Running   0          15h
calico-node-qxgt6                        1/1   Running   0          15h
calico-typha-6fb6b7cc5c-vkrcd            1/1   Running   0          15h
calico-typha-6fb6b7cc5c-vtnrl            1/1   Running   0          15h
csi-node-driver-78dq8                      2/2   Running   0          15h
csi-node-driver-w49l8                      2/2   Running   0          15h
csi-node-driver-zx9d2                      2/2   Running   0          15h</code></pre>
<p>此刻再次查看node状态,就会是Ready了</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sql</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sql" tabindex="0" data-dark-theme="true"><code>$ kubectl get nodes
NAME      STATUS   ROLES         AGE   VERSION
k8smaster   Ready    control-plane   15h   v1.32.2
k8snode1    Ready    &lt;none&gt;          15h   v1.32.2
k8snode2    Ready    &lt;none&gt;          15h   v1.32.2</code></pre>
<p>至此,k8s集群就安装好了!!🎉🎉🎉🎉接下来可以安装一个nginx检验集群了</p>
<h4 data-id="heading-36">4.7.5 calico问题排查(安装成功请忽略本节)</h4>
<p>pod运行状态如下: 执行如下命令,可以看到命名空间&nbsp;<code>calico-system</code>&nbsp;下正在运行的容器</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>kubectl get pod -n calico-system</code></pre>
<p>使用<code>watch</code>命令可以持续监视pod状态</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sql</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sql" tabindex="0" data-dark-theme="true"><code>watch kubectl get pod -n calico-system</code></pre>
<p>pod运行状态如下:</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">scss</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-scss" tabindex="0" data-dark-theme="true"><code>root@k8smaster:~# kubectl get pod -n calico-system
NAME                                       READY   STATUS            RESTARTS   AGE
calico-kube-controllers-7cdcb4d576-4c6g5   0/1   Pending             0          32s
calico-node-68kl9                        0/1   Init:0/2            0          32s
calico-node-mpzvq                        0/1   Init:0/2            0          32s
calico-node-xnwgb                        0/1   Init:0/2            0          32s
calico-typha-65c7654fbf-vps5z            0/1   ContainerCreating   0          31s
calico-typha-65c7654fbf-wnc2s            0/1   ContainerCreating   0          32s
csi-node-driver-7jqk8                      0/2   ContainerCreating   0          32s
csi-node-driver-rsvfk                      0/2   ContainerCreating   0          32s
csi-node-driver-xsx7s                      0/2   ContainerCreating   0          32s</code></pre>
<p>如果出现问题,可以通过如下命令查看报错信息,其中&nbsp;<code>calico-node-pdf78</code>&nbsp;为上面查看的pod名称</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>kubectl describe pod calico-node-pdf78-n calico-system</code></pre>
<p>监控输出如下</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">ini</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-ini" tabindex="0" data-dark-theme="true"><code>Tolerations:               :NoSchedule op=Exists
                           :NoExecute op=Exists
                           CriticalAddonsOnly op=Exists
                           node.kubernetes.io/disk-pressure:NoSchedule op=Exists
                           node.kubernetes.io/memory-pressure:NoSchedule op=Exists
                           node.kubernetes.io/network-unavailable:NoSchedule op=Exists
                           node.kubernetes.io/not-ready:NoExecute op=Exists
                           node.kubernetes.io/pid-pressure:NoSchedule op=Exists
                           node.kubernetes.io/unreachable:NoExecute op=Exists
                           node.kubernetes.io/unschedulable:NoSchedule op=Exists
Events:
Type   Reason       Age    From               Message
----   ------       ----   ----               -------
Normal   Scheduled    4m39sdefault-schedulerSuccessfully assigned calico-system/calico-node-68kl9 to k8snode1
WarningFailedMount4m38skubelet            MountVolume.SetUp failed for volume "node-certs" : failed to sync secret cache: timed out waiting for the condition
Normal   Pulling      4m37skubelet            Pulling image "docker.io/calico/pod2daemon-flexvol:v3.29.2"</code></pre>
<h2 data-id="heading-37">五、检验k8s集群</h2>
<h3 data-id="heading-38">5.1 编写资源文件</h3>
<p>安装一个nginx服务检验集群的可用性。首先在编写一个<code>~/nginx.yaml</code>资源文件</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">yaml</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-yaml" tabindex="0" data-dark-theme="true"><code>---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginxweb
annotations:
    abc: test
spec:
selector:
    matchLabels:
      app: nginxweb1
replicas: 2
template:
    metadata:
      labels:
      app: nginxweb1
    spec:
      containers:
      - name: nginxwebc
          image: nginx:latest
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginxweb-service
spec:
externalTrafficPolicy: Cluster
selector:
    app: nginxweb1
ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30180
type: NodePort</code></pre>
<h3 data-id="heading-39">5.2 运行资源</h3>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>kubectl create -f nginx.yaml</code></pre>
<h3 data-id="heading-40">5.3 查看资源状态</h3>
<p>查看service状态</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sql</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sql" tabindex="0" data-dark-theme="true"><code>root@k8smaster:~# kubectl get service
NAME               TYPE      CLUSTER-IP      EXTERNAL-IP   PORT(S)      AGE
kubernetes         ClusterIP   10.96.0.1       &lt;none&gt;      443/TCP      15h
nginxweb-service   NodePort    10.111.233.14   &lt;none&gt;      80:30180/TCP   15h</code></pre>
<p>查看pod状态</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sql</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sql" tabindex="0" data-dark-theme="true"><code>root@k8smaster:~# kubectl get pod -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP               NODE       NOMINATED NODE   READINESS GATES
nginxweb-b6795994c-8267f   1/1   Running   0          16h   10.244.185.199   k8snode2   &lt;none&gt;         &lt;none&gt;
nginxweb-b6795994c-9nz5s   1/1   Running   0          16h   10.244.249.2   k8snode1   &lt;none&gt;         &lt;none&gt;</code></pre>
<h3 data-id="heading-41">5.4 访问nginx页面</h3>
<h4 data-id="heading-42">5.4.1 集群内部网络访问,在任意一台集群机器上执行</h4>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
</div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs language-none prismjs-lines-highlighted" tabindex="0" data-dark-theme="true"><code>curl 10.244.249.2</code></pre>
<p>其中ip地址为nginx的pod的ip地址,这个地址是集群分配的地址,请使用你服务器上的pod地址访问,你可以选择任意一个pod地址。访问结果如下:</p>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f44fc5d28d774bab8274845385d39aac~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=Ojrp5QPN0ZCgLzcDFutd6EP9OqE%3D" alt="image.png" class="medium-zoom-image"></p>
<h4 data-id="heading-43">5.4.2 集群外部访问</h4>
<p>通过5.3章节可以看到service的端口映射是30180,你自己机器上可能映射的是其他端口</p>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/e75bf88594a44616bd473b41a38fa24e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=moB2LhyVZau0RFWi98WiRET2ak0%3D" alt="image.png" class="medium-zoom-image"></p>
<p>知道端口后,可以在局域网内的任意一台机器上访问如下链接<code>&lt;ip&gt;:30180</code></p>
<p>其中ip是虚拟机的任意IP,比如我选择master节点<code>192.168.31.224</code></p>
<p>访问地址如下</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">makefile</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-makefile" tabindex="0" data-dark-theme="true"><code>192.168.31.224:30180</code></pre>
<p>姐能看到访问nginx成功!</p>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/3d27b334ece9428197ecee0f448019c0~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=A9K0QLksYBgIszAT7YQEaywBoeY%3D" alt="image.png" class="medium-zoom-image"></p>
<blockquote>
<p>至此k8s集群安装完毕!验证完毕!祝你有一个愉快的k8s学习之旅!^_^</p>
</blockquote>
<h2 data-id="heading-44">六、回退k8s集群/重置k8s集群</h2>
<p>k8s安装步骤确实繁琐,可能我们某一步错了,或者遇到各种问题,都得重头再来太麻烦。这时我们可以使用kubeadm提供的reset命令来回退集群。</p>
<ol>
<li>
<p><em><strong>所有节点</strong></em>执行reset命令</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>kubeadm reset</code></pre>
</li>
<li>
<p><strong>master</strong>节点执行如下命令</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>rm -rf /root/.kube
rm -rf /etc/cni/net.d
rm -rf /etc/kubernetes/*</code></pre>
</li>
<li>
<p><strong>worker</strong>节点执行如下命令</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>rm -rf /root/.kube
rm -rf /etc/cni/net.d
rm -rf /etc/kubernetes/*</code></pre>
</li>
<li>
<p>重启docker或containerd服务(你安装的什么运行时就重启什么运行时)</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>systemctl restart docker</code></pre>
</li>
<li>
<p>按照4.5~4.7章节重新执行<code>kubeadm init</code>即可</p>
</li>
</ol>
<p><strong>如果你看到这里,想必是对安装k8s有信心,也快成功了。恭喜你🎉真心的祝你有一个愉快的k8s学习之旅!^_^(自己安装的时候被坑的老惨了)</strong></p>
<hr>
<p>分割线</p>
<hr>
<h2 data-id="heading-45">附录1:小白也能会的vmware安装ubuntu虚拟机</h2>
<h3 data-id="heading-46">IP规划</h3>
<p>我的网段是&nbsp;<code>192.168.31.0/24</code>,所以我的虚拟机地址都在这个网段。可以根据你自己的网段设置IP。</p>
<table>
<thead>
<tr>
<th>名称</th>
<th>ip</th>
</tr>
</thead>
<tbody>
<tr>
<td>k8smaster</td>
<td>192.168.31.224</td>
</tr>
<tr>
<td>k8snode1</td>
<td>192.168.31.225</td>
</tr>
<tr>
<td>k8snode2</td>
<td>192.168.31.226</td>
</tr>
</tbody>
</table>
<h3 data-id="heading-47">创建虚拟机</h3>
<ol>
<li>. 创建虚拟机</li>
</ol>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/99b1111fe32f4d2f9673f1997aa5dbb7~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=RWndUSq0K0QDjpBqlncOtkM0JYQ%3D" alt="01.png" class="medium-zoom-image"></p>
<ol start="2">
<li>选择UbuntuServe.iso的位置(名字我改过,选择下载的iso就行)</li>
</ol>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/523a71f4cc144154810c4170df9bc4f9~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=eFDzHrCEH4%2Fys0kw8nH5IQXDzXg%3D" alt="02.png" class="medium-zoom-image"></p>
<ol start="3">
<li>给虚拟机命名(随意),并指定虚拟机安装位置(随意)</li>
</ol>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/95f6ba91f0a24028b6dfcff0ca0fba61~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=4xm%2F%2FZZoQbIMk7k83ACgvIxRHIk%3D" alt="03.png" class="medium-zoom-image"></p>
<ol start="4">
<li>务必检查一下内存必须大于等于2G,CPU必须大于等于2C。一般地,保持默认即可满足条件。</li>
</ol>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/6c2807e0ce51498cafc879cb9b68bf48~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=GwU50%2FYHDtdFJnYgy%2BhwYn4wf6c%3D" alt="04.png" class="medium-zoom-image"></p>
<ol start="5">
<li>设置虚拟机的网络为桥接模式,</li>
</ol>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/013b1e5338cc4649b50eedc6fef52248~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=w6gjgDMesTlJi0Ki%2B3iY2dFNI5A%3D" alt="05.png" class="medium-zoom-image"></p>
<p>设置桥接模式有两种方式,本质都是选择VMnet0网卡</p>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/7646401f90ec4fac970ce9881627689f~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=LcvdImTgxSeIoyIFRkerzHok%2BK0%3D" alt="06.png" class="medium-zoom-image"></p>
<h3 data-id="heading-48">启动Ubuntu系统</h3>
<p>按照网络规划,安装3台虚拟机</p>
<ol>
<li>安装界面</li>
</ol>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/977efc6d2e0a44adabc2ed9f134210af~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=kRF4vq0og5WJus6EY5R1VPTJa1E%3D" alt="image-20250214203133833.png" class="medium-zoom-image"></p>
<ol start="2">
<li>选择语言</li>
</ol>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/6af8b832578b4bed9d90aba64432ce19~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=Ke8MvwlDTZ6yp9ZWLvr3lNpa2a0%3D" alt="image-20250214203226494.png" class="medium-zoom-image"></p>
<ol start="3">
<li>是否更新安装器(如果没有网,是没这个选项)</li>
</ol>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/b11c304406b54f88a67de28ad18e9e02~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=TDCoNcUAUNbiOe4JjpGN2qAQhIw%3D" alt="image-20250214203257665.png" class="medium-zoom-image"></p>
<ol start="4">
<li>键盘选择,选择默认</li>
<li>手动编辑ipv4地址(根据IP规划配置)</li>
</ol>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/bae68803d4aa47c8ad6dcb0ae32e107c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=1RFtpCsotGLkQw3JuNqEN7yQjoQ%3D" alt="image-20250214203402985.png" class="medium-zoom-image"></p>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/53cb67312efb4e9c8ec2f45469558b63~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=m9cdGuwYvhkCHVUfLv7HsXs4NpM%3D" alt="image-20250214203421014.png" class="medium-zoom-image"></p>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/3c3687a3451a49b792904411ea253466~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=Ai65Tu72IzqJad8Nes1tSZs3jaU%3D" alt="image-20250214203617133.png" class="medium-zoom-image"></p>
<ol start="6">
<li>是否代理,默认空,不代理</li>
<li>镜像源选择,这里使用阿里云的镜像源:<code>http://mirrors.aliyun.com/ubuntu</code>,如果镜像源有效,会有测试结果和网速,如下图。</li>
</ol>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/e2cc188ad73d4cefaa77f288dc5b6ed9~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=g6ETxObgwLyPYAxYcCoCPgcl9pg%3D" alt="image-20250214204217167.png" class="medium-zoom-image"></p>
<ol start="8">
<li>勾选安装OpenSSH,方便远程连接</li>
<li>等待安装完成,重启即可。</li>
</ol>
<h2 data-id="heading-49">附录2 使用Containerd作为容器运行时</h2>
<h3 data-id="heading-50">2.1 下载containerd</h3>
<p>首先从github上下载containerd,注意,很多版本,下载amd64,并且是<code>cri-containerd</code></p>
<p><img src="https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/310b715db041437fa22eb0a6cfac4c6f~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5b-15b-15riF5pmw:q75.awebp?rk3s=f64ab15b&amp;x-expires=1745031407&amp;x-signature=c9jl8zNwvTRsE4tbWCwuL6yeMos%3D" alt="20250217210851containerd-github下载.png" class="medium-zoom-image"></p>
<p>使用<code>tar</code>命令解压,<code>-C /</code>选项标识合并到根目录下的各个目录</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>tar xf cri-containerd.tar.gz -C /</code></pre>
<p>命令验证是否安装成功</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>which containerd
which runc</code></pre>
<h3 data-id="heading-51">2.2 containerd配置文件修改</h3>
<p>创建配置文件目录</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>mkdir /etc/containerd</code></pre>
<p>生成配置文件</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>containerd config default &gt; /etc/containerd/config.toml</code></pre>
<p>修改第67行</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>vim /etc/containerd/config.toml

# 修改沙箱版本
sandbox_image = "registry.k8s.io/pause:3.10"</code></pre>
<p>如果使用阿里云容器镜像仓库,也可以修改为</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">toml</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-toml" tabindex="0" data-dark-theme="true"><code>sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.10"
# 或者:registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10</code></pre>
<p>修改139行</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>vim /etc/containerd/config.toml

# false 改为 true
SystemdCgroup = true</code></pre>
<p>设置开机自启动,并且现在就启动</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>systemctl enable --now containerd</code></pre>
<p>验证是否启动成功</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">&nbsp;</div>
<span class="code-block-extension-lang">sh</span></div>
<div class="code-block-extension-headerRight">
<div class="render" data-v-159ebe90=""><span class="txt" data-v-159ebe90="">代码解读</span></div>
<div class="code-block-extension-copyCodeBtn">复制代码</div>
</div>
</div>
<pre class="highlighter-prismjs prismjs-lines-highlighted language-sh" tabindex="0" data-dark-theme="true"><code>ls /var/run/containerd/
# 或者
containerd --version</code></pre>
<h3 data-id="heading-52">2.3 配置阿里云镜像</h3>
<p>下面是官网的配置,我配置失败了☹️,所以才选择了docker作为容器运行时。成功的大佬可以留下解决方案棒棒程序员们~&nbsp;点击查看阿里云官方文档</p>

</div>
<div id="MySignature" role="contentinfo">
    摘抄自网络,便于检索查找。<br><br>
来源:https://www.cnblogs.com/Chary/p/18830285
頁: [1]
查看完整版本: Ubuntu K8S完全安装指南2025最新版!(小白也能学会,超详细)