在 CentOS 上部署 Kubernetes(k8s) 时,排查错误的思路通常是从 底层环境 → 容器运行时 → k8s 组件 → 应用层 逐层检查。下面给你一套实战型排查流程,非常适用于生产/测试环境。
cat /etc/centos-release
uname -r
✅ 要求:
systemctl status firewalld
getenforce
✅ 建议(测试环境):
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
free -m
swapon --show
✅ 关闭:
swapoff -a
sed -i '/swap/d' /etc/fstab
sysctl -a | grep bridge
✅ 内核参数示例:
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
systemctl status containerd
# 或 docker
systemctl status docker
❌ 常见问题:
ss -lntp | grep 6443
ss -lntp | grep 10250
systemctl status kubelet
journalctl -u kubelet -f
✅ 常见错误:
failed to run kubeletcontainer runtime is not runningswap is enabledkubectl get nodes
kubectl get pods -A
| 状态 | 说明 |
|---|---|
| NotReady | kubelet / 网络插件问题 |
| Pending | 资源不足 |
| CrashLoopBackOff | 应用不断重启 |
kubectl describe pod <pod-name> -n <namespace>
重点关注:
kubectl logs <pod-name> -n <namespace>
kubectl logs <pod-name> -c <container> -n <namespace>
kubectl get pods -n kube-system
常见:
kubectl logs -n kube-system kube-flannel-ds-xxx
journalctl -xe
kubeadm reset
kubeadm init --pod-network-cidr=10.244.0.0/16
❌ 常见错误:
port 6443 already in usecrictl not foundcontainer runtime is not runningopenssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates
Unable to connect to the serverx509: certificate has expired✅ 解决:
kubeadm certs renew all
systemctl restart kubelet
kubelet → runtime → network → certs
顺序:
journalctl -u kubeletsystemctl status containerdkubectl get nodeskubectl describe pod# 查看节点
kubectl get nodes -o wide
# 查看所有组件
kubectl get pods -n kube-system
# 查看 kubelet 日志
journalctl -u kubelet -f
# 查看容器运行时
crictl ps
你可以把下面信息发我:
我可以直接帮你精准定位 ✅