温馨提示×

centos k8s怎么排故障

小樊
41
2026-10-12 04:56:22
栏目: 智能运维

在 CentOS 上排 Kubernetes(k8s)故障,一般遵循**“从节点到集群、从底层到上层、从系统到应用”的思路。下面给你一套实用排障流程 + 常用命令**,适合生产环境。


一、先看节点和系统层(最常见)

1. 节点状态

kubectl get nodes
kubectl describe node <node-name>

重点看:

  • Ready / NotReady
  • Conditions
  • Events

2. 系统资源(CentOS 特有易踩坑)

top
free -h
df -h
df -i        # inode 满也很常见

3. 防火墙 & SELinux(CentOS 重灾区)

systemctl status firewalld
getenforce

建议:

  • k8s 节点关闭 firewalld 或用规则放行
  • SELinux 设为 permissive 或关闭(生产按需)

4. 时间同步(证书问题根源)

timedatectl
chronyc sources

二、看 k8s 核心组件

1. kubelet(最常挂)

systemctl status kubelet
journalctl -u kubelet -f

常见问题:

  • 证书过期
  • 磁盘压力(DiskPressure)
  • 容器运行时异常

2. 容器运行时(docker / containerd)

# docker
systemctl status docker
docker ps -a

# containerd
systemctl status containerd
ctr containers list

三、Pod 层排障(最高频)

1. Pod 状态

kubectl get pods -A
kubectl describe pod <pod> -n <ns>

常见状态:

  • Pending:调度 / 资源 / PVC
  • CrashLoopBackOff:应用启动失败
  • ImagePullBackOff:镜像拉取

2. 看日志

kubectl logs <pod> -n <ns>
kubectl logs <pod> -n <ns> -c <container>
kubectl logs <pod> -p -n <ns>   # 上一次崩溃

3. 进容器排查

kubectl exec -it <pod> -n <ns> -- sh

四、网络与服务排障

1. Service 不通

kubectl get svc -A
kubectl describe svc <svc>

检查:

  • endpoints 是否为空
  • 标签选择器是否匹配

2. DNS 问题

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

3. 网络插件(flannel / calico)

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

五、集群级问题

1. etcd

kubectl get cs
ETCDCTL_API=3 etcdctl endpoint health

2. 证书过期(CentOS + kubeadm 常见)

kubeadm certs check-expiration
kubeadm certs renew all

六、通用排障套路(很重要)

  1. 先 node → 再 pod → 再 container
  2. 先系统(磁盘/内存/时间)→ 再 k8s
  3. 日志三板斧:
    • kubectl describe
    • kubectl logs
    • journalctl

七、常见坑速查表

现象 可能原因
Node NotReady kubelet挂 / 磁盘满 / 时间不同步
Pod Pending 资源不足 / 污点 / PVC
镜像拉不下来 私有仓库 / 证书 / 代理
服务访问不通 endpoint为空 / 网络插件
集群突然失控 证书过期

如果你愿意,可以把具体故障现象(比如某个 Pod 状态、报错日志)贴出来,我可以直接帮你定位。

0 踩