Pod 기본
파드란
파드는 쿠버네티스에서 컨테이너를 실행하는 최소 단위로 한 개 혹은 여러 개의 컨테이너를 포함한다. 하나의 파드에 속하는 모든 컨테이너들은 같은 노드에서 동작한다.
1. 파드의 목적
파드는 하나의 목적을 위해 만들어진 컨테이너를 부품처럼 조합할 수 있도록 설계.
- 파드 내부의 컨테이너들은 파드의 IP 주소와 포트번호를 공유한다.
- 파드의 내부 컨테이너들은 localhost로 서로 통신할 수 있다.
- 파드의 내부 컨테이너들은 System V 프로세스 통신이나 POSIX 공유 메모리를 사용하여 서로 통신할 수 있다.
- 파드의 내부 컨테이너들은 파등의 볼륨을 마운트하여 파일 시스템을 공유할 수 있다.
2. Pod 에 관하여
- 파드는 일시적인 존재
일시적 존재로 설계되어 파드 내의 컨테이너는 이미지로 부터 매번 생성 된다. 같은 오브젝트 이름으로 몇 번이고 파드를 기동해도 이전 컨테이너 수행&변경 이력은 남지 않고 이미지 초기 상태로 시작한다.
파드의 IP 주소도 고정적이지 않고 기동 시 부여되며 종료 시 회수 된다. 그렇기에 파드에 요청을 보내고 싶은 경우 반드시 서비스를 사용해야 한다.
- 파드는 컨테이너의 실행 상태를 관리
파드가 정지한 경우에는 담당 컨트롤러가 재기동 등의 정해진 처리를 수행하는 한편, 파드 내부의 컨테이너가 정지한 경우에는 파드가 해당 컨테이너를 재시작한다. 설정에 따라 정지한 컨테이너를 그대로 유지한 채 로그를 참조할 수 있도록 하는 것도 가능.
파드는 활성 프로브(Liveness Probe)와 준비 상태 프로브(Readiness Probe)를 설정하여 내부 애플리케이션의 상태를 감시할 수 있다.
활성 프로브 설정 -> 애플리케이션이 멈춰 있는 상태 감지 시 컨테이너 강제 종료. 준비 상태 프로브 설정 -> 파드가 요청을 받을 준비가 될 때 까지 서비스 오브젝트가 요청을 전송하지 않음.
- 파드는 초기화 전용 컨테이너를 실행
파드에 초기화만을 담당하는 컨테이너를 설정할 수 있다.
3. Pod life cycle
STATUS | 의미와 대책 |
---|---|
ContainerCreating | 이미지를 다운로드 중이거나 컨테이너를 생성하는 중에 있음을 의미. ConfigMap 과 Secret이 마운트되지 않아 컨테이너 생성이 보류된 경우일 수 있다. |
CrashLoopBackOff | 파드 내의 컨테이너가 종료되어 다음 기동 시까지 대기 상태에 있음을 의미. 2회 이상 컨테이너가 종료되면, CrashLoopBackOff 시간 동안 대기하게 된다. 이 상황에서는 컨테이너 내의 프로세스를 재검토할 필요가 있음. |
Pending | 파드 생성 요구를 받았지만 하나 이상의 컨테이너가 생성되지 않은 상태를 의미. 리소스 부족 등의 이유로 스케줄이 되지 않은 경우에 해당한다. |
Running | 파드의 모든 컨테이너가 생성되어 실행 중임을 의미. |
Terminating | 컨테이너에 종료 요청 시그널을 보낸 후 컨테이너가 종료할 때까지 대기 중임을 의미. 유예 시간을 넘겨도 컨테이너가 종료할 수 없는 경우에 컨테이너를 강제로 종료한다. |
Succeeded | 파드 내 모든 컨테이너가 정상적으로 종료했음을 의미. |
Completed | 파드 내 컨테이너가 정상적으로 종료되었음을 의미. 파드 내에 복수의 컨테이너가 있는 경우, 첫 번째 컨테이너가 정상 종료(Exit 코드 = 0) 하면 Completed가 표시. |
Error | 컨테이너가 이상 종료된 경우. Exit 코드 != 0 인 경우에 이상 종료로 간주. 파드 내에 복수의 컨테이너가 있는 경우, 첫 번째 컨테이너가 이상 종료하면, Error로 표시된다. |
Failed | 파드 내에 적어도 하나의 컨테이너가 이상 종료했음을 의미. |
Unknown | 파드의 상태를 얻을 수 없는 상황을 의미. |