kubernetes 소개
쿠버네티스(Kubernetes)란?
쿠버네티스(Kubernetes) 는 컨테이너화 된 애플리케이션의 대규모 배포, 스케일링 및 관리를 간편하게 만들어주는 오픈 소스 기반 컨테이너 오케스트레이션(Container Orchestration) 도구 다.
컨테이너 오케스트레이션
“컨테이너화 된 애플리케이션에 대한,
자동화된 설정, 관리 및 제어 체계”
- Kubernetes 및 OpenShift 다음으로 Docker Swarm이 업계에서 더 많이 사용되고 있다.
- Kubernetes 외 오케스트레이션 도구 : Docker Swarm, ,Open Shift, Mesos, Rancher, Amazon ECS, Apache Marathon, Nomad, Kontena, Minikube
쿠버네티스(Kubernetes)의 특징
-
쿠버네티스는 과거 15년이 넘는 시간 동안 구글 내부에서 프로덕션 규모의 워크로드를 운영하는 수단으로 사용되었다.
-
글로벌 3대 클라우드사(AWS, Azure, GCP) 뿐만 아니라 RedHat, VMWare 등에서도 자사 솔루션에 최적화된 버전의 쿠버네티스 플랫폼을 제공하고 있다.
-
마이크로서비스 아키텍처(MSA; Microservice Architecture)에서는 프로젝트에 포함된 세부 기능들이 작은 서비스 단위로 분리되어 구축된다. 따라서 동시에 수백, 수천 개의 컨테이너를 배포하고 관리해야 하는 상황과 대응해야하며, 다음과 같은 4가지 이슈가 있다.
- 배포 관리 : 어떤 컨테이너를 어느 호스트에 배치하여 구동시킬 것인가? 각 호스트가 가진 한정된 리소스에 맞춰 어떻게 최적의 스케줄링을 구현할 것인가? 어떻게 하면 이러한 배포 상태를 최소한의 노력으로 유지 관리할 수 있을 것인가?
- 제어 및 모니터링 : 구동 중인 각 컨테이너들의 상태를 어떻게 추적하고 관리할 것인가?
- 스케일링 : 수시로 변화하는 운영 상황과 사용량 규모에 어떻게 대응할 것인가?
- 네트워킹 : 이렇게 운영되는 인스턴스 및 컨테이너들을 어떻게 상호 연결할 것인가?
쿠버네티스(Kubernetes)의 핵심 설계 사상
1. 선언적 구성 기반의 배포 환경
- k8s에서는 동작을 지시하는 개념(예: 레플리카를 5개 만들어라)보다는 원하는 상태를 선언하는 개념(예: 내 호스트의 레플리카를 항상 5개로 유지하라)을 주로 사용한다.
- 원하는 상태(Desired state)와 현재의 상태(Current state)가 상호 일치하는지를 지속적으로 체크하고 업데이트한다. (이미지 출처 : Leverage)
2.기능 단위의 분산
- 쿠버네티스에서는 각각의 기능들이 개별적인 구성 요소로서 독립적으로 분산되어 있다.
- 쿠버네티스는 내부 요소들의 상태 관리를 위해 컨트롤러를 이용한다.
- 노드(Node), 레플리카셋(ReplicaSet), 디플로이먼트(Deployment), 네임스페이스(Namespace) 등 클러스터를 구성하는 주요 요소들이 모두 컨트롤러(Controller)로 구성되어 있으며, Kube Controller Manager안에 패키징 되어 있다.
(이미지 출처: iximiuz.com)
3. 클러스터 단위 중앙 제어
- 쿠버네티스에서는 전체 물리 리소스를 클러스터 단위로 추상화하여 관리한다. 클러스터 내부에는 클러스터의 구성 요소들에 대해 제어 권한을 가진 컨트롤 플레인(Control Plane) 역할의 마스터 노드(Master Node)를 두게 되며, 관리자는 이 마스터 노드를 이용하여 클러스터 전체를 제어한다.
(이미지 출처: Kubernetes Documentation)
4. 동적 그룹화
- 쿠버네티스의 구성 요소들에는 쿼리 가능한 레이블(Label)과 메타데이터용 어노테이션(Annotation)에 임의로 키-값 쌍을 삽입할 수 있다.
- 관리자는
selector
를 이용해서 레이블 기준으로 구성 요소들을 유연하게 관리할 수 있고, 어노테이션에 기재된 내용을 참고하여 해당 요소의 특징적인 내역을 추적할 수 있다.
(이미지 출처 : K21Academy)
5. API 기반 상호작용
- 쿠버네티스 요소들이 서로 직접 접근 불가, Kubernetes API server(kube-apiserver)를 통해서만 상호 접근이 가능한 구조를 가진다.
(이미지 출처: Sysdig)