Bota5ky

Kubernetes学习笔记(三十八):Trouble shooting

Application Failure

  • 查看Service的状态

    • 使用应用程序或者 curl 检查是否可以在节点端口的IP上访问web服务器 curl http://web-service-ip:node-port
    • 检查服务 kubectl describe svc web-service 的Endpoints
    • 如果没有查询到以上Endpoint,比对一下 Selector
  • 查看Pod的状态

    • kubectl describe pod web
    • kubectl logs web-f 全称 --follow,因为应用程序关闭就无法看到日志,只能等的应用程序再次失败,或者使用--previous查看上一个pod的日志
  • 查看依赖Service

    • 检查 db-service状态
    • 检查 db pod 自身

参考文档:https://kubernetes.io/docs/tasks/debug/debug-application/debug-pods/

Control Plane Failure

  • 查看 Node 状态 kubectl get nodes
  • 查看 Pod 状态 kubectl get pods
  • 查看 Control Plane 组件状态
    • 如果 controlplane 组件部署为 pod,使用 kubeadm 工具部署集群的情况下,查看controlplane pod 状态 kubectl -n kube-system get pods
    • 如果 controlplane 组件被部署为 service,则检查 master node 上的 service 的状态:如 service kube-apiserver statusservice kube-controller-manager statusservice kube-scheduler statusservice kubelet statusservice kube-proxy status
  • 查看 Service 日志
    • 如果使用 kubeadm 工具部署集群,则使用kubectl -n kube-system logs kube-apiserver-master
    • 如果服务是在主节点上本地配置的,清使用host的日志解决方案查看 service 日志,journalctl -u kube-apiserver

更多参考资料:https://kubernetes.io/docs/tasks/debug-application-cluster/debug-cluster

Worker Node Failure

  • 查看 Node 状态 kubectl get nodes,查看节点详细 kubectl describe node worker-1

  • 检查节点上可能得CPU、内存和磁盘空间 topdf -h

  • 查看 kubelet 状态 service kubelet statussudo journalctl -u kubelet

  • 检查 kubelet 证书,确保它们未过期,属于正确的组,并且证书由正确的 CA 颁发 openssl x509 -in /var/lib/kubelet/worker-1.crt -text

Network Troubleshooting

CoreDNS

  • 如果 CoreDNS pod 处于 pending 状态,请首先检查 CNI 是否安装

  • 如果 CoreDNS pod 处于 CrashLoopBackOff 或 Error 状态:

    如果节点使用旧版本的 Docker 运行 SELinux,可能会遇到 CoreDNS pod 未启动的情况,要解决此问题,可以尝试以下选项

    • 升级到更新版本的 Docker

    • 禁用 SELinux

    • 修改 CoreDNS 部署,将 allowPrivilegeEscalation 设置为 true

    • CoreDNS 发生 CrashLoopBackOff 的另一个原因是 CoreDNS pod 检测到循环

      解决方式有:

      • 将以下内容添加到您的 kubelet 配置 yaml:resolvConf: <path-to-your-real-resolv-conf-file> 此标志告诉 kubelet 将备用 resolv.conf 传递给 Pod 。对于使用 systemd-resolved 的系统,/run/systemd/resolve/resolv.conf 通常是“真实” resolv.conf 的位置,尽管这可能因您的发行版而异
      • 禁用主机节点上的本地 DNS 缓存,并将 /etc/resolv.conf 恢复为原始
      • 一个快速的解决方法是编辑您的 Corefile,替换 forward /etc/resolv.conf 与您的上游 DNS 的 IP 地址,例如 forward 8.8.8.8。但这仅解决了 CoreDNS 的问题,kubelet 将继续将无效的 resolv.conf 转发到所有默认的 dnsPolicy Pod,使它们无法解析 DNS
  • 如果 CoreDNS pod 和 kube-dns 服务工作正常,请检查 kube-dns 服务是否有有效的端点。如果服务没有端点,请检查服务并确保它使用正确的选择器和端口

kube-proxy

kube-proxy 负责监视与每个服务关联的服务和端点。当客户端要使用虚拟 IP 连接到服务时,kube-proxy 负责将流量发送到实际的 Pod

  • 检查 kube-system ns 中的 kube-proxy pod 正在运行
  • 检查 kube-proxy 日志
  • 检查 configmap 是否正确定义,运行 kube-proxy 二进制文件的配置文件是否正确
  • kube-config 在 config map 中定义
  • 检查 kube-proxy 是否在容器内运行

更多参考资料:

https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/

https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/

posted @ 2022-10-10 09:13  Bota5ky  阅读(79)  评论(0)    收藏  举报