DevOps/Kubernetes

[쿠버네티스 | Kubernetes] Cluster Architecture

yujindonut 2023. 12. 13. 17:49
728x90

 

쿠버네티스 클러스터

클러스터란 컨테이너 형태의 애플리케이션을 호스팅하는 물리/가상 환경의 노드들로 이루어진 집합.

 

물리머신, 가상 머신, 온프레미스, 클라우드에 구애 받지 않고 머신 그룹 전체에서 컨테이너를 예약하고 실행할 수 있다.

쿠버네티스 클러스트는 용도에 따라 Worker Node와 Master Node로 구분된다.

Worker Node

  • 각기 다른 컨테이너들이 선적된 컨테이너 선의 역할이다. 각기 다른 목적과 기능으로 세분화된 컨테이너들이 실제 배치되는 노드를 의미한다.

Master Node

  • 컨테이너 선단을 지휘하는 통제함의 역할. 대규모 컨테이너를 운영하려면 각 워커노드들의 가용 리소스 현황을 고려하여 최적의 컨테이너 배치와 모니터링, 컨테이너에 대한 추적 관리가 필요해진다

컨트롤 플레인(Control plane)

  • 전체의 워크로드 리소스 등 주요 요소들을 배포하고 제어하는 역할. 
  •  마스터 노드에 포함되어 해당되어있다. 

etcd 

  • 클러스터 안의 각 구성요소들에 대한 정보가 key-value 형태로 저장된 데이터베이스
  • 쿠버네티스에서는 클러스터에 노드가 몇개인지, 각 파드들이 어떤 컨테이너를 어떤 노드에서 어떤식으로 동작하고 있는지 etcd에 기록된다. kubelctl 명령을 통해 조회 가능한 모든 정보는 etcd를 거쳐오며, 제어 명령을 통해 클러스터에 변화가 적용되었다면 그 역시 etcd에 업데이트 된다.

스케줄러 (kube-scheduler)

  • 애플리케이션 구동에 필요한 각 컨테이너에 대해 클러스터 내 최적의 배포를 수행하는 스케줄러
  • kubelet이 Pod를 생성한다. 일정 관리자는 어떤 포드를 어디(Node)에 넣을지만 결정한다. 

kube-controller-manager

  • Node, Deployment, Service Account 등 클러스터에서 구동되는 리소스들을 유지 관리하는 프로세스들의 집합
  • Node-Controller 
  • Replication-Controller

DNS 서버 (Core DNS)

  • 클러스터 안에서 특정 도메인을 찾을 때 사용되는 네임 서버

API 서버 (kube-api-server)

  • 클러스터 구성 요소들의 상호 통신에 필요한 쿠버네티스 API를 관리하는 컴포넌트
  • 클러스터 안의 내부 통신을 담당한다. Manager Node, Worker Node 관리한다.
  • 주기적으로 kubelelt으로부터 상태보고서를 가져온다. 컨테이너 상자의 모니터링을 위해서
  •  순서
    1. Authenticate User
    2. Validate Request
    3. Retrieve data
    4. Update ETCD -> 유일하게 etcd와 상호작용함
    5. Scheduler -> api server를 이용해 각 영역의 클러스터에서 업데이트를 완료한다.
    6. Kubelet -> api server를 이용해 각 영역의 클러스터에서 업데이트를 완료한다.
  • 각 Node 영역 : Pod들을 구성하기 위한 구성 요소

kubelet

  • 클러스터의 각 노드에서 API 서버를 통해 들어오는 신호를 모니터링하고 파드에서 컨테이너가 기능대로 정상 동작 하는지 관리하는 에이전트
  • 배의 선장과 같은 역할을 한다. 
  • 무리의 일원이 되기 위해 필요한 모든 서류를 처리한다.
  • 마스터 node의 유일한 연락망이다. 
  • 운항 일정 관리자의 지시에 따라서 선박에 컨테이너를 싣거나 내립니다.
  • 선박과 컨테이너 상태를 일정간격으로 보고한다. 
    1. Register Node
    2. Create Pod
    3. Monitor Node & Pod -> Api server 에 주기적으로 보고한다. 

kube-proxy

  • 클러스터의 각 노드에서 실행되는 네트워크 프록시 서비스
  • Pod Network : pod끼리 소통이 가능하다. 하지만 pod의 ip주소는 항상 바뀐다. 
  • 효율적으로 다른 pod에 접속하기 위해서 응용프로그램을 노출할 service를 생성하고 액세스 가능해짐.
  • Service 메모리가 없는 가상 구성요소이다. 
  • kube-proxy는 쿠버네티스 클러스터의 각 노드에서 실행되는 프로세스이다. 새서비스를 찾아주는 역할.
  • 새서비스가 생성될때마다 각 노드에 적절한 규칙을 만들어 그 서비스로 트래픽을 전달한다.

container runtime engine

  • 노드에 배포된 파드 내 컨테이너들을 구동시키는 엔진 
  • Pod : 클러스터 안에서 배포되는 가장 작은 단위의 객체로 하나 이상의 컨테이너를 포함하고 있다. 

Controller

Node-Controller 

  1. Watch Status
  2. Remediate Situation
  3. Node Monitor Period = 5s
  4. Node Monitor Grace Period = 40s -> node의 신호가 다시 잡히기까지 40초의 시간일 걸린다.
  5. Pod Eviction Timeout = 5m -> 다시 pod가 뜨기까지 

 

728x90