温馨提示×

centos部署k8s怎么排错

小樊
52
2026-09-09 09:28:55
栏目: 智能运维

在 CentOS 上部署 Kubernetes(kubeadm 方式最常见) 时,排错通常遵循一个“由下而上”的思路:
系统层 → 容器运行时 → kubeadm → 控制平面 → 网络 → 节点 & Pod。

下面给你一份实战排错指南(可直接照着查)。


一、先确认基础环境(最容易踩坑)

1. 系统版本 & 内核

cat /etc/centos-release
uname -a

✅ 推荐:

  • CentOS 7.9 / 8 Stream
  • 内核 ≥ 3.10(建议 4.x+)

2. 关闭 Swap(必须)

swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab

3. 防火墙 & SELinux

systemctl stop firewalld
systemctl disable firewalld

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

4. 时间同步(很重要)

timedatectl
chronyc sources

不同节点时间不一致会导致证书失败。


二、容器运行时排错(containerd / docker)

containerd(推荐)

systemctl status containerd
journalctl -u containerd -f

常见问题:

  • 未配置 SystemdCgroup = true
containerd config default > /etc/containerd/config.toml

确认:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  SystemdCgroup = true

三、kubeadm 初始化失败排查

1. 查看 init 报错

kubeadm init --v=5

2. 常见错误 & 解决

❌ 端口被占用

ss -lntp | grep -E '6443|2379|10250'

❌ 证书问题

ls /etc/kubernetes/pki
kubeadm certs check-expiration

重置再来:

kubeadm reset -f
rm -rf ~/.kube

四、控制平面起不来

1. 查看核心组件

docker ps -a
crictl ps -a

2. 查看静态 Pod 日志

ls /etc/kubernetes/manifests
journalctl -u kubelet -f

3. kubelet 最常见问题

systemctl status kubelet

典型错误:

  • cgroup driver 不一致
  • 镜像拉不到

五、节点 NotReady

1. 查看节点状态

kubectl get nodes
kubectl describe node <node>

2. 网络插件问题(90% 的原因)

  • Flannel
  • Calico
kubectl get pods -n kube-system
kubectl logs -n kube-system <cni-pod>

Flannel 示例:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

确认:

cat /proc/sys/net/bridge/bridge-nf-call-iptables
# 应为 1

六、Pod 起不来

1. Pod 状态分析

kubectl get pods -A
kubectl describe pod <pod>
kubectl logs <pod>

常见状态:

  • ImagePullBackOff → 镜像拉不到
  • CrashLoopBackOff → 程序启动失败
  • Pending → 资源不足 / 调度失败

2. 镜像问题(国内环境)

crictl pull registry.aliyuncs.com/google_containers/pause:3.9

七、常用排错命令汇总(建议收藏)

# 系统
journalctl -u kubelet -f
systemctl status containerd

# K8s
kubectl get events --sort-by=.metadata.creationTimestamp
kubectl describe node
kubectl logs -n kube-system kube-apiserver-master

# 网络
ip route
iptables -L -n

八、推荐排错顺序(实战)

  1. kubectl get nodes
  2. kubectl describe node
  3. journalctl -u kubelet
  4. kubectl get pods -n kube-system
  5. 看 CNI / 镜像 / 证书

如果你愿意,可以直接把具体报错信息(kubeadm / kubelet / pod 日志)贴出来,我可以帮你逐条精确定位。

0 踩