DevOps/Kubernetes

[Kubernetes] 쿠버네티스 컴포넌트

TTOII 2023. 2. 7. 02:20
728x90

쿠버네티스 클러스터의 컴포넌트

  • 마스터 컴포넌트
    • etcd
      • 쿠버네티스 클러스터 구성을 유지하는 분산 KVS. 데이터를 Key-Value형으로 관리한다.
      • 어떤 파드를 어떻게 배치할지와 같은 정보를 갖고 있어서 API Server가 이를 참조한다.
      • 매니페스트의 내용이 저장되어 있다고 생각하면 좋을 것이다.
      • 분산 시스템에서 노드 사이의 상태를 공유하는 합의 알고리즘 중 하나인 raft 알고리즘을 구현한 것.
      • 쿠버네티스에서는 필요한 모든 데이터를 저장하는 데이터베이스 역할을 한다.
      • 마스터 서버에서 분리시킬 수도 있다.
    • kube-apiserver
      • 쿠버네티스 클러스터의 API를 사용할 수 있도록 하는 컴포넌트
      • 쿠버네티스의 리소스 정보를 관리하기 위한 프런트엔드 REST API. 각 컴포넌트로부터 리소스 정보를 받아 데이터스토어(etcd)에 저장하는 역할을 갖고 있다.
      • 클러스터로의 요청이 유효한지 검증한다.
      • API Server에 액세스 하려면 kubectl 명령을 사용한다. 또 애플리케이션 안에서 API Server를 호출할 수도 있다.
      • 수평적으로 확장할 수 있도록 설계했으므로 서버 여러 대에 여러 개의 kube-apiserver를 실행해 사용할 수 있다.
    • kube-scheduler
      • 현재 클러스터 안에서 자원 할당이 가능한 노드 중 알맞은 노드를 선택해 새롭게 만든 파드를 실행한다.
    • kube-controller-manger(cm)
      • 쿠버네티스 클러스터의 상태를 감시하고 본래 되어야 할 상태를 유지하는 백엔드 컴포넌트.
      • 정의 파일에서 정의한 것과 실제 노드나 컨테이너에서 작동하고 있는 상태를 모아서 관리한다.
      • 스케일아웃을 관리한다.
    • cloud-controller-manger(ccm)
      • 쿠버네티스의 컨트롤러들을 클라우드 서비스와 연결해 관리하는 컴포넌트
      • 자신의 사내 또는 PC 내부의 학습 환경에서 쿠버네티스를 실행 중인 경우 ccm이 존재하지 않는다.
      • 노드 컨트롤러 : 노드가 응답을 멈춘 후 클라우드 상에서 삭제되었는지 판별하기 위해 클라우드 제공 사업자에게 확인하는 것
      • 라우트 컨트롤러 : 기본 클라우드 인프라에 경로를 구성하는 것
      • 서비스 컨트롤러 : 클라우드 제공 사업자 로드밸런서를 생성, 업데이트 그리고 삭제하는 것

 

  • 노드 컴포넌트
    • kubelet
      • 모든 노드에서 실행되는 에이전트
      • 파드 정의 파일에 따라 컨테이너를 실행하거나 스토리지를 마운트 하는 기능을 갖고 있다.
      • 노드의 Status를 정기적으로 감시하는 기능을 갖고 있어 정기적으로 API Server에게 통지한다.
      • 파드 컨테이너들의 실행을 직접 관리한다.
    • kube-proxy 
      • 쿠버네티스는 클러스터 안에 별도의 가상 네트워크를 설정하고 관리한다.
      • 호스트의 네트워크 규칙을 관리하거나 연결을 전달할 수도 있다.
    • Container Runtime
      • 실제로 컨테이너를 실행시킨다.
      • docker, contianerd, cri-o 등

 

 

 

kubelet이란

Kubelet이란 각 노드에서 실행되는 기본 Node Agent이다.

아키텍처에 보이는 것 처럼 api-server와 통신하며, PodSpec을 사용해 PodSpec에 기술된 컨테이너들이 정상적으로 작동되도록 돕는다.

Worker Node가 배라면 Kubelet은 선장이라고 할 수 있다.

관리자가 Pod을 배포하려고 할 경우,

1) api-server를 비롯한 컨트롤 플레인의 컴포넌트들은 명령에 대한 인가 및 인증을 수행하고,

2) 선언된 상태와 일치하지 않는 Pod가 있는지 확인하고,

3) 어떤 Node에 Pod를 배치하면 좋을지 결정한다.

어디에 배치할지는 Master Node의 컴포넌트들 정확히는 Scheduler가 결정하지만 실제로 Container runtime(Docker 등)에 배치를 명령하는 것은 Kubelet의 역할이다.

만약, Worker Node에서 동작중인 Kubelet이 정지되면 컨테이너 런타임에 요청을 보내는 역할을 수행해주는 컴포넌트가 정지되었으므로 Pod 생성, 삭제 등이 해당 Node에서 정상적으로 수행되지 않는다.

 

 

 

쿠버네티스에서 Pod를 생성할 때 시퀀스 다이어그램

 

 

 

 

📌 참고

 

728x90