温馨提示×

如何调试centos k8s

小樊
44
2026-10-03 10:14:40
栏目: 智能运维

调试 CentOS 上的 Kubernetes(k8s)通常分为集群层、节点层、Pod/容器层、网络层几个维度。下面我按“从快到慢、从外到内”的方式给你一套实用调试思路。


一、先确认集群整体状态

kubectl get nodes
kubectl get pods -A
kubectl get cs

重点关注:

  • 节点是否 Ready
  • 系统组件(kube-apiserver / scheduler / controller-manager)是否健康
  • 是否有大量 CrashLoopBackOff / Pending

二、节点层调试(CentOS 特有)

1. 查看 kubelet 状态

systemctl status kubelet
journalctl -u kubelet -f

常见问题:

  • kubelet 启动失败(证书、swap、cgroup 驱动)
  • CentOS 默认 cgroup driver 与 Docker 不一致

查看驱动:

docker info | grep -i cgroup
cat /var/lib/kubelet/config.yaml | grep cgroup

2. 关闭 swap(CentOS 常见坑)

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

三、Pod / 容器调试

1. 查看 Pod 详情

kubectl describe pod <pod-name> -n <namespace>
kubectl logs <pod-name> -n <namespace>
kubectl logs <pod-name> -c <container> -n <namespace>

2. 进入容器调试

kubectl exec -it <pod-name> -- /bin/sh

3. 常见状态及原因

状态 可能原因
Pending 资源不足 / 节点亲和性
CrashLoopBackOff 程序启动失败
ImagePullBackOff 镜像拉取失败
Terminating 卡在 preStop / 节点失联

四、网络调试(CentOS + k8s 高频问题)

1. 检查网络插件

kubectl get pods -n kube-system | grep -E 'flannel|calico|cilium'

2. 防火墙(CentOS 重点)

systemctl stop firewalld
systemctl disable firewalld

或放行端口(6443、10250、8472 等)

3. 测试 Pod 网络

kubectl run test --image=busybox -it --rm -- sh
ping <service-ip>

五、高级调试手段

1. 查看 etcd

kubectl exec -it -n kube-system etcd-master -- etcdctl endpoint health

2. 开启 kubelet 调试日志

vi /var/lib/kubelet/config.yaml
logging:
  verbosity: 4
systemctl restart kubelet

3. 使用 ephemeral container(1.23+)

kubectl debug -it <pod> --image=busybox

六、常见 CentOS + K8s 坑总结

  • firewalld 没关
  • SELinux 未关闭
  • swap 未禁用
  • Docker / containerd 混用
  • 内核版本过低(建议 ≥ 4.18)

如果你能告诉我:

  • CentOS 版本(7 / 8 / Stream)
  • k8s 安装方式(kubeadm / 二进制 / 其他)
  • 具体报错或现象

我可以给你更精准的调试命令和解决方案。

0 踩