K8s
오픈소스 컨테이너 오케스트레이션 플랫폼
K8s 사용 이유
- 자가 치유
- 컨테어너가 멈추거나 오류 발생 시 자동감지하여 새 컨테이너로 교체한다.
- 자동 확장
- 서비스 트래픽 증가 시 컨테이너를 자동으로 늘리낟.
- 로드 밸런싱
- 트래픽을 여러 컨테이너에 분배해준다.
- 자동 롤백
- 다양한 무중단 배포전략을 지원하며, 배포 중 문제가 생기면 안정된 버전으로 롤백을 해줌
K8s 구성요소
쿠버네티스는 주로 두 가지 유형의 노드로 구성되어 있다.
- master node(control plane)
- 클러스터의 전체적인 관리 및 조정을 담당
- worker node
- 실제 컴퓨팅 작업을 수행, 애플리케이션 컨테이너의 실행을 담당한다.

Master Node(Control Plane)
클러스터의 두뇌로, 클러스터의 전반적인 관리와 조정을 한다.
- API 서버
- 클러스터와의 모든 통신이 시작되는 장소이다.
- Rest API 형식으로 작동되고 kubectl~ 로 시작하는 명령어가 API 서버를 통해 요청을 보내고 받는다.
- etcd(클러스터 스토어)
- 모든 클러스터 데이터를 저장하는 경량, 분산형 키-값 저장소이다.
- 클러스터의 상태 정보, 설정, 메타 데이터 등을 저장한다.
- 컨트롤러 매니저
- node, pod상태를 수정하거나 복구한다.
- 원하는 상태에 맞춰 클러스터를 유지해준다. (etcd 상태를 감시하고 차이점이 있다면 조정한다.)
- 스케쥴러
- 새로 생성된 파드를 대상 노드에 할당한다.
- CPU, 메모리 등의 기준으로 결정
Worker Node
실제 애플리케이션의 컨테이너가 실행되는 곳
- kubelet
- 워커 노드 관리자로 control plane과 api server로부터 지시를 받아 컨테이너 실행 및 관리를 담당한다.
- Pod에 지정된 컨테이너가 정상적으로 동작하고 있는지 확인하고 필요한 조치를 취하여 클러스터의 상태를 유지하게 한다.
- kube-proxy
- 네트워크 프록시로서, 워커 노드의 네트워크 규칙을 관리한다
- 클러스터 내의 Pod간 통신을 담당하고 클러스터 외부 통신도 담당한다.
- container runtime
- 실제 컨테이너가 동작할 수 있는 환경을 제공해준다 (ex : Docker)
작동 원리
- 사용자가 API 서버를 통해 "앱 3개 실행해줘" 라고 요청한다.
- 이 상태 정보는 etcd에 저장된다.
- 스케쥴러가 어느 워커 노드에 여유가 있는지 확인하고 배치 장소를 정한다.
- 해당 노드의 kubelet이 명령을 받아 컨테이너 런타임을 통해 앱을 실행한다.
- 컨트롤러 매니저는 항상 실행 중인 앱의 개수를 확인하며, 문제가 생기면 자동으로 복구 한다.