최근 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

cncf-landscape

TrailMap

cloud-native


사실 Kubernetes 를 공부하기에 앞서 Docker 를 먼저 공부를 해야 한다.
Kubernetes 는 Docker 를 Container 의 runtime 환경으로 이용하기 때문


Kubernetes Architecture


k8s-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 필요성 & 장점


  1. VM 환경에서의 Guest OS 에 대한 라이센스가 제거 되면서 유지 보수 비용 및 관리 비용이 제거 됨
  2. Private 클라우드를 구축하여 Public 클라우드로 즉시 이전 가능
  3. 컨테이너 기반 오픈 소스여서 특정 업체에 종속되지 않고 클라우드의 환경들을 이전
  4. 빌드/테스트/배포 파이프라인 간소화
  5. 개발환경 구축 기간 단축과 OS 가상화로 격리된 테스트 환경 구축 가능
  6. 짧은 주기로 요구사항 정의와 릴리즈를 반복하는 Aglie Development 지원 가능
  7. Microservice Architecture 실현 가능
  8. 서비스 무정지 환경
  9. 낮은 오버헤드와 빠른 시작(최소한의 CPU와 메모리만 사용하여 비용절감과 부하가 작아 고성능 제공 가능)