012. Kubernetes Pod — 컨테이너를 감싸는 가장 작은 실행 단위
Pod는 k8s에서 배포되는 가장 작은 단위다. 컨테이너가 하나 이상 묶인 실행 단위이고, 같은 파드 안의 컨테이너들은 네트워크와 볼륨을 공유한다. 파드의 라이프사이클, 리소스 요청과 제한, 사이드카 패턴, 초기화 컨테이너가 무엇인지, 그리고 파드를 직접 만들어 쓰지 않는 이유를 설명한다.
Pod는 k8s에서 배포되는 가장 작은 단위다. 컨테이너가 하나 이상 묶인 실행 단위이고, 같은 파드 안의 컨테이너들은 네트워크와 볼륨을 공유한다. 파드의 라이프사이클, 리소스 요청과 제한, 사이드카 패턴, 초기화 컨테이너가 무엇인지, 그리고 파드를 직접 만들어 쓰지 않는 이유를 설명한다.
Deployment는 파드를 직접 만드는 대신 ‘몇 개를 유지할지, 어떻게 업데이트할지’를 선언하는 오브젝트다. 내부적으로 ReplicaSet을 통해 파드를 관리하고, 롤링 업데이트로 무중단 배포를 하며, 문제가 생기면 이전 버전으로 롤백한다. 이 과정이 어떻게 동작하는지, 전략 파라미터를 어떻게 조절하는지를 설명한다.
파드는 죽었다 새로 만들어지면 IP가 바뀐다. Service는 파드 앞에 서서 항상 같은 주소로 트래픽을 받고, 뒤에 있는 파드들 사이에 로드밸런싱한다. ClusterIP, NodePort, LoadBalancer 세 타입의 차이, Ingress와의 관계, k8s 내부 DNS가 어떻게 동작하는지를 설명한다.
설정값을 컨테이너 이미지에 박으면 환경마다 이미지를 다시 빌드해야 한다. ConfigMap은 일반 설정을, Secret은 민감한 값을 파드와 분리해 관리한다. 주입 방식(환경변수, 볼륨), Secret의 base64가 암호화가 아닌 이유, 프로덕션에서 실제로 안전하게 관리하는 방법을 설명한다.
ServiceAccount는 파드가 k8s API를 호출할 때 쓰는 신원(identity)이다. RBAC은 그 신원에 어떤 리소스에 어떤 작업을 허용할지 정하는 권한 체계다. Role, ClusterRole, RoleBinding, ClusterRoleBinding이 어떻게 조합되는지, 최소 권한 원칙을 어떻게 적용하는지를 설명한다.
DaemonSet은 클러스터의 모든 노드(또는 선택한 노드)에 파드를 정확히 하나씩 실행한다. 노드가 추가되면 자동으로 파드가 생기고, 노드가 제거되면 파드도 사라진다. 로그 수집, 메트릭 수집, 네트워크 플러그인처럼 노드 단위로 실행돼야 하는 인프라 컴포넌트에 쓰인다.
HPA(Horizontal Pod Autoscaler)는 CPU·메모리 사용률이나 커스텀 메트릭을 보고 Deployment의 파드 수를 자동으로 늘리고 줄인다. 스케일 계산이 어떻게 이뤄지는지, 실무에서 자주 만나는 함정(requests 미설정, 스케일 다운 지연, 파드 준비 시간)이 무엇인지, 커스텀 메트릭으로 어떻게 확장하는지를 설명한다.
k8s의 셀프힐링은 선언적 모델과 세 가지 프로브로 구현된다. Liveness probe가 죽은 컨테이너를 재시작하고, Readiness probe가 준비 안 된 파드를 트래픽에서 제외하며, Startup probe가 시작이 느린 앱을 보호한다. 각 프로브가 언제 무엇을 해야 하는지, 잘못 설정했을 때 어떤 문제가 생기는지를 설명한다.
k8s에서 서비스를 운영하려면 무슨 일이 일어나는지 볼 수 있어야 한다. 관측성의 세 기둥인 메트릭·트레이스·로그가 k8s에서 어떻게 구성되는지, TPS를 어떻게 측정하는지, 분산 추적이 어떻게 여러 서비스를 하나의 흐름으로 잇는지, 로그는 어떻게 중앙에서 수집하는지를 설명한다.
파드는 일시적이라 로컬 파일시스템도 파드와 함께 사라진다. PersistentVolume(PV)은 파드 수명과 분리된 저장소를 추상화하고, PersistentVolumeClaim(PVC)은 파드가 그 저장소를 요청하는 방식이다. 정적 프로비저닝과 동적 프로비저닝, StorageClass, 접근 모드, 반환 정책이 무엇인지, 실제 운영에서 어떻게 쓰이는지를 설명한다.