kubernetes 의 가장 중요한 특징 중 하나는 선언적 동작 방식이라 생각합니다.
수 많은 인스턴스들을 관리하기 위해 나온 오케스트레이션 플랫폼인 만큼 쉽게 관리해야 되기 때문이라 생각합니다.
컨트롤 플레인(Control Plane)
Control Plane 은 선언적 동작 방식이며, Hub & Spoke 패턴을 가집니다.
항상 API Server 와 다른 컴포넌트들이 통신하며, 특히 etcd는 API Server를 통해서만 데이터의 변경이 가능합니다.
* watch 매커니즘
개념에 나온 단어 그대로 누군가(API Server 와 연결되어 있는 모든 컴포넌트들)가 k8s 의 상태 변화를 실시간으로 지켜보고 있다는 의미입니다.
즉, API Server 는 Hub 로써 클러스터의 모든 상태와 정보를 관리 관장하며, watch 의 요청 수신을 받아 바뀐 정보를 etcd 에 저장하고 k8s 내 모든 manifest 등의 변경 사항을 전달, 지시를 내립니다.
API Server
API Server 는 Control Plane 의 중심 컴포넌트로, 쿠버네티스 클러스터와 모든 Entry point 역할을 합니다.
사용자가 k8s 클러스터와 상호작용하기 위한 REST API 를 제공합니다.
- kubectl, k8s dashboard, application, 기타 자동화 도구가 API Server를 통해 클러스터와 통신합니다.
인증
- 인증(Authentication)과 권한 부여(Authorization) 를 수행합니다.
클러스터 상태 관리
- 클러스터의 모든 상태 데이터를 etcd 에 저장하고, etcd 와 통신하여 항상 최신 상태를 유지합니다.
유효성 검사 및 변경 적용
- 리소스의 구성 및 manifest 가 올바른지 검사하고, 클러스터에 변경 사항을 적용합니다.
Control Plane 컴포넌트와 통신
- 다른 Control Plane 구성 요소와 통신하여 클러스터의 상태를 조정합니다.
즉, 클러스터의 모든 요청을 처리하는 게이트 키퍼, 상태 관리자 라고 할 수 있는 가장 중요한 컴포넌트 입니다.
Scheduler
Scheduler 는 Pod 를 클러스터의 적절한 노드에 배치하는 역할을 합니다.
어떤 노드에도 배치되지 않은 pending 상태의 pod 를 찾고 적절한 노드를 선택해 배포하라는 명령을 API Server 에 전달합니다.
Scheduler 가 pod 를 노드에 배포 명령 전, 적절한 노드를 선택할 때(스케줄링할 때) 점수를 산정해 그 순간 가장 높은 점수로 산정된 node 로 pod 를 배포합니다.
위 과정은 두 단계로 이루어 지는데,
1. Filter 단계
pod 가 배포되고 실행 가능한 후보 노드들을 확인 및 필터링 합니다.
a. 리소스 요구 사항(cpu, memory 등),
b. 노드가 Ready / NotReady 상태 확인,
c. Taints / Tolerations 의 특정 노드인지,
d. Affinity / Anti-Affinity 규칙이 있는지,
e. PodDisruptionBudget (노드 중단 허용 조건 )
2. Score 단계
가장 적합한 후보 노드를 선택하기 위해 Score 플러그인을 사용하여 계산하고, 가장 높은 점수를 받은 노드가 선택됩니다.
각 플러그인의 점수는 가중치를 곱해 최종 점수로 반영되며 식은 Final Score(Node)=∑(Score by Plugin×Weight) 인데, 이건 정말 모르겠습니다..
etcd
etcd 는 쿠버네티스의 중앙 데이터 저장소로, 클러스터의 모든 상태 정보를 저장하고 관리합니다.
클러스터의 상태, 구성 정보(pod, node, cm 등) 을 key-value 데이터로 저장하고,
control node 의 모든 컴포넌트가 정확한 정보를 기반으로 동작하도록 보장합니다.
etcd 는 클러스터의 뇌와 같은 역할임으로 정기적인 백업이 권장됩니다.
key-value 값이라 하면 이해가 잘 안되는데, 아래 형식과 같이 저장된다 생각하시면 좋습니다.
{ "nodes/nodeA": { "status": "Ready", "capacity": { "cpu": "4", "memory": "16Gi" } }, "pods/podA": { "status": "Running", "node": "nodeA" } } |
Controller Manager
Controller Manager 는 클러스터의 다양한 controller 를 실행하여 클러스터의 상태를 유지 및 관리합니다.
주요 컨트롤러 로는,
Node Controller : 노드 상태 감시
Replication Controller : pod 수 유지
Endpoint Controller : 서비스와 pod 연결 유지
Service Account & Token Controller : SA 와 API 접근 토큰을 자동으로 생성 및 관리
가 있습니다.
즉,
클러스터 상태를 사용자가 정의한 (사용자가 원하는) 상태로 유지하기 위해 동작하는 컨트롤러들을 실행, 관리하는 역할입니다.
감사합니다.
'Infra > Kubernetes' 카테고리의 다른 글
CRI & 컨테이너 런타임 (0) | 2025.02.20 |
---|---|
파드 생성 과정 (0) | 2025.02.18 |
etcd (0) | 2025.02.17 |
worker node (0) | 2025.02.17 |
근본(根本) (0) | 2025.02.11 |