使用kubeadm安装K8s后控制面Pod陷入重启循环求助
Kubernetes控制面Pod频繁重启调试建议
按照官方入门指南用kubeadm安装Kubernetes,kubeadm init执行无报错,初期能通过kubectl get pods --all-namespaces正常查看coredns、etcd、apiserver等控制面Pod。但数分钟后,etcd、apiserver等部分Pod反复销毁重启,导致kubectl仅间歇性可用。当前Pod状态如下:
$ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-787d4945fb-mptkz 1/1 Running 3 (4m50s ago) 11m kube-system coredns-787d4945fb-r248b 1/1 Running 4 (73s ago) 11m kube-system etcd-mango 1/1 Running 18 (4m1s ago) 13m kube-system kube-apiserver-mango 0/1 Running 14 (12s ago) 13m kube-system kube-controller-manager-mango 1/1 Running 23 (38s ago) 13m kube-system kube-proxy-mlwc9 1/1 Running 14 (43s ago) 12m kube-system kube-scheduler-mango 1/1 Running 18 (74s ago) 13m
以下是针对性调试建议:
- 检查节点资源占用:控制面对CPU、内存、磁盘IO敏感,用
top、iostat、df -h查看节点是否资源耗尽,重点关注etcd和apiserver运行时的资源波动。若内存不足,可临时扩容节点,或修改kube-system下对应Deployment/StatefulSet的spec.template.spec.containers.resources字段调整资源请求/限制。 - 验证etcd健康状态:etcd是集群核心,其不稳定会牵连整个控制面。执行以下命令检查etcd节点健康:
同时用etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key endpoint healthjournalctl -u etcd.service -f实时查看etcd系统日志,排查磁盘写入超时、数据目录损坏或网络问题。 - 检查kubelet日志:kubelet负责Pod生命周期管理,用
journalctl -u kubelet.service -f实时查看日志,排查Pod启动失败、资源调度异常或镜像拉取问题。 - 验证API Server配置与证书:apiserver频繁重启可能和证书有效性、配置错误有关。检查
/etc/kubernetes/manifests/kube-apiserver.yaml中的参数,重点确认etcd endpoints、证书路径、服务端口是否正确。用以下命令验证apiserver证书:
确认证书有效期和SAN字段包含节点IP、主机名等必要信息。openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout - 排查节点网络连通性:控制面组件间需要稳定通信,用
ping、telnet测试节点内部apiserver(6443端口)、etcd(2379/2380端口)的连通性,排查防火墙规则、iptables链或网络插件导致的通信中断。 - 查看容器退出日志:对重启的Pod,用
kubectl logs -n kube-system <pod-name> --previous查看上一次容器退出时的日志,可能找到未被捕获的错误信息。 - 检查磁盘性能与状态:etcd对磁盘性能要求高,用
fio测试磁盘随机读写性能,确认是否因IOPS不足导致卡顿重启。同时检查数据目录所在磁盘是否有坏道或挂载异常。
内容的提问来源于stack exchange,提问作者omgold
相关产品推荐
相关产品推荐

