본문 바로가기
IT/kubernates

Control Plane

by 봉즙 2024. 5. 17.

Control plane의 구성 요소들은 클러스터에 대한 전반적인 결정을 내리고(예: 스케줄링), 클러스터 이벤트를 감지하고 대응합니다(예: Deployment의 replicas 필드가 충족되지 않을 때 새로운 pod을 시작).

Control Plane

클러스터 전체를 관리하고 조정하는 중앙 컴포넌트 집합입니다.

kube-api-server

사용자와 다양한 컴포넌트들이 클러스터와 쉽게 소통할 수 있도록 도와줍니다. Pod의 정보나 상태, NameSpace와 관련된 데이터를 저장합니다. 일부 모니터링 시스템 사용하여 클러스터와 상호작용합니다.
REST API 와 gRPC 를 모두 사용하며 CLI 도구인 kubectl을 사용하여 클러스터를 관리할 때는 REST API 를 스케줄러와 컨트롤러와 같은 내부 클러스터 구성 요소들은 gRPC를 사용합니다.
또한 통신 시에는 TLS를 통해 암호화 하여 안정성을 제공합니다.
etcd에서만 작동하며, 외부에서 ClusterIP 서비스에 접근할 수 있도록 bastion api server proxy를 내장하고 있습니다.

etcd

모든 클러스터 데이터를 저장하는 key-value 데이터 저장소입니다. 일관성을 보장하는 분산 데이터 저장소로 설계되었습니다.
모든 상태 정보(예: 노드 상태, Pod 상태 등)를 저장하며, Control Plane의 다른 컴포넌트들이 이를 참조합니다.
Kubernetes의 API 서버는 etcd의 감시 기능을 사용하여 객체 상태의 모든 변경 사항을 모니터링합니다. Control Plane에서 유일한 StatefulSet 구성 요소인 etcd는 Kubernetes에 이상적인 데이터베이스입니다.

kube-scheduler

Kubernetes 클러스터에서 Pod를 배포할 때, kube-scheduler는 CPU, 메모리, affinity와 같은 Pod 요구 사항을 만족하는 최적의 워커 노드를 식별 하고, 해당 노드에 Pod를 스케줄링합니다.

이 과정이 가능한 이유는 Kubernetes 원활하게 작동하기 위해 필요한 중요한 정보를 저장하는 etcd의 역할 덕분입니다. Kubernetes로 요청이 들어올 때마다 필요한 정보가 etcd 에 저장됩니다.

Pod를 스케줄링 할때 사용 기법은 다음과 같습니다.

  1. Filtering : 사용 가능한 모든 노드를 필터링하여 Pod에 적합한 노드를 찾습니다.
  2. Scoring : 스케줄링 플러그인을 기반으로 각 노드에 점수를 할당합니다.
  3. Binding Event : 스케줄러는 가장 적합한 노드를 선택하고 Pod를 해당 노드에 바인딩합니다.

위 과정을 통하여 높은 우선순위를 가진 Pod가 적절한 우선순위를 받도록 하고, 사용자 정의 플러그인을 쉽게 추가할 수 있도록 보장합니다.

cloud-controller-manager (CCM)

클라우드 환경에서 Kubernetes를 배포 시, 클라우드 플랫폼 API와 Kubernetes 클러스터를 연결하기 위하여 클라우드 컨트롤러 매니저를 사용합니다. CCM은 핵심 Kubernetes 구성 요소들이 독립적으로 작동할 수 있게 하고, 클라우드 제공자가 플러그인을 사용하여 Kubernetes와 통합할 수 있도록 합니다. 클러스터의 안정성과 효율적인 운영을 보장합니다. 각각의 컨트롤러는 특정한 관리 작업을 자동화하여 클러스터 관리자가 더욱 쉽게 클러스터를 운영할 수 있도록 도와줍니다.

1. Node Controller

Kubernetes 클러스터에서 노드의 상태를 모니터링하고 관리하는 역할을 합니다.

  • 등록 및 상태 관리: 새 노드가 클러스터에 추가되면, 노드 컨트롤러는 이를 감지하고 API 서버에 노드를 등록합니다. 또한, 각 노드의 상태를 지속적으로 모니터링하여 노드가 응답하지 않거나 문제가 발생할 경우 적절한 조치를 취합니다.

  • 상태 업데이트: 노드의 상태 정보를 주기적으로 업데이트하여 클러스터 관리자에게 현재 상태를 보고합니다.

  • 장애 처리: 노드가 일정 시간 동안 응답하지 않으면, 노드 컨트롤러는 해당 노드를 비정상 상태로 표시하고, 그 노드에서 실행 중인 Pod를 다른 노드로 재배치합니다.

2. Route Controller

Kubernetes 클러스터의 네트워크 경로를 관리하는 역할을 합니다.

  • 네트워크 경로 설정: 클라우드 환경에서 각 노드가 다른 노드와 통신할 수 있도록 네트워크 경로를 설정합니다. 이는 클러스터 내 포드 간의 원활한 통신을 보장합니다.

  • 클라우드 제공자와 통합: 클라우드 제공자의 API와 상호 작용하여 필요한 네트워크 경로를 자동으로 구성합니다.

  • 경로 유지 관리: 클러스터 내 노드가 추가되거나 제거될 때, 네트워크 경로를 업데이트하여 최신 상태를 유지합니다.

3. Service controller

  • 서비스 생성 및 관리: 사용자가 서비스 객체를 생성하면, 서비스 컨트롤러는 이를 감지하고 필요한 엔드포인트를 생성합니다. 이는 서비스가 노출된 Pod와 올바르게 연결되도록 보장합니다.

  • 로드 밸런싱 설정: 클라우드 환경에서 외부 로드 밸런서를 생성하여 외부 트래픽을 Kubernetes 서비스로 라우팅합니다.

  • 서비스 상태 모니터링: 서비스 객체의 상태를 지속적으로 모니터링하여, 문제가 발생하면 이를 보고하고 필요한 조치를 취합니다.

control-manager

클러스터가 원하는 상태를 유지하도록 다양한 컨트롤러를 관리합니다. 컨테이너 복제를 생성하고 관리하는 데 중요한 역할을 합니다.

1. Deployment Controller

사용자가 정의한 manifest에 따라 애플리케이션의 복제본을 관리합니다. 특정 수의 복제본이 항상 실행 중인지 확인하고, 필요 시 새로운 복제본을 생성합니다.

2. Replication Controller

클러스터의 안정성을 유지하며, 파드가 항상 지정된 수만큼 실행되도록 합니다.
Pod중 하나가 실패할 경우, Replication Controller는 이를 감지하고 새로운 Pod를 생성하여 교체합니다.

3. StatefulSet Controller

각 Pod에 고유한 ID를 부여하고, Pod의 순차적 배포 및 종료를 관리합니다. 데이터베이스와 같이 고유한 상태를 가진 애플리케이션에 적합합니다.

4. DaemonSet Controller

각 노드에 한 개의 파드가 실행되도록 보장합니다. 로그 수집기, 모니터링 에이전트 등과 같이 모든 노드에서 실행되어야 하는 애플리케이션에 적합합니다.

'IT > kubernates' 카테고리의 다른 글

Pod  (0) 2024.05.21
Node  (0) 2024.05.20
Kubernetes Architecture  (0) 2024.05.16
Kubernetes  (0) 2024.05.16
WSL2 Ubuntu 환경에서 Docker Desktop 설치 하지 않고 Minikube 설치 및 IntelliJ Kubernetes 플러그인 연동 방법  (0) 2023.07.26

댓글