k8s 安装
虚拟机配置:
Vmware 版本:
一、准备工作
1、关闭防火墙
关闭防火墙的原因:
Kubernetes 集群内部组件之间需要大量端口通信,涉及控制平面、数据平面、Pod 网络、服务代理等。如果防火墙规则未正确放行这些端口,会导致:
- 节点无法加入集群(
kubeadm join失败) - Pod 无法跨节点通信
- CoreDNS 无法解析
- kubelet 无法与 apiserver 通信
- 网络插件(如 Calico、Flannel)异常
- 服务(Service)无法访问
我们可以通过 ufw 来管理防火墙,ufw 介绍:
- UFW(Uncomplicated Firewall)是 Ubuntu/Debian 系统上对
iptables的一个简化封装工具。 - 它的目标是让普通用户也能轻松管理防火墙规则,而无需直接编写复杂的
iptables命令。
查看 UFW 的状态,如果显示 inactive 或者状态:不活动说明是未激活
sudo ufw status
开机不启动防火墙,重启即可生效
sudo ufw disable
2、关于 swap 是否需要关闭
首先,从上面的官方文档可以得出如下结论:
1.22 版本之前:不提供对 swap 的支持,需要关闭 swap
1.22 版本到 1.28 版本:提供了 alpha support for using swap memory
1.28 版本开始:提供了 Beta support for using swap memory,但不再支持将交换内存与 cgroup v1 一起使用。
从上图的官方文档可以总结:
1.30 版本进一步改进,但还是属于 Beta 版本
我选择安装的版本是 1.23.5 > 1.22,但是我本人用不到 swap,所以选择关闭该项功能:
(1)临时关闭(重启后失效)
sudo swapoff -a
(2)永久关闭
编辑 /etc/fstab,注释掉所有包含 swap 的行:
vim /etc/fstab
(3)验证
free -h
输出中 Swap 的 total 和 used 必须为 0B:
total used free
Mem: 7.7G 1.2G 6.5G
Swap: 0B 0B 0B
3、安装容器运行时
首先需要知道:

所以检查自己需要的 k8s 版本:
- v1.24+:不能直接使用
docker作为容器运行时,必须通过 containerd 或 CRI-O。 - v1.23 及更早:仍支持 Docker,但需使用 经过验证的版本。
Kubernetes 与 Docker 版本兼容对照表(适用于 v1.23 及以下)
| Kubernetes 版本 | 推荐 Docker 版本 | 说明 |
|---|---|---|
| v1.23.x | 20.10.x | 最后一个支持 Docker 的 K8s 主版本 |
| v1.22.x | 20.10.x | |
| v1.21.x | 20.10.x | |
| v1.20.x | 19.03.x | |
| v1.19.x | 18.09.x |
**我这里安装 1.23.5 版本的 k8s,所以仍选择 docker 作为容器运行时。**如果需要安装其他容器运行时,请参考官方文档。
从 docker 官网可以看到各个系统版本的安装教程:
查看 Ubuntu 下的安装方法,可以看到有多种方式:
我这里选择使用 apt 安装:
官方提示:在新主机上首次安装 Docker Engine 之前,你需要先配置 Docker 的 apt 软件源。配置完成后,你就可以通过该软件源安装和更新 Docker。
1、配置 Docker 的 apt 软件源
官方(可能存在网络问题,建议使用下面阿里的):
# 添加 Docker 的官方 GPG 密钥:
sudo apt update
sudo apt 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
# 配置 Docker 的 apt 软件源:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
阿里:
# step 1: 安装必要的一些系统工具
sudo apt update
sudo apt install ca-certificates curl gnupg
# step 2: 信任 Docker 的 GPG 公钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Step 3: 写入软件源信息
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新
sudo apt update
关于 GPG:
- GPG(GNU Privacy Guard)密钥用于对软件包进行数字签名。
- 当你从 Docker 官方 APT 仓库安装软件时,系统会使用这个 GPG 公钥来验证:这个 .deb 包确实是 Docker 官方发布的,而不是第三方伪造的。
- 如果没有这个密钥,APT 会报错(如 NO_PUBKEY)或拒绝安装,以防止潜在风险。
2、执行安装命令
安装最新的版本:
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 上述安装的最后两个组件可以选择安装:
# docker-buildx-plugin:高级镜像构建工具
# docker-compose-plugin:容器编排工具
推荐安装指定版本,避免后面安装过程有告警信息:
# 列出仓库中所有的可用版本
$ apt-cache madison docker-ce | awk '{ print $3 }'
5:20.10.20~3-0~ubuntu-jammy
5:20.10.19~3-0~ubuntu-jammy
5:20.10.18~3-0~ubuntu-jammy
5:20.10.17~3-0~ubuntu-jammy
5:20.10.16~3-0~ubuntu-jammy
5:20.10.15~3-0~ubuntu-jammy
5:20.10.14~3-0~ubuntu-jammy
5:20.10.13~3-0~ubuntu-jammy
...
# 从上面的结果中选择需要的版本,修改如下命令进行安装
# 下面第一行是 Shell 变量赋值语句,不要忘记执行
$ VERSION_STRING=5:20.10.20~3-0~ubuntu-jammy
$ sudo apt install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
3、确认 docker 是否正常运行
# 查看 docker 运行状态
sudo systemctl status docker
# 手动启动命令
sudo systemctl start docker
4、修改配置文件
# 修改 daemon.json 文件
vim /etc/docker/daemon.json
# 在文件里添加 docker 镜像源配置
{
"registry-mirrors": ["https://docker.xuanyuan.me"]
}
# 重新加载配置并重启 docker 确保配置生效
systemctl daemon-reload
systemctl restart docker
如果 docker 镜像源失效,需要自行百度并修改
5、镜像源无法生效问题
两种情况:
-
docker info 的输出中看不到配置的镜像源地址
-
docker info 的输出中有配置的镜像源地址,但是 docker pull 的时候,无法拉取并报错:
-
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection
可能的解决方法
# 1、按照下述命令执行
sudo systemctl stop docker.service
sudo systemctl stop docker.socket
sudo systemctl daemon-reload
sudo systemctl restart docker
# 2、执行完后如果还不行,就重启
# 3、直接用临时方法拉取,例如 docker pull docker.xuanyuan.me/mysql:5.7
二、正式安装
使用 kubeadm 安装 Kubernetes 的标准安装流程是:
- 安装 kubelet/kubeadm/kubectl;
- 运行
kubeadm init(主节点)或kubeadm join(工作节点); kubeadm会自动生成 kubelet 所需的配置,并自动启动和启用 kubelet 服务。
1、安装 kubeadm、kubelet 和 kubectl
你需要在每台机器上安装以下的软件包:
kubeadm:用来初始化集群的指令。kubelet:在集群中的每个节点上用来启动 Pod 和容器等。kubectl:用来与集群通信的命令行工具。
注意:kubeadm 不能帮你安装或者管理 kubelet 或 kubectl, 所以你需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配。即这三者的版本要一致。
安装步骤:
如下图所示,我们可以把 v1.24 及之后的版本叫做新版本。而 v1.24 之前的版本作为旧版本。从阿里的镜像网站上,可以看到新版和旧版的安装方式有很大差别。我这里安装的版本是 v1.23.5,属于旧版本。如果需要新版本的安装命令,请自行去阿里镜像网站查看(阿里镜像网站见参考)。
1、更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gpg
2、下载用于 Kubernetes 软件包仓库的公共签名密钥:
- 注意:
- 如果
/etc/apt/keyrings目录不存在,则应在 curl 命令之前创建它。 - 因为:在低于 Debian 12 和 Ubuntu 22.04 的发行版本中,
/etc/apt/keyrings默认不存在。应在 curl 命令之前创建它。
# sudo mkdir -p -m 755 /etc/apt/keyrings
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
3、添加 Kubernetes apt 仓库:我这里使用的是阿里镜像源。我这里安装的由于版本过低,所以使用了如下命令;如果是新版本,请看好镜像网站的提示,一定检查 URL 中的版本号,将其修改为自己需要的版本。
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
# 添加镜像源后,记得更新
apt update
上述 update 的输出可能告警:
W: https://mirrors.aliyun.com/kubernetes/apt/dists/kubernetes-xenial/InRelease: 密钥存储在过时的 trusted.gpg 密钥环中(/etc/apt/trusted.gpg),请参见 apt-key(8) 的 DEPRECATION 一节以了解详情。
原因:
apt_key 模块的弃用:apt_key 模块使用的 apt-key 命令已被弃用,特别是在 Ubuntu 22.04 及更高版本中。将密钥添加到全局密钥环(如 /etc/apt/trusted.gpg)的方法已不再推荐。新的方法是将密钥存储在 /etc/apt/keyrings/ 目录中,并在存储库配置中指定密钥的位置。
解决:
将 /etc/apt/trusted.gpg 文件中的密钥依次导出到 /etc/apt/trusted.gpg.d/ 目录下即可。
# 查看 /etc/apt/trusted.gpg 文件的秘钥
apt-key list
# 使用如下秘钥导出
apt-key export DC6315A3 | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/Artifact.gpg
apt-key export 13EDEF05 | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/cloud-rapture.gpg
# 导出完毕后,删除 /etc/apt/trusted.gpg
rm /etc/apt/trusted.gpg
# 重新 update,发现警告消失了
apt update
4、安装:
# 查看可用版本是否存在
apt-cache madison kubelet kubectl kubeadm |grep '1.23.5-00'
# 指定版本安装
apt install -y kubelet=1.23.5-00 kubectl=1.23.5-00 kubeadm=1.23.5-00
检查是否安装成功:
systemctl status kubelet
通常会显示 kubelet 服务处于 inactive (dead) 或 activating (auto-restart) 状态,原因如下:
kubelet 默认不会自动启动
- 安装
kubelet包时,systemd 服务会被创建(/etc/systemd/system/kubelet.service),但默认不会启用(enable)也不会启动(start)。 - kubelet 需要有效的配置(如
/var/lib/kubelet/config.yaml或通过命令行参数指定)才能正常运行。 - 在
kubeadm init或kubeadm join之前,通常没有生成这些配置,因此即使手动启动 kubelet,它也可能因缺少配置而崩溃或退出。 - 所以这里显示
inactive (dead)或activating (auto-restart)状态是正常的
2、检查 cgroup 驱动
关于为什么要检查这部分可以参考我的另一篇博文:k8s 和容器运行时(Docker)、cgroup
我们需要检查:
-
系统的 cgroup 版本
-
检查命令:
stat -fc %T /sys/fs/cgroup/- 输出
cgroup2fs→ cgroup v2 - 输出
tmpfs→ cgroup v1
- 输出
-
是 cgroup v1 版本:推荐 k8s 和 docker 都使用 cgroupfs 驱动
-
是 cgroup v2 版本:推荐 k8s 和 docker 都使用 systemd 驱动
-
-
k8s 的 cgroup 驱动
# 查看 k8s 使用的 cgroup 驱动 $ grep -i cgroup /var/lib/kubelet/config.yaml # 显示 systemd $ cgroupDriver: systemd -
容器运行时(docker)的 cgroup 驱动
# 查看 docker 的 cgroup 驱动 $ docker info | grep -i "cgroup driver" # 显示 systemd $ Cgroup Driver: systemd
不过,从如下两张图的官方文档来看,如果你的安装满足如下条件:
我觉得不需要检查了
3、master 节点执行 init 命令
1、执行如下命令
kubeadm init \
--kubernetes-version=v1.23.5 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16 \
命令选项的说明:
–kubernetes-version:指定自己需要的版本
–image-repository:由于会下载镜像,所以指定阿里镜像仓库
–pod-network-cidr:由后面安装的网络插件决定
关于 CIDR:
在 Kubernetes 中,每个 Pod 都会被分配一个唯一的 IP 地址。这些 IP 不是从你主机的物理网络来的,而是来自一个虚拟的、集群内部专用的 IP 段 —— 这就是 --pod-network-cidr 指定的范围。
CIDR(Classless Inter-Domain Routing,无类别域间路由)是一种用于描述 IP 地址范围的表示方法。
格式为:
IP地址/前缀长度
例如:
10.244.0.0/16192.168.0.0/24
含义解释:
/16表示前 16 位是网络部分,剩下的 16 位用于主机(Pod)。- 所以
10.244.0.0/16表示从10.244.0.0到10.244.255.255的所有 IP(共 65536 个地址)。 /24表示前 24 位是网络部分,剩下 8 位用于主机,即 256 个 IP(如192.168.1.0到192.168.1.255)。
执行后报错:
root@r7000p-2025:/etc/default# kubeadm init \
--kubernetes-version=v1.23.5 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16 \
>
[init] Using Kubernetes version: v1.23.5
[preflight] Running pre-flight checks
[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 28.5.1. Latest validated version: 20.10
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
错误1:[ERROR FileContent–proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
上述错误信息表示/proc/sys/net/bridge/bridge-nf-call-iptables 这个文件不存在。
解决方案:
步骤 1:加载 br_netfilter 内核模块
# 临时加载
sudo modprobe br_netfilter
# 永久生效(避免重启后失效)
echo "br_netfilter" | sudo tee /etc/modules-load.d/k8s.conf
modprobe br_netfilter会创建/proc/sys/net/bridge/...相关文件。
步骤 2:启用必要的内核参数
# 创建配置文件
cat <<EOF | sudo 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
# 应用配置
sudo sysctl --system
这会确保:
- bridge 流量经过 iptables(CNI 需要)
- IP 转发开启(Pod 跨节点通信需要)
步骤 3:验证文件是否存在
ls /proc/sys/net/bridge/bridge-nf-call-iptables
# 应该输出:/proc/sys/net/bridge/bridge-nf-call-iptables
cat /proc/sys/net/bridge/bridge-nf-call-iptables
# 应该输出:1
如果输出是 1,说明已正确启用。
警告1:[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 28.5.1. Latest validated version: 20.10
警告表示虽然当前的错误与 Docker 版本无关,但 Kubernetes v1.23 是最后一个支持 Docker Engine(dockershim)的版本。
- v1.24+ 已彻底移除 dockershim,必须使用 containerd 或 CRI-O。
- Docker 28.5.1 是新版,虽然 v1.23 理论上还能用,但存在潜在兼容性风险。
长期建议:
- 学习/生产环境改用
containerd(更轻量、官方推荐)。 - 或至少 不要升级 Docker 到 25+,如果坚持用 Docker,建议锁定在 20.10.x。
解决方案:
参考官网的文档,我回退 docker 版本到 20.10.20 了
-
Uninstall the Docker Engine, CLI, containerd, and Docker Compose packages:
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -
Images, containers, volumes, or custom configuration files on your host aren’t automatically removed. To delete all images, containers, and volumes:
sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd -
Remove source list and keyrings
sudo rm /etc/apt/sources.list.d/docker.list sudo rm /etc/apt/keyrings/docker.asc
You have to delete any edited configuration files manually.
init 命令成功后,记录如下信息用于后续安装:
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.243.129:6443 --token qho400.m2qeu1m0ek8spb8x \
--discovery-token-ca-cert-hash sha256:8b79908d0f52e2b1b4bafff3812ab84c37f46ea25e8b3a61c87b388a24ea8179
2、配置用户的访问权限
上面保存的内容中有如下三条命令需要执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
解释:
可以看到后两条命令有 sudo,说明该命令是针对非 root 用户使用的。
大致作用:让当前非 root 用户能够使用 kubectl 以管理员身份操作 Kubernetes 集群。不过如果你此时的登录用户就是 root,那么它就是在配置 root 用户的权限了。
mkdir -p $HOME/.kube.kube是kubectl默认查找配置文件的目录。- 在当前用户的家目录下创建
.kube目录(用于存放 kubectl 的配置文件)
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config- 将 Kubernetes 集群的管理员配置文件(由
kubeadm init生成)复制为当前用户的 kubectl 配置文件。 - 这一步让普通用户也能像管理员一样操作集群。
- 将 Kubernetes 集群的管理员配置文件(由
sudo chown $(id -u):$(id -g) $HOME/.kube/config- 将刚复制的 config 文件的所有者改为当前用户,避免权限问题。
- 不修改的话,该用户登录下是无法读取上述由 sudo 复制来的配置文件(因为 sudo 命令下,其所有者是 root)
- 改为当前用户后,
kubectl才能正常读取配置。
4、安装网络插件
如上图所示,有很多网络插件可以选择。
我这里选择安装 flannel:
# 官网提供的 Kubernetes v1.17+ 的安装命令
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
两个问题:
1、可能会有网络问题导致这个yml文件下载不下来,可以提前下载好,传过去
2、这个命令会拉取镜像,可以使用如下命令查看安装进度:
# 查看命名空间是否有 kube-flannel
kubectl get ns
# 查看命名空间下是否有 pod 正在创建或者运行
kubectl get pod -n kube-flannel
# 查看 pod 的详细信息,kube-flannel-ds-5lp5v 是上面命令输出的 pod 名字
# 这个命令的输出最后应该是 events,可以在这里看到安装是在了哪一步
# 大多时候是拉取镜像的问题,百度一下应该能解决
kubectl describe pod kube-flannel-ds-5lp5v -n kube-flannel
# 安装好之后,重新查看 node 的状态
# 此时,应该只有一个 control-plane,master 节点,且为 ready
kubectl get node
小问题:
问1:为什么 Kubernetes(k8s)不自己开发一个官方的、内置的网络插件,而是依赖 CNI(Container Network Interface)和第三方插件(如 Flannel、Calico、Cilium 等)
1、Kubernetes 的核心设计哲学:“关注点分离”(Separation of Concerns)
Kubernetes 的目标是成为一个 通用的容器编排平台,而不是“包办一切”的系统。
- 它专注于 调度、生命周期管理、服务发现、存储编排 等核心功能。
- 网络、存储、运行时等底层能力,通过 标准化接口(如 CNI、CSI、CRI)交给社区或厂商实现。
类比:Linux 内核不自己写所有硬件驱动,而是提供驱动框架,让硬件厂商自己实现。K8s 同理。
2、网络需求极其多样化
不同用户对网络的要求差异巨大:
| 场景 | 网络需求 |
|---|---|
| 开发测试 | 简单、轻量(如 Flannel) |
| 企业生产 | 网络策略、安全隔离(如 Calico) |
| 高性能/低延迟 | eBPF 加速、绕过内核(如 Cilium) |
| 多租户/公有云 | 与 VPC 集成、IPAM 管理(如 AWS VPC CNI) |
| 服务网格集成 | 与 Istio 深度协同(Cilium 支持 L7 策略) |
如果 Kubernetes 自己开发一个“万能”网络插件:
- 要么功能臃肿,满足不了所有场景;
- 要么功能简单,无法满足企业级需求。
ps:还有很多原因,可以问问 AI(这里就不水字数了)
问2:为什么先执行 kubeadm init 初始化控制平面,再安装网络插件(CNI)?
kubeadm init 会创建核心组件,但不会自动配置 Pod 网络
- 它会启动
kube-apiserver、etcd、kube-controller-manager、kube-scheduler。 - 它也会部署
kube-proxy和 CoreDNS(作为 Pod 运行)。 - 但 Pod 之间的网络通信依赖 CNI 插件,而 CNI 不是
kubeadm自带的。
CNI 插件本身也是以 Pod 形式运行的
- 比如 Flannel、Calico 都是通过
kubectl apply -f xxx.yaml部署的 DaemonSet。 - 这些 YAML 文件需要和已存在的 Kubernetes API 通信,所以 集群必须先初始化好。
5、添加 worker 节点
准备好另一台虚拟机,在其上面执行本文中如下的操作:
- 一、准备工作
- 二、正式安装
- 1、安装 kubeadm、kubelet 和 kubectl
- 2、检查 cgroup 驱动
在工作节点上执行如下命令,这个命令在 master 节点 init 成功后的输出内容中,请执行自己的命令:
kubeadm join 192.168.243.129:6443 --token qho400.m2qeu1m0ek8spb8x \
--discovery-token-ca-cert-hash sha256:8b79908d0f52e2b1b4bafff3812ab84c37f46ea25e8b3a61c87b388a24ea8179
执行成功的输出:
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
W1015 14:08:13.272692 65244 utils.go:69] The recommended value for "resolvConf" in "KubeletConfiguration" is: /run/systemd/resolve/resolv.conf; the provided value is: /run/systemd/resolve/resolv.conf
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
如下图所示。此时去 master 节点输入 kubectl get node,可能会看到刚加入的 worker 节点是 notReady,这是因为 k8s 在给新加入的节点创建一个用于通信的 pod,也就是需要拉取镜像,所以需要一定的时间。当该 pod 运行后,可以看到 worker 节点变为 ready 了。
至此,安装完毕
参考
[1] docker配置了daemon镜像源但未生效仍然走https://registry-1.docker.io/v2/解决方案
[2] 2025 最新 Docker 国内镜像源加速列表(10月13日更新)
[3] docker 官网
[4] k8s 文档官网
[5] 【k8s】手把手教学 — Ubuntu 一次成功安装 k8s集群
[6] Kubernetes 阿里镜像
[7] ubuntu apt 命令报错 Key is stored in legacy trusted.gpg keyring
[8] Docker CE 阿里镜像
[9] flannel
[10] 通义千问
更多推荐


所有评论(0)