Kubernetes

Kubernetes Cluster 구조

jih0ssang 2023. 9. 25. 10:25

참고 사이트: https://brunch.co.kr/@topasvga/1455

Kubernetes Cluster 구조

그림이 너무 예뻐욥

 

Kubernetes Cluster 구조는 크게 Master Node 1개, Slave Node들로 구성되어있다.

차별이 담긴 네이밍 논란으로 인해, 지금은 Control plane 1개, Worker node들로 불리운다.

Control Plane

  • 전체 Worker Nodes들의 관리자
  • Worker Node들 중에 문제가 생긴 노드의 작업을 다른 노드가 실행하는 등 전체 매니징하는 노드이다.
  • 구성 요소

etcd    (etcdctl)

  • 노드 관련 메타데이터 저장소
  • key-value 형태
  • 클러스터 및 리소스의 구성, 상태 정보가 담겨있음

API Server    (kube-api)

  • 쿠버네티스 클러스터 내 통신 담당
  • 외부에서 트래픽이 들어오면 가장 먼저 API Server에게 방문해서 어디로 가야하는지 알아냄

Scheduler    (kube-scheduler)

  • 새로 생성된 Pod를 감지하여 특정 Node로 배치 ( Pod는 Node 내에 배치되어 동작 )
  • 스케줄러가 없으면 Pod는 무한 대기상태이다.
  • Node를 모니터링하고 스케줄 할당한다.
  • Node 선정 방식
  1. Filter Node
    if. 해당 Pod가 CPU 10개가 필요하다면, CPU 10개 있는 Node들로만 필터링한다.
  2. Rank Nodes
    우선순위 함수를 이용해 0에서 10까지의 정수로 노드에 점수를 매긴다.
    if. CPU 10개가 필요한 Pod에 CPU 12 Node, CPU 16 Node가 있으면 CPU 16 Node가 우선순위가 높다.

Controller      (kube-controller-manager)

  • 시스템 내 구성요소의 상태를 지속적으로 모니터링하고 시스템 유지하는 역할
  • Nodes의 상태를 모니터링하고 응용프로그램이 계속 실행할 수 있도록 kube-apiserver를 통해 조치를 취한다.
  • ex) 다운된 노드가 없는지, 파드가 의도한 복제(Replicas) 숫자를 유지하고 있는지, 서비스와 파드는 적절하게 연결되어 있는지 etc.

Worker Nodes

실제로 Work하는 에이전트 들이다.

Kubelet

  • 노드 단위로 실행
  • 노드에서 컨테이너가 동작하도록 명령하는 역할
  • 예시
    상황:
    변경된 YAML 적용을 위해 kubectl 명령 사용
    1)  YAML이 kube-apiserver에게 전송
    2)  kube-apiserver가 kubelet에게 전송
    3)  kubelet은 이 YAML을 통해 전달된 파드를 생성/변경 후 YAML에 명시된 컨테이너 잘 실행되었는지 확인

Container Runtime  

  • 컨테이너를 실행하는데 사용되는 기본 소프트웨어 (ex. Docker, Rocket, Cryo)

Kube-proxy

  • 노드 간 통신 담당
  • 쿠버네티스 클러스터 내 네트워크 요청을 전달하는 역할
  • 외부 트래픽이 쿠버네티스 내 특정 파드를 바라보고 오더라도, 파드 IP는 매번 바뀌므로 정상적으로 도착 못할 수 있다.
    kube-proxy는 매번 변경된 IP 관리, 갱신하여 고정적으로 파드에게 접근할 수 있도록 전달하는 역할