06.‌kubeadm init 各阶段命令详解

kubeadm init 各阶段命令详解

以下是 kubeadm init 分阶段命令的完整列表及详细说明,适用于 ‌精准控制集群初始化流程‌(如调试、自定义证书、高可用部署等场景)

1. 预检阶段 (preflight)‌

验证系统环境是否满足 Kubernetes 要求。

kubeadm init phase preflight [–config kubeadm.yaml] [–ignore-preflight-errors=…]

关键检查项‌:

Swap 已禁用
容器运行时(Docker/Containerd)正常运行
端口 6443、2379-2380、10250 未被占用
内核参数(如 net.ipv4.ip_forward=1)

2. 证书生成阶段 (certs)‌

生成集群核心组件的 TLS 证书。

‌子阶段‌ ‌命令示例‌ ‌生成文件‌

‌根证书 (CA)‌	kubeadm init phase certs ca [--config kubeadm.yaml]	/etc/kubernetes/pki/ca.crt, /etc/kubernetes/pki/ca.key
‌API Server 证书‌	kubeadm init phase certs apiserver [--config kubeadm.yaml]	/etc/kubernetes/pki/apiserver.crt, /etc/kubernetes/pki/apiserver.key
‌API Server 访问 kubelet 证书‌	kubeadm init phase certs apiserver-kubelet-client [--config kubeadm.yaml]	/etc/kubernetes/pki/apiserver-kubelet-client.crt
‌前端代理 CA‌	kubeadm init phase certs front-proxy-ca [--config kubeadm.yaml]	/etc/kubernetes/pki/front-proxy-ca.crt, /etc/kubernetes/pki/front-proxy-ca.key
‌前端代理客户端证书‌	kubeadm init phase certs front-proxy-client [--config kubeadm.yaml]	/etc/kubernetes/pki/front-proxy-client.crt
‌etcd CA‌	kubeadm init phase certs etcd-ca [--config kubeadm.yaml]	/etc/kubernetes/pki/etcd/ca.crt, /etc/kubernetes/pki/etcd/ca.key
‌etcd Server 证书‌	kubeadm init phase certs etcd-server [--config kubeadm.yaml]	/etc/kubernetes/pki/etcd/server.crt
‌etctl Peer 证书‌	kubeadm init phase certs etcd-peer [--config kubeadm.yaml]	/etc/kubernetes/pki/etcd/peer.crt
‌etcd 健康检查客户端证书‌	kubeadm init phase certs etcd-healthcheck-client [--config kubeadm.yaml]	/etc/kubernetes/pki/etcd/healthcheck-client.crt
‌API Server 访问 etcd 证书‌	kubeadm init phase certs apiserver-etcd-client [--config kubeadm.yaml]	/etc/kubernetes/pki/apiserver-etcd-client.crt
‌服务账户密钥‌	kubeadm init phase certs sa [--config kubeadm.yaml]	/etc/kubernetes/pki/sa.pub, /etc/kubernetes/pki/sa.key

一键生成所有证书‌:

kubeadm init phase certs all --config kubeadm-config .yaml

3. kubeconfig 生成阶段 (kubeconfig)‌

创建集群通信所需的配置文件。

子阶段‌	‌命令示例‌	‌生成文件‌
‌管理员 kubeconfig‌	kubeadm init phase kubeconfig admin [--config kubeadm.yaml]	/etc/kubernetes/admin.conf
‌kubelet 引导 kubeconfig‌	kubeadm init phase kubeconfig kubelet [--config kubeadm.yaml]	/etc/kubernetes/kubelet.conf
‌Controller Manager‌	kubeadm init phase kubeconfig controller-manager [--config kubeadm.yaml]	/etc/kubernetes/controller-manager.conf
‌Scheduler‌	kubeadm init phase kubeconfig scheduler [--config kubeadm.yaml]	/etc/kubernetes/scheduler.conf

一键生成所有 kubeconfig‌:

kubeadm init phase kubeconfig all --config kubeadm.yaml

4. etcd 部署阶段 (etcd)‌

在本地节点部署 etcd 集群(单节点模式)。

kubeadm init phase etcd local [--config kubeadm.yaml]

生成文件‌:etcd 静态 Pod 清单:/etc/kubernetes/manifests/etcd.yaml

5. 控制平面组件部署 (control-plane)‌

生成控制平面组件的静态 Pod 清单(API Server、Controller Manager、Scheduler)

kubeadm init phase control-plane all [--config kubeadm.yaml]

生成文件‌:

API Server:/etc/kubernetes/manifests/kube-apiserver.yaml
Controller Manager:/etc/kubernetes/manifests/kube-controller-manager.yaml
Scheduler:/etc/kubernetes/manifests/kube-scheduler.yaml

6. 上传证书到集群 (upload-certs)‌

将证书加密后存储为 Secret,供其他控制平面节点加入时使用。

kubeadm init phase upload-certs [--config kubeadm.yaml] --upload-certs
[upload-certs] Using certificate key: 6d0a3b1c4e5f7a8b9c0d2e1f

‌记录 certificate-key‌:后续其他控制平面节点需使用此密钥。

‌7. 标记控制平面节点 (mark-control-plane)‌

为节点添加标签和污点,标识其角色为控制平面。

kubeadm init phase mark-control-plane [--config kubeadm.yaml]
kubectl --kubeconfig /etc/kubernetes/admin.conf describe node <节点名> | grep -E "Roles|Taints"

添加标签:node-role.kubernetes.io/control-plane
添加污点:node-role.kubernetes.io/control-plane:NoSchedule

8. 启动 kubelet 服务 (kubelet-start)‌

生成 kubelet 配置并启动服务。

kubeadm init phase kubelet-start [--config kubeadm.yaml]

生成文件‌: kubelet 配置:/var/lib/kubelet/config.yaml
‌验证‌ systemctl status kubelet

完整初始化流程示例

四、生产分步初始化步骤流程

0. 镜像下载

kubeadm config images pull --config  /opt/kubeadm-init-config.yaml

‌作用‌:提前拉取所有依赖镜像,避免初始化时因网络问题失败

1. 预检

kubeadm init phase preflight --config /opt/kubeadm-init-config.yaml

检查项‌:Swap 禁用、端口占用、内核参数、容器运行时状态

2. 生成证书

kubeadm init phase certs all --config /opt/kubeadm-init-config.yaml

关键文件‌:/etc/kubernetes/pki/ca.crt(根证书)/etc/kubernetes/pki/apiserver-etcd-client.crt(API Server 访问 etcd 证书)

3. 生成 kubeconfig

kubeadm init phase kubeconfig all --config /opt/kubeadm-init-config.yaml

关键文件‌:admin.conf(管理员凭证)kubelet.conf(kubelet 启动配置)

4. 启动 etcd

kubeadm init phase etcd local --config /opt/kubeadm-init-config.yaml

验证 etcd 健康

kubectl --kubeconfig /etc/kubernetes/admin.conf -n kube-system exec etcd-$(hostname) -- \
  etcdctl --cert /etc/kubernetes/pki/etcd/peer.crt \
  --key /etc/kubernetes/pki/etcd/peer.key \
  --cacert /etc/kubernetes/pki/etcd/ca.crt endpoint health

5. 启动控制平面组件

kubeadm init phase control-plane all --config /opt/kubeadm-init-config.yaml

验证组件状态‌

kubectl --kubeconfig /etc/kubernetes/admin.conf get pods -n kube-system -l tier=control-plane

6.写入kubelet设置并启动kubelet

kubeadm init phase kubelet-start  --config  /opt/kubeadm-init-config.yaml
systemctl enable kubelet && systemctl restart kubelet

7. 上传kubeadm和kubelet配置到ConfigMap

kubeadm init phase upload-config all --config  /opt/kubeadm-init-config.yaml

作用‌:将 kubeadm 和 kubelet 配置同步到集群,供其他节点读取。

8. 上传证书到kubeadm-certs

kubeadm init phase upload-certs --upload-certs  --config  /opt/kubeadm-init-config.yaml

9. 将节点标记为控制平面

kubeadm init phase mark-control-plane --config /opt/kubeadm-init-config.yaml

10. 生成用于将节点加入集群的引导令牌

kubeadm init phase bootstrap-token --config  /opt/kubeadm-init-config.yaml

作用‌:创建默认的 24 小时有效令牌,允许工作节点加入。

11. 启用 kubelet 客户端证书自动轮换

kubeadm init phase kubelet-finalize enable-client-cert-rotation  --config  /opt/kubeadm-init-config.yaml

‌生产必选项‌:避免因证书过期导致节点失联。

12. 安装CoreDNS 、kube-proxy 组件

kubeadm init phase addon all --config  /opt/kubeadm-init-config.yaml

13. 节点加入

显示控制平面和工作节点加入集群的命令。

控制平面节点加入命令
kubeadm init phase upload-certs --upload-certs --config  /opt/kubeadm-init-config.yaml
kubeadm token create --print-join-command  --certificate-key a2698911f2676ce7378c3213954a3f7f0b3b32eae43cd42d4c4533f670bef514

工作节点加入命令
kubeadm token create --print-join-command   --config  /opt/kubeadm-init-config.yaml

14. 安装 CNI 插件(如 Calico)

kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml

‌作用‌:未安装 CNI 插件会导致 Pod 网络不可用,CoreDNS 无法启动!

你可能感兴趣的:(Kubernetes,kubernetes)