k8s
| topics | 400-인프라 & 아키텍처 401 Docker & Kubernetes |
| types | 이론 학습 |
| tags | #kubernetes #k8s #container |
| references | www.samsungsds.com/kr/insights/kubern... |
Kubernetes (K8s)
컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈소스 시스템
핵심 철학: 선언적 관리
K8s의 핵심은 **"목표 상태(Desired State)를 선언하면, K8s가 알아서 맞춰준다"**는 것이다.
- Desired State: 내가 원하는 상태 (예: Pod 3개 유지)
- Current State: 현재 상태 (예: Pod 2개 실행 중)
K8s는 Current State를 계속 모니터링하면서 Desired State와 다르면 자동으로 조정한다. Pod가 죽으면? 알아서 새로 띄워줌.
하는 일 (Container Orchestration)
- 컨테이너 자동 배치 및 복제
- 로드 밸런싱
- 장애 복구 (Self-healing)
- 서비스 노출
- 자동 확장/축소 (Auto-scaling)
- 서비스 간 연결
이런 일들을 묶어서 Container Orchestration이라고 부른다.
구성요소
컨트롤 플레인 컴포넌트 (Master Node)
클러스터 전체를 관리하는 뇌 역할이다. Master Node에서 실행된다.
| 컴포넌트 | 역할 | 비유 |
|---|---|---|
| kube-apiserver | 모든 요청의 진입점 | API Gateway |
| etcd | 클러스터 정보를 key-value로 저장 | 데이터 사전 |
| kube-scheduler | Pod를 어느 노드에 배치할지 결정 | 배치 담당자 |
| kube-controller-manager | Desired State 유지 관리 | 관리자 |
kube-apiserver
- kubectl 명령이 여기로 전송됨
- 클러스터로 들어오는 모든 요청을 가장 앞에서 받음
etcd
- 클러스터 상태, 리소스 구성 정보 등 저장
- 분산 저장 구조 (안정성 때문에)
kube-scheduler
- 새 Pod 감지 → 적절한 노드에 배치
kube-controller-manager
- 노드 다운 여부 체크
- Pod 복제 수 유지
- 서비스-Pod 연결 확인
노드 컴포넌트 (Worker Node)
실제로 컨테이너가 돌아가는 노드다.
kubelet
- 각 노드에서 Pod를 생성하고 관리하는 핵심 요소
- kubectl 명령 → kube-apiserver → kubelet → Pod 생성/관리
container runtime
- 실제로 컨테이너를 실행하는 애플리케이션
- CRI(Container Runtime Interface) 표준 준수
- 대표적: containerd, CRI-O
- 컨테이너 런타임 참고
kube-proxy
- 클러스터 내부 네트워크 요청 전달
- Pod IP는 매번 바뀌는데, kube-proxy가 이를 관리
- 서비스 오브젝트와 연결해서 고정 접근 경로 제공
POD
K8s의 최소 배포 단위
- 하나 이상의 컨테이너를 포함
- 같은 Pod 내 컨테이너는 네트워크/스토리지 공유
- Pod가 죽으면 새로운 Pod가 생성됨 (같은 Pod가 살아나는 게 아님)
Docker Container vs Pod?: Container는 단일 프로세스 격리 단위, Pod는 밀접하게 연관된 컨테이너들을 묶은 논리적 단위다.