본문 바로가기

가상화/Kubernetes

[kubernetes] TroubelShooting

반응형

개요

구성환경

 

예제 1.

 - 증상 1 pod의 이벤트에 node.kubernetes.io/disk-pressure로 표시되고 pod가 pending상태로 있음

shell> kubectl describe pod nginx-deployment-57f4c486cc-8kkhm
Events:
  Type     Reason            Age                  From               Message
  ----     ------            ----                 ----               -------
  Warning  FailedScheduling  40s (x7 over 7m25s)  default-scheduler  0/1 nodes are available: 1 node(s) had taint {node.kubernetes.io/disk-pressure: }, that the pod didn't tolerate.

 - 증상 2 : pod의 storage-provisioner 가 pending 상태이고 이벤트에 DiskPressure가 표시딤

shell> kubectl get pod -A
NAMESPACE     NAME                              READY   STATUS    RESTARTS   AGE
kube-system   coredns-66bff467f8-drln5          0/1     Pending   0          8m6s
kube-system   coredns-66bff467f8-tthcd          0/1     Pending   0          8m6s
kube-system   etcd-testsvr                      1/1     Running   0          8m3s
kube-system   kube-apiserver-testsvr            1/1     Running   0          8m3s
kube-system   kube-controller-manager-testsvr   1/1     Running   0          8m3s
kube-system   kube-flannel-ds-amd64-pp9gf       0/1     Evicted   0          14s
kube-system   kube-proxy-dsclv                  1/1     Running   0          8m6s
kube-system   kube-scheduler-testsvr            1/1     Running   0          8m3s
kube-system   storage-provisioner               0/1     Pending   0          8m10s

shell> kubectl describe pod storage-provisioner -n kube-system
Events:
  Type     Reason            Age                From               Message
  ----     ------            ----               ----               -------
  Warning  FailedScheduling  57s (x2 over 57s)  default-scheduler  0/1 nodes are available: 1 node(s) had taint {node.kubernetes.io/not-ready: }, that the pod didn't tolerate.
  Normal   Scheduled         54s                default-scheduler  Successfully assigned kube-system/storage-provisioner to testsvr
  Warning  Evicted           53s                kubelet, testsvr   The node had condition: [DiskPressure].

 - 증상 3 : node의 condition에서 type이 DiskPressure가 상태가 True로 표시됨

shell> kubectl describe node testsvr
Conditions:
  Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----             ------  -----------------                 ------------------                ------                       -------
  MemoryPressure   False   Fri, 27 Mar 2020 20:49:11 +0900   Fri, 27 Mar 2020 19:40:48 +0900   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure     True    Fri, 27 Mar 2020 20:49:11 +0900   Fri, 27 Mar 2020 20:44:04 +0900   KubeletHasDiskPressure       kubelet has disk pressure
  PIDPressure      False   Fri, 27 Mar 2020 20:49:11 +0900   Fri, 27 Mar 2020 19:40:48 +0900   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready            True    Fri, 27 Mar 2020 20:49:11 +0900   Fri, 27 Mar 2020 19:41:06 +0900   KubeletReady                 kubelet is posting ready status

Events:
  Type     Reason                   Age                    From                 Message
  ----     ------                   ----                   ----                 -------
  Warning  EvictionThresholdMet     68m (x17 over 71m)     kubelet, testsvr     Attempting to reclaim ephemeral-storage
  Warning  FreeDiskSpaceFailed      66m                    kubelet, testsvr     failed to garbage collect required amount of images. Wanted to free 4689408000 bytes, but freed 0 bytes
  Warning  FreeDiskSpaceFailed      61m                    kubelet, testsvr     failed to garbage collect required amount of images. Wanted to free 4691230720 bytes, but freed 0 bytes

원인

디스크 가용량이 부족할 경우 발생

조치

가용량 확장또는 불필요한 파일들을 삭제하여 공간 확보

 

예제 2.

증상

shell> kubectl describe pod  nginx-deployment-57f4c486cc-jx8pc
..... 생략 .....
Events:
  Type     Reason            Age                From               Message
  ----     ------            ----               ----               -------
  Warning  FailedScheduling  69s (x2 over 70s)  default-scheduler  0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.
shell>

원인

기본적으로 클러스터는 보안상의 이유로 control-plane 노드(master 역할노드)에서 포드를 스케쥴링 할수 없습니다.  

조치

 1. 아래 명령을 이용하여 conrol-plane 노드에서 pod를 생성할 수 있게 해줍니다. 

shell> kubectl taint nodes --all node-role.kubernetes.io/master-

 2. worker node를 추가하여 이 문제를 해결 할 수 있습니다.

반응형