如何在 Ubuntu 上进行 Kubernetes 调试
导读:Ubuntu 上调试 Kubernetes 的实用流程 一 快速定位流程 集群与节点健康 查看节点状态:kubectl get nodes -o wide;异常节点用 kubectl describe node 检查 Conditio...
Ubuntu 上调试 Kubernetes 的实用流程
一 快速定位流程
- 集群与节点健康
- 查看节点状态:kubectl get nodes -o wide;异常节点用 kubectl describe node 检查 Conditions(如 Ready、DiskPressure、MemoryPressure)。
- 查看系统组件:kubectl get pods -n kube-system,确认 kube-apiserver、etcd、kube-controller-manager、kube-scheduler、coredns 等处于 Running。
- 工作负载状态
- 全局视角:kubectl get pods --all-namespaces -o wide;异常 Pod 用 kubectl describe pod -n 看 Events,用 kubectl logs -n [-c ] 查日志;资源用 kubectl top nodes / pods。
- 节点级故障
- 服务与日志:systemctl status kubelet;journalctl -u kubelet -f(关注证书过期、容器运行时异常)。
- 资源与磁盘:df -h /var/lib/kubelet;free -m;top -p $(pgrep kubelet)。
- 容器运行时:systemctl status containerd;ctr containers list(或 crictl ps -a)。
- 网络连通
- 到 API Server:ping ;端口:nc -zv 6443。
- CNI 插件:kubectl get pods -n kube-system -l k8s-app=calico-node(或对应插件);查看插件日志。
- 策略与 DNS:检查 NetworkPolicy 限制;容器内 cat /etc/resolv.conf 确认 DNS。
二 深入排障与临时调试
- 临时容器 Ephemeral Containers(推荐)
- 适用:容器 CrashLoopBackOff、镜像无调试工具、无法 exec。
- 前提:集群版本 ≥ v1.23(特性默认启用)。
- 示例:注入调试容器并进入
- kubectl debug -it -n --image=nicolaka/netshoot --target= – sh
- 或 kubectl debug -it -n --image=busybox – sh
- 常用工具镜像:nicolaka/netshoot(网络诊断)、curlimages/curl(HTTP 测试)、container-trouble-shooting(综合诊断)。
- 节点级调试
- 无法 SSH 时:kubectl debug node/ -it --image=ubuntu,在节点上打开交互式 Shell 做系统级排查。
- 抓包与流量分析
- 在目标 Pod 内抓包:kubectl sniff -n (需 krew 安装 sniff 插件,宿主机装 Wireshark/tcpdump),可在 Wireshark 中分析 TCP/UDP 会话细节。
- 远程本地联调
- 使用 mirrord:将集群流量/环境变量/文件操作桥接到本地进程,配合 IDE 断点调试,无需反复部署。
三 常见故障速解
- 节点 NotReady
- 检查 kubelet 是否运行与证书是否过期(如 /var/lib/kubelet/pki/kubelet-client-current.pem);查看 kubelet 与 containerd 日志;确认 CNI 插件 Pod 就绪;排查 磁盘/内存 压力与 防火墙 端口(如 6443)。
- Pod 无法启动或 CrashLoopBackOff
- 用 kubectl describe pod 看 Events(镜像拉取失败、启动命令错误、挂载失败、资源配额不足等);用 kubectl logs 查看容器日志;必要时注入 临时容器 进入现场排查。
- 服务网络不通
- 节点到 API Server 6443 连通性;CNI 插件状态与日志;是否存在 NetworkPolicy 拦截;检查 DNS 解析(容器内 /etc/resolv.conf);排查 ufw/iptables 规则。
四 权限与安全建议
- 最小权限的临时容器调试
- 为调试账号授予仅操作 pods/ephemeralcontainers 的权限:
- apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: ephemeral-debugger
rules:
- apiGroups: [“”] resources: [“pods/ephemeralcontainers”] verbs: [“update”,“patch”]
- apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: debugger-binding
subjects:
- kind: User name: “” apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: ephemeral-debugger apiGroup: rbac.authorization.k8s.io
- apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: ephemeral-debugger
rules:
- 应用:kubectl create -f role-test.yaml
- 为调试账号授予仅操作 pods/ephemeralcontainers 的权限:
- 合规与风险控制
- 调试完成后删除临时容器;避免在调试镜像中引入不必要软件;生产环境建议通过 RBAC 严格控制调试权限与审计。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在 Ubuntu 上进行 Kubernetes 调试
本文地址: https://pptw.com/jishu/751119.html
