Pod란?

Kubernetes에서 배치하여 실행하는 최소 단위. 하나 이상의 컨테이너를 묶은 것으로, 안의 컨테이너는 IP 주소 등 네트워크 네임스페이스와 볼륨을 공유하며, 서로 localhost로 통신할 수 있다. 보통은 하나의 애플리케이션 컨테이너에 필요에 따라 보조 컨테이너를 추가한다. Pod는 일회용이어서 다시 만들어지면 일반적으로 이름이나 IP 주소가 바뀌므로, Deployment 등으로 Pod의 수를 유지하고 Service로 안정적인 접속 대상을 부여하여 사용한다.

일본어 명칭: Pod

Pod은(는) 클라우드와 컨테이너의 기초 등 1개 분야의 연습 문제 13개에 나와요.

분야: 클라우드와 컨테이너의 기초

도전해 보기: Pod 관련 문제

Kubernetes에서 replicas: 3을 지정한 Deployment의 Pod가 3개 동작하고 있다. 이 중 하나의 Pod를 kubectl delete pod로 삭제했을 때 일어나는 일로 올바른 것은?

  1. ADeployment의 설정도 replicas: 2로 바뀌고, Pod는 2개인 채로 계속 동작한다
  2. B실제 개수가 지정한 3에 못 미치게 된 것을 컨트롤러가 감지하고 새 Pod를 하나 만든다
  3. CDeployment에 속한 나머지 2개의 Pod도 삭제되어 Deployment 전체가 정지한다
정답과 해설 보기

정답: B. 실제 개수가 지정한 3에 못 미치게 된 것을 컨트롤러가 감지하고 새 Pod를 하나 만든다

Kubernetes에서는 이용자가 'Pod를 3개 실행한다'는 바람직한 상태를 선언하고, 컨트롤러가 실제 상태를 반복해서 관찰하여 차이가 있으면 선언에 가까워지도록 조작합니다(조정, reconcile). Pod를 하나 삭제하면 실제 개수가 2가 되므로, ReplicaSet의 컨트롤러가 새 Pod를 만들어 3으로 되돌립니다. 노드 고장으로 Pod가 사라진 경우에도 같은 구조로 다른 노드에 Pod가 다시 만들어집니다. Pod의 수를 정말로 줄이고 싶을 때는 Pod를 지우는 것이 아니라 Deployment의 replicas를 변경합니다.

Kubernetes의 Deployment에서 Pod 템플릿의 컨테이너 이미지를 새 버전으로 변경했다. 기본 업데이트 방식(RollingUpdate)에서 일어나는 일로 올바른 것은?

  1. A새 ReplicaSet을 만들어 새 버전의 Pod를 늘리면서 이전 버전의 Pod를 줄인다. 이전 ReplicaSet은 롤백용으로 Pod가 0인 상태로 남는다
  2. B동작 중인 Pod 안의 컨테이너 이미지가 Pod를 다시 만들지 않고 그 자리에서 새 버전으로 교체되므로, Pod의 IP 주소도 이름도 바뀌지 않는다
  3. C이전 버전의 Pod를 모두 동시에 삭제한 다음 새 버전의 Pod를 한꺼번에 만들므로, 업데이트하는 동안 일시적으로 서비스가 멈춘다
정답과 해설 보기

정답: A. 새 ReplicaSet을 만들어 새 버전의 Pod를 늘리면서 이전 버전의 Pod를 줄인다. 이전 ReplicaSet은 롤백용으로 Pod가 0인 상태로 남는다

Deployment는 Pod 템플릿이 바뀌면 새 템플릿의 ReplicaSet을 만들고, 새 Pod가 준비된 것을 확인하면서 이전 ReplicaSet의 Pod를 조금씩 줄입니다. 그래서 업데이트하는 동안에도 일정 수의 Pod가 계속 요청을 처리합니다. 이전 ReplicaSet은 Pod가 0인 상태로 남겨지므로 kubectl rollout undo로 이전 버전으로 되돌릴 수 있습니다. 모든 Pod를 먼저 지운 다음 다시 만드는 방식은 Recreate로, 명시적으로 지정했을 때 사용됩니다.

해설 속 Pod

Pod이(가) 나오는 문제 (13)

  1. Kubernetes에서 replicas: 3을 지정한 Deployment의 Pod가 3개 동작하고 있다. 이 중 하나의 Pod를 kubectl delete pod로 삭제했을 때 일어나는 일로 올바른 것은?
  2. Kubernetes의 Deployment에서 Pod 템플릿의 컨테이너 이미지를 새 버전으로 변경했다. 기본 업데이트 방식(RollingUpdate)에서 일어나는 일로 올바른 것은?
  3. replicas: 10인 Deployment에서 롤링 업데이트 설정을 maxSurge: 25%, maxUnavailable: 25%로 했다. 업데이트 도중의 Pod 총수의 상한과 이용 가능한 Pod 수의 하한의 조합으로 올바른 것은?
  4. Kubernetes에서 Pod는 다시 만들어질 때마다 IP 주소가 바뀐다. 다른 애플리케이션이 라벨로 고른 여러 Pod에, 바뀌지 않는 이름과 주소로 접속하여 부하를 분산할 수 있게 하는 리소스는?
  5. 어떤 웹 애플리케이션은 시작한 뒤 캐시를 읽어 들일 때까지의 약 60초 동안은 요청을 처리할 수 없고, 그동안은 /ready에 503을 반환한다. Pod의 컨테이너에 위의 설정을 추가했을 때의 효과로 올바른 것은?
  6. Kubernetes의 HorizontalPodAutoscaler에서 Pod의 CPU 사용률 목표를 70%, Pod 수의 범위를 1~10으로 했다. 현재 5개 Pod의 평균 CPU 사용률이 30%이다. 필요한 Pod의 수를 ⌈현재 수 × 현재 사용률 ÷ 목표 사용률⌉(⌈ ⌉은 올림)로 구할 때, 필요한 Pod의 수로 올바른 것은?
  7. Pod의 컨테이너에 위의 설정을 한 Deployment에서 Pod가 4개 동작하고 있으며, 모든 Pod가 CPU를 400m(0.4코어)씩 사용하고 있다. HorizontalPodAutoscaler의 CPU 사용률 목표를 60%로 하고, 필요한 Pod의 수는 ⌈현재 수 × 현재 사용률 ÷ 목표 사용률⌉로 구한다고 하자. 필요한 Pod의 수로 올바른 것은?
  8. 할당 가능한 자원이 CPU 4코어, 메모리 8 GiB인 노드가 있다. 각 Pod의 컨테이너에는 requests로 CPU 500m·메모리 1.5 GiB, limits로 CPU 1코어·메모리 2 GiB를 설정했다. 다른 Pod나 시스템 예약은 없다고 하자. 이 노드에 둘 수 있는 Pod의 최대 수로 올바른 것은?
  9. Kubernetes에서 배포하고 관리하는 최소 단위로, 하나 이상의 컨테이너를 묶어 같은 IP 주소와 볼륨을 공유하게 하는 것은?
  10. Kubernetes 클러스터에서 하나의 호스트 이름으로 도착한 HTTPS 요청 중 경로가 /api로 시작하는 것은 api의 Service로, 그 밖의 것은 web의 Service로 분배하고 싶다. 이 분배 규칙을 정하는 데 적합한 리소스는?
  11. Kubernetes의 Secret에 데이터베이스의 비밀번호를 저장한다. Secret의 설명으로 올바른 것은?
  12. Kubernetes의 웹 애플리케이션에서, liveness 프로브의 확인 처리 안에서 의존 대상인 데이터베이스에 접속할 수 있는지까지 조사하도록 했다. 이 설정으로 일어날 수 있는 문제로 가장 적절한 것은?
  13. Kubernetes에서 컨테이너에 설정하는 자원의 requests와 limits의 설명으로 올바른 것은?

관련 용어

Kubernetes 컨테이너(Container) HTTP(하이퍼텍스트 전송 프로토콜) 컨테이너 이미지(Container Image) DNS(도메인 네임 시스템) 오토 스케일링(Autoscaling) TLS 리버스 프록시(Reverse Proxy) 환경 변수(Environment Variable) 데드락(Deadlock)

용어집으로 돌아가기