쿠버네티스(Kubernetes)란?
쿠버네티스(Kubernetes)는 컨테이너화 된 애플리케이션의 대규모 배포, 스케일링 및 관리를 간편하게 만들어주는 오픈 소스 기반 컨테이너 오케스트레이션(Container Orchestration) 도구다.
정의: 쿠버네티스 클러스터는 애플리케이션 컨테이너를 실행하기 위한 일련의 노드 머신
목적: 애플리케이션을 자동화된 방식의 컨테이너 형태로 쉽게 호스팅하는 것.
* 컨테이너란? 하나 이상의 목적을 위해 독립적으로 작동하는 프로세스
오케스트레이션(Orchestration)이란?
오케스트레이션은 서비스 전체에 자동화를 도입하여, 복잡한 단계를 관리하고 요소들의 유기적인 관계를 미리 정의해 서비스 간의 자동화된 작업을 통합하고 일정을 수립하는 것을 의미한다.
이러한 오케스트레이션의 의미를 넓혀 컨테이너 오케스트레이션은 다수의 컨테이너를 유기적으로 연결/실행/종료할 뿐만 아니라 1)컨테이너 자동 배치 및 복제 2)상태를 추적하고 보존 3)컨테이너 그룹 로드밸런싱 4)컨테이너 장애복구 5)컨테이너 추가, 제거, 축소, 확장 등등 컨테이너를 안정적으로 사용할 수 있게 만들어 주는 것이다. 즉, 각각 독립적으로 배치된 컨테이너를 연결하고 관리하고 확장하면서 이 요소들 전체가 하나로 실행되게 해주는 툴이다.
컨테이너에 오케스트레이션이 필요한 이유?
컨테이너로 애플리케이션을 구성하는 모든 과정을 관리 할 수 있다. 만일 단순한 앱이 개별 컨테이너를 생성하고 배치하는 것은 크게 어렵지 않기 때문에 오케스트레이션이 필요하지 않다. 그러나 사용자 수 와 앱의 기능이 매우 많아진다면 오케스트레이션 툴 없이는 관리 및 운영이 힘들어지기 때문에 컨테이너에 오케스트레이션은 꼭 필요한 툴이다.
같은 역할을 하는 컨테이너 오케스트레이션
특징 | |
도커 스웜(Docker Swarm) | 소규모 환경에서 유용, 기능이 다양하지 않아서 대규모에는 적용 힘듦 |
아파치 메소스(Apache Mesos) | [아파치 오픈소스 프로젝트] 트위터, 에어비엔비, 애플, 우버 등에서 사용되는 검증된 솔루션. 기능 활용을 충분히 하려면 분산 관리 시스템과 연동이 필요하여 여러가지 솔루션을 유기적으로 구성해야하는 부담이 있음. 대규모 클러스터링을 지원하여, Hadoop, Kafka 및 Spark와 같은 다른 서비스와 함게 연동 배치해야 하는 환경에 적합. |
노마드(Nomad) | [hashicorp사의 오픈소스 소프트웨어] 가벼운 리소스 관리자와 스케줄러로 이루어져 있어 구조적으로 단순하고 빠른 성능을 지님. 간단한 기능만 제공. |
쿠버네티스(Kubernetes) | [구글] 전체 시스템을 “직접” 관리하여, pluggable하게 설계하지 않은 기능은 재컴파일하지 않는 이상 구현하기 어렵다. 기반 인프라가 갖춰져 있어야 사용할 수 있다. Amazon의 EKS가 관리형 Kubernetes 서비스인것 처럼 쿠버가 오케스트레이션 툴의 대표로 자리잡고 있다. 컨테이너 배포 관리에 최대 이점을 지님. |
쿠버네티스 구성요소
쿠버네티스 클러스터는 일련의 노드로 구성된다. 이는 물리적(온프레미스)또는 가상(클라우드)일 수 있다.
화물선에 비유해보자면 2개의 화물선에 비유할 수 있다. 1개는 실제 작업을 수행하는 화물선, 1개는 컨테이너를 운반하고 선박을 통제하는 화물선.
Worker Nodes : 선박, 컨테이너를 적재할 수 있다.
- kubelet: 캡틴
- 파드의 구성 내용(PodSpec)을 받아서 컨테이너 런타임으로 전달하고, 파드 안의 컨테이너들이 정상적으로 작동하는지 모니터링
- kube-api 서버의 지시를 수신하며, kubelet에서 상태 모니터링 노드와 컨테이너의 수 등 파악에 필요에 따라 노드에 컨테이너를 배포하거나 제거한다.
- kube-proxy : 사용자가 배포된 파드에 접속할 때의 네트워크 프록시. 쿠버네티스 클러스터는 파드가 위치한 노드에 kube-proxy를 통해 통신할 수 있는 네트워크를 설정하는데, 이때 실제 통신은 br_netfilter와 iptabels로 관리함.
Master Nodes: 제어하는 선박, 컨테이너를 로드하고, 선적하는 방법을 계획하며, 정보 저장, 모니터링, 추적
-> Master Nodes는 컨테이너 형태로 호스팅 될 수 있으며, DNS 서비스 네트워킹 솔루션을 배포할 수 있다. 따라서 컨테이너를 실행할 수 있는 소프트 웨어가 필요하다. 이것이 컨테이너 런타임 엔진이다. (가장 유명한건 도커, 그러나 rkt와 같은 다른 런타임 엔진도 지원함.)
- Etcd : 배 관련 정보, 매일 배에서 내리는 정보를 유지&관리 해야 함. 분산 저장이 가능하여 신뢰할 수 있는 key-value 저장소이다.
- kube-Scheduler : 크레인, 파드가 워커 노드에 할당되는 일정을 관리하는 역할을 담당. 컨테이너 리소스 요구 사항을 기반으로 작업자 노드 용량, 기타 정책, 제약 조건 등 컨테이너를 식별함
- kube-controller-manager: 쿠버네티스 클러스터의 오브젝트 상태를 관리. 업무별 할당된 사무실 지칭, 피해 관련 된 문제 다루는 팀, 화물팀, 컨테이너 관리팀 등등. 이와 같이 다양한 상태 값을 관리하는 주체들이 컨트롤러 매니저에 소속돼 각자의 역할을 수행.
- Node Controller : 노드 관리함, 새 노드를 클러스터에 온보딩함, 사용할 수 없는 상황 처리. 예를 들어, 워커 노드에서 통신이 되지 않는 경우, 상태 체크와 복구는 쿠버네티스 클러스터에 속한 노드 컨트롤러에서 이루어진다.
- Replication Controller : 원하는 수의 컨테이너가 실행되고 있는지 확인. 예를 들어, 레플리카셋 컨트롤러는 레플리카셋에 요청받은 파드 개수대로 파드를 생성한다.
- end-point Controller: 서비스와 파드를 연결하는 역할
- kube-apiserver : 통신 담당, 클러스터 내의 모든 작업을 오케스트레이션 함. 주로 상태값이 모두 저장되는 etcd와 주로 통신함. 또한 woker node가 server와 통신하게 함. 쿠버네티스 클러스트의 중심 역할을 하는 통로.
- kubectl : 쿠버네티스 클러스터에 명령을 내리는 역할. 통상적으로 API 서버와 주로 통신하므로 이 자료에서는 API 서버가 위치한 마스터 노드에 구성
참고
- sharedit.co.kr/posts/12040
- https://seongjin.me/kubernetes-core-concepts/
- https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests
'STUDY > Data Engineering' 카테고리의 다른 글
3. CKA udemy 강의 정리 - Section 2 [kodekloud PODs] (0) | 2023.01.04 |
---|---|
2. CKA udemy 강의 정리 - Section 2 [k8s 컴포넌트] (0) | 2023.01.04 |
[정리] 최신 데이터 인프라 이해하기_#7 - Kafka Streams, kSQL, ksqlDB, Apache Flink, Spark Structured Streaming (0) | 2022.01.22 |
[정리] 최신 데이터 인프라 이해하기_#6 Kafka, Pulsar, Kinesis (0) | 2022.01.16 |
[정리] 최신 데이터 인프라 이해하기_#5 Spark, Python, Hive (0) | 2022.01.15 |