내가 생각하는 쿠버네티스. 줄여서 k8s라 부르는 용어에 대한 정의는 아래와 같다.

 

컨테이너 관리를 위한 오픈소스 플랫폼 

 

좀더 다양한 해석이 있을 수 있지만,

아직 아무것도 모르는 단계에서 '컨테이너 관리' 에 집중하려 한다.

 


기능

 

쿠버네티스 공식문서에 따르면, 기능은 아래와 같다.

 

  • 서비스 디스커버리 ( 서비스에 매핑된 IP와 클래스를 찾아줌 )
  • 로드 밸런싱 ( 컨테이너에 대한 트래픽을 분산 )
  • 오케스트레이션 ( 스토리지 , 네트워킹 등 리소스에 대한 관리 )
  • Roll Out & Roll back ( 자동 배포 및 특정버전 롤백기능 )
  • bin 패키징 ( 필요한 컨테이너 리소스를 효율적으로 부여 )
  • 셀프 힐링 ( 기능 체크를 통한 정상여부 확인 및 Fail된 컨테이너에 대해 자동으로 재시작 )
  • 보안 ( 토큰 및 SSH 키 등의 관리 )

 

 

구성요소

 

공식 문서상 아키텍처는 아래 그림과 같다.

 

https://kubernetes.io/ko/docs/concepts/overview/components/

 

봐도 모르는 상태라 

 

먼저 구성요소들에 대해 정리하고, 흐름을 하나씩 파악해보려한다.

 

1) Pod

 

쿠버네티스에서 배포를 하는 최소단위. 하나 이상의 컨테이너를 포함한다.

 

이전 도커에서는, 컨테이너 단위로 배포를 했었으나 쿠버네티스에는 스토리지 및 네트워크가 포함된다.

=> IP:Port 및 디스크 볼륨 공유가능

 

물론 여러개의 컨테이너도 포함될 수 있으며, 배포 시 Pod 단위로 넘어간다

 

https://kubernetes.io/ko/docs/tutorials/kubernetes-basics/explore/explore-intro/

 

 

2) Node

 

이러한 하나 이상의 Pod들이 모여, 노드를 구성한다.

 

노드는 Pod가 배포되고 수행되는 최소한의 하드웨어 단위이며,

 

물리적 혹은 가상화된 개별 머신으로 생각하면 된다.

 

아래 아키텍처를 확인해보면 노드에 Kubelet과 k-proxy가 붙어있다.

 

이에 대해 확인해보자.

 

 

2-1 kubelet

 

위 그림상, Control Plane ( Master Node )와 통신하며 작업을 관리하는 에이전트이다.

 

2-1 kube-proxy

 

iptable 관리 및 네트워크 분산이라고 나와있으나

 

간단하게 Control Plane ( Master Node )와 통신 자체를 담당하는 네트워크 관리 담당이다.

 

 

 

3) Control Plane

 

Master Node라고도 불리며, 클러스터에 대한 관리를 담당함. 이벤트 감지 및 처리, 스케쥴링 등을 수행한다.

 

 

3-1 API Server

 

사용자가 접근할수 있도록, HTTP / REST 등의 API를 제공하며

 

컨트롤 플레인 內 컴포넌트나 Node와 통신하며 요청을 수행함.

 

 

3-2 etcd

 

고가용성 데이터 저장소.

 

key - value 형식이며, 클러스터에 대한 정보등을 저장한다.

 

( ex: Pod 생성시 정보 기록 . 실행 Node , 상태값 등 )

 

https://www.kangwoo.kr/2020/09/05/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4%EC%9D%98-etcd-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0/

 

3-2 Scheduler

 

새로 생성된 Pod를 감지하고, 어느 Node에 부여할지 결정

 

3-3 Kube Controller Manager

 

클러스터 內 오브젝트를 관리 ( 노드, 레플리카 셋, 서비스 등 )

 

 

 

※ Cloud Controller Manager ( c-c-m )

 

AWS, Azure 등 클라우드에 특화된 모듈로,

 

쿠버네티스 컨트롤러들을 클라우드에서 관리할 수 있게 연결해준다.

 

로컬환경에서 VDI로 구성할거라, 자세히는 다루지 않을 예정

 


 

 

정리

 

 

사용자가 Pod를 만드는 상황을 통해, 흐름을 정리해보려 한다.

 

1) API 서버로 Pod 생성 요청

 

 

2) API 서버에서 etcd로, 요청된 Pod 의 Manifest 입력

 

3) API 서버에서 컨트롤러 매니저에 Pod 생성 요청

 

생성된 Pod는 다시 API Server로 전달되고, 이 Pod 정보를 다시 etcd에 입력

 

4. API 서버에서 스케쥴러에 Pod 할당 요청

 

스케쥴러는 할당 가능한 Worker Node를 회신하고, API 서버는 etcd에 입력

 

 

5) 할당받은 Node에 Pod 생성 요청

 

Kube Proxy를 통해 네트워크 통신을 하고, Kubelet 에서 Node에 Pod를 띄운다.

 

Kubelet은 Pod 상태를 주기적으로 회신하고, API Server는 etcd에 기록한다.

 

 

+ Recent posts