温馨提示×

centos部署k8s如何排错

小樊
42
2026-07-21 08:21:25
栏目: 智能运维

在 CentOS 上部署 Kubernetes(k8s)常见的问题主要集中在系统环境、容器运行时、kubeadm、网络、SELinux/Firewalld 等方面。下面给你一套系统化排错思路 + 常用命令,适合初学者和运维实战。


一、先确认基础环境(90% 的问题都在这里)

1️⃣ 系统版本与内核

cat /etc/centos-release
uname -r

✅ 建议:

  • CentOS 7.6+ / CentOS Stream 8
  • 内核 ≥ 3.10(推荐 4.x+)

2️⃣ 关闭 SELinux

getenforce

如果不是 Disabled

setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

3️⃣ 关闭防火墙

systemctl status firewalld

关闭:

systemctl stop firewalld
systemctl disable firewalld

4️⃣ 禁用 swap

free -h

K8s 必须关闭 swap

swapoff -a
sed -i '/swap/d' /etc/fstab

5️⃣ 内核参数(非常重要)

cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sysctl --system

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

1️⃣ docker 状态

systemctl status docker
journalctl -u docker -f

常见问题:

  • docker 没启动
  • cgroup driver 不一致

✅ 推荐 docker 使用 systemd:

cat /etc/docker/daemon.json

应包含:

{
  "exec-opts": ["native.cgroupdriver=systemd"]
}

重启:

systemctl restart docker

2️⃣ containerd(1.24+ 推荐)

systemctl status containerd
journalctl -u containerd -f

三、kubeadm 初始化失败排错

1️⃣ 查看初始化日志

journalctl -xeu kubelet -f

或:

kubeadm init --v=5

2️⃣ kubelet 启动失败(最常见)

systemctl status kubelet

常见错误示例:

  • failed to run Kubelet: misconfiguration
  • cgroup driver not supported

解决:

systemctl restart kubelet

3️⃣ 端口冲突

ss -lntp | grep 6443

6443 被占用会直接导致 apiserver 起不来。


四、Pod / Node 状态异常排错

1️⃣ 查看节点状态

kubectl get nodes

NotReady 常见原因:

  • 网络插件未安装
  • kubelet 异常
  • 容器运行时异常

2️⃣ Pod 排错三板斧

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

关注:

  • Events
  • CrashLoopBackOff
  • ImagePullBackOff

3️⃣ 网络问题(CNI)

常见:

  • flannel / calico 没起来
  • 网卡名不是 eth0

flannel 示例:

kubectl get pods -n kube-system
kubectl logs -n kube-system kube-flannel-ds-xxx

五、证书 & 时间问题

1️⃣ 时间不同步

date
timedatectl
yum install -y chrony
systemctl enable --now chronyd

2️⃣ 证书过期

kubeadm certs check-expiration

六、重置集群(实在不行)

kubeadm reset
iptables -F
ipvsadm --clear
reboot

七、常用排错命令速查表

功能 命令
查看 kubelet 日志 journalctl -u kubelet -f
查看容器运行时 systemctl status docker
查看 pod kubectl get pods -A
查看事件 kubectl get events -A
查看网络 ip a
查看路由 ip route

八、典型错误速查

The connection to the server localhost:8080 was refused ✅ 没配置 kubeconfig:

export KUBECONFIG=/etc/kubernetes/admin.conf

node not found ✅ token 过期:

kubeadm token create --print-join-command

九、建议的最佳实践

✅ 使用 containerd ✅ 内核升级到 4.x+ ✅ 关闭 swap / selinux / firewalld ✅ 使用 kubeadm 官方文档


如果你愿意,可以直接把报错日志贴出来(比如 kubelet / kubeadm init 报错),我可以直接帮你定位到具体原因

0