쿠버네티스 뒤편의 구조와 설계 개념들[1]을 도식화와 함께 공부했습니다.
쿠버네티스란 무엇인가?
쿠버네티스는 컨테이너화된 앱을 배포 및 관리하는 오케스트레이션 도구입니다.
쿠버네티스 클러스터는 컨트롤 플레인[2], 워커 노드[4], 에드온[5]으로 구성됩니다.
기본적으로 클러스터 구조는 다음과 같은 구조로 구성되어 있습니다.
컨트롤 플레인 컴포넌트
컨트롤 플레인 컴포넌트 구성 요소[2]는 대체적으로 2가지 업무를 수행합니다.
클러스터에 대한 전역 결정 (e.g. 스케줄링)
이벤트 감지 및 대응 (e.g. 디플로이먼트의 리플리카 필드가 충족되지 않을 때 새 파드 시작)
컨트롤 플레인은 대략적으로 5개의 구성요소를 가지고 있습니다.
etcd : 쿠버네티스의 선언된 상태를 저장하는 키-값 저장소
kube-api-server : 쿠버네티스 클러스터를 제어하기 위한 API Endpoint
kube-scheduler : 노드가 할당되지 않은 새 생성된 파드를 감시하고 리소스 요구사항, HW/SW/정책 제약, 선호도 및 반 선호도 사양, 데이터 위치, 워크로드 간 간섭, 마감일 등의 기준을 가지고 파드가 생성될 노드를 지정
kube-controller-manager[7] : controller[6]의 프로세스를 실행
논리적 : 각 controller는 개별 프로세스로 실행
물리적 : 단일 바이너리로 컴파일되며 단일 프로세스로 실행
대상 : node-controller, job-controller, endpoint-slice,controller, service-account-controller
cloud-controller-manager[8] : 클라우드 API와 kube-api-server 연결
논리적 : 각 controller는 개별 프로세스로 실행
물리적 : 각 controller loop를 단일 바이너리로 컴파일해 단일 프로세스로 실행
대상 : cloud-provider-aws[9], cloud-provider-gcp[10], cloud-provider-azure[11]
노드 컴포넌트 구성 요소
노드 컴포넌트 구성요소[3]는 대체적으로 2가지 업무를 수행합니다.
동작 중인 파드를 유지
모든 노드 상에서 쿠버네티스 런타임 환경을 제공
노드는 기본적으로 3가지 구성요소를 가지고 있습니다.
kublet : 각 노드에서 실행되는 에이전트[d1], 파드와 컨테이너의 동작을 관리
kube-proxy : 각 노드에서 실행되는 네트워크 프록시[d2], 내부 네트워크 세션, 클러스터 바깥에서 파드로 네트워크 통신 지원
container-rumtime : 컨테이너 실행을 담당
대상 : containerd[12], cri-o[13]
에드온 구성 요소
에드온 구성요소[5]는 대체적으로
쿠버네티스 리소스(Daemonset, Deployment 등) 을 이용해 클러스터 기능 구현
클러스터 단위의 기능을 제공하기 위해 kube-system 네임스페이스 사용
애드온은 크게 4가지로 구성됩니다.
DNS[14] : 워크로드는 DNS를 사용하여 클러스터 내 서비스를 찾을 수 있음
WEB UI (대시보드)[15] : 쿠버네티스 모니터링용 대시보드를 배포할 수 있음
노드
Ref.
Description. Ref.
[d1] 에이전트(agent)
[d2] 네트워크 프록시(network proxy)