Kubernetes 소개
Kubernetes는 Google의 오픈 소스 컨테이너 클러스터 관리 시스템으로, Google의 다년간 대규모 컨테이너 관리 기술인 Borg의 오픈 소스 버전이며, 주요 기능은 다음과 같습니다.
- 컨테이너 기반 응용 프로그램 배포, 유지 관리 및 롤링 업그레이드
- 로드 밸런싱 및 서비스 검색
- 머신과 지역에 걸친 클러스터 스케줄링
- 자동 격납 (Auto retractable)
- Stateless 서비스 및 Stateful 서비스
- 광범위한 볼륨 지원
- 확장성을 보장하는 플러그인 메커니즘
Kubernetes는 빠르게 성장하여 컨테이너 구성의 선두주자가 되었습니다.
Kubernetes는 플랫폼입니다
Kubernetes는 어플리케이션 워크플로우를 단순화하고 개발을 빠르게 하는 많은 기능을 제공합니다. Kubernetes가 어플리케이션을 쉽게 배포하고 확장하고 관리하기 위한 컴포넌트와 도구를 만드는 에코시스템으로 설계된 이유는 성공적인 어플리케이션 오케스트레이션 시스템에는 강력한 자동화 기능이 필요하기 때문입니다.
사용자들은 리소스를 조직하고 관리하는데 레이블을 사용할 수 있으며, 어노테이션을 사용해서 상태 체크를 제공하는 관리 도구와 같은 리소스 설명 정보를 커스터마이징할 수 있습니다.
또한, Kubernetes 컨트롤러는 개발자와 사용자가 동일하게 사용하는 API로 개발되었습니다. 사용자는 그들만의 컨트롤러, 스케쥴러를 작성할 수 있을 뿐만 아니라 다양한 플러그인 메카니즘으로 시스템 기능을 확장할 수 있습니다.
Kubernetes가 하지 않는 것
Kubernetes는 모든 것을 갖춘 PaaS(Platform as a Service)가 아닙니다. 사용자가 선택할 수 있는 자유를 제공합니다.
- 지원하는 어플리케이션 종류를 제한하지 않습니다. 어플리케이션 프레임워크에 개입하지 않는 것은 물론, 어플리케이션이 12요소를 준수하는 한, (Java, Python, Ruby 등) 지원되는 언어를 제한하지 않습니다. Kubernetes는 stateless, stateful, 데이터 처리 작업 등을 포함하여 매우 다양한 작업 부하를 지원하도록 설계되었습니다. 어플리케이션이 컨테이너에서 실행될 수 있다면, Kubernetes에서 잘 동작합니다.
- 메세지 미들웨어 같은 내장 미들웨어, 스파크와 같은 데이터 프로세싱 프레임워크, mysql과 같은 데이터베이스 또는 Ceph와 같은 클러스터 스토리지 시스템을 제공하지 않습니다.
- 클릭해서 배포하는 서비스를 제공하지 않습니다.
- 코드를 바로 배포하거나 어플리케이션을 빌드하지는 않지만, 지속적인 통합(CI)에 필요한 워크플로우는 빌드할 수 있습니다.
- 사용자가 자신의 로그, 모니터, 알람 시스템을 선택할 수 있습니다.
- 어플리케이션 설정을 위한 언어나 시스템이 없습니다. (jsonnet와 같은)
- 머신 설정, 유지 보수, 관리 또는 자가 복구 시스템을 제공하지 않습니다.
이미 Openshift, Deis 및 Eldarion과 같은 Kubernetes에서 운영되는 많은 PaaS 시스템이 있습니다. 자신만의 PaaS 시스템을 구축하거나 Kubernetes를 사용하여 컨테이너 앱을 관리할 수도 있습니다. 물론 Kuberenets는 단순한 "연출 시스템"이상이며 연출의 필요성을 없애줍니다. Kubernetes는 선언적 API와 구성 가능한 일련의 독립형 컨트롤러를 사용하여 어플리케이션이 항상 예상된 상태에 있음을 보장하므로 사용자는 중간 상태가 어떻게 변환되는지 신경을 쓰지 않아도 됩니다. 이로 인해 사용하기 쉽고, 보다 강력하며, 보다 안정적이며, 보다 회복력이 있으며, 확장 가능한 전체 시스템을 구축할 수 있습니다.
주요 구성 요소
Kubernetes는 주로 다음의 핵심 구성 요소로 이루어져 있습니다.
- etcd는 전체 클러스터의 상태를 저장합니다.
- apiserver는 자원 조작을 위한 유일한 포털을 제공하며 인증, 권한 부여, 액세스 제어, API 등록 및 검색을 위한 메커니즘을 제공합니다.
- 컨트롤러 관리자는 결함 감지, 자동 확장, 롤링 업데이트 등과 같은 클러스터의 상태를 유지 관리합니다. 스케줄러는 소정의 스케줄링 정책에 따라 Pod을 적절한 머신으로 스케줄링하는 리소스 스케줄링을 담당한다.
- kubelet은 컨테이너의 수명주기를 관리하고 볼륨 (CVI) 및 네트워크 (CNI)를 관리합니다.
- 컨테이너 런타임은 미러 관리 및 Pod 및 컨테이너 (CRI)의 실제 작동을 담당합니다.
- kube-proxy는 서비스 검색 및 클러스터 내부의 로드 밸런싱을 제공합니다.