[K8s] 쿠버네티스 컴포넌트 정리
쿠버네티스는 복잡한 분산 시스템을 효과적으로 관리할 수 있는 다양한 컴포넌트로 구성되어 있다.
크게 컨트롤 플레인(Control Plane)과 워커 노드(Worker Node)로 나뉜다.
각 컴포넌트는 특정한 역할을 맡고 있으며, 이들이 상호작용하여 쿠버네티스 클러스터를 구성한다.
쿠버네티스 클러스터의 두 핵심 구성요소들의 역할과 기능에 대해 알아보자.
컨트롤 플레인(Control Plane)
컨트롤 플레인은 클러스터의 중앙 제어 역할을 담당한다.
클러스터 상태를 관리하고, 워커 노드에서 실행되는 애플리케이션의 스케줄링, 상태 모니터링, 유지보수를 수행한다.
컨트롤 플레인의 주요 요소는 다음과 같다.
kube-apiserver
클러스터와 상호작용하는 모든 요청의 관문 역할
쿠버네티스 API의 진입점이며, 모든 요청을 받아들이고 인증, 권한 부여, 유효성 검사 및 클러스터의 상태를 업데이트하는 역할을 한다. kubectl 명령어, 내부 컨트롤러, 외부 API 호출 등 모든 클러스터 상호작용이 api서버를 통해 처리된다.
- RESTful API 서버로, 클러스터 내의 컴포넌트들이 서로 통신하기 위한 통일된 인터페이스 제공
- 모든 상태 변경 요청이 API 서버를 통해 이루어짐 (CRUD)
etcd
클러스터의 상태를 저장하는 분산 키-값 저장소
쿠버네티스의 중요한 상태 정보를 영구적으로 저장하는 데이터베이스다.
클러스터의 모든 상태(ex. pod, secret, service, configmap 등)가 이곳에 저장된다. 이는 분산 시스템에서 강력한 일관성을 보장한다.
- 고가용성과 일관성을 보장하는 분산 키-값 저장소
- 클러스터의 구성 정보 및 현재 상태(pod, service 등)를 저장
kube-scheduler
새로 생성된 pod를 적절한 워커 노드에 배치하는 역할을 담당
사용자가 생성한 파드가 실행될 적절한 노드를 결정하는 역할을 한다.
파드가 클러스터에 생성되면, 각 노드의 리소스 사용량(CPU, 메모리), 파드 간 제약 조건 등을 고려하여 가장 적합한 노드를 선택한다.
- 리소스 제약 조건(CPU, 메모리), 노드 상태 등을 고려하여 파드를 배치
- 파드의 'NodeSelector', 'Affinity', 'Taints', 'Tolerations' 등 다양한 스케줄링 정책 지원
Kube-controller-manager
클러스터의 상태를 원하는 상태로 유지하기 위한 여러 컨트롤러를 실행
여러 유형의 컨트롤러를 실행하여 쿠버네티스 클러스터의 상태를 관리한다.
컨트롤러는 클러스터의 실제 상태를 원하는 상태로 유지하는 역할을 한다.
Node Controller | 워커 노드의 상태를 모니터링하고 노드 장애를 처리 |
Replication Controller | 특정 파드가 항상 정해진 수만큼 실행되도록 보장 |
Endpoiny Controller | 서비스와 파드의 엔드포인트를 연결 |
Service Account Token Cotroller |
새로운 네임스페이스가 생성될 때, 기본 서비스 계정과 API 액세스 토큰을 설정 |
Cloud-controller-manager
클라우드 제공자와의 통합을 담당하는 컨트롤러
클라우드 제공자와 상호작용하는 컨트롤러들을 실행한다.
쿠버네티스를 다양한 클라우드 환경에서 실행할 수 있도록 지원하며, 클러스터와 클라우드 인프라 간의 통신을 처리한다(ex. 클라우드 제공자의 로드밸런서 설정, 노드 자원 할당)
Node Controller | 클라우드 인프라에서 사라진 노드를 감지 |
Route Controller | 클라우드 네트워크 라우팅 설정을 처리 |
Service Controller | 클라우드 로드밸런서를 관리하여 쿠버네티스 서비스와 연결 |
워커 노드(Worker Node)
워커 노드는 실제 애플리케이션 워크로드(파드)를 실행하는 노드다.
워커 노드의 각 컴포넌트는 클러스터에서 분산된 애플리케이션을 효과적으로 실행하고 관리하기 위한 역할을 수행한다.
Kubelet
노드에서 파드를 관리하고, 컨트롤 플레인과 통신하여 상태를 보고
워커 노드에서 실행되며, kube-apiserver로 부터 받은 파드 사양을 기반으로 컨테이너를 관리한다.
해당 파드의 상태를 지속적으로 모니터링하고 컨트롤 플레인에 보고하며, 만약 파드가 의도한 대로 실행되지 않으면 재시작을 시도하거나 다른 조치를 취하여 파드를 원하는 상태로 유지하려고 한다.
- 컨테이너 런타임(Docker, containerd 등)을 사용하여 컨테이너를 관리
- 각 파드가 명세에 따라 실행되고 있는지 확인
Kube-proxy
네트워크 프록시로서, 각 노드에서 네트워크 규칙을 관리하여 파드 간 통신을 지원
쿠버네티스 서비스의 네트워크 프록시 역할을 수행한다.
각 워커 노드에서 실행되며, IP 테이블을 사용하거나 사용자 공간 프록시를 통해 파드 간의 네트워크 트래픽을 적절하게 라우팅한다. 또한, 로드밸런싱 기능을 제공하여 서비스가 여러 파드에 걸쳐 있을 때 트래픽을 고르게 분산시킨다.
- 쿠버네티스 서비스에 대한 네트워크 규칙 설정 및 관리
- 클러스터 내부 및 외부에서 파드로의 통신을 가능하게 함
컨테이너 런타임(Container Runtime)
컨테이너를 실행하는 소프트웨어
파드 내의 컨테이너를 실행하는 역할을 한다. kubelet이 컨테이너 런타임과 상호작용하여 파드를 구성하고, 컨테이너의 생애 주기를 관리한다. 쿠버네티스에서 지원하는 대표적인 컨테이너 런타임으로는 Docker, Containerd, CRI-O 등이 있다.
- 컨테이너 이미지의 다운로드 및 컨테이너 실행 관리
- 컨테이너의 라이프사이클(시작, 중지, 재시작 등) 관리
'🐳 Container > K8S' 카테고리의 다른 글
[K8s][Security] Mutating, Validation Admission Controller (3) | 2024.10.29 |
---|---|
[K8s][CKS] Admission Controller (0) | 2024.06.19 |
[K8s] SecurityContext (1) | 2024.06.04 |
[K8s][CKS] 감사(auditing) (0) | 2024.06.03 |
[K8s][CKS] 컨테이너의 불변성 보장 (0) | 2024.05.24 |