温馨提示×

centos k8s怎么排查故障

小樊
54
2026-09-30 12:26:35
栏目: 智能运维

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


一、先确认集群整体状态

1. 查看节点状态

kubectl get nodes
kubectl get nodes -o wide

重点关注:

  • STATUS 是否为 Ready
  • ROLES(控制面 / 工作节点)
  • 版本是否一致

2. 查看异常节点详情

kubectl describe node <node-name>

看:

  • Conditions(MemoryPressure / DiskPressure / PIDPressure)
  • Events(是否有 kubelet 报错)

二、排查控制面(Master)组件

CentOS 上常见两种方式:

  • kubeadm 安装(systemd 管理)
  • 二进制部署

1. 查看核心组件状态

kubectl get cs

(新版本可能已废弃,可跳过)

2. 查看控制面组件日志

journalctl -u kube-apiserver -f
journalctl -u kube-controller-manager -f
journalctl -u kube-scheduler -f
journalctl -u etcd -f

3. etcd 健康检查

ETCDCTL_API=3 etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
endpoint health

三、排查 Node 节点(kubelet)

1. kubelet 状态

systemctl status kubelet
journalctl -u kubelet -f

2. 常见 Node 问题

  • 磁盘满了(Docker / containerd 无法写)
  • 内存压力
  • kubelet 证书过期
  • 容器运行时异常

3. 容器运行时检查

# Docker
systemctl status docker
docker info

# containerd
systemctl status containerd
ctr -n k8s.io containers list

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

1. 查看 Pod 状态

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

状态含义:

  • Pending:调度问题
  • CrashLoopBackOff:应用启动失败
  • ImagePullBackOff:镜像拉取失败
  • Evicted:节点资源不足

2. 查看 Pod 详情

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

重点看:

  • Events
  • Conditions
  • 容器退出码

3. 查看容器日志

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

五、网络问题排查

1. DNS 是否正常

kubectl run test --rm -it --image=busybox -- sh
nslookup kubernetes.default

2. Service 是否通

kubectl get svc
kubectl describe svc <svc-name>

3. 网络插件状态(Calico / Flannel)

kubectl get pods -n kube-system
journalctl -u flanneld

六、存储 / PV 问题

kubectl get pv
kubectl get pvc -n <ns>
kubectl describe pvc <pvc-name>

常见问题:

  • StorageClass 不存在
  • NFS / Ceph 不通
  • 权限问题

七、CentOS 特有坑(重点)

1. 防火墙

systemctl status firewalld

建议:

systemctl stop firewalld
systemctl disable firewalld

2. SELinux

getenforce

生产建议:

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config

3. 时间同步

timedatectl
chronyc sources

八、推荐排查顺序(总结)

  1. kubectl get nodes
  2. kubectl get pods -A
  3. kubectl describe pod
  4. kubectl logs
  5. journalctl -u kubelet
  6. 网络 / 存储 / 系统资源

如果你愿意,可以告诉我:

  • k8s 安装方式(kubeadm / 二进制)
  • 具体故障现象(Pod 起不来 / 节点 NotReady / 网络不通)
  • 版本(CentOS / k8s 版本)

我可以给你针对性的排查命令。

0 踩