본문 바로가기
Infra/Kubernetes

Control node

by TrendPilot 2025. 2. 12.

 kubernetes 의 가장 중요한 특징 중 하나는 선언적 동작 방식이라 생각합니다.

 

 수 많은 인스턴스들을 관리하기 위해 나온 오케스트레이션 플랫폼인 만큼 쉽게 관리해야 되기 때문이라 생각합니다.

 

컨트롤 플레인(Control Plane)

 Control Plane 은 선언적 동작 방식이며, Hub & Spoke 패턴을 가집니다.

 

https://excalidraw.com/ 에서 그렸습니다

 

 항상 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