기본 개념
Container Orchestration
보통의 프로덕션 환경이라면 다수의 컨테이너를 실행시킬 것이다. 이렇게 실행중인 다수의 컨테이너들을 관리하는 기술이 필요하다.
즉, 장애가 발생하면 해당 프로세스를 재실행해주고 부하가 늘어나면 컨테이너를 늘리는 등의 작업을 맡아주는 기술이 필요하다.
Docker Swarm, MESOS, Kubernetes는 Container Orchestration 툴이다.
쿠버네티스 들어가기
YAML 파일에 애플리케이션을 기술하여 쿠버네티스 API에 전달하면, 쿠버네티스는 파일에 기술된 애플리케이션 구성을 이해하고 현재 클러스터 상태와 비교한다. 만약 상태에 차이가 있다면 컨테이너를 추가/제거하여 상태를 일치화시킨다.
쿠버네티스 애플리케이션은 컨테이너에서 실행된다.
컨테이너는 클러스터를 구성하는 노드에 흩어져 실행되며, 서로 다른 노드에 있는 컨테이너들은 표준적인 네트워크 방식으로 통신이 가능하다.
특정 컨테이너가 이상을 일으켰다면 컨테이너를 재시작하고, 하나의 컴포넌트에 부하가 높아지면 해당 컴포넌트의 컨테이너를 추가로 실행한다.
분산 데이터 베이스를 내장하고 있어 애플리케이션 구성 정보와 API 키 등의 비밀 정보를 클러스터의 어떤 컨테이너에라도 전달할 수 있다.
애플리케이션에 들어오는 요청은 클러스터에서 해당 요청을 처리할 컨테이너로 전달한다.
모든 종류의 애플리케이션을 똑같은 방식으로 기술하고 배포하고 관리할 수 있다.
쿠버네티스 구성요소
애플리케이션 매니페스트
애플리케이션을 기술한 YAML 파일
노드
쿠버네티스가 설치되어 있는 물리 혹은 가상의 장비
컨테이너가 실행될 수 있는 장비를 의미한다.
클러스터의 처리 용량을 확장하기 위해 노드를 추가하거나, 서비스에서 노드를 제외하거나, 클러스터 내 노드를 차례로 롤링 업데이트할 수도 있다.
클러스터
노드들의 집합
여러 노드를 둠으로써 부하를 분산할 수 있으며, 하나의 노드에 장애가 발생해 사용할 수 없는 경우 다른 노드를 사용할 수 있어 고가용성에 유리하다.
마스터
클러스터를 관리하는 노드
마스터 노드는 일반 노드와 달리 컨테이너가 실행되지 않는다.
클러스터에 속하는 노드의 정보를 가지며, 노드들을 모니터링하며 실패할 경우 워크로드를 이동하는 등의 역할을 한다.
컴포넌트
쿠버네티스를 설치하면 아래의 컴포넌트들이 설치된다.
API Server
CLI를 제공해 사용자, 장비 관리 등 쿠버네티스 클러스터와 상호작용할 수 있도록 한다.
etcd
분산형 key value 저장소로 클러스터 관리를 위한 정보들을 저장한다.
마스터들 간에 충돌이 없도록 락을 잘 구현해야 한다.
Scheduler
여러 노드에 작업 또는 컨테이너를 분산하는 역할을 한다.
새로 생성된 컨테이너를 확인하고 노드에 할당한다.
Controller
노드, 컨테이너 또는 엔드포인트가 다운될 때 이를 감지하고 대응하는 역할을 한다.
Container Runtime
컨테이너를 실행시킬 때 사용되는 소프트웨어
Docker를 비롯하여 Rocket, Cryo 등의 컨테이너 툴을 사용할 수 있다.
Kubelet
클러스터 내의 각 노드에 실행되는 에이전트
컨테이너가 노드에서 잘 수행되고 있는지 확인하고 마스터 노드와 통신하는 역할을 한다.
Last updated