하나의 물리적인 컴퓨터에서 여러 애플리케이션을 실행하고자 가상화 방식이 도입되었고, 그보다 격리 속성을 완화하여 애플리케이션 간 OS를 공유하는 컨테이너 방식이 등장하였다. 이로써 여러 애플리케이션을 손쉽게 실행하고 중지시킬 수 있게 되었다. 각 애플리케이션을 컨테이너 단위로 운영할 수 있게 되었지만, 이들을 어떻게 통제할 것인가에 대한 고민이 생겼다.
전통적인 컴퓨터 위에서 OS가 여러 애플리케이션을 조작하기 위해 각 애플리케이션의 생명주기를 담당했었듯, 컨테이너들의 생명주기를 관리할 수 있는 무엇인가가 필요한 시점이 온 것이다.
[출처: 쿠버네티스 어나더 클래스 강의]
컨테이너 오케스트레이션은 이러한 필요성 때문에 등장하였으며, 이를 한마디로 정의하면 ‘컨테이너를 지원하는 일종의 운영체제’라고 할 수 있겠다.
컨테이너 오케스트레이션 도구로 docker swarm, kubernetes, Nomad 등이 존재했다. 그 중 쿠버네티스(K8s, Kubernetes)가 현재 압도적인 시장 점유율을 차지하고 있으며, 현재 표준을 넘어 여러 분야에서 활용되고 있다. 따라서 쿠버네티스와 인터페이스가 잘 맞는 컨테이너 환경을 개발하는 것이 중요해졌다.
도커 컨테이너를 클러스터로써 관리하기 위해 필요한 기능적 요건
- 물리적인 호스트의 자원부족을 해결하는 방법으로 여러 서버를 병렬 확장하여 클러스터로 구성
- 새로운 서버, 컨테이너 추가에 대한 탐지
- 컨테이너 스케줄링 기능
- 서버 다운 시 고가용성 보장
쿠버네티스는 ‘조타수(숙련된 선원)’라는 뜻을 갖는 그리스어다.
쿠버네티스는 구글이 내부에서 사용하던 컨테이너 관리 시스템에서 파생되었다. 2014년 오픈소스로 제공되었으며, 현재는 CNCF(Cloud Native Computing Foundation)에서 관리하고 있다.
[출처: 쿠버네티스 공식 홈페이지]
Date Plane들의 상태를 관리하고 제어하는 노드로, 하나 또는 하나 이상으로 구성 가능하다. 이 노드에는 4인방(Static Pod)이 존재한다.
쿠버네티스 클러스터의 모든 명령과 요청을 처리하는 중앙 통제소
쿠버네티스 클러스터의 모든 데이터(설정 및 상태 정보)를 저장하는 분산 키-값 저장소
클라우드에 쿠버네티스 구축 시 클라우드 서비스 제공자(CSP)의 스토리지, 네트워크 등의 서비스 간의 상호 작용을 관리하는 역할
도커 플랫폼을 통해 컨테이너를 동작시키며 실제로 서비스를 제공하는 노드이다. 이 노드에는 3인방이 존재한다.
한마디로 ‘자신의 노드 내 pod와 컨테이너의 생명주기를 관리하는 통제소’라 할 수 있겠다.
쿠버네티스 클러스터의 네트워킹을 관리하여, 서비스 간의 통신을 가능하게 한다. API 서버와 상호작용하여 서비스와 엔드포인트 간의 네트워크 트래픽을 라우팅한다.
컨테이너의 실제 실행을 담당하는 소프트웨어이다.
ex) Containerd(docker에서 분리되어 나옴), CRI(Container Runtime Interface)-O 등
| 배포 전략 | 설명 | 활용되는 경우 | 장점 | 단점 |
|---|---|---|---|---|
| Recreate | 모든 기존 파드를 먼저 종료 후 새 파드를 생성하는 방식 | 다운타임이 허용되는 단순 업데이트 시 주로 사용됨. | 간단하고 명확 | 전체 애플리케이션의 다운타임이 존재함. |
| 롤링 업데이트 | 새 버전의 파드를 순차적으로 교체하여 다운타임을 최소화하고 애플리케이션의 가용성을 유지. | 가용성 유지 / 점진적 업데이트 / 다운타임 최소화 | 업데이트 중 문제가 발생 시 전체 클러스터가 영향 받을 수 있음. | |
| Blue-Green 배포 | 두 개의 환경 Blue, Green을 사용하여 배포하는 방식으로, Green 환경에 새 버전을 배포하고 테스트한 후, 트래픽을 Green 환경으로 전환. 문제가 발생하면 Blue 환경으로 롤백. | 무중단 배포 / 빠른 롤백 가능 | 두 배의 리소스 필요 / 복잡한 트래픽 전환 전략 필요 | |
| Canary 배포 | 새 버전의 일부 파드를 배포하여 트래픽의 일부를 해당 파드로 보내고, 문제가 없으면 점진적으로 전체 배포를 진행하는 방식. | 점진적 업데이트 / 문제 발생 시 빠른 롤백 가능 | 배포 관리 복잡성 증가 / 트래픽 라우팅 필요 | |
| A/B Testing | 두 가지 버전을 제공하여 사용자들에게 제공하고, 그 결과를 바탕으로 한 가지 버전을 선택하여 배포하는 방식. | 주로 UI/UX 개선 테스트에 사용됨. | 사용자 반응 테스트 가능 / 데이터 기반 의사결정 가능 | 테스트 설정 복잡성 증가 / 분석 도구 필요 |
도움되는 사이트
쿠버네티스 플레이그라운드: Killercoda Interactive Environments
참고자료
쿠버네티스란 무엇인가?