kubeadm部署的K8s控制面Pod删除后自动重建的原因是什么
问题解答
你提到的kube-apiserver、etcd、kube-controller-manager、kube-scheduler这类控制面Pod属于静态Pod(Static Pod),负责监控并触发其自动重建的组件是master节点上本地运行的kubelet服务,不需要Deployment、ReplicaSet这类上层集群控制器管理。
核心原理
kubeadm部署的K8s集群默认会将控制面组件的Pod配置文件存放在master节点的/etc/kubernetes/manifests/目录下,该目录为kubelet默认监听的静态Pod目录:
- kubelet会持续扫描该目录下的
.yaml/.json配置文件,只要文件存在,就会保证对应Pod始终在当前节点上正常运行 - 当你手动删除运行中的静态Pod时,kubelet会立即检测到Pod状态异常,直接根据本地的配置文件重建Pod
- 如果你修改该目录下的配置文件,kubelet会自动重启对应Pod应用更新;如果将配置文件移出该目录,kubelet会主动删除对应Pod
验证方法
你可以直接登录kmaster节点执行以下命令查看静态Pod配置:
ls /etc/kubernetes/manifests/
执行后你会看到和你查询到的控制面Pod一一对应的配置文件:etcd.yaml、kube-apiserver.yaml、kube-controller-manager.yaml、kube-scheduler.yaml。
静态Pod识别特征
- Pod名称后缀默认会拼接所在节点的主机名,你示例中的Pod后缀都带有
-kmaster,和你的master节点主机名一致 - 通过kubectl删除静态Pod时,返回结果中也会明确标注该Pod为静态Pod
内容的提问来源于stack exchange,提问作者Nag Devineni
相关产品推荐
相关产品推荐

