Skip to content

Latest commit

 

History

History
28 lines (20 loc) · 1.62 KB

8.troubleshooting.md

File metadata and controls

28 lines (20 loc) · 1.62 KB

故障排查

如何找到真实的故障原因,每个人都有自己的实践总结。而 Kubernetes 集群的复杂性会在排查的过程中造成干扰,会让你忽视真正需要洞悉的信号。在考虑 Kubernetes 中的故障排查时,笔者通常采取分层的方法,依次 check 如下因素:

  • 节点(控制面板和 node)
  • 集群原生组件(apiserver、controller-manager、scheduler、kubelet、etcd、容器运行时等)
  • 集群附加组件(网络和网络策略 Calico 等、服务发现 coreDNS 等)
  • 终端用户应用程序(实际部署的 apps)

集群排错

节点 NotReady

  • 检查 kube-system 命名空间下的 Pod 状态:kubectl get pods -n kube-system -o wide
  • 检查是否安装了 Pod 网络附加组件,如 Calico 等;
  • 检查节点组件 kubelet 是否正常运行,systemctl is-active kubelet
  • PLEG: 容器运行时是否工作正常,节点服务器的 Docker 或者 containerd 是否运行正常。

参考:https://aws.amazon.com/cn/premiumsupport/knowledge-center/eks-node-status-ready/

应用排错

  • OOM(内存不足)事件:1)优化应用程序内部的逻辑,优化内存使用;2)内存用量达到预警值时驱逐 pod,以减少对系统的冲击并防止系统 OOM 的发生;
  • kubectl describe 可以重点关注对象的 Event 事件信息;
  • kubectl get events 查看 Event 事件列表;
  • kubectl logs 查看应用程序的标准输出;
  • kubectl exec 进入容器内,查看一些必要的信息或执行相关 debug 命令;
  • kubectl port-forward 将服务转发至本地端口,方便调试;