본문 바로가기
컨테이너 오케스트레이션

Devops Day 51 (5.17) 컨테이너 오케스트레이션_쿠버네티스 주용 개념

by Jackykim 2023. 5. 18.

쿠버네티스와 컨테이너 오케스트레이션

 

쿠버네티스(Kubernetes, k8s)란?
- 쿠버네티스(Kubernetes, k8s)란오픈소스로 만들어진 컨테이너 오케스트레이션 도구

- 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링하는 등의 관리 기능을 제공

- 각기 다른 환경(온프레미스 서버, VM, 클라우드)에 대응 가능

 

무엇을 오케스트레이션 한다는 것인가?
즉 컨테이너 오케스트레이션 도구는, 수십~수백 개의 컨테이너를 관리하고자 할 때 보다 더 잘 관리하기 위한 툴입니다, 단 어떻게 수십~수백 개의 컨테이너가 생길 수 있을까요?
- 이는 아키텍처의 트렌드가 모놀리식에서 마이크로서비스로 바뀌고,

- 이로 인해서 컨테이너의 개수가 증가하고,

- 여기에 확장성을 고려해 스케일링까지 더할 경우에 발생할 수 있는 일입니다.

예 : 5개 마이크로서비스가 운영하는 조직이 3팀이 있으며 2개 이상 복제본이 있는 경우 30개의 (5 x 3 x 2) 컨테이너가 존재 및 관리해야 합니다.

 

언제 사용하지 말아야 할까?
- 여러 Tier(단계)로 나뉘지 않은 모놀리식 아키텍처에서는 적합하지 않습니다.

- 모놀리식 아키텍처는 먼저 마이크로서비스 분해 전략을 세우는 것이 우선입니다.

- 고작 서너 개에 불과한 컨테이너만을 다루려면 적합하지 않습니다.

- 서너 개의 불과한 컨테이너는 docker-compose로도 충분합니다.

- 비교적 단순한 아키텍처에, 스케일링이 필요하지 않은 경우에는 적합하지 않습니다.

- 이후 트래픽이 증가하거나, 스케일링이 필요한 경우, 서버리스 서비스를 사용하면 다소 저렴한 가격에 관리형 서비스를 이용할 수 있으며, AWS 내에서도 오토 스케일링과 같은 관리형 서비스가 배포 환경에서 제공됩니다.

 

언제 사용해야 하는가? 어떤 기능이 있는가?
AWS를 배웠을 때와 비슷한 기능을 제공합니다.

- 마이크로서비스를 컨테이너 방식으로 운영하는 조직이 확장성을 고려해야 할 때

- 무중단 서비스, 즉 고가용성을 제공해야 할 때

- 그 밖에 다양한 기능들: 자가 치유, 배치 실행, 구성 관리, 로드 밸런싱...

 

AWS와 같은 퍼블릭 클라우드 공급자에서도 비슷하게 제공합니다. 그러나 여기에는 비용의 문제에서 자유로울 수 없습니다. 이를 피하기 위해 쿠버네티스를 사용하기도 합니다.

쿠버네티스를 사용하는 사람들은 다음과 같이 사용합니다.

- 쿠버네티스를 이용해 온프레미스 상에서 (사설) 클라우드 인프라를 구성하고,

- 저렴한 클라우드 서비스의 일부분을 도입하여 하이브리드 형태로 구성하기도 하며,

- 필요에 따라 쿠버네티스로 구성한 인프라를 통째로 AWS 등에 마이그레이션 합니다. (이식성)

- 주요 퍼블릭 클라우드 공급자들은 관리형 쿠버네티스를 지원합니다. 예) AWS EKS

 

쿠버네티스 작동 원리

클러스터는 최소 하나 이상의 제어판(Control Plane) 컴포넌트와, 이것과 연결된 몇개의 워커 노드로 구성되어 있습니다.

 

노드 : 워커 노드는 kubelet이라는 프로세스가 돌아가고 있는데, 이 kublet은 다른 노드와 서로 통신하거나 컨테이너를 실행하는 등의 태스크를 실행할 수 있게 합니다.

 

포드 (Pod) : 워커 안에는 한개 이상의 컨테이너가 자리잡고 있으며, 즉 워커 노드는 실제로 애플리케이션이 실행되고 있는 곳이라고 할 수 있습니다. 컨테이너의 작동 정보를 특별히 파드(Pod)라는 이름으로 부릅니다.

 

제어판 (Control Plane) : 관리를 위해 필요한 프로세스들은 전부 제어판 컴포넌트에 있습니다. 제어판 컴포넌트는 클러스터가 잘 작동할 수 있게 돕습니다.

 

API 서버 (Kube-apiadvisor) : 제어판 컴포넌트에 있는 여러가지 프로세스이며 API 서버는 모든 클러스터 관리의 입구로서, 명령을 내릴 수 있는 관문입니다.

 

컨트롤러 매니저 (Kube-controller-manager) : 클러스터에서 무슨 일이 발생하는지를 추적하는 역할을 합니다. 예를 들어 컨테이너가 죽거나 재시작되었을 경우, 컨트롤러 매니저는 이를 알 수 있습니다.

 

스케줄러 (Kube-scheduler) : 스케쥴러는 서버(노드) 리소스를 바탕으로 컨테이너(정확히는 pod)가 노드에 배치되게 만드는 역할을 담당합니다. 새로 생성된 컨테이너를 찾아 노드에 할당합니다.

키-값 저장소 etcd : Key-value 저장소인데, 클러스터 관리에 필요한 모든 데이터를 저장하는 공간입니다. 인프라를 원하는 상태로 만들기 위해서는, 정상 상태에 대한 snapshot 및 관리에 필요한 메타데이터가 어딘가에 저장되어야 하는데, ETCD는 바로 이를 담당합니다.