Cluster
- 애플리케이션 container를 실행하기 위한 노드 머신이다.
- Container 형태의 애플리케이션을 호스팅하는 물리/가상 환경의 노드들로 이루어진 집합이다.
- namespace를 가상 클러스터라 한다.
Node?
- Pod가 작동하는 공간으로 k8s의 워커 머신을 말한다.
- 클러스터의 종류에 따라 가상, 물리 머신일 수 있다.
- Node는 Control Plane에 의해 Pod 스케쥴링이 진행된다.
Pod?
- k8s pod는 container를 하나 이상 모아 놓은 것으로, k8s 애플리케이션의 최소 단위이다.
- Pod 내의 container는 IP와 Port를 공유한다.
- Pod 내의 배포된 container 간에는 디스크 볼륨을 공유할 수 있다.
Pod Lifecycle
- Pod의 Lifecycle는 Penind 단계에서 시작하여 컨에티너 중 적어도 하나 이상이 OK해야 다음 단계인 Running 단계로 갈 수 있다.
- Pod의 container가 실패로 종료되었는지 여부에 따라 Succeeded 또는 Failed 단계로 이동한다.
Pod의 단계
파드의 상태는 5가지 phase로 표시되며, 이는 수정할 수 없다.
Pending
- 클러스터에 의해 승인되었지만, 하나 이상의 container가 설정되지 않았고 실행할 준비가 되지 않았다는 상태를 뜻하는 Phase다.
- 이 단계에서는 네트워크를 통한 container image 다운로드 시간, Pod가 스케쥴되기 이전까지의 시간이 포함된다.
Running
- 모든 container가 생성 되었다는 상태의 Phase다.
- 하나 이상의 container가 실행 중이거나, 시작 또는 재시작 중에 있다.
Succeeded
- Pod에 있는 모든 container가 정상 종료 되었음을 뜻하는 Phase다.
Failed
- Pod에 있는 모든 container가 종료 되었음을 뜻하는 Phase다.
- 하나 이상의 container가 정상적인 종료가 되지않았음을 뜻한다.
Unknown
- Pod의 상태를 알 수 없다는 의미를 갖는 Phase다.
- 대부분 Node의 통신 오류로 발생한다.
Container 상태
스케쥴러에 의해 노드에 파드를 할당하면, Kublet은 docker와 같은 container runtime을 사용하여 해당 파드에 대한 container 생성을 시작한다.
Waiting
- 시작을 완료하는데 필요한 작업을 실행하는 상태이다.
- container image registry에서 image pulling을 하고 있거나, Secret date를 적용하는 작업 등을 하고 있을 수 있다.
Running
- Container가 정상 실행되고 있는 상태이다.
Terminated
- Container가 정상적으로 실행 되었다 종료된 상태 혹은 어떤 문제가 발생해 실행에 실패했을 때를 나타내는 상태이다.
Pod의 컨디션
Pod가 Phase를 진행할 때
PodScheduled
ContainerReady
- Pod의 모든 Container가 준비되었다.
Initialized
- 모든 init Container가 성공적으로 시작 되었다.
Ready
- Pod는 요청을 실행할 수 있고, 연결된 모든 서비스의 로드밸런싱 풀에 추가한다.
정리
Pod 내의 컨테이너들은 디스크 볼륨 공유와 같은 동일한 리소스를 공유하게 하므로 하나의 Pod가 작동 불능 상태가 되어도 Pod 내의 리소스를 사용하여 즉시 대체할 수 있는 Pod를 생성할 수 있다.
Pod의 상태, Container의 상태, Pod의 컨디션 세가지 사항을 통해 Control Plane에서 스케쥴링한대로 정상적으로 Pod가 할당되고 실행되는지 확인할 수 있다.
이전에 k8s 구축 후 여러 실습진행 했을 때의 내용보면서 정리가 다시 필요할 것 같다.
참고문서
쿠버네티스 클러스터란? 1
쿠버네티스 클러스터란? 2
쿠버네티스 Pod란
쿠버네티스 포드
파드 라이프사이클