温馨提示×

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 -fjournalctl -u kube-apiserver -fjournalctl -u kube-controller-manager -fjournalctl -u kube-scheduler -fjournalctl -u kube-proxy -f
    • 服务与端点:kubectl get svc,ep -n ;Ingress:kubectl get ingress -n
  • 资源与系统
    • 资源使用:kubectl top nodeskubectl top pods --all-namespaces
    • 系统层面:dmesg/var/log/messages/var/log/syslogfree -gdf -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.localwget/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,确认 StatefulSetpod-name 解析正常。

四 存储与资源问题

  • 存储链路
    • 检查 PV/PVC 状态与事件:kubectl get pv,pvc -n ;确认 StorageClassprovisioner 正常;后端(如 NFS/Ceph)是否可访问与配额充足。
    • Pod 事件常见原因:AccessModes 不匹配、volumeMounts 路径冲突、fsGroup/securityContext 权限不足。
  • 资源与调度
    • 排查 OOMKilled/CPUThrottlingkubectl describe pod -n kubectl top pods -n ;必要时调整 resources.requests/limits 或节点资源。
    • 节点污点与容忍、亲和/反亲和、拓扑分散等调度约束导致 Pendingkubectl describe node | grep Taintskubectl 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 或远程调试方式连接目标进程,便于定位复杂问题。

0