温馨提示×

centos k8s如何排查故障

小樊
69
2026-08-04 21:40:50
栏目: 智能运维

在 CentOS 上排查 Kubernetes(k8s)集群故障,一般遵循 “从整体到局部、从节点到 Pod、从网络到存储” 的思路。下面给你一套系统化排查流程 + 常用命令,适合生产环境实战。


一、先确认集群整体状态

1️⃣ 查看节点状态

kubectl get nodes
kubectl get nodes -o wide

重点看:

  • STATUS 是否为 Ready
  • ROLES 是否正确(master / worker)
  • 版本是否一致

如果节点 NotReady:

kubectl describe node <node-name>

2️⃣ 查看 kubelet 状态(节点级)

systemctl status kubelet
journalctl -u kubelet -f

常见错误:

  • kubelet 未启动
  • 证书过期
  • 容器运行时(docker / containerd)异常

3️⃣ 查看容器运行时

CentOS 常见:

  • Docker
  • containerd

Docker

systemctl status docker
docker info

containerd

systemctl status containerd
ctr ns ls

二、Pod 故障排查(最常见)

1️⃣ 查看 Pod 状态

kubectl get pods -A
kubectl get pods -n <namespace>

常见状态:

  • Pending
  • CrashLoopBackOff
  • ImagePullBackOff
  • Evicted
  • Terminating

2️⃣ Pod 详情

kubectl describe pod <pod-name> -n <namespace>

重点看:

  • Events(调度失败、拉镜像失败)
  • 资源不足(CPU / 内存)
  • 节点问题

3️⃣ 查看容器日志

kubectl logs <pod-name> -n <namespace>
kubectl logs <pod-name> -c <container-name> -n <namespace>
kubectl logs <pod-name> --previous

4️⃣ 进入容器调试

kubectl exec -it <pod-name> -n <namespace> -- sh

如果进不去,说明:

  • Pod 没启动成功
  • 容器镜像问题

三、网络问题排查(非常常见)

1️⃣ Service 是否正常

kubectl get svc -A
kubectl describe svc <svc-name> -n <namespace>

检查:

  • Endpoints 是否存在
kubectl get endpoints <svc-name> -n <namespace>

2️⃣ DNS 问题

kubectl exec -it <pod> -- nslookup kubernetes.default

DNS 常见问题:

  • coredns Pod 异常
  • 网络插件(calico / flannel)异常

3️⃣ CNI 网络插件

kubectl get pods -n kube-system

常见插件:

  • calico
  • flannel
  • cilium

查看日志:

kubectl logs -n kube-system <cni-pod>

四、控制平面故障(Master 节点)

1️⃣ 核心组件状态

kubectl get componentstatuses

或:

kubectl get pods -n kube-system

重点组件:

  • kube-apiserver
  • kube-controller-manager
  • kube-scheduler

2️⃣ APIServer 日志

journalctl -u kube-apiserver
# 或
kubectl logs -n kube-system kube-apiserver-<node>

3️⃣ etcd 状态(非常重要)

systemctl status etcd
etcdctl endpoint health

常见问题:

  • etcd 磁盘满
  • etcd 数据损坏
  • 证书过期

五、资源 & 调度问题

1️⃣ 资源不足

kubectl top node
kubectl top pod -A

Pod 事件:

kubectl describe pod <pod>

常见:

0/3 nodes are available: 3 Insufficient cpu

2️⃣ 污点 & 容忍

kubectl describe node | grep Taint

六、证书问题(CentOS 很常见)

查看证书过期时间

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep Not

或:

kubeadm certs check-expiration

证书过期会导致:

  • Node NotReady
  • kubectl 无法连接

七、Linux / CentOS 系统层面

1️⃣ 磁盘

df -h

kubelet 默认要求:

  • /var/lib/docker 或 /var/lib/containerd
  • /var/log

2️⃣ 内存 / CPU

free -h
top

3️⃣ 防火墙 & SELinux

systemctl status firewalld
getenforce

建议:

  • 关闭 firewalld(或放行 k8s 端口)
  • SELinux 设为 permissive

八、快速排查思路总结(实战)

✅ Pod 起不来

  1. kubectl describe pod
  2. kubectl logs
  3. 查看 kubelet / docker / containerd

✅ Node NotReady

  1. kubelet
  2. 网络插件
  3. 磁盘 / 内存

✅ 服务访问不通

  1. Service → Endpoints
  2. DNS
  3. CNI 插件

✅ 集群直接不可用

  1. etcd
  2. apiserver
  3. 证书

九、常用救命命令速查

kubectl get events --sort-by=.metadata.creationTimestamp
kubectl get pods -A -o wide
journalctl -u kubelet -f
kubectl describe node <node>

如果你愿意,可以直接把 具体报错信息或现象(比如某个 Pod 状态、kubelet 日志、NotReady 节点)贴出来,我可以 直接帮你定位原因并给出修复方案。

0 踩