ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes Components - Control Plane
    TECH/Kubernetes 2022. 10. 13. 22:07

    Kubernetes 배포하면 클러스터를 얻게 된다.

     

    Kubernetes 클러스터는 노드라고 불리는 컨테이너화된 애플리케이션을 실행시키는 일련의 워커머신으로 구성되어 있다. 모든 클러스터는 최소 하나의 워커노드를 갖는다.

     

    워커 노드는 애플리케이션 워크로드의 컴포넌트들인 Pod들을 호스트 한다. Control plane은 클러스터 내의 워커 노드와 Pod를 관리한다. 프로덕션 환경에서 control plane은 일반적으로 여러 컴퓨터에 걸쳐 실행되고, 클러스터는 일반적으로 여러 노드를 가지기 때문에 fault-tolerance와 high availability를 제공한다.

     

    Control Plane Components

    control plane의 컴포넌트는 클러스터에 대한 전반적인 결정 뿐만 아니라 (예: 스케줄링) 클러스터의 이벤트를 탐지하고 이에 응답하는 일을 한다.(예: deployment의 replicas 필드가 충족되지 않았을 때 새로운 pod를 생성)

    control plane은 클러스터의 어떤 머신에서든 동작할 수 있다. 하지만, 편의성을 위해 set up 스크립트는 일반적으로 모든 control plane 컴포넌트를 같은 머신에서 시작시키고, 이 머신에서는 유저 컨테이너를 실행시키지 않는다.

     

    kube-apiserver

    Kubernetes API를 노출시키는 컴포넌트이다. API 서버는 Kubernetes control plane의 front end이다.

    Kubernetes API 서버의 주 구현체는 kube-apiserver 이다. kube-apiserver는 수평적으로 확장될 수 있도록 설계되었다. 즉, 인스턴스를 추가함으로서 확장할 수 있다. kube-apiserver의 여러 인스턴스를 실행하면서 이 인스턴스 사이의 트래픽을 분배할 수 있다.

    etcd

    consistent하고 high availibility한 key-value 저장소로, Kubernetes의 모든 클러스터 데이터의 백 스토어로서 사용된다.

    Kubernetes 클러스터가 etcd를 백 스토어로 사용한다면, 이 데이터에 대한 back up 플랜을 가지고 있어야 한다.

    kube-scheduler

    아무런 노드도 할당되지 않은 새롭게 생성된 Pod 들을 지켜보고 이들이 실행될 노드를 고르는 역할을 하는 컴포넌트이다.

    스케줄링 결정을 내리는데에는 다음과 같은 요소들이 고려된다. : 개별 및 집합 리소스의 요구사항, 하드웨어/소프트웨어/정책 제한 사항, affinity and anti-affinity specifications, 데이터 지역성, 워크로드 사이의 참조관계 그리고 데드라인

    kube-controller-manager

    컨트롤러 프로세스를 실행시키는 컴포넌트이다.

    이론적으로, 각 컨트롤러는 독립된 프로세스이지만, 복잡도를 줄이기 위해 그들은 하나의 바이너리로 컴파일되고 하나의 프로세스 내에서 실행된다.

    이 컨트롤러의 일부 종류들은 다음과 같다.

    • Node controller: 노드가 내려갔을 때에 대한 알림과 반응을 하는 역할을 한다.
    • Job controller: 일회성 태스크인 Job 객체를 탐지하고, 이 태스크를 완료하기 위한 pod를 생성한다.
    • Endpoints controller: Endpoint 객체를 생성한다 (즉, join Services & Pods)
    • Service Account & Token controller: 기본 계정과 새로운 네임스페이스에 대한 API 접근 토큰을 생성한다.

    cloud-controller-manager

    클라우드에 특화된 제어 로직을 내장한 컴포넌트이다.

    cloud controller manager는 클러스터를 cloud provider의 API와 연결해주고, 클러스터 내에서 클라우드 플랫폼과 통신하는 컴포넌트와 클러스터 내에서만 통신하는 컴포넌트와 분리한다. cloud controller manager는 cloud provider에 특화된 컨트롤러만 실행한다. Kubernetes를 온프레미스 환경에서 실행하거나 학습 목적으로 PC에서 실행한다면, 클러스터에 cloud controller manager는 존재하지 않는다.

    kube-controller-manager와 마찬가지로 cloud-controller-manager는 논리적으로 독립된 여러 컨트롤 루프를 하나의 바이너리로 결합하여 하나의 프로세스로 실행할 수 있게 한다. (하나 이상의 복제본을 실행함으로서) fault tolerance나 성능을 향상시키기 위해 수평적으로 확장 할 수 있다.

    아래의 컨트롤러들은 cloud provider에 의존성을 가지고 있을 수 있다.

    • Node controller: 노드가 응답을 멈춘 후 클라우드에서 노드가 삭제되었는지를 클라우드 프로바이더에게 확인하기 위해
    • Route controller: 기반이 되는 클라우드 인프라 내에 라우트를 셋업하기 위해
    • Service controller: 클라우드 프로바이더 로드밸런서를 생성, 업데이트, 삭제 하기 위해

     

    출처

    https://kubernetes.io/docs/concepts/overview/components/

     

    Kubernetes Components

    A Kubernetes cluster consists of the components that are a part of the control plane and a set of machines called nodes.

    kubernetes.io

     

Designed by Tistory.