Kubernetes Reference
Kubernetes 컨테이너 오케스트레이션 레퍼런스
Kubernetes Reference 소개
Kubernetes 레퍼런스는 Kubernetes YAML 매니페스트와 kubectl 명령을 8개 실용적인 카테고리로 정리한 종합 검색 가능 가이드입니다. Pod 설정(기본 정의, initContainers, livenessProbe, readinessProbe, 리소스 requests·limits), 서비스 타입(내부 통신용 ClusterIP, 외부 노출용 NodePort, 클라우드 로드밸런서 LoadBalancer, DNS 기반 헤드리스 서비스, HTTP/HTTPS 라우팅 Ingress), 배포 패턴(레플리카셋 Deployment, RollingUpdate 전략, 상태 앱 StatefulSet, 노드별 DaemonSet, CPU 기반 HPA 자동 스케일링), 설정 관리(ConfigMap 키-값·볼륨 마운트, base64 인코딩 Secret, envFrom 일괄 주입), 스토리지(PV·PVC·StorageClass 동적 프로비저닝·emptyDir), 네트워킹(NetworkPolicy 전체 거부·포트별 허용·Pod DNS), RBAC(Role·RoleBinding·ClusterRole·ServiceAccount), kubectl 명령(get·describe·apply·logs·exec·rollout·scale·port-forward·top·cordon/drain)까지 완전 수록되어 있습니다.
Kubernetes는 전 세계 클라우드 네이티브 엔지니어링 팀이 사용하는 주요 컨테이너 오케스트레이션 플랫폼입니다. DevOps 엔지니어, 플랫폼 엔지니어, SRE는 AWS EKS, Google GKE, Azure AKS, 온프레미스 클러스터에서 컨테이너화된 애플리케이션을 배포·확장·관리하기 위해 Kubernetes를 사용합니다. 이 레퍼런스는 무엇을 해야 할지는 알지만 정확한 YAML 구조나 kubectl 구문이 필요한 실무자를 위해 만들어졌습니다.
이 레퍼런스의 각 항목은 특정 작업을 수행하는 데 필요한 최소한이면서 완전한 YAML 스니펫이나 kubectl 명령을 보여줍니다. 레퍼런스는 개발자가 Kubernetes를 사용할 때 실제로 생각하는 방식으로 카테고리를 구성했습니다: 컨테이너 디버깅 시 Pod, 네트워킹 설정 시 서비스, 접근 제어 관리 시 RBAC. 체계적인 카테고리 탐색으로 수천 줄의 문서를 스크롤하지 않고 바로 원하는 섹션으로 이동할 수 있습니다.
주요 기능
- Pod 스펙 레퍼런스: 기본 Pod 정의, 의존성 순서 제어 initContainers, livenessProbe(HTTP/TCP), readinessProbe, CPU/메모리 리소스 requests·limits
- 완전한 YAML을 포함한 서비스 타입: ClusterIP, nodePort 필드를 가진 NodePort, 클라우드 LoadBalancer, clusterIP: None 헤드리스 서비스, Ingress 라우팅 규칙
- 워크로드 패턴: replicas·matchLabels를 가진 Deployment, maxSurge·maxUnavailable RollingUpdate, serviceName StatefulSet, DaemonSet, CPU 목표 HPA
- ConfigMap·Secret 관리: 키-값 데이터, 파일로의 볼륨 마운트, base64 인코딩 Secret, secretKeyRef 개별 키 환경변수 주입, envFrom 일괄 주입
- 스토리지 리소스: hostPath PersistentVolume, 접근 모드 PVC, AWS EBS gp3 프로비저너 StorageClass, 크기 제한 emptyDir
- 네트워크 보안: NetworkPolicy 전체 거부(ingress+egress), podSelector 포트별 허용 규칙, 커스텀 DNS를 위한 dnsPolicy·dnsConfig
- RBAC 접근 제어: 리소스/동사 규칙 Role, 사용자 subject RoleBinding, 클러스터 범위 ClusterRole, ServiceAccount 생성·Pod 바인딩
- 핵심 kubectl 명령: 검사용 get·describe, 선언적 업데이트 apply, -c 사이드카·--tail 로그, 셸 접속 exec, rollout 히스토리·undo, scale, port-forward, top, 유지보수 cordon·drain
자주 묻는 질문
Kubernetes에서 livenessProbe와 readinessProbe의 차이는 무엇인가요?
livenessProbe는 컨테이너가 올바르게 실행 중인지 확인합니다. 실패하면 Kubernetes가 컨테이너를 재시작합니다. readinessProbe는 컨테이너가 트래픽을 받을 준비가 됐는지 확인합니다. 실패하면 Pod이 다시 통과할 때까지 서비스 엔드포인트에서 제거됩니다. 데드락 감지에는 livenessProbe를, 앱 시작 미완료나 일시적 과부하 감지에는 readinessProbe를 사용하세요.
ClusterIP, NodePort, LoadBalancer 서비스는 언제 사용해야 하나요?
ClusterIP(기본값)는 클러스터 내부에서만 서비스를 노출합니다 — 서비스 간 통신에 사용하세요. NodePort는 모든 노드에 포트(30000-32767 범위)를 열며 로드밸런서가 없는 개발환경이나 온프레미스 클러스터에 유용합니다. LoadBalancer는 클라우드 로드밸런서를 프로비저닝하며 EKS나 GKE 같은 관리형 Kubernetes에서 외부로 서비스를 노출하는 표준 방식입니다. HTTP/HTTPS 트래픽에는 Ingress를 사용하세요.
Deployment와 StatefulSet의 차이는 무엇인가요?
Deployment는 무상태 애플리케이션을 위한 것입니다: Pod는 서로 교체 가능하고, 임의의 이름을 갖고, 어떤 순서로도 교체될 수 있습니다. StatefulSet은 데이터베이스 같은 상태 유지 애플리케이션을 위한 것입니다: Pod는 안정적인 순서 이름(mysql-0, mysql-1), 안정적인 네트워크 ID, 자체 PersistentVolumeClaim을 가집니다. StatefulSet은 순서대로 스케일되며 안정적인 DNS 제공을 위한 헤드리스 서비스가 필요합니다.
ConfigMap 값을 Pod의 환경변수로 주입하는 방법은?
`env[].valueFrom.configMapKeyRef`로 특정 키를 주입하거나 `envFrom[].configMapRef`로 모든 키를 한꺼번에 주입할 수 있습니다. 설정 파일로 사용할 때는 volumes[].configMap으로 볼륨을 마운트하고 containerSpec.volumeMounts에서 참조하세요. 볼륨으로 마운트된 ConfigMap 변경사항은 Pod 재시작 없이 자동으로 반영됩니다(결과적 일관성).
Kubernetes의 수평 파드 자동 스케일링(HPA)은 어떻게 동작하나요?
HorizontalPodAutoscaler 컨트롤러는 Deployment를 감시하고 관찰된 메트릭에 따라 레플리카 수를 조정합니다. 가장 일반적인 메트릭은 CPU 사용률입니다: 모든 Pod의 평균 CPU가 목표 퍼센트를 초과하면 HPA가 스케일 업합니다. minReplicas와 maxReplicas로 스케일링 범위를 제한합니다. CPU·메모리 기반 HPA를 위해서는 클러스터에 metrics-server가 설치되어야 합니다.
Kubernetes에서 실패한 Deployment를 롤백하는 방법은?
`kubectl rollout undo deployment/my-deployment`로 이전 리비전으로 롤백하세요. `kubectl rollout history deployment/my-deployment`로 리비전 히스토리를 확인하고 `kubectl rollout undo deployment/my-deployment --to-revision=N`으로 특정 버전으로 롤백할 수 있습니다. Kubernetes는 롤백을 위해 revisionHistoryLimit으로 제어되는 수의 이전 ReplicaSet을 보존합니다.
Kubernetes에서 RBAC란 무엇이며 어떻게 설정하나요?
RBAC(역할 기반 접근 제어)는 어떤 사용자와 서비스 계정이 어떤 리소스에 어떤 작업을 할 수 있는지 제한합니다. 리소스(pod, secret)에 허용된 동사(get, list, create, delete)를 정의하는 Role(네임스페이스 범위) 또는 ClusterRole(클러스터 범위)을 생성하세요. 그런 다음 RoleBinding 또는 ClusterRoleBinding으로 사용자, 그룹, ServiceAccount에 역할을 부여하세요. 항상 최소 권한 원칙을 따르세요.
Kubernetes 노드를 유지보수를 위해 드레인하는 방법은?
먼저 새로운 Pod이 스케줄되지 않도록 노드를 코든하세요: `kubectl cordon worker-1`. 그런 다음 기존 Pod을 퇴거시키기 위해 드레인하세요: `kubectl drain worker-1 --ignore-daemonsets --delete-emptydir-data`. DaemonSet Pod은 자동으로 무시됩니다. 유지보수 후 다시 스케줄링을 허용하려면 `kubectl uncordon worker-1`로 언코던하세요. 드레인 중에 Pod Disruption Budget(PDB)이 준수되는지 확인하세요.