温馨提示×

Kubernetes故障排查Ubuntu怎么办

小樊
37
2025-12-28 09:31:01
栏目: 智能运维

Ubuntu 上 Kubernetes 故障排查实操手册

一 快速定位路径

  • 查看全局状态:使用kubectl get nodes -o wide确认节点是否Ready;用kubectl get pods -A查看所有命名空间 Pod 状态;对异常对象执行kubectl describe获取事件;查看容器日志用kubectl logs -n [-c ],崩溃可加**–previous**;节点侧关键日志用journalctl -u kubelet -f实时跟踪。若节点 NotReady,优先检查 kubelet、容器运行时与网络插件。
  • 节点资源与系统健康:执行df -h /var/lib/kubelet(建议保留至少10%空闲)、free -mtop -p $(pgrep kubelet);检查内核与系统日志dmesg -T | grep -i "oom|error"journalctl -xe,关注OOM、磁盘压力、服务崩溃等。

二 节点与系统层排查

  • kubelet 与容器运行时:确认服务运行systemctl status kubelet,异常时journalctl -u kubelet -f定位(证书、运行时、磁盘等);容器运行时(containerd/docker)检查systemctl status containerd,containerd 可用ctr containers list查看容器;若 kubelet 配置异常,核对**/etc/kubernetes/kubelet.conf/var/lib/kubelet/config.yaml中的clusterDNS(如 10.96.0.10)clusterDomain(如 cluster.local)runtimeEndpoint(containerd 一般为unix:///run/containerd/containerd.sock**)。
  • 容器运行时关键参数与镜像:containerd 配置**/etc/containerd/config.tomlsandbox_image**(如国内镜像registry.aliyuncs.com/google_containers/pause:3.9)与SystemdCgroup=true;修改后执行containerd config default > /etc/containerd/config.toml并重启systemctl restart containerd
  • 磁盘与镜像清理:当**/var/var/lib/kubelet使用率超过80%时,清理旧日志(/var/log)、无用镜像(docker system prunecrictl rmi --prune**)与临时文件,避免 kubelet/运行时异常。

三 Pod 与容器常见故障

  • 状态与事件:对异常 Pod 用kubectl describe pod -n 查看Events(如Insufficient CPUFailed to pull imageUnhealthy);结合kubectl logs与**–previous**定位应用错误。
  • 典型症状处理:
    • ImagePullBackOff/ErrImagePull:核对镜像名与标签(如nginx:1.25),私有仓库配置imagePullSecrets;本地先docker pull验证。
    • CrashLoopBackOff:查看日志与探针(livenessProbe/readinessProbe)配置,必要时调整initialDelaySeconds、启动命令或依赖服务可用性。
    • Pending:资源不足或亲和性不匹配,检查resources.requests/limits、节点资源与调度约束。
    • OOMKilled:提升resources.limits.memory(如512Mi),并合理设置requests避免碎片。
    • Ports not available:确认containerPort与应用监听端口一致,Service 的targetPort匹配容器端口。

四 Service 与网络排查

  • Service 与 Endpoints:用kubectl get svc -n 核对CLUSTER-IPPORT(S);用kubectl describe svc -n 核对selector;用**kubectl get endpoints -n **确认是否关联到 Pod IP:Port(为空多为 selector 不匹配)。
  • 连通性与防火墙:节点侧测试到 API Server:ping nc -zv 6443;排查ufw/iptables与安全组规则。
  • CNI 与网络策略:检查 CNI Pod(如calico-node/flannel)状态与日志,确认BGP/隧道就绪;用kubectl get networkpolicies -A排查策略阻断。
  • DNS 解析:确认CoreDNS运行(kubectl get pods -n kube-system -l k8s-app=kube-dns),在集群内临时容器测试nslookup .;节点**/etc/resolv.conf应指向CoreDNS ClusterIP(默认 10.96.0.10)**。

五 证书 组件 与恢复

  • 证书有效期:检查kubelet客户端证书openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates;集群证书用kubeadm certs check-expiration,将过期证书及时更新。
  • 控制面组件:查看kube-apiserver/etcd/controller-manager/scheduler/kube-proxy/CoreDNS是否Running,异常时用kubectl describe pod -n kube-system与日志定位。
  • 重置与重装:无法恢复时先备份清单与密钥,再执行sudo kubeadm reset清理节点,随后按需要kubeadm init或使用现有清单重新加入集群。

0