在 CentOS 上排查 Kubernetes(k8s)故障,通常遵循 “从整体到局部、从节点到 Pod、从系统到应用” 的思路。下面给你一套实战排查流程 + 常用命令,适合生产环境。
kubectl get nodes
kubectl get nodes -o wide
重点关注:
STATUS 是否为 ReadyROLES(控制面 / 工作节点)kubectl describe node <node-name>
看:
CentOS 上常见两种方式:
- kubeadm 安装(systemd 管理)
- 二进制部署
kubectl get cs
(新版本可能已废弃,可跳过)
journalctl -u kube-apiserver -f
journalctl -u kube-controller-manager -f
journalctl -u kube-scheduler -f
journalctl -u etcd -f
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
systemctl status kubelet
journalctl -u kubelet -f
# Docker
systemctl status docker
docker info
# containerd
systemctl status containerd
ctr -n k8s.io containers list
kubectl get pods -A
kubectl get pods -n <namespace>
状态含义:
Pending:调度问题CrashLoopBackOff:应用启动失败ImagePullBackOff:镜像拉取失败Evicted:节点资源不足kubectl describe pod <pod-name> -n <ns>
重点看:
kubectl logs <pod-name> -n <ns>
kubectl logs <pod-name> -c <container> -n <ns>
kubectl logs <pod-name> --previous -n <ns>
kubectl run test --rm -it --image=busybox -- sh
nslookup kubernetes.default
kubectl get svc
kubectl describe svc <svc-name>
kubectl get pods -n kube-system
journalctl -u flanneld
kubectl get pv
kubectl get pvc -n <ns>
kubectl describe pvc <pvc-name>
常见问题:
systemctl status firewalld
建议:
systemctl stop firewalld
systemctl disable firewalld
getenforce
生产建议:
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
timedatectl
chronyc sources
kubectl get nodeskubectl get pods -Akubectl describe podkubectl logsjournalctl -u kubelet如果你愿意,可以告诉我:
我可以给你针对性的排查命令。