Kubernetes 아키텍처
원래 Kubernetes는 구글 내부의 Borg에서 유래했고, 어플리케이션을 지향 컨테이너 클러스터 배치와 관리 시스템을 제공했습니다. Kubernetes의 목표는 물리적/가상 컴퓨팅, 네트워킹 및 스토리지 인프라 스트럭처를 조정하는 부담을 줄이고 어플리케이션 운영자와 개발자가 셀프 서비스를 위한 컨테이너 중심의 프리미티브에만 집중할 수 있게하는 것입니다. Kubernetes는 또한 사용자 정의 워크플로우 및 고급 자동화 작업을 구축하기 위한 안정적이고 호환 가능한 플랫폼을 제공합니다. Kubernetes는 다단계 보안 및 승인 메커니즘, 멀티 테넌트(multi-tenant) 어플리케이션 지원 기능, 투명한 서비스 등록 및 서비스 검색 메커니즘, 내장 로드 밸런서, 장애 발견 및 자가 치유 기능, 롤링 서비스 업그레이드 등 포괄적인 클러스터 관리 기능을 제공합니다. 그리고 온라인 확장, 확장 가능한 리소스 스케줄링 메커니즘, 다중 단위 리소스 할당량 관리 기능을 갖추고 있습니다. Kubernetes는 개발, 배포 테스트, 운영 및 유지 관리 모니터링의 모든 측면을 포괄하는 포괄적인 관리 도구도 제공합니다.
Borg 소개
Borg는 Google 내의 많은 코어 서비스의 스케쥴링과 관리를 담당하는 대규모 클러스터 관리 시스템입니다. Borg의 목표는 사용자가 코어 비지니스와 여러 데이터 센터에서 자원 활용도를 극대화하지 않고도 자원 관리 이슈에 집중할 수 있게 하는 것입니다.
Borg의 주요 구성요소는 BorgMaster, Borglet, borgcfg 및 Scheduler인데, 아래 그림과 같습니다.
- BorgMaster는 전체 클러스터의 상태를 관리하고 Paxos 스토리지에 데이터를 유지하는 역할을 담당하는 전체 클러스터의 두뇌입니다.
- Scheduer는 특정 머신를 스케쥴링 되어질 어플리케이션의 특성에 따라 스케쥴링 작업을 담당합니다.
- Borglet은 (컨테이너에서) 실제 작업을 실행하는 것을 담당합니다.
- Borgcfg는 작업을 제출하는 설정 파일을 통해 Borg 시스템과 인터랙션하는 Borg의 커맨드라인 도구입니다.
Kubernetes 아키텍처
Kubernetes는 Pod, Service, Labels 및 Single Pod 단일 IP와 같은 Borg의 디자인 철학을 사용합니다. Kubernetes의 전체 아키텍처는 Borg와 매우 유사합니다 (아래 그림 참조).
Kubernetes는 주로 다음 핵심 구성 요소로 이루어져 있습니다.
- etcd 전체 클러스터의 상태를 저장합니다.
- apiserver는 자원 조작을 위한 유일한 포털을 제공하며 인증, 권한 부여, 액세스 제어, API 등록 및 검색을 위한 메커니즘을 제공합니다.
- 컨트롤러 관리자는 결함 감지, 자동 확장, 롤링 업데이트와 같은 클러스터 상태를 유지 관리합니다.
- 스케줄러는 리소스의 스케줄링을 담당하고 소정의 스케줄링 정책에 따라 대응하는 머신에 팟을 스케줄링합니다.
- Kubelet은 컨테이너의 수명주기를 관리하는 책임이 있으며 볼륨 (CVI) 및 네트워크 (CNI) 관리를 담당합니다.
- 컨테이너 런타임은 미러링 및 팟 및 컨테이너 (CRI)의 실제 작업을 담당합니다.
- kube-proxy는 클러스터 서비스 검색 및로드 밸런싱 내에서 서비스를 제공합니다.
핵심 구성 요소 외에도 다음과 같은 몇 가지 권장되는 추가 기능이 있습니다.
- kube-dns는 전체 클러스터에 DNS 서비스를 제공합니다.
- Ingress Controller는 서비스에 엑스트라넷 액세스를 제공합니다.
- 힙 스터는 자원 모니터링 기능을 제공합니다.
- 대시 보드는 GUI를 제공합니다.
- 연합은 크로스 리전 전체에 클러스터를 제공합니다.
- Fluentd-elasticsearch는 클러스터 로그 수집, 저장 및 쿼리를 제공합니다.
계층화된 아키텍처
Kubernetes 디자인 철학과 기능은 실제로 아래와 같은 Linux와 유사한 계층적 아키텍처입니다.
- 핵심층: Kubernetes 핵심 기능, 외부 API를 높은 수준의 어플리케이션을 구축, 플러그인 어플리케이션 실행 환경을 제공
- 어플리케이션층: 배포 (상태 비저장 어플리케이션, 상태 저장 어플린케이션, 일괄 작업, 클러스터 응용 프로그램 등) 및 라우팅 (서비스 검색, DNS 확인 등)
- 관리층: 인프라, 컨테이너 및 네트워크 메트릭, 자동 확장, 동적 프로비저닝 및 정책 관리 (RBAC, 할당량, PSP, 네트워크 정책 등)와 같은 자동화와 같은 시스템 메트릭
- 인터페이스층: kubectl 명령 줄 도구, 클라이언트 SDK 및 클러스터 연합
- 생태계: 인터페이스층 위의 대형 컨테이너 클러스터 관리의 생태계는 두 가지 범주로 나눌 수 있습니다
- Kubernetes External: 로그, 모니터, 구성 관리, CI, CD, 워크 플로, FaaS, OTS 응용 프로그램, ChatOps 등
- Kubernetes 내부: CRI, CNI, CVI, 미러 저장소, 클라우드 공급자, 클러스터 자체의 구성 및 관리
핵심 구성요소
핵심 API
생태계
계층화된 아키텍처에 대해, Kubernetes 커뮤니티의 Kubernetes architectual roadmap을 참고하세요.