HyeLog

쿠버네티스의 구성 요소 (쿠버네티스 아키텍처) 본문

DevOps/Kubernetes

쿠버네티스의 구성 요소 (쿠버네티스 아키텍처)

shj718 2023. 6. 2. 12:41

1️⃣ 쿠버네티스의 구성 (Pod, Cluster, Node란?)

Node

  • Node는 컨테이너화된 애플리케이션을 실행하는 가상 또는 물리적 머신
  • 가장 흔한 Container Runtime은 Docker지만 다른 Container Runtime도 지원 (CRI-O, Containerd 등)
  • 워커 노드의 Kubelet은 다른 워커 노드 / 마스터 노드와 소통함

Cluster

  • Cluster는 Node들의 집합
  • Cluster는 Master노드(들) + Worker노드(들)로 이루어짐 (각각 최소 하나 이상)

Pod

  • 쿠버네티스의 기본 실행 단위, 배포 가능한 최소 단위
  • 클러스터에서 실행 중인 프로세스를 나타냄
  • Pod는 하나 이상의 컨테이너로 구성됨 (Pod 내의 컨테이너끼리 스토리지, 네트워크 네임스페이스 공유)
  • Pod는 애플리케이션의 컨테이너(또는 경우에 따라 여러 컨테이너), 스토리지 리소스, 고유한 네트워크 IP(Internal IP 주소) 및 컨테이너 실행 방법을 제어하는 옵션을 캡슐화함
  • Pod의 IP 주소는 임시적임 (새로 생성 및 배포될때마다 변경됨)

 

2️⃣ Master 노드 / Worker 노드의 구성

Master 노드

  • API Server : ‘쿠버네티스 컨트롤 플레인의 프론트 엔드’라고 할 수 있다. API Server는 쿠버네티스 클러스터로 들어오는 요청을 가장 앞에서 접수하는 역할을 한다. 예를 들어 쿠버네티스 커맨드 라인 도구인 kubectl을 사용해 각종 명령을 수행할 경우 이 명령은 API Server로 전송된다. 이렇게 전달된 요청에 대하여 API Server는 이 요청의 처리 흐름에 따라 적절한 컴포넌트로 요청을 전달하는 역할까지 맡고 있다. (비유하자면, 회사(본사)의 안내데스크💁‍♀️)
  • Scheduler : 새로 생성된 Pod를 어떤 Node에 할당할지 결정(= 스케줄링)한다. 스케줄링을 위해 노드 및 파드의 각종 요구사항과 제약사항을 종합적으로 판단한다. (비유하자면, 회사의 인사 담당 부서🧚‍♀️)
  • Controller Manager : 다운된 노드가 없는지, 파드가 의도한 복제(Replicas) 숫자를 유지하고 있는지, 서비스와 파드는 적절하게 연결되어 있는지, 네임스페이스에 대한 기본 계정과 토큰이 생성되어 있는지를 확인하고 적절하지 않다면 적절한 수준을 유지하기 위해 조치하는 역할을 하고 있습니다. (비유하자면, 회사에서는 목표 수준을 달성하기 위해 끊임없이 확인하고, 목표치에 미달하는 부분에 대해서는 대책을 수립하고, 목표 달성한 후에도 이를 유지하려면 책임감 있는 관리자💂‍♂️가 필요하다. 쿠버네티스에서 이 역할을 하는 컴포넌트가 controller manager이다. )
  • Etcd : 클러스터의 모든 설정, 상태 데이터를 저장하는 저장소다. 데이터를 키-값(key-value) 형태로 분산해서 저장한다. (비유하자면, 회사의 금고💰)

Worker 노드

  • Kubelet : 노드에 할당된 Pod의 생명주기를 관리한다. Pod를 생성하고 Pod 안의 컨테이너에 이상이 없는지 확인하면서 주기적으로 Master 노드에 상태를 전달한다. 실제로 우리가 Worker 노드를 관리하기 위해 내리는 명령은 kubelet을 통해 수행된다고 볼 수 있다. 우리가 Pod를 관리하기 위해 작성하는 YAML을 클러스터에 적용하기 위해 kubectl 명령어를 사용할 때, 이 YAML은 API Server로 전송된 후 kubelet으로 전달된다. (비유하자면, 회사(지사)의 안내데스크💁‍♀️)
  • Kube-proxy : Pod으로 연결되는 네트워크를 관리(DNS 기반)하는 역할을 한다. 쿠버네티스는 Pod IP가 매번(배포할 때마다) 바뀌는데서 오는 어려움을 해결하기 위해 오브젝트를 통해 고정적으로 Pod에 접근할 수 있도록 하는 방법을 제공한다. 그리고 서비스로 들어온 요청이 Pod에 실제로 접근할 수 있는 방법을 관리한다. 이때 이 관리를 담당하는 컴포넌트가 kube-proxy이다. 즉, Pod의 IP는 매번 변하지만 kube-proxy가 이 Pod에 접근할 수 있는 방법을 그때마다 관리하고 갱신하며, 서비스 오브젝트는 이 정보를 사용하여 파드가 외부에서 접근할 수 있는 경로를 제공한다.
  • Pod : (위에 설명 있으므로 생략)
  • Container Runtime : Pod에 포함된 컨테이너 실행을 실질적으로 담당하는 애플리케이션을 의미한다. Docker, CRI-O, Containerd 등이 있다.

 

 

 

참고하면 좋을 레퍼런스)

쿠버네티스 시작하기 - Kubernetes란 무엇인가?

쿠버네티스 알아보기 3편: 쿠버네티스를 이루고 있는 여러 가지 구성 요소 | 인사이트리포트 | 삼성SDS

 

'DevOps > Kubernetes' 카테고리의 다른 글

[Kubernetes] Cgroup 이란?  (0) 2023.05.08