Kubernetes环境下的各种调试方法
生活随笔
收集整理的這篇文章主要介紹了
Kubernetes环境下的各种调试方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
啟動單個容器 不使用Pod或Replication Controller,啟動單個容器:
$ kubectl run webserver --image=nginx 想更改鏡像,又不想升級版本? 每次修改之后,需要更新鏡像的版本也好煩人啊。每次構建出新的鏡像,Push到Docker Registry時,可以使用一個固定的版本,然后讓Kubernetes在啟動某個鏡像時,無論本地是否有鏡像,都去Docker Registry拉取鏡像就好了。 ImagePullPolicy從默認的 IfNotPresent,改為 Always。
想直接修改容器里的程序,又不想更新鏡像? 什么,還能這樣做?在容器內部修改,比如修改了腳本,或者直接替換二進制程序,然后使用docker restart container-id。我嘗試過此時使用docker commit提交修改,但是下次啟動時,Kubernets就會報錯。應該是有完整性校驗的原因。
Pod重啟了,如何看重啟之前的日志? 下面的命令只能看到當前Pod的日志:
$ kubectl logs zookeeper-1 通過 --previous參數可以看之前Pod的日志
$ kubectl logs zookeeper-1 --previous 查看Pod生命周期的事件 通過如下命令,看命令末尾 events 一節,查看kubelet給APIServer發送的Pod生命周期里發生的事件
$ kubectl describe pod podname 沒有看到任何事件,但是Pod重啟了? 依然通過describe命令,Containers.[*].Last State一節:
$ kubectl describe pod podname Name: ? ? ? kafka-1? ...
Containers: kafka: ... State: ? ? ?Running Started: ? ? Sat, 08 Apr 2017 02:29:04 +0000 Last State: ? ? Terminated Reason: ? ? ?OOMKilled Exit Code: ? ?0 Started: ? ? Fri, 07 Apr 2017 11:06:56 +0000 Finished: ? ? Sat, 08 Apr 2017 02:29:04 +0000 Ready: ? ? ?True Restart Count: ? 1 ... 可以看到 Kafka-1 這個Container因為內存消耗太多,達到內存的上限(Memory Resource Limit)而被干掉了。如果看到 Reason: Completed,說明是容器內部pid為1的程序主動退出的。
查看資源(CPU/Memory)使用情況 資源使用最多的節點
$ kubectl top nodes 資源使用最多的Pod
$ kubectl top pods 查看節點的資源使用情況
$ kubectl describe nodes | grep -A 2 -e "^\\s*CPU Requests" 如何摘下某個Pod進行Debug 使用label機制,對Pod進行標記。在Service定義中,我們添加 status: serving字段。當需要摘下某個Pod做Debug,而又不影響整個服務,可以:
$ kubectl get pods --selector="status=serving" $ kubectl label pods webserver-rc-lxag2 --overwrite status=debuging 此時kubelet就會把這個Pod從Service的后端列表中刪掉。等到Debug完,想恢復?再改回去就好了:
$ kubectl label pods webserver-rc-lxag2 --overwrite status=serving References:
10 most common reasons kuberntes deployments fail
Kubernetes Community Resources 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的Kubernetes环境下的各种调试方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vSphere5.5中嵌套华为Fusio
- 下一篇: [二]RabbitMQ-客户端源码之AM