Kubernetes 프로세스별 상태
Kubernetes 는 다양한 컴포넌트들로 인해서 작동된다. 이러한 컴포넌트들은 중요성에 있어서 약간의 차이가 있다. 예를들어 Worker Node 에서 docker 프로세스가 정지되거나 문제가 되었을때에 어떻게 될까? 혹은 Worker Node 에 kubelet 프로세스가 문제가 된다면?
이 문서는 Kubernetes 프로세스별 상태 에 대한 글이다.
환경
여기서 환경은 Kubernetes 의 객체를 말한다. 객체라함은 Pods, Deployments, Services, StatefulSet 으로 했다. 그밖에 다양한 객체가 있지만 이 정도 생성해서 진행해보기로 했다.
docker 정지
이것은 Work Node 에 docker 를 정지 시키는 것이다. 이렇게 되었을때에 Kubernetes 의 각종 컴포넌트들은 어떤 상태를 보일지 알아보자.
먼저, Nodes 상태는 ‘Notready’ 로 변경된다.
1 2 3 4 |
kubectl get nodes NAME STATUS ROLES AGE VERSION kmaster Ready master 16d v1.18.6 knode NotReady <none> 15d v1.18.6 |
Node 의 자세한 상태를 describe 보면 다음과같이 몇가지 상태가 나온다.
- Warning ContainerGCFailed 38s (x2 over 98s) kubelet, knode rpc error: code = Unknown desc = Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Conditions 는 다음과 같이 된다.
1 2 3 4 5 6 7 8 |
Conditions: Type Status LastHeartbeatTime LastTransitionTime Reason Message ---- ------ ----------------- ------------------ ------ ------- NetworkUnavailable False Mon, 10 Aug 2020 12:48:31 +0000 Mon, 10 Aug 2020 12:48:31 +0000 CalicoIsUp Calico is running on this node MemoryPressure False Mon, 10 Aug 2020 13:08:12 +0000 Mon, 10 Aug 2020 12:57:30 +0000 KubeletHasSufficientMemory kubelet has sufficient memory available DiskPressure False Mon, 10 Aug 2020 13:08:12 +0000 Mon, 10 Aug 2020 12:57:30 +0000 KubeletHasNoDiskPressure kubelet has no disk pressure PIDPressure False Mon, 10 Aug 2020 13:08:12 +0000 Mon, 10 Aug 2020 12:57:30 +0000 KubeletHasSufficientPID kubelet has sufficient PID available Ready False Mon, 10 Aug 2020 13:08:12 +0000 Mon, 10 Aug 2020 13:07:52 +0000 KubeletNotReady [container runtime is down, Container runtime not ready: RuntimeReady=false reason:DockerDaemonNotReady message:docker: failed to get docker version: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?] |
두번째, Pods 상태.
상태가 STATUS 는 Completed 으로 나오고 READY 도 0/1 로 나온다. 정상으로 나오지 않는다. Pods 하나를 골라 describe 해보면 Ready 는 False 로 나온다.
세번째, Deployment 상태.
READY 가 0/3 으로 모두 문제가 있는 것으로 나온다.
네번째, Services 상태.
Service 에 상태는 없다.
다섯번째, StatefulSet 상태.
StatefulSet 상태로 READY 가 0/2 로 모두 문제가 있는 것으로 나온다. 하지만, Pods Status 에서는 “2 Running / 0 Waiting / 0 Succeeded / 0 Failed” 로 Pod 2개 Running 으로 나온다.
kubelet 정지
kubelet 은 Worker Node 에 명령을 수행하는 중요한 프로세스이다. 이를 정지했을때는 어떤 상태를 보일까..
Node 상태.
Node 상태는 NotReady 가 된다. 그리고 Conditions 상태는 다음과 같다.
1 2 3 4 5 6 7 8 |
Conditions: Type Status LastHeartbeatTime LastTransitionTime Reason Message ---- ------ ----------------- ------------------ ------ ------- NetworkUnavailable False Mon, 10 Aug 2020 13:35:04 +0000 Mon, 10 Aug 2020 13:35:04 +0000 CalicoIsUp Calico is running on this node MemoryPressure Unknown Mon, 10 Aug 2020 13:34:54 +0000 Mon, 10 Aug 2020 13:37:42 +0000 NodeStatusUnknown Kubelet stopped posting node status. DiskPressure Unknown Mon, 10 Aug 2020 13:34:54 +0000 Mon, 10 Aug 2020 13:37:42 +0000 NodeStatusUnknown Kubelet stopped posting node status. PIDPressure Unknown Mon, 10 Aug 2020 13:34:54 +0000 Mon, 10 Aug 2020 13:37:42 +0000 NodeStatusUnknown Kubelet stopped posting node status. Ready Unknown Mon, 10 Aug 2020 13:34:54 +0000 Mon, 10 Aug 2020 13:37:42 +0000 NodeStatusUnknown Kubelet stopped posting node status. |
Pods 상태
이상하게도 Pods 상태는 모두 정상으로 나온다. 하지만 Port-Foward 를 시도하면 되지 않는다.
Deployment 상태
비정상으로 나온다. READY 가 0/3 으로 표시된다.
StatefulSet 상태
비정상으로 나온다. READY 가 0/2 로 표시된다.
Worker Node 셧다운
이 상태는 kubelet 와 동일한 결과를 보여준다.