쿠버네티스를 배포하면 클러스터가 생기게 된다.
클러스터가 동작하기 위한 필수 컴포넌트에 대해 정리해본다.

출처: https://kubernetes.io/ko/docs/concepts/overview/components/
Control Plane
- 워커노드와 클러스터 내 파드 관리
- 쿠버네티스의 전반적인 결정 및 이벤트를 처리
- ex) 스케쥴링, replicas에 따른 파드 갯수 유지 등
- 여러 vm에서 control plane을 설정하는 방법
kube-apiserver
- 쿠버네티스 API를 노출하는 컨트롤플레인의 프론트엔드
- 수평으로 확장 가능
- kubectl 과 같은 shell command 및 코드를 통해 수행되는 api 등 모든 api 요청을 받아서 처리
etcd
- 모든 클러스터의 데이터를 담는 key-value 저장소
- etcd를 뒷단 저장소로 사용한다면 백업 필수
kube-scheduler
- 파드가 실행 될 노드를 결정
- 리소스, 정책 및 제약, 어피니티 & 안티 어피니티, 셀렉터, taint 등을 따져서 결정
kube-controller-manager
- 컨트롤러:
- API 서버를 통해 클러스터의 공유된 상태 감시
- 현재 상태를 원하는 상태로 이행시키는 컨트롤 루프
- 논리적으로는 분리된 프로세스지만, 단일 바이너리로 컴파일되고 단일 프로세스 내에서 실행
- 종류:
- 노드 컨트롤러: 노드가 다운되었을 때 통지와 대응
- 레플리케이션 컨트롤러: 모든 리소스의 replicas에 대해 알맞은 수의 파드들을 유지
- 엔드포인트 컨트롤러: 서비스와 파드를 연결시킨다.
- 서비스 어카운트 & 토큰 컨트롤러: 새로운 네임스페이스에 대한 기본 계정과 API 접근 토큰을 생성
cloud-controller-manager
- 클라우드별 컨트롤 로직을 포함하는 쿠버네티스 컨트롤 플레인 컴포넌트
- 라우드 컨트롤러 매니저를 통해 클러스터를 클라우드 공급자의 API에 연결하고, 해당 클라우드 플랫폼과 상호 작용하는 컴포넌트와 클러스터와만 상호 작용하는 컴포넌트를 구분할 수 있게 해 준다
- 클라우드 제공자 전용 컨트롤러만 실행
- 자신의 사내 또는 PC 내부의 학습 환경에서 쿠버네티스를 실행 중인 경우 클러스터에는 클라우드 컨트롤러 매니저가 없음
- 논리적으로 독립적인 여러 컨트롤 루프를 단일 프로세스로 실행하는 단일 바이너리
- 종류:
- 노드 컨트롤러: 노드가 응답을 멈춘 후 클라우드 상에서 삭제되었는지 판별하기 위해 클라우드 제공 사업자에게 확인하는 것
- 라우트 컨트롤러: 기본 클라우드 인프라에 경로를 구성하는 것
- 서비스 컨트롤러: 클라우드 제공 사업자 로드밸런서를 생성, 업데이트 그리고 삭제하는 것
노드 컴포넌트
- 노드 컴포넌트는 동작 중인 파드를 유지시키고 쿠버네티스 런타임 환경을 제공하며, 모든 노드 상에서 동작한다.
kubelet
- Kubelet은 파드에서 컨테이너가 잘 동작하도록 관리
- 쿠버네티스를 통해 생성되지 않는 컨테이너는 관리하지 않는다
kube-proxy
- 클러스터의 각 노드에서 실행되는 네트워크 프록시
- 쿠버네티스의 서비스 개념의 구현부
- 노드의 네트워크 규칙을 유지 관리
- 네트워크 규칙이 내부 네트워크 세션이나 클러스터 바깥에서 파드로 네트워크 통신을 할 수 있도록 해줌
컨테이너 런타임
- 컨테이너 실행을 담당하는 소프트웨어
- 도커(Docker), containerd, CRI-O 등 Kubernetes CRI (컨테이너 런타임 인터페이스)를 구현한 모든 컨테이너 런타임 지원
애드온
- 쿠버네티스 리소스(데몬셋, 디플로이먼트 등)를 이용하여 클러스터 기능을 구현
- kube-system 네임스페이스에 속함
DNS
- 쿠버네티스 서비스를 위해 DNS 레코드를 제공해주는 DNS 서버
웹 UI (대시보드)
컨테이너 리소스 모니터링
클러스터-레벨 로깅
이에대한 자세한 내용은 추후 정리한다