在 Kubernetes 集群的部署实践中,kubeadm init 往往是我们的起点。一条长命令敲下去,几分钟后,一个崭新的控制面就运行起来了。当初始化卡在 wait-control-plane,或是证书意外过期时,这种方式就会让排错变得困难。本文将带你跳出单条命令的束缚,通过分步执行 kubeadm init phase,像调试程序一样去拆解和掌控集群的初始化流程。

1、长命令初始化

# 长命令初始化
kubeadm init --apiserver-advertise-address=192.168.140.130 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version=v1.34.3 --service-cidr=10.96.0.0/16 --pod-network-cidr=10.244.0.0/16

# 参数介绍
## --apiserver-advertise-address:API Server 对外暴露的 IP
## --image-repository:拉镜像的前缀
## --kubernetes-version:明确锁定版本
## --service-cidr:Service 的 VIP 网段(kube-proxy / kube-apiserver 用)
## --pod-network-cidr:Pod 网段(CNI 插件必须匹配)

2、命令行参数转换为 YAML 文件

# 命令行参数
kubeadm init \
  --apiserver-advertise-address=192.168.140.130 \
  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
  --kubernetes-version=v1.34.3 \
  --service-cidr=10.96.0.0/16 \
  --pod-network-cidr=10.244.0.0/16

# YAML 文件
## 生成默认配置文件
kubeadm config print init-defaults > kubeadm-init.yaml
## 进行参数修改(具体见截图)

3、分步初始化

# 1) 跑预检
sudo kubeadm init phase preflight --config=kubeadm-init.yaml

# 2) 生成证书
sudo kubeadm init phase certs all --config=kubeadm-init.yaml

# 3) 生成 kubeconfig
sudo kubeadm init phase kubeconfig all --config=kubeadm-init.yaml

# 4) 写 etcd / 控制面 静态 Pod 清单
sudo kubeadm init phase etcd local --config=kubeadm-init.yaml
sudo kubeadm init phase control-plane all --config=kubeadm-init.yaml

# 5) 启动 kubelet 并等控制面起来
sudo kubeadm init phase kubelet-start --config=kubeadm-init.yaml
sudo kubeadm init phase wait-control-plane

# 6) 后续收尾
sudo kubeadm init phase upload-config all --config=kubeadm-init.yaml
sudo kubeadm init phase mark-control-plane --config=kubeadm-init.yaml
sudo kubeadm init phase bootstrap-token --config=kubeadm-init.yaml
sudo kubeadm init phase kubelet-finalize all --config=kubeadm-init.yaml
sudo kubeadm init phase addon all --config=kubeadm-init.yaml

# 7)配置 kubectl 命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

更多推荐