Kubernetes - Pod
서론
“MSA와 쿠버네티스를 활용한 클라우드 게임 서비스”라는 주제로 2024 전기 졸업 과제를 진행하게 되었습니다. MSA와 쿠버네티스를 사용해 보고 싶었지만, 두 개는 대규모 프로젝트가 아니면 오버엔지니어링이기 때문에 적용해 볼 기회가 잆었습니다. 박사님과 미팅을 했을 때 꼭 MSA와 쿠버네티스를 사용했으면 좋겠다고 하셔서 이번 기회에 공부하고 적용해 보도록 하겠습니다.
아래에서는 쿠버네티스의 Pod에 대해서 알아보도록 하겠습니다.
Pod란
Pod는 쿠버네티스가 관리할 수 있는 최소 단위입니다.
“단일 컨테이너를 실행하는 파드”는 하나의 컨테이너만 들어있는 파드를 의미합니다. 파드는 최소 하나의 컨테이너가 있어야 하는데 이 파드가 가장 일반적인 유스 케이스라고 합니다. 스크립트는 아래와 같습니다.
apiVersion: v1
kind: Pod
metadata:
name: redis-pod
labels:
app: redis
spec:
containers:
- name: redis
image: redis:7-alpine3.17
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 6380
“함께 작동해야 하는 여러 컨테이너를 실행하는 파드”는 하나의 파드 안에 여러 개의 컨테이너가 있는 경우입니다. 이 종류의 파드를 작성하려면 위의 스크립트의 spec 부분에 새로운 container만 정의하면 됩니다.
Pod의 라이프 사이클

Status
Pending -> 파드가 스케줄링되기 전 상태입니다. 이미지를 다운 받는 시간도 여기에 포함됩니다.
Running -> 파드 안에 하나 이상의 컨테이너가 실행 중인 상태입니다.
Succeeded -> 파드 안에 모든 컨테이너가 실행 중인 상태입니다.
Failed -> 파드 안에 모든 컨테이너가 내려간 상태입니다.
Unknown -> 알 수 없는 이유로 파드의 상태를 불러올 수 없는 상태입니다.
Container Status
Waiting -> Running과 Terminated 상태아 아닌 상태입니다.
Running -> 컨테이너가 문제없이 실행된 상태입니다.
Terminated -> 컨테이너가 종료된 상태입니다.
Pod의 Probe
startupProbe
컨테이너 내에 App이 실행되었는지 확인합니다. 성공하면 그 이후 readinessProbe와 livenessProbe이 동작합니다. 이 프로브는 App이 실행되기까지 시간이 오래 걸릴 때 사용한다고 합니다.
readinessProbe
Pod가 트래픽을 받을 수 있는지 확인합니다. 실패한다면 모든 서비스들의 엔드포인트에서 파드의 IP 주소를 제거한다고 합니다. 쉽게 생각해서 Pod가 트래픽을 받지 않도록 설정하는 것 입니다. 성공한다면 Pod가 트래픽을 받을 수 있게 됩니다.
livenessProbe
컨테이너가 동작 중인지 확인합니다. 스크립트에 작성한 횟수만큼 fail이 된다면 새로운 Pod를 띄우게 됩니다.
readinessProbe의 체크 시간을 livenessProbe보다 짧게 잡아야 하는 이유
readinessProbe는 livenessProbe보다 ping(?)을 날리는 시간을 짧게 해야 합니다. Pod에 트래픽이 많이 들어올 경우 App이 일시적으로 장애가 생길 수 있는데 이때 readinessProbe가 실패하게 됩니다. 위에서 봤듯이 readinessProbe가 실패한다면 Pod에 트래픽을 받을 수 없게 설정합니다. 이 트래픽을 받지 않는 시간에 데드락에 걸린 app은 몰려 들어온 request를 처리할 수 있게 됩니다. livenessProbe의 시간이 짧다면 데드락에 걸린 App이 스스로 회복할 기회를 주지 않고 바로 새 파드로 갈기 때문에 readinessProbe보다 체크 시간을 길게 잡아야 합니다.
결론
Pod는 쿠버네티스에서 관리할 수 있는 최소 단위입니다. Pod는 최소 하나의 컨테이너를 가져야 하며, yml 스크립트가 생각보다 간단합니다. Pod의 생명 주기는 status와 containerStatus로 나눌 수 있는데 위에서 각각 자세하게 살펴봤습니다. 또 중요한 기능이 Pod Probe 기능인데, startUp && readiness && liveness Probe가 있습니다. startUp probe가 성공해야 readiness, liveness probe가 시작됩니다. readiness Probe가 실패하면 Pod가 트래픽을 받을 수 없는 상태가 되고 데드락에 걸린 App이 회복할 시간을 벌어줍니다. livenessProbe가 일정 카운트만큼 실패하면 새로운 Pod를 띄웁니다.