<colbgcolor=#fff,#1f2023><colcolor=#000,#fff> {{{#!wiki style="margin: -10px -10px" | <tablealign=center><tablewidth=320><tablebordercolor=white,#1f2023> | Kubernetes | }}} | |
개발사 | 구글 | |||
발표일 | 2014년 9월 9일 ([age(2014-09-09)]년 전) | |||
프로그래밍 언어 | Go | |||
라이센스 | Apache License 2.0 | |||
| |
[clearfix]
1. 개요
Kubernetes(쿠버네티스)는 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리하기 위한, "컨테이너 오케스트레이션(조율, 관리)" 플랫폼이다. 이름이 길기 때문에 줄임말로 "k8s"라고도 한다[1] 오픈 소스 플랫폼으로, 구글에서 처음 개발하였다가 이후 프로젝트를 리눅스 재단에 기부하여, 현재는 리눅스 재단 산하의 Cloud Native Computing Foundation(CNCF)에서 관리하고 있다.2. 역사
Kubernetes는 구글의 내부 시스템인 Borg에서 영감을 받아 개발되었다. 구글은 수년간 컨테이너 기술을 사용해 왔으며, 이 경험을 바탕으로 2014년 Kubernetes 프로젝트를 시작했다. 2015년 7월 21일, Kubernetes 1.0이 공식적으로 출시되었으며, 같은 날 구글은 이 프로젝트를 CNCF에 기부했다.3. 목적
Kubernetes를 사용하면 애플리케이션을 더 쉽게 배포하고 관리할 수 있다. 이를 통해 개발자는 애플리케이션 코드 작성에 집중할 수 있다. 또한 Kubernetes는 애플리케이션을 자동으로 스케일링하고 장애 복구를 처리하는 등의 작업을 처리하여 시스템 안정성을 높일 수 있다. Kubernetes는 여러 클라우드 제공 업체와 호환되므로 클라우드에서 애플리케이션을 실행하는 데 유용하다.4. 필요 지식
Kubernetes를 배우기 위해서는 다음과 같은 기술 지식이 필요하다.- containerd, Docker, Openshift 등과 같은 컨테이너 기술 스택
- 서버리스, 오케스트레이션, 로드 밸런싱, 오토 스케일링 등과 같은 클라우드 컴퓨팅 기술에 대한 사용 경험
- 운영체제 및 네트워크 관련 지식[2]
또한 Kubernetes의 기본 개념과 아키텍처, 배포 및 관리를 위한 명령어 등에 대한 이해도 필요하다.
5. 아키텍처
Kubernetes는 마스터 노드와 워커 노드로 구성된다.5.1. Master Node
마스터 노드(master node)는 클러스터의 컨트롤 플레인(control plane)을 형성하며, 다음과 같은 컴포넌트들로 구성된다.- kube-apiserver: 클러스터의 프론트엔드 역할을 한다.
- etcd: 클러스터의 모든 데이터를 저장하는 분산 키-값 저장소이다.
- kube-scheduler: 새로 생성된 파드를 노드에 할당한다.
- kube-controller-manager: 다양한 컨트롤러를 실행하여 클러스터의 상태를 관리한다.
5.2. Worker Node
워커 노드(worker node)는 실제 애플리케이션이 실행되는 곳이며, 다음과 같은 컴포넌트들로 구성된다.- kubelet: 각 노드에서 실행되며, 컨테이너가 파드에서 실행되도록 관리한다.
- kube-proxy: 네트워크 규칙을 관리하여 파드 간 네트워크 통신을 가능하게 한다.
6. 주요 개념
Kubernetes를 이해하기 위해 알아야 할 주요 개념들은 다음과 같다.6.1. Pod
파드(Pod)는 Kubernetes의 가장 기본적인 배포 단위로, 하나 이상의 컨테이너로 구성된다. 같은 파드 내의 컨테이너들은 동일한 노드에서 실행되며, 네트워크와 저장소 리소스를 공유한다.6.2. Service
서비스(Service)는 파드 집합에 대한 단일 진입점을 제공한다. 쉽게 말해서 파드에서 실행 중인 컨테이너를 외부로 노출시켜 서비스의 주소를 통해 접근할 수 있게 만들어 준다. 파드는 동적으로 생성되고 제거될 수 있기 때문에 서비스를 통해 안정적인 네트워크 주소를 제공받을 필요가 있다.6.3. ReplicaSet
레플리카셋(ReplicaSet)은 지정된 수의 파드 복제본이 항상 실행되도록 보장한다. 노드 장애나 파드 장애 시 자동으로 새로운 파드를 생성하여 개수를 일정하게 유지하는 역할을 한다.6.4. Deployment
디플로이먼트(Deployment)는 파드 또는 레플리카셋의 선언적 업데이트를 제공한다. 애플리케이션은 한번 배포되고 끝이 아니라 새로운 기능 개발이나 버그 패치 등으로 꾸준히 업데이트가 된다. 이럴 때마다 서버가 중단되는 것은 바람직하지 않다. 디플로이먼트는 이러한 문제를 해결하기 위한 Kubernetes의 핵심 기능 중 하나이며, 롤링 업데이트나 롤백과 같은 고급 기능을 지원한다.7. 관련 도구
Kubernetes 생태계에는 다양한 도구들이 존재한다.- Helm: Kubernetes 패키지 관리자
- Prometheus: 모니터링 및 알림 도구
- Istio: 서비스 메시 플랫폼
- Kubernetes Dashboard: 웹 기반 Kubernetes 사용자 인터페이스
한편, Kubernetes는 대규모 환경에서도 정상 작동하도록 설계된 만큼, 소규모나 단일 노드 시스템에서는 조금 무거울 수 있다. 때문에 경량화된 쿠버네티스 배포판인 "k3s", 단일 노드 환경을 위한 쿠버네티스 배포판인 "minikube" 등이 존재한다.
8. Docker와의 비교
Docker와 Kubernetes는 모두 컨테이너 기술을 사용하지만, 각각 다른 역할을 수행한다.Docker는 개발자가 소프트웨어 애플리케이션과 그에 필요한 라이브러리 및 종속성을 하나의 패키지로 묶어서 배포할 수 있도록 도와주는 플랫폼이다. Docker를 사용하면 개발자는 애플리케이션을 빠르게 개발하고, 테스트하고, 배포할 수 있다.
Kubernetes는 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리하기 위한 오픈소스 플랫폼이다. Kubernetes를 사용하면 개발자는 애플리케이션을 더 쉽게 배포하고 관리할 수 있으며, 애플리케이션을 자동으로 스케일링하고 장애 복구를 처리하는 등의 작업을 처리할 수 있다.
간단히 말해, Docker는 개발자가 애플리케이션 개발과 배포를 쉽게 할 수 있도록 도와주는 플랫폼이고, Kubernetes는 애플리케이션을 자동으로 관리하고 배포하는 플랫폼이다.
한편, Docker 사에서는 k8s와는 별개의 컨테이너 오케스트레이션 시스템인 Docker Swarm을 개발하였다.