温馨提示×

怎样调试Debian的K8s

小樊
34
2026-08-28 01:39:10
栏目: 智能运维

在 Debian 上调试 Kubernetes(K8s)通常分为 集群层面节点层面应用层面。下面按常见场景给你一套比较系统的调试思路(适用于 kubeadm 部署的 Debian 环境,也适用于其他部署方式)。


一、基础环境检查(最常见问题)

1. 系统环境

cat /etc/debian_version
uname -a

确认:

  • Debian 版本(11/12)
  • 内核版本(建议 ≥ 5.x)
  • 是否已关闭 swap(K8s 要求)
free -m
swapon --show

临时关闭:

sudo swapoff -a

永久关闭(编辑 /etc/fstab,注释 swap 行)


2. 容器运行时(containerd / docker)

K8s 现在默认使用 containerd

systemctl status containerd
journalctl -u containerd -f

检查配置:

cat /etc/containerd/config.toml

常见问题:

  • SystemdCgroup = true 是否开启
  • pause 镜像是否可拉取

重启:

systemctl restart containerd

二、Kubernetes 组件调试

1. kubelet(最常见故障点)

systemctl status kubelet
journalctl -u kubelet -xe

常见错误:

  • 无法连接 apiserver
  • cgroup 驱动不一致
  • CNI 未初始化

修复示例(重置并重新初始化):

kubeadm reset
kubeadm init

2. kubeadm 初始化失败

kubeadm init --v=5

查看详细日志:

journalctl -u kubelet -f
cat /var/log/syslog | grep kube

三、集群状态调试

1. 节点状态

kubectl get nodes
kubectl describe node <node-name>

常见状态:

  • NotReady → CNI / kubelet / 网络问题
  • SchedulingDisabled → 被 cordon

2. Pod 状态调试(核心)

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

Pod 常见状态:

  • Pending → 资源不足 / scheduler 问题
  • CrashLoopBackOff → 容器启动失败
  • ImagePullBackOff → 镜像拉取失败

3. 事件查看(非常重要)

kubectl get events --sort-by=.metadata.creationTimestamp

四、网络问题调试(Debian 上最常见)

1. CNI 插件

常见:Calico / Flannel / Cilium

kubectl get pods -n kube-system

检查 CNI 配置:

ls /etc/cni/net.d/

2. 网络连通性测试

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

五、kubectl 与 apiserver 调试

1. apiserver 是否健康

kubectl cluster-info
kubectl get componentstatuses

查看 apiserver 日志:

docker logs <apiserver-container>
# 或
journalctl -u kubelet -f

2. kubeconfig 问题

kubectl config view
cat ~/.kube/config

六、升级或版本不兼容问题

Debian + K8s 常见坑:

  • apt 源版本不一致
  • containerd 与 kubelet 版本不匹配

查看版本:

kubelet --version
kubectl version
containerd --version

建议:

  • 使用官方 Kubernetes apt 源
  • 固定版本,避免自动升级

七、常用调试命令速查表

# 查看所有组件
kubectl get componentstatuses

# 查看所有命名空间
kubectl get ns

# 查看资源使用
kubectl top node
kubectl top pod -A

# 进入容器
kubectl exec -it <pod> -- sh

# 查看网络策略
kubectl get networkpolicies -A

八、如果你愿意,我可以进一步帮你

你可以直接贴出:

  1. kubectl get nodes 输出
  2. kubectl describe pod <pod>
  3. journalctl -u kubelet -n 50
  4. 你是怎么部署的(kubeadm / 二进制 / Rancher 等)

我可以 直接帮你定位问题,而不是泛泛而谈。

0