Kubernetes 文档 - Application Introspection and Debugging

查看原文

本文是 Kubernetes 叫你怎么 debug application 的文档。简单来说记住两条命令:kubectl get pod -o yamlkubectl describe pod name-of-your-pod-xxxxxxxxxx-yyyy。Kubernetes 很复杂,甚至于在教完你各种概念后教你怎么 debug,这篇还是 debug 中最简单的一篇,还不涉及 service,deployment,logging 等。

  • kubectl describe pod nginx-deployment-1006230814-6winp:类似这样的命令可以列出 pod 所有的状态,我们查看不同寻常的状态来找病灶。根据不同的 state ( Waiting, Running, or Terminated )来看更多信息。比如说 ready 表示是否可以接受流量了,Restart Count 表示重启了几次,最重要的可以看 events 中的日志。
  • 如果看到 kubectl get pods 中有 PENDING 的 pod,你就可以用上面的方法调试,看看 events 中哪里卡住了。
  • 你可以用 kubectl get events --namespace=my-namespace 查看所有的 events
  • 上面列出的都是实时的状态,你可以用它跟静态的状态对比:kubectl get pod nginx-deployment-1006230814-6winp -o yaml 看看二者是不是相符。get pod 能列出 pod 的预期状态。

衍生思考:文档中教人怎么 debug 貌似特别有用。一个但凡想让很多人用的软件都会遇上各种各样的问题,能提供一个 FAQ,或者 Debug 页面能帮上很多人。另外一个想法是写出一个能被 debug 的软件,不要把状态藏起来,而应该有办法在运行时让人尽可能地观察它。