在 Kubernetes 中,Worker 节点加入集群是一个涉及多个组件协同工作的流程,以下是详细步骤和底层原理:
Worker 节点加入集群的全过程
sequenceDiagram
participant Worker_Node
participant Kubelet
participant Kube-Proxy
participant Container_Runtime
participant Control_Plane
Note over Control_Plane: API Server/Controller Manager/Scheduler
Worker_Node->>Kubelet: 1. 启动 kubelet 服务
Worker_Node->>Kube-Proxy: 2. 启动 kube-proxy
Worker_Node->>Container_Runtime: 3. 启动容器运行时
Kubelet->>Control_Plane: 4. 发起 TLS Bootstrapping 请求
Control_Plane->>Kubelet: 5. 签发节点证书
Kubelet->>Control_Plane: 6. 注册节点信息
Control_Plane->>Kubelet: 7. 返回加入成功
Kubelet->>Container_Runtime: 8. 拉取必要系统 Pod
Kube-Proxy->>Control_Plane: 9. 获取集群网络配置
详细步骤解析
阶段 1:节点初始化准备
组件
操作
操作系统
安装容器运行时(containerd/Docker/CRI-O)、kubelet、kube-proxy、kubeadm(可选)
网络配置
确保与 Control Plane 网络连通(API Server 可达)
防火墙
开放端口:10250 (kubelet)、6443 (API Server) 等
阶段 2:启动核心服务
启动 kubelet(核心代理)
systemctl start kubelet
作用:管理 Pod 生命周期、挂载存储卷、报告节点状态
配置文件:/var/lib/kubelet/config.yaml
启动 kube-proxy(网络代理)
systemctl start kube-proxy
作用:维护节点网络规则(iptables/IPVS),实现 Service 负载均衡
启动容器运行时
systemctl start containerd # 以 containerd 为例
**阶段 3:TLS 认证与节点注册(关键步骤)
kubelet 发起 TLS Bootstrapping 请求
使用预置的 Bootstrap Token 或 kubeconfig 向 API Server 发起认证
生成私钥和证书签名请求 (CSR)
# CSR 内容示例
Subject: O=system:nodes, CN=system:node:
Control Plane 处理 CSR
Controller Manager 自动批准 CSR(需配置 --cluster-signing-cert-file)
# 查看 CSR 状态
kubectl get csr
NAME AGE SIGNERNAME REQUESTOR CONDITION
csr-9xvh2 10s kubernetes.io/kubelet kubelet-bootstrap Approved,Issued
kubelet 获取节点证书
将签发的证书保存到 /var/lib/kubelet/pki/kubelet-client-current.pem
后续通信使用正式证书
阶段 4:节点注册与配置同步
kubelet 向 API Server 注册节点
kubectl get nodes
NAME STATUS ROLES AGE VERSION
worker-1 NotReady
kube-proxy 获取集群网络配置
监听 API Server 获取 Service/Endpoint 变化
配置本地 iptables/IPVS 规则
iptables -t nat -L | grep KUBE-SVC
节点控制器(Node Controller)工作
Control Plane 中的控制器:
监控节点状态(通过 kubelet 心跳)
若超时未收到心跳,标记节点为 NotReady → Unknown(默认 40s/5m)
阶段 5:节点就绪与工作负载调度
kubelet 自检通过
检查容器运行时、内核、磁盘压力等
更新节点状态为 Ready
kubectl get nodes
NAME STATUS ROLES AGE VERSION
worker-1 Ready
拉取系统 Pod
部署 CNI 插件(如 Calico Pod)
部署 kube-proxy DaemonSet
kubectl -n kube-system get pods -o wide | grep worker-1
接受工作负载调度
Scheduler 开始向该节点分配 Pod
kubectl describe node worker-1 | grep -A 10 Allocated
关键配置文件与路径
组件
配置文件
作用
kubelet
/etc/kubernetes/kubelet.conf
连接 API Server 的认证信息
/var/lib/kubelet/config.yaml
节点参数(cgroup 驱动等)
kube-proxy
/var/lib/kube-proxy/kubeconfig.conf
网络规则同步凭证
容器运行时
/etc/containerd/config.toml
容器引擎配置
故障排查命令
检查 kubelet 状态
journalctl -u kubelet -f # 实时日志
systemctl status kubelet # 服务状态
诊断证书问题
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -text
验证网络连通性
curl -k https://
检查节点注册错误
kubectl describe node worker-1
加入集群的两种典型方式
方式 1:kubeadm 自动化加入(推荐)
# 在 Control Plane 生成加入命令
kubeadm token create --print-join-command
# 输出:kubeadm join 10.0.0.100:6443 --token xyz... --discovery-token-ca-cert-hash sha256:...
# 在 Worker 节点执行上述命令
方式 2:手动配置加入
复制 Control Plane 的 /etc/kubernetes/admin.conf 到 Worker 节点
配置 kubelet 参数:# /etc/kubernetes/kubelet.conf
apiVersion: v1
clusters:
- cluster:
certificate-authority-data:
server: https://
启动服务
核心安全机制
TLS Bootstrapping
防止未授权节点加入
自动轮换证书(默认 1 年有效期)
Node Restriction 准入控制器
限制 kubelet 只能修改自身节点对象
# /etc/kubernetes/manifests/kube-apiserver.yaml
- --enable-admission-plugins=NodeRestriction
RBAC 权限控制
# 系统自动创建的 ClusterRoleBinding
kubectl describe clusterrolebinding system:node:worker-1
总结:Worker 节点加入的关键流程
准备:安装组件 → 配置网络
认证:TLS Bootstrapping → 证书签发
注册:kubelet 上报节点 → 控制器标记状态
就绪:自检通过 → 接收 Pod 调度
整个过程体现了 Kubernetes 的声明式设计:
Worker 节点主动声明加入意愿(启动服务)
Control Plane 验证并授权(签发证书)
双方持续同步状态(心跳机制)