kubernetes集羣問題排查

1. 查看系統Event事件

[html] view plain copyhtml

  1. kubectl describe pod <PodName> --namespace=<NAMESPACE>  java

該命令能夠顯示Pod建立時的配置定義、狀態等信息和最近的Event事件,事件信息可用於排錯。例如當Pod狀態爲Pending,可經過查看Event事件確認緣由,通常緣由有幾種:node

  • 沒有可用的Node可調度nginx

  • 開啓了資源配額管理而且當前Pod的目標節點上剛好沒有可用的資源web

  • 正在下載鏡像(鏡像拉取耗時過久)或鏡像下載失敗。redis

kubectl describe還能夠查看其它k8s對象:NODE,RC,Service,Namespace,Secrets。docker

1.1. Pod

kubectl describe pod <PodName> --namespace=<NAMESPACE>api

如下是容器的啓動命令非阻塞式致使容器掛掉,被k8s頻繁重啓所產生的事件。
ruby

[plain] view plain copy網絡

  1. kubectl describe pod  --namespace=    

  2.   

  3. Events:  

  4.   FirstSeen LastSeen    Count   From            SubobjectPath       Reason      Message  

  5.   ───────── ────────    ─────   ────            ─────────────       ──────      ───────  

  6.   7m        7m      1   {scheduler }                    Scheduled   Successfully assigned yangsc-1-0-0-index0 to 10.8.216.19  

  7.   7m        7m      1   {kubelet 10.8.216.19}   containers{infra}   Pulled      Container image "registry.wae.haplat.net/kube-system/pause:0.8.0" already present on machine  

  8.   7m        7m      1   {kubelet 10.8.216.19}   containers{infra}   Created     Created with docker id 84f133c324d0  

  9.   7m        7m      1   {kubelet 10.8.216.19}   containers{infra}   Started     Started with docker id 84f133c324d0  

  10.   7m        7m      1   {kubelet 10.8.216.19}   containers{yangsc0} Started     Started with docker id 3f9f82abb145  

  11.   7m        7m      1   {kubelet 10.8.216.19}   containers{yangsc0} Created     Created with docker id 3f9f82abb145  

  12.   7m        7m      1   {kubelet 10.8.216.19}   containers{yangsc0} Created     Created with docker id fb112e4002f4  

  13.   7m        7m      1   {kubelet 10.8.216.19}   containers{yangsc0} Started     Started with docker id fb112e4002f4  

  14.   6m        6m      1   {kubelet 10.8.216.19}   containers{yangsc0} Created     Created with docker id 613b119d4474  

  15.   6m        6m      1   {kubelet 10.8.216.19}   containers{yangsc0} Started     Started with docker id 613b119d4474  

  16.   6m        6m      1   {kubelet 10.8.216.19}   containers{yangsc0} Created     Created with docker id 25cb68d1fd3d  

  17.   6m        6m      1   {kubelet 10.8.216.19}   containers{yangsc0} Started     Started with docker id 25cb68d1fd3d  

  18.   5m        5m      1   {kubelet 10.8.216.19}   containers{yangsc0} Started     Started with docker id 7d9ee8610b28  

  19.   5m        5m      1   {kubelet 10.8.216.19}   containers{yangsc0} Created     Created with docker id 7d9ee8610b28  

  20.   3m        3m      1   {kubelet 10.8.216.19}   containers{yangsc0} Started     Started with docker id 88b9e8d582dd  

  21.   3m        3m      1   {kubelet 10.8.216.19}   containers{yangsc0} Created     Created with docker id 88b9e8d582dd  

  22.   7m        1m      7   {kubelet 10.8.216.19}   containers{yangsc0} Pulling     Pulling image "registry.ts.wae.haplat.net/test/tcp-hello:1.0.0"  

  23.   1m        1m      1   {kubelet 10.8.216.19}   containers{yangsc0} Started     Started with docker id 089abff050e7  

  24.   1m        1m      1   {kubelet 10.8.216.19}   containers{yangsc0} Created     Created with docker id 089abff050e7  

  25.   7m        1m      7   {kubelet 10.8.216.19}   containers{yangsc0} Pulled      Successfully pulled image "registry.ts.wae.haplat.net/test/tcp-hello:1.0.0"  

  26.   6m        7s      34  {kubelet 10.8.216.19}   containers{yangsc0} Backoff     Back-off restarting failed docker container  

1.2. NODE

kubectl describe node 10.8.216.20


[plain] view plain copy

  1. [root@FC-43745A-10 ~]# kubectl describe node 10.8.216.20  

  2. Name:           10.8.216.20  

  3. Labels:         kubernetes.io/hostname=10.8.216.20,namespace/bcs-cc=true,namespace/myview=true  

  4. CreationTimestamp:  Mon, 17 Apr 2017 11:32:52 +0800  

  5. Phase:            

  6. Conditions:  

  7.   Type      Status  LastHeartbeatTime           LastTransitionTime          Reason              Message  

  8.   ────      ──────  ─────────────────           ──────────────────          ──────              ───────  

  9.   Ready     True    Fri, 18 Aug 2017 09:38:33 +0800     Tue, 02 May 2017 17:40:58 +0800     KubeletReady            kubelet is posting ready status  

  10.   OutOfDisk     False   Fri, 18 Aug 2017 09:38:33 +0800     Mon, 17 Apr 2017 11:31:27 +0800     KubeletHasSufficientDisk    kubelet has sufficient disk space available  

  11. Addresses:  10.8.216.20,10.8.216.20  

  12. Capacity:  

  13.  cpu:       32  

  14.  memory:    67323039744  

  15.  pods:      40  

  16. System Info:  

  17.  Machine ID:            723bafc7f6764022972b3eae1ce6b198  

  18.  System UUID:           4C4C4544-0042-4210-8044-C3C04F595631  

  19.  Boot ID:           da01f2e3-987a-425a-9ca7-1caaec35d1e5  

  20.  Kernel Version:        3.10.0-327.28.3.el7.x86_64  

  21.  OS Image:          CentOS Linux 7 (Core)  

  22.  Container Runtime Version: docker://1.13.1  

  23.  Kubelet Version:       v1.1.1-wae2-13.1+79c90c68bfb72f-dirty  

  24.  Kube-Proxy Version:        v1.1.1-wae2-13.1+79c90c68bfb72f-dirty  

  25. ExternalID:         10.8.216.20  

  26. Non-terminated Pods:        (6 in total)  

  27.   Namespace         Name                    CPU Requests    CPU Limits  Memory Requests Memory Limits  

  28.   ─────────         ────                    ────────────    ──────────  ─────────────── ─────────────  

  29.   bcs-cc            bcs-cc-api-0-0-1364-index0      1 (3%)      1 (3%)      4294967296 (6%) 4294967296 (6%)  

  30.   bcs-cc            bcs-cc-api-0-0-1444-index0      1 (3%)      1 (3%)      4294967296 (6%) 4294967296 (6%)  

  31.   fw                fw-demo2-0-0-1519-index0        1 (3%)      1 (3%)      4294967296 (6%) 4294967296 (6%)  

  32.   myview            myview-api-0-0-1362-index0      1 (3%)      1 (3%)      4294967296 (6%) 4294967296 (6%)  

  33.   myview            myview-api-0-0-1442-index0      1 (3%)      1 (3%)      4294967296 (6%) 4294967296 (6%)  

  34.   qa-ts-dna         ts-dna-console3-0-0-1434-index0     1 (3%)      1 (3%)      4294967296 (6%) 4294967296 (6%)  

  35. Allocated resources:  

  36.   (Total limits may be over 100%, i.e., overcommitted. More info: http://releases.k8s.io/HEAD/docs/user-guide/compute-resources.md)  

  37.   CPU Requests  CPU Limits  Memory Requests     Memory Limits  

  38.   ────────────  ──────────  ───────────────     ─────────────  

  39.   6 (18%)   6 (18%)     25769803776 (38%)   25769803776 (38%)  

  40. No events.  


1.3. RC

kubectl describe rc mytest-1-0-0 --namespace=test


[plain] view plain copy

  1. [root@FC-43745A-10 ~]# kubectl describe rc mytest-1-0-0 --namespace=test  

  2. Name:       mytest-1-0-0  

  3. Namespace:  test  

  4. Image(s):   registry.ts.wae.haplat.net/test/mywebcalculator:1.0.1  

  5. Selector:   app=mytest,appVersion=1.0.0  

  6. Labels:     app=mytest,appVersion=1.0.0,env=ts,zone=inner  

  7. Replicas:   1 current / 1 desired  

  8. Pods Status:    1 Running / 0 Waiting / 0 Succeeded / 0 Failed  

  9. No volumes.  

  10. Events:  

  11.   FirstSeen LastSeen    Count   From                SubobjectPath   Reason          Message  

  12.   ───────── ────────    ─────   ────                ─────────────   ──────          ───────  

  13.   20h       19h     9   {replication-controller }           FailedCreate        Error creating: Pod "mytest-1-0-0-index0" is forbidden: limited to 10 pods  

  14.   20h       17h     7   {replication-controller }           FailedCreate        Error creating: pods "mytest-1-0-0-index0" already exists  

  15.   20h       17h     4   {replication-controller }           SuccessfulCreate    Created pod: mytest-1-0-0-index0  


1.4. NAMESPACE

kubectl describe namespace test


[plain] view plain copy

  1. [root@FC-43745A-10 ~]# kubectl describe namespace test  

  2. Name:   test  

  3. Labels: <none>  

  4. Status: Active  

  5.   

  6. Resource Quotas  

  7.  Resource       Used        Hard  

  8.  ---            ---     ---  

  9.  cpu            5       20  

  10.  memory         1342177280  53687091200  

  11.  persistentvolumeclaims 0       10  

  12.  pods           4       10  

  13.  replicationcontrollers 8       20  

  14.  resourcequotas     1       1  

  15.  secrets        3       10  

  16.  services       8       20  

  17.   

  18. No resource limits.  


1.5. Service

kubectl describe service wae-containers-1-1-0 --namespace=test


[plain] view plain copy

  1. [root@FC-43745A-10 ~]# kubectl describe service wae-containers-1-1-0 --namespace=test  

  2. Name:           wae-containers-1-1-0  

  3. Namespace:      test  

  4. Labels:         app=wae-containers,appVersion=1.1.0,env=ts,zone=inner  

  5. Selector:       app=wae-containers,appVersion=1.1.0  

  6. Type:           ClusterIP  

  7. IP:         10.254.46.42  

  8. Port:           port-dna-tcp-35913  35913/TCP  

  9. Endpoints:      10.0.92.17:35913  

  10. Port:           port-l7-tcp-8080    8080/TCP  

  11. Endpoints:      10.0.92.17:8080  

  12. Session Affinity:   None  

  13. No events.  


2. 查看容器日誌

一、查看指定pod的日誌

kubectl logs <pod_name>

kubectl logs -f <pod_name> #相似tail -f的方式查看

二、查看上一個pod的日誌

kubectl logs -p <pod_name>

三、查看指定pod中指定容器的日誌

kubectl logs <pod_name> -c <container_name>

四、kubectl logs的更多使用請參考kubectl logs --help


[plain] view plain copy

  1. [root@node5 ~]# kubectl logs --help  

  2. Print the logs for a container in a pod. If the pod has only one container, the container name is optional.  

  3. Usage:  

  4.   kubectl logs [-f] [-p] POD [-c CONTAINER] [flags]  

  5. Aliases:  

  6.   logs, log  

  7.    

  8. Examples:  

  9. # Return snapshot logs from pod nginx with only one container  

  10. $ kubectl logs nginx  

  11. # Return snapshot of previous terminated ruby container logs from pod web-1  

  12. $ kubectl logs -p -c ruby web-1  

  13. # Begin streaming the logs of the ruby container in pod web-1  

  14. $ kubectl logs -f -c ruby web-1  

  15. # Display only the most recent 20 lines of output in pod nginx  

  16. $ kubectl logs --tail=20 nginx  

  17. # Show all logs from pod nginx written in the last hour  

  18. $ kubectl logs --since=1h nginx  


五、docker logs

若是有Node機器(即宿主機)的登陸權限,能夠到出問題的pod所調度到的機器上,經過docker logs的命令查看對應容器的問題緣由。

例如:

docker ps -a |grep <container>

docker logs <container_id>

[plain] view plain copy

  1. [root@kube-master ~]# docker ps -a |grep redis  

  2. ee7398bba500        docker.io/redis@sha256:bb47379e6e0101441dbb1fe585171521e4ee2ebe1ae23f663232f56ac41551de   "docker-entrypoint.sh"   About a minute ago   Exited (1) About a minute ago                       k8s_kubernetes-log-tail-bigdatalog-testappkey_test-add-plugins-403621826-bskfz_test-7da2c1_a5412774-d43f-11e7-98c3-a2642aaa3458_6  

  3. 5360d15344fb        docker.io/redis@sha256:bb47379e6e0101441dbb1fe585171521e4ee2ebe1ae23f663232f56ac41551de   "docker-entrypoint.sh"   7 minutes ago        Up 7 minutes                                        k8s_kubernetes-log-tail-testagent_test-add-plugins-403621826-bskfz_test-7da2c1_a5412774-d43f-11e7-98c3-a2642aaa3458_0  

  4. [root@kube-master ~]#  

  5. [root@kube-master ~]# docker logs ee7398bba500  

  6. 1:C 28 Nov 13:32:29.352 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo  

  7. 1:C 28 Nov 13:32:29.354 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=1, just started  

  8. 1:C 28 Nov 13:32:29.354 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf  

  9. 1:M 28 Nov 13:32:29.355 # Creating Server TCP listening socket *:6379: bind: Address already in use  

以上報錯是由於端口衝突問題:bind: Address already in use

3. 查看k8s服務日誌

3.1. journalctl

在Linux系統上systemd系統來管理kubernetes服務,而且journal系統會接管服務程序的輸出日誌,能夠經過systemctl status <xxx>或journalctl -u <xxx> -f來查看kubernetes服務的日誌。

其中kubernetes組件包括:

k8s組件

涉及日誌內容

備註

kube-apiserver

kube-controller-manager Pod擴容相關或RC相關
kube-scheduler Pod擴容相關或RC相關
kubelet Pod生命週期相關:建立、中止等
etcd

3.2. 日誌文件

也能夠經過指定日誌存放目錄來保存和查看日誌

  • --logtostderr=false:不輸出到stderr

  • --log-dir=/var/log/kubernetes:日誌的存放目錄

  • --alsologtostderr=false:設置爲true表示日誌輸出到文件也輸出到stderr

  • --v=0:glog的日誌級別

  • --vmodule=gfs*=2,test*=4:glog基於模塊的詳細日誌級別

4. 常見問題

4.1. Pod狀態一直爲Pending

kubectl describe <pod_name> --namespace=<NAMESPACE>

查看該POD的事件。

  • 正在下載鏡像但拉取不下來(鏡像拉取耗時過久)[通常都是該緣由]

  • 沒有可用的Node可調度

  • 開啓了資源配額管理而且當前Pod的目標節點上剛好沒有可用的資源

解決方法:

  1. 查看該POD所在宿主機與鏡像倉庫之間的網絡是否有問題,能夠手動拉取鏡像

  2. 刪除POD實例,讓POD調度到別的宿主機上

4.2. Pod建立後不斷重啓

kubectl get pods中Pod狀態一會running,一會不是,且RESTARTS次數不斷增長。

通常緣由爲容器啓動命令不是阻塞式命令,致使容器運行後立刻退出。

非阻塞式命令:

  • 自己CMD指定的命令就是非阻塞式命令

  • 將服務啓動方式設置爲後臺運行

解決方法:

一、將命令改成阻塞式命令(前臺運行),例如:zkServer.sh start-foreground

二、java運行程序的啓動腳本將 nohup xxx &的nobup和&去掉,例如:

nohup $JAVA_HOME/bin/java $JAVA_OPTS -cp $CLASSPATH com.cnc.open.processor.Main &

改成:

$JAVA_HOME/bin/java $JAVA_OPTS -cp $CLASSPATH com.cnc.open.processor.Main

 本文出自https://blog.csdn.net/huwh_/article/details/71308301

相關文章
相關標籤/搜索