Learning
토픽 25 / 107·컨테이너 오케스트레이션

Kubernetes (K8s)

Kubernetes (K8s)

컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 컨테이너 오케스트레이션 플랫폼으로, Google이 내부 시스템(Borg)을 기반으로 개발하여 CNCF에 기증했으며 선언적 구성과 자가 치유 기능을 통해 클라우드 네이티브 애플리케이션의 사실상 표준으로 자리잡음

Control Plane 구성요소: API Server(모든 통신의 중심/RESTful API 제공/인증/인가), etcd(클러스터 상태 저장소/분산 Key-Value), Scheduler(Pod를 적절한 노드에 배치 결정), Controller Manager(원하는 상태 유지 ReplicaSet/Node/Job 등), Cloud Controller(CSP 연동 LB/볼륨/노드)

Worker Node 구성요소: kubelet(노드 에이전트/Pod 실행/관리/API Server 통신), kube-proxy(네트워크 프록시/Service 구현/iptables/IPVS), Container Runtime(컨테이너 실행 containerd/CRI-O)

핵심 특징: 선언적 구성(원하는 상태 Desired State를 선언/K8s가 유지), 자가 치유(실패한 컨테이너 재시작/노드 장애 시 재배치), 수평 확장(부하에 따라 Pod 수 자동 조절 HPA), 서비스 디스커버리(내부 DNS/Service를 통한 통신), 롤링 업데이트(무중단 배포/롤백 지원), 설정/비밀 관리(ConfigMap/Secret으로 앱과 설정 분리)

관리형 Kubernetes: EKS(AWS/AWS 통합/Fargate 지원), AKS(Azure/Azure AD 통합/Windows 컨테이너), GKE(GCP/K8s 원조/Autopilot 모드), OKE(Oracle/Oracle DB 통합)

동작 흐름: 사용자(kubectl apply -f deployment.yaml) → API Server(요청 수신/인증/인가/etcd에 저장) → etcd(클러스터 상태 저장) → Controller(현재 상태 ≠ 원하는 상태 감지/Pod 생성 요청) → Scheduler(Pod를 배치할 노드 결정 리소스/affinity 고려) → Worker Node kubelet(API Server로부터 Pod 스펙 수신/컨테이너 실행) → Container Runtime(실제 컨테이너 생성/실행) → kube-proxy(Service 네트워킹 설정 iptables/IPVS)

비교: Kubernetes(선언적/자가치유/프로덕션 표준/학습곡선 높음) vs Docker Swarm(간단/Docker 네이티브/소규모) vs Nomad(경량/멀티 워크로드/HashiCorp)

연관: K8s 아키텍처, K8s 오브젝트, K8s 네트워킹, Helm, CaaS