쿠버네티스

쿠버네티스 클러스터 구조 알아보기

황동리 2024. 4. 10. 20:28
반응형

쿠버네티스 클러스터가 어떻게 구성되어 있는지 알아보겠습니다.


컨트롤 플레인

컨트롤 플레인은 클러스터를 제어하고 작동시킵니다. 또한 클러스터의 상태를 유지하고 제어하지만, 애플리케이션을 실행하지 않습니다.

구성 요소는 아래와 같습니다.

  • API 서버: 사용자, 컨트롤 플레인 구성 요소와 통신을 담당한다.
  • 스케줄러: 애플리케이션의 배포를 담당
    ex) 워커 노드의 상태를 확인하여 파드를 할당
  • 컨트롤러 매니저: 구성 요소 복제본, 워커 노드 추적, 노드 장애 처리 등과 같은 클러스터 단의 기능을 수행
  • ETCD: 클러스터 구성을 지속적으로 저장하는 분산 데이터 저장소

각 구성요소에 대해 조금 더 자세히 설명을 하면,

ETCD의 기능
: API 서버가 다시 시작되거나 실패하더라도 쿠버네티스에서 생성하는 모든 오브젝트(파드, 레플리케이션컨트롤러, 서비스, 시크릿 등)들을 유지하기 위해 클러스터 상태, 메타데이터, 매니패스트 등을 영구적으로 저장하는 저장소.

API 서버의 기능
: API 서버는 다른 모든 구성 요소와 kubectl 같은 사용자가 사용하는 중심 구성 요소 이다.
클러스터 상태를 조회하고 변경하기 위해 RESTful API로 CRUD(쓰기, 읽기, 갱신, 삭제) 인터페이스를 제공한다. 상태는 etcd 안에 저장을 합니다.

스케줄러의 역할
: 일반적으로 파드를 실행할 때, 클러스터 노드를 지정하지 않는 데, 이런 일은 주로 스케줄러가 담당하고 있습니다. API 서버의 감시 메커니즘을 통해 새로 생성될 파드를 기다리고 있다가 적당한 노드에 파드를 생성한다.
이 때, 스케줄러는 API 서버로 파드 정의를 갱신합니다. 즉 파드에 노드를 할당해준다.


워커 노드

워커 노드는 컨테이너화된 애플리케이션을 실행하는 시스템 입니다.

구성 요소는 아래와 같습니다.

  • 컨테이너 런타임: 컨테이너를 실행하는 Docker, containerd 등과 같은 서비스
  • kubelet: API 서버와 통신하고 노드의 컨테이너를 관리
  • kube-proxy: 애플리케이션 구성 요소 간에 네트워크 트래픽을 로드밸런싱 한다.

각 구성 요소들에 대해 좀 더 자세히 알아보면,

kubelet
: kubelet은 워커 노드에서 실행하는 모든 것을 담당하는 구성 요소입니다. kubelet이 하는 일은 크게 3가지 정도 입니다.

  1. kubelet이 API서버에 실행 중인 노드를 리소스로 만들어서 전달하고, API 서버를 모니터링하여 해당 노드에 파드가 스케줄링 되면 파드 안에 컨테이너를 구성해 시작합니다.
  2. 실행 중인 컨테이너를 모니터링하여 상태, 이벤트, 리소스 사용량을 API 서버에 보고합니다.
  3. API 서버에서 파드가 삭제되면 컨테이너를 정지하고 파드가 종료된 것을 서버에 통보합니다.

kube-proxy
: kube-proxy는 서비스의 IP와 포트로 들어온 접속(혹은 파드가 없는 서비스 엔드포인트)을 파드로 연결하시켜주는 역할을 합니다.

서비스가 둘 이상의 파드에서 지원되는 경우 프록시는 파드 간에 로드 밸런싱도 합니다.



반응형