본문 바로가기

K8S

[K8S] 쿠버네티스 기본 개념 - 쿠버네티스를 구성하는 컴포넌트

쿠버네티스의 컴포넌트

쿠버네티스는 기본적으로 배포가되면 클러스터를 가지게 된다.

쿠버네티스 공식문서에서 소개하는 쿠버네티스 컴포넌트

 

클러스터

쿠버네티스에서 클러스터는 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 워커노드와 내부 요소들을 제어하는 컨트롤 플레인이라고 하는 마스터노드로 이루어져 있다.

 


 

노드 (워커 노드)

쿠버네티스의 작업 장비로 애플리케이션의 구성요소인 파드에 컨테이너를 배치하고 실행함으로 워크로드를 구동한다.

노드는 클러스터에 따라 가상 또는 물리적 머신일 수 있다.

컨트롤 플레인에 의해 관리되며 파드를 실행하는데 필요한 서비스를 포함한다.

노드의 컴포넌트

노드의 컴포넌트는 동작중인 파드를 유지시키며 쿠버네티스의 런타임 환경을 제공하고, 모든 노드 상에서 동작한다.

  • kubelet - 각 노드에서 실행되는 에이전트, podSpec에 따라 파드와 파드 내의 컨테이너가 확실하게 동작하도록 관리한다. 단 쿠버네티스를 통해 생성되지 않는 컨테이너는 관리하지 않는다.
  • kube-proxy - 노드의 네트워크 규칙을 유지 관리한다. 네트워크 규칙을 통해 내부 네트워크 세션이나 클러스터 바깥에서 파드로 네트워크 통신할 수 있도록 해준다.
    운영체제에 사용가능한 패킷 필터링 계층이 있을경우 이를 사용하고, 그렇지 않으면 트래픽 자체를 그대로 포워딩 한다.
  • 컨테이너 런타임 - 컨테이너 실행을 담당하는 컴포넌트,
    * 쿠버네티스는 containerd, CRI-O 같은 컨테이너 런타임 및 모든 쿠버네티스 CRI 구현체를 지원한다.

 


 

컨트롤 플레인 (마스터 노드)

전반적인 쿠버네티스의 기능 제어 담당한다.

컨테이너의 라이프사이클을 정의, 배포, 관리하기 위한 API와 인터페이스들을 노출하는 컨테이너 오케스트레이션 레이어로 워커노드와 클러스터 내 파드들을 관리한다.

컨트롤 플레인의 컴포넌트

  • api서버 - 쿠버네티스의 api를 관리하고 노출하는 컴포넌트, 관리자는 직접적으로 쿠버네트와 인터페이스를 api서버를 통해 하게된다.
  • etcd - 모든 클러스터 데이터를 담는 쿠버네티스 저장소, 공식문서에 의하면 etcd 를 저장소로 사용할 경우 데이터 백업을 필수로 권하고 있다 
  • 스케줄러 - 노드에 배정되지 않은 새로운 파드를 감지하여 여러가지 요소에 의해 실행할 노드를 선택하는 컴포넌트
  • kube 컨트롤러 매니저 - 컨트롤러 프로세스를 실행하는 컴포넌트
    • 컨트롤러 - 클러스터의 상태를 관찰 후 필요한 경우 생성, 변경을 요청하는 컨트롤 루프, 현재 클러스터의 상태를 의도한 상태에 가깝게 이동해준다. 컨트롤러의 종류 및 역할은 다음과 같다.
      • 노드 컨트롤러 - 노드가 다운되었을 때 통지와 대응에 관한 관리를 한다.
      • 잡 컨트롤러 - 일회성 작업을 나타내는 잡 오브젝트를 감시한 다음 해당 작업이 완료될 때까지 동작하는 파드를 생성
      • 엔드포인트 컨트롤러 - 서비스와 파드를 연결
      • 서비스 어카운트 & 토큰 컨트롤러 - 새로운 네임스페이스에 대한 기본 계정과 API 접근 토큰을 생성
  • 클라우드 컨트롤러 매니저 - 클라우드별 컨트롤 로직을 포함하는 컴포넌트. 이를 통해 클러스터를 클라우드 공급자의 API 에 연결하고, 해당 클라우드 플랫폼과 상호작용하는 컴포넌트와 클러스터와 상호 작용하는 컴포넌트를 구분할 수 있게 해준다. 
    클라우드 제공자 전용 컨트롤러만 실행하고 자신의 사내 또는 PC 내부의 환경에서는 클러스터에 클라우드 컨트롤러 매니저가 없다.
    • 컨트롤러 - 클라우드 컨트롤러 매니저의 컨트롤러들은 클라우드 공급자의 의존성을 가질 수 있다.
      • 노드 컨트롤러 - 노드가 다운되었을 때 상태를 클라우드 공급자에 확인
      • 라우트 컨트롤러 - 기본 클라우드 인프라에 경로를 구성
      • 서비스 컨트롤러 - 클라우드 공급자 로드밸런서를 생성, 업데이트 및 삭제