温馨提示×

Kubernetes故障排查在Debian上怎么做

小樊
34
2025-12-09 04:17:08
栏目: 智能运维

Debian上Kubernetes故障排查实操手册

一 快速定位流程

  • 集群概览与节点状态
    • 查看集群与节点健康:kubectl cluster-infokubectl get nodes -o wide
    • 查看系统组件与事件:kubectl get pods -n kube-systemkubectl get events -A --sort-by=.metadata.creationTimestamp
  • 工作负载与网络连通
    • 定位异常Pod:kubectl get pods -A -o wide,进入详情:kubectl describe pod -n
    • 查看容器日志:kubectl logs -n [-c ];进入调试:kubectl debug -it --image=busybox:1.36 --target=
  • 资源与调度
    • 资源压力与驱逐:kubectl top nodeskubectl top pods -A;检查节点条件:kubectl describe node | grep -A5 Conditions
  • 外部访问与端口
    • 服务可达性:在节点上测试 curl http://:nc -vz ;必要时临时改为 NodePort/LoadBalancer 验证。

二 节点与系统层检查

  • 基础环境
    • 关闭Swap:swapoff -a 并注释 /etc/fstab 中的swap行;内核转发与桥接:
      • sysctl:net.ipv4.ip_forward=1net.bridge.bridge-nf-call-iptables=1net.bridge.bridge-nf-call-ip6tables=1
      • 模块:modprobe br_netfilter
  • 容器运行时
    • v1.24 起内置 dockershim 移除,建议使用 containerd 作为运行时;如使用 Docker,需通过 cri-dockerd 适配。
  • 防火墙与端口
    • UFW/iptables:确保控制面与工作节点间必要端口开放,例如 6443(API)、2379/2380(etcd)、以及 kubelet 端口区间(默认 10250 等);示例:
      • sudo ufw allow 6443/tcp
      • sudo ufw allow 2379/tcp
      • sudo ufw allow 2380/tcp
  • 系统日志与内核消息
    • 节点侧排查:journalctl -u kubelet -xetail -f /var/log/syslogdmesg | tail -n50

三 常见故障与修复对照表

症状 快速检查 修复建议
节点 NotReady kubectl describe node;journalctl -u kubelet 确认容器运行时就绪、网络插件已部署、内核参数与模块正确、节点资源充足
Pod 状态 ErrImagePull/ImagePullBackOff kubectl describe pod;查看镜像名与仓库 修正镜像名/标签;私有仓库在节点放置 CA 证书至 /etc/docker/certs.d//ca.crt;必要时使用可拉取镜像
Service 访问不通 kubectl get svc;curl/nc 测试;节点防火墙 核对 ports/targetPort;确认 Service type(ClusterIP/NodePort/LoadBalancer);开放节点端口与云厂商安全组
节点加入失败(kubeadm join) 检查 token/caCert/hash;admin.conf 权限 在控制面重新生成 kubeadm token create --print-join-command;确保 /etc/kubernetes/admin.conf 权限正确并分发到工作节点
网络插件异常(Pod 间不通/Service 解析失败) kubectl get pods -n kube-system;kubectl logs 重新部署网络插件(如 Flannel/Calico);检查 IP forwardingiptables/nftables 规则与网段配置
证书错误(API/客户端) curl -vk;检查 kubeconfig 证书 更新/重新签发证书;客户端使用 –cacert 指定 CA;临时排障可用 -k(生产禁用)
磁盘压力导致 Pod 被驱逐(Evicted) kubectl get pods -A 清理节点磁盘(容器日志、镜像、临时文件);扩容磁盘或调整驱逐阈值
DNS 解析失败 kubectl get pods -n kube-system -l k8s-app=coredns;kubectl logs 确认 CoreDNS 运行且配置正确;检查上游 DNS 与 NetworkPolicy 是否阻断 UDP/TCP 53

四 日志与可观测性

  • 组件与容器日志
    • 集群组件:kubectl logs -n kube-system
    • 应用容器:kubectl logs -n [-c ];调试:kubectl debug
  • 集中式日志方案
    • EFK(Elasticsearch + Fluentd + Kibana):Fluentd 以 DaemonSet 收集节点与容器日志,写入 Elasticsearch,在 Kibana 检索与可视化。
    • Loki + Grafana:轻量聚合日志,配合 Grafana 面板查询与告警。

五 高频命令清单

  • 集群与节点
    • kubectl cluster-info
    • kubectl get nodes -o wide
    • kubectl describe node
  • 工作负载与事件
    • kubectl get pods -A -o wide
    • kubectl describe pod -n
    • kubectl logs -n [-c ]
    • kubectl get events -A --sort-by=.metadata.creationTimestamp
  • 资源与网络
    • kubectl top nodeskubectl top pods -A
    • kubectl get svc -Akubectl get endpoints -n
    • 节点侧:ping sudo ufw statussudo iptables -Ljournalctl -u kubelet -xetail -f /var/log/syslogdmesg | tail

0