그리스어로 키잡이를 뜻하는 쿠버네티스(Kubernetes)는 구글의 사내 운영 시스템인 Borg를 오픈소스로 만든 것이다. 2014년 중순에 구글에 의해 처음 발표되었다. 쿠버네티스 v1.0은 2015년 7월 21일에 출시되었다. 쿠버네티스 v1.0 출시와 함께 구글은 리눅스 재단과 파트너십을 맺고 클라우드 네이티브 컴퓨팅 재단(Cloud Native Computing Foundation, CNCF)을 설립하였으며 쿠버네티스를 시드 테크놀로지(seed technology)로 제공하였다. (위키백과 쿠버네티스)
클러스터링 등과 같이 여러대의 호스트, 또는 컨테이너를 묶어 컨테이너의 오케스트레이션 기능을 제공하는 도커 기술에는 도커 스웜(Swarm, Swarm mode key concepts), 컴포즈(Docker Compose, Overview of Docker Compose), 스택(Stack, Deploy a stack to a swarm)과 같은 것들이 있다. 쿠버네티스는 스웜보다 더 많은 기능을 갖춘 컨테이너 오케스트레이션 시스템으로 도커를 비롯한 여러가지 컨테이너 런타임을 다룰 수 있다. 즉, 쿠버네티스는 스웜, 컴포즈, 스택의 기능을 통합하여 더 놓은 수준의 관리 기능을 제공하는 도구라고 할 수 있다.
쿠버네티스 클러스터는 쿠버네티스의 여러 자원을 관리하기 위한 집합체로 노드들로 구성이된다. 노드는 쿠버네티스 클러스터의 관리 대상으로 등록된 도커 호스트로 컨테이너가 배치되는 대상이다. 노드는 위 그림과 같이 마스터(Control Plane)와 노드들의 그룹으로 이루어져있다. 마스터는 클러스터 전체를 관리하는 역할하며, 노드는 워커 노드로서 컨테이너를 실행하는 역할을 한다. 이러한 워커 노드는 가상 머신, 또는 물리 서버로 구성할 수 있다.
쿠버네티스를 구성하는 주요 컴포넌트들은 다음과 같다.
컴포넌트명 |
역할 |
kube-apiserver |
- kubectl 등의 API 클라이언트로부터 오는 요청을 검증하고, API 오브젝트 구성 및 상태 보고 - 클러스터는 웹 UI 또는 커맨드 라인 인터페이스(CLI)로 관리할 수 있는데, kubectl은 마스터 노드상의 kube-apiserver에게 쿠버네티스 API 규약에 맞게 기술된 목표 상태 선언서인 매니페스트를 YAML 또는 JSON 포맷으로 전송하여 오브젝트를 생성, 변경, 삭제하는 커맨드 라인 인터페이스이다. |
etcd |
- 쿠버네티스 클러스터의 모든 관리 데이터를 저장 - CoreOS가 개발한 분산 키-값 저장소 |
kube-scheduler |
- 노드를 모니터링하고 컨테이너(파드)를 배치할 최적의 노드를 선택 - 여기서 스케줄링은 파드를 실행할 노드를 정하는 것을 의미 |
kube-controller-manager |
- 자원을 제어하는 컨트롤러(파드 실행을 제어하는 오브젝트, Ex. 디플로먼트 컨트롤러, 잡 컨트롤러)를 구동 |
kubelet |
- 클러스터의 각 노드에서 실행되는 에이전트 - 파드와 컨테이너를 실행 및 파드와 노드의 상태를 API 서버에 보고 |
쿠버네티스에서 사용되는 주요 자원들은 다음과 같다.
컴포넌트명 |
역할 |
노드 (Node) |
- 컨테이너(파드)가 배치되는 서버 |
네임스페이스 (Namespace) |
- 쿠버네티스 클러스터 안의 가상 클러스터 |
파드 (Pod) |
- 컨테이너 집합 중 가장 작은 단위로, 컨테이너의 실행 방법을 정의. 쿠버네티스는 컨테이너를 파드로 묶어서 배포. 컨테이너가 하나인 경우도 파드로 배포 |
레플리카셋 (ReplicaSet) |
- 가용성 확보를 위해 같은 스펙을 갖는 파드를 여러개 생성하고 관리. |
디플로이먼트 (Deployment) |
- 어플리케이션 배포의 기본 단위. 정해진 개수만큼 파드가 기동하도록 관리, 가동 중인 파드를 차례로 교체하거나 스케일링을 조절할 수 있다. |
서비스 (Service) |
- 파드의 집합(주로 레플리카셋)에 접근하기 위한 경로를 정의. 파드의 레이블이 서비스에 정의된 셀렉터(Selector) 값과 일치하면 해당 파드는 서비스 대상이 됨 |
인그레스 (Ingress) |
- 서비스를 쿠버네티스 클러스터 외부로 노출시킨다. |
컨피그맵 (ConfigMap) |
- 환경 변수 등의 설정 정보를 정의하고 파드에 전달 |
퍼시스턴트볼륨 (PersistentVolume) |
- 파드가 사용할 스토리지의 크기 및 종류를 정의 |
퍼시스턴트볼륨클레임 (PersistentVolumeClaim) |
- 퍼시스턴트 볼륨을 동적으로 확보. 사용자가 퍼시스턴트볼륨에 용량이나 읽기/쓰기 등의 모드를 요청 |
스토리지클래스 (StorageClass) |
- 퍼시스턴트 볼륨이 확보하는 스토리지의 종류를 정의 |
스테이트풀세트 (StatefulSet) |
- 파드와 퍼시스턴트 볼륨을 조합하여 데이터 보관에 초점을 둔 컨트롤러. 일시적인 존재인 파드가 상태를 가지는 워크로드를 처리할 수 있게 함 |
잡 (Job) |
- 배치 처리를 하는 컨테이너가 정상 종료할 때까지 재실행을 반복 |
크론잡 (CronJob) |
- UNIX에서 사용되는 cron과 같은 형식으로 지정한 시각에 정기적으로 잡을 생성 |
OCI Container Engine for Kubernetes (OKE)는 오라클이 제공하는 관리형 쿠버네티스 서비스이다. 다른 클라우드 벤더에서도 관리형 쿠버네티스를 서비스 형태로 제공한다. GCP GKS(Google Kubernetes Service), AWS EKS (Amazon Elastic Kubernetes Service), Azure AKS(Azure Kubernetes Service), IBM Cloud IKS(IBM Cloud Kubernetes Service) 등이 이에 해당한다
사용자는 어플리케이션에 필요한 컴퓨팅 리소스를 지정하면 쿠버네티스용 컨테이너 엔진을 기존 OCI 테넌시에 프로비저닝을한다. Multi-AD Region의 경우, 고객별로 AD에 걸쳐 여러개의 마스터와 Etcd를 제공하며, Etcd는 오브젝트 스토리지에 주기적으로 백업을 받고, 복구가 가능하다. 또한 다운타임없이 마스터 노드의 업그레이드를 수행한다.
글 순서
5. OCI 레지스트리에 이미지 업로드 & 다운로드 설정
여기에 정리한 내용은 오라클 제품을 다루고 있지만, 이는 개인적인 정리 및 테스트 결과일 뿐입니다. 오라클의 공식 문서는 오라클이 제공하는 매뉴얼과 기타 기술문서를 참조하셔야 합니다.
'Cloud > Oracle Cloud Infrastructure' 카테고리의 다른 글
OCI를 이용한 쿠버네티스, Wercker 쉬운 샘플 - 4. OKE 클러스터에 샘플 웹서버 배포 (0) | 2021.03.17 |
---|---|
OCI를 이용한 쿠버네티스, Wercker 쉬운 샘플 - 3. OCI 쿠버네티스 배포, 사용 환경 설정 (0) | 2021.03.17 |
OCI를 이용한 쿠버네티스, Wercker 쉬운 샘플 - 1. Introduction (0) | 2021.03.17 |
OCI Autoscaling 사용 후기 (0) | 2019.03.07 |
OCI NAT 게이트웨이 사용 방법 (0) | 2019.02.15 |