Linux下Kubernetes如何调试
小樊
35
2025-11-20 19:27:44
Linux下Kubernetes调试实战指南
一 快速定位路径
- 集群与节点健康
- 查看节点状态:kubectl get nodes;异常节点执行:kubectl describe node 。
- 查看全命名空间 Pod:kubectl get pods --all-namespaces -o wide;异常 Pod 执行:kubectl describe pod -n 与 kubectl logs -n [-c ]。
- 查看事件:kubectl get events --sort-by=.metadata.creationTimestamp。
- 组件与服务连通
- 控制面组件日志(systemd):journalctl -u kubelet -f、journalctl -u kube-apiserver -f、journalctl -u kube-controller-manager -f、journalctl -u kube-scheduler -f、journalctl -u kube-proxy -f。
- 服务与端点:kubectl get svc,ep -n ;Ingress:kubectl get ingress -n 。
- 资源与系统
- 资源使用:kubectl top nodes、kubectl top pods --all-namespaces。
- 系统层面:dmesg、/var/log/messages 或 /var/log/syslog、free -g、df -h、容器运行时日志(如 containerd:journalctl -u containerd)。
二 节点与网络深入排查
- 节点级调试
- 无法 SSH 到节点时,使用:kubectl debug node/ -it --image=ubuntu。
- 调试容器共享节点的 IPC/Network/PID 命名空间,节点根文件系统挂载在 /host;常用路径:
- /host/var/log/kubelet.log
- /host/var/log/kube-proxy.log
- /host/var/log/containerd.log
- /host/var/log/syslog、/host/var/log/kern.log
- 在调试容器中按需安装工具(如 ip/ifconfig/nc/ping/ps/tcpdump/mtr/curl)进行抓包与连通性验证。
- 网络连通性
- 节点间:ping 、traceroute 。
- Pod 间/跨命名空间:临时调试容器 kubectl run -it --rm debug --image=busybox:1.36 --restart=Never – nslookup kubernetes.default.svc.cluster.local 或 wget/curl 目标地址。
- CNI 状态:检查 Calico/Flannel 等插件 DaemonSet 是否 Ready、节点是否分配 PodCIDR、是否存在 NetworkPolicy 拦截。
三 应用与服务访问调试
- 本地到集群
- 单端口转发:kubectl port-forward svc/ -n :;或 kubectl port-forward pod/ :。
- 批量/全量服务转发:kubefwd services -n (在本地以 127.0.0.1 暴露同名同端口,并临时写入 /etc/hosts,便于按服务名访问依赖)。
- 集群到本地
- 双向拦截替换:telepresence connect,将集群中对某 Service 的请求转发到本地运行实例,同时保留集群内其他依赖可达,适合本地开发联调。
- 服务发现问题
- 核对 Service.spec.selector 与后端 Pod.labels 一致;查看 Endpoints 是否有地址;若使用 Headless Service,确认 StatefulSet 的 pod-name 解析正常。
四 存储与资源问题
- 存储链路
- 检查 PV/PVC 状态与事件:kubectl get pv,pvc -n ;确认 StorageClass 与 provisioner 正常;后端(如 NFS/Ceph)是否可访问与配额充足。
- Pod 事件常见原因:AccessModes 不匹配、volumeMounts 路径冲突、fsGroup/securityContext 权限不足。
- 资源与调度
- 排查 OOMKilled/CPUThrottling:kubectl describe pod -n 与 kubectl top pods -n ;必要时调整 resources.requests/limits 或节点资源。
- 节点污点与容忍、亲和/反亲和、拓扑分散等调度约束导致 Pending:kubectl describe node | grep Taints、kubectl get pod -n -o yaml | grep -A3 tolerations。
五 进阶与源码级调试
- 节点问题检测
- 部署 Node Problem Detector(NPD) 捕获内核/系统异常并上报为 Node Condition/Events,便于提前发现磁盘、内核、网络等节点级故障。
- 源码级调试控制面
- 使用 Delve(dlv) 对 kube-apiserver 等组件进行源码级调试;在构建阶段关闭优化并保留调试信息(如 -gcflags=all=-N -l),通过 dlv exec 或远程调试方式连接目标进程,便于定位复杂问题。