최근 Container 기술을 활용한 Docker 의 발표, Monolithic Architecture 에서 Microservice Architecture 로의 변화, CI/CD 의 자동화 및 무중단 배포 등에 대한
관심이 높아지면서, Kubernetes
에 대한 관심이 높아지고 있다.
Kubernetes
에 대해서 공부를 하기에 앞서 Kubernetes 역사
, Architecture
, 필요성(장점)
에 대해서 정리를 하였다.
Kubernetes 의 역사 & Cloud Native Native Interactive Landscape
구글의 사내 운영 시스템인 Borg 를 오픈 소스로 만든 것
Borg 는 애플리케이션을 스케줄, 시작, 재시작, 모니터하는 클러스터 관리 시스템
구글은 2015년 Large-scale cluster management at Google with Borg 이라는 논문 발표
Borg 는 C++ 로 작성되었고, 그 노하우를 바탕으로 오픈 소스화 하겠다는 내용인데, Go Lang & Docker Base 로 오픈소스로 만든 것이 Kubernetes 이다.
그 이후로 CNCF(Cloud Native Computing Foundation) 이 주도 하게 되었다.
Cloud Native 어플리케이션을 개발할 때, 각 기술 영역 별 오버 뷰
CNCF Cloud Native Interactive Landscape
사실 Kubernetes 를 공부하기에 앞서 Docker 를 먼저 공부를 해야 한다.
Kubernetes 는 Docker 를 Container 의 runtime 환경으로 이용하기 때문
Kubernetes Architecture
Kubernetes 는 전체 cluster를 관리하는 master와 container 가 배포되는 node(Minions) 로 구성
모든 명령은 master의 API를 호출하고, node는 master와 통신하면서 필요한 작업을 수행한다.
Master
구분 | 설명 |
---|---|
kube-apiserever | REST 요청을 검증, API 오브젝트를 구성하고 상태 보고 |
etcd | 클러스터의 상태를 저장하는 key/value 저장소 |
kube-scheduler | 할당되지 않은 pod 를 적잘한 노드 서버에 할당 |
kube-controller-manager | 쿠버네티스에 있는 모든 오브젝트 상태 관리 |
Node
구분 | 설명 |
---|---|
kubelet | 노드에 할당된 pod 생명 주기 관리 (probe 실행, 메트릭 수집 등) |
kube-proxy | Pod 로 연결되는 네트워크 담당 / 로드 밸런싱 기능 제공 |
Kubernetes 필요성 & 장점
- VM 환경에서의 Guest OS 에 대한 라이센스가 제거 되면서 유지 보수 비용 및 관리 비용이 제거 됨
- Private 클라우드를 구축하여 Public 클라우드로 즉시 이전 가능
- 컨테이너 기반 오픈 소스여서 특정 업체에 종속되지 않고 클라우드의 환경들을 이전
- 빌드/테스트/배포 파이프라인 간소화
- 개발환경 구축 기간 단축과 OS 가상화로 격리된 테스트 환경 구축 가능
- 짧은 주기로 요구사항 정의와 릴리즈를 반복하는 Aglie Development 지원 가능
- Microservice Architecture 실현 가능
- 서비스 무정지 환경
- 낮은 오버헤드와 빠른 시작(최소한의 CPU와 메모리만 사용하여 비용절감과 부하가 작아 고성능 제공 가능)