배경
- 모놀리스 앱과 마이크로서비스
- 가상머신과 리눅스 컨테이너
- 컨테이너와 도커
쿠버네티스 소개
- 컨테이너화된 앱의 배포 및 관리 시스템
- 컨테이너 기반이기에 동일한 하드웨어에서 앱 간에 영향을 미치지 않음
- 핵심 컨셉
- 개발자가 앱과 인프라의 연관 관계에 들이는 시간을 절약
- 인프라 리소스를 최대로 활용
- 쿠버네티스 클러스터 아키텍처 이해
- 노드 종류
- 마스터 노드: 전체 쿠버네티스 시스템을 제어하고 관리하는 컨트롤 플레인 실행
- 워커 노드: 실제 배포되는 컨테이너 앱 실행
- 구성 요소
- 컨트롤 플레인: API 서버, 스케줄러, 컨트롤러 매니저, Etcd
- 워커 노드: 컨테이너 런타임(도커, rkt), Kubelet, Kube-proxy
쿠버네티스에서 앱 실행
- 절차
- 앱을 하나 이상의 컨테이너 이미지로 패키징
- 이미지 레지스트리로 푸시
- 쿠버네티스 API 서버에 앱 디스크립션 게시
- 핵심 동작 원리
- 디스크립션이 컨테이너를 실행하는 방법
- 실행된 컨테이너 유지: 앱 배포 상태와 디스크립션의 일치 여부 지속 확인
- 복제본 수 스케일링: 쿠버네티스가 직접 최적의 복제본 수 결정 가능
- 이동한 앱에 접근하기: 고정 IP 주소로 동일한 서비스의 컨테이너를 노출
쿠버네티스 장점
- 앱 배포의 단순화: 모든 워커 노드를 하나의 배포 플랫폼으로 제공, 클러스터를 구성하는 서버에 관해 몰라도 됨
- 하드웨어 활용도 극대화: 인프라와 앱을 분리 가능. 리소스 요구 사항에 가장 적합한 노트 선택 가능
- 상태 확인 및 자가치유: 노드 장애 발생 시 다른 노드로 자동 스케줄링
- 오토스케일링
- 앱 개발 단순화: 버그의 원인의 빠른 탐색, 앱의 새로운 버전의 오류 감지 시 즉시 롤아웃 중지