Kubernetes - 마스터/워커 구조

choko's avatar
Jun 29, 2024
Kubernetes - 마스터/워커 구조

Kubernetes Master - Worker

  • 쿠버네티스란
    • 컨테이너 오케스트레이션으로 컨테이너화된 애플리케이션의 배포, 관리, 확장을 자동화해주는 플랫폼이다.
 
  • 마스터
    • kube-apiserver → 모든 요청을 처리하는 마스터 핵심 모듈
    • etcd → key-value 분산 데이터 저장소
    • kube-scheduler → pod를 어떤 노드에 할당할 것인가?
    • kube-controller-manager → pod가 잘 생성되어 있는가? 생성 요청이 들어오나? 죽어있는 pod는 없나?
  • 워커
    • kubelet → 워커(자신)에 할당된 pod 생명주기 관리
    • kube-proxy → pod로 연결되는 네트워크 관리
  • pod 생성 과정
    • kube-apiserver가 pod 생성 요청 (! 밑의 모듈들은 모두 kube-apiserver와만 통신한다)
    • kube-contoller는 pod 라이프사이클 감시 시작
    • kube-scheduler가 pod 할당 노드 선택
    • 워커의 kubelet은 pod가 잘 할당됐는지 확인, 이후 kube-apiserver에 지속적으로 pod 상태 전달

 
 
 

마스터 - 노드 구조

  • 쿠버네티스는 전체 클러스터를 관리하는 마스터와 컨테이너가 배포되는 노드로 구성되어 있다.
  • 모든 명령은 마스터의 API 서버를 호출하고 노드는 마스터와 통신하면서 필요한 작업을 수행한다.
    • Master
      • 마스터 서버는 모듈 확장성을 고려하여 기능별로 쪼개져 있다.
    • Worker
      • 워커서버는 마스터 서버와 통신하면서 필요한 Pod를 생성하고 네트워크와 볼륨을 설정한다.
    • Kubectl
      • API 서버는 json 또는 protobuf 형식을 이용한 http 통신을 지원한다.
      • 통신 명령을 위해 kubectl 이라는 명령행 도구를 사용한다.
 
 
 

마스터 구성요소

notion image
  • API 서버(kube-apiserver)
    • 모든 요청을 처리하는 마스터의 핵심 모듈
    • 원하는 상태를 key-value 저장소(etcd)에 저장하고 저장된 상태를 조회하는 일을 한다.
      • API 관리, 요청 처리, 내부 제어 루프 처리
  • etcd(분산 데이터 저장소)
    • 클러스터 안의 각 구성요소들에 대한 정보가 키-값 형태로 저장된 데이터베이스
    • RAFT 알고리즘(여러 서버들 중 일부에 장애가 발생하더라도 제 기능을 유지하도록 하는 합의 알고리즘)을 사용
    • 여러 개로 분산하여 복제할 수 있기 때문에 안정성이 높고 속도도 빠르다.
  • 스케줄러(kube-scheduler)
    • 할당되지 않은 Pod를 여러 가지 조건에 따라 적절한 노드 서버로 할당해주는 모듈
      • → 파드를 어느 노드에 배치할 지 결정하는 프로세스이다.
  • 큐브 컨트롤러(kube-controller-manager)
    • 쿠버네티스에 있는 거의 모든 오브젝트의 상태를 관리하는, 다양한 역할을 하는 모듈
  • 클라우드 컨트롤러(cloud-controller-manager)
    • AWS, GCE, Azure 등 클라우드에 특화된 모듈, 노드 추가/삭제 및 로드 밸런서 연결 등을 할 수 있음, 확장성이 좋음
 
 

워커(worker) 구성요소

notion image
  • 큐블릿(kubelet)
    • 노드에 할당된 Pod의 생명주기를 관리한다.
    • Pod를 생성하고 Pod 안의 컨테이너에 이상이 없는지 확인하면서 주기적으로 마스터에 상태를 전달한다.
  • 프록시(kube-proxy)
    • Pod으로 연결되는 네트워크를 관리한다.
    • Service에서 들어온 내/외부 트래픽을 어느 파드로 포워딩할 것인지에 대한 관리
      • 이를 위해 kubeadm은 모든 노드에 하나씩의 kube-proxy를 daemonset으로 배포한다.
 
 
 

Pod이 생성되는 과정

notion image
  • 각 모듈은 서로 통신하지 않고 오직 API Server 이랑만 통신한다.
  • API Server를 통해 etcd에 저장된 상태를 체크하고, 현재 상태와 원하는 상태가 다르면 필요한 작업을 수행한다.
 
kubectl
  • ReplicaSet 명세를 yml파일로 정의하고 kubectl 도구를 이용하여 API Server에 명령을 전달
  • API Server는 새로운 ReplicaSet Object를 etcd에 저장
Kube Controller
  • Kube Controller에 포함된 ReplicaSet Controller가 ReplicaSet을 감시하다가 ReplicaSet에 정의된 Label Selector 조건을 만족하는 Pod이 존재하는지 체크
  • 해당하는 Label의 Pod이 없으면 ReplicaSet의 Pod 템플릿을 보고 새로운 Pod(no assign)을 생성. 생성은 역시 API Server에 전달하고 API Server는 etcd에 저장
Scheduler
  • Scheduler는 할당되지 않은(no assign) Pod이 있는지 체크
  • 할당되지 않은 Pod이 있으면 조건에 맞는 Node를 찾아 해당 Pod을 할당
Kubelet
  • pod에서 container가 확실하게 동작하도록 관리
  • Kubelet은 자신의 Node에 할당되었지만 아직 생성되지 않은 Pod이 있는지 체크
  • 생성되지 않은 Pod이 있으면 명세를 보고 Pod을 생성
  • Pod의 상태를 주기적으로 API Server에 전달
Share article

Tom의 TIL 정리방