Kubernetes(K8s)가 뭔 지 알아보기에 앞서, Kubernetes가 나오게 된 배경을 알아보자.
2013년 도커(Docker)가 등장한 이후, 인프라 세계가 컨테이너(Container)의 세계로 바뀌었다. 즉, 다양한 애플리케이션(Application)들이 컨테이너 기반으로 개발되는 것이 개발 프로세스 트렌드이다.
컨테이너 기반으로 개발된다는 말은 배포할 때, Dockerfile을 만들어 이미지를 빌드하고 그 이미지로 컨테이너를 배포하는 것을 의미한다.
쿠버네티스는 다른 컨테이너 오케스트레이션(Ochestration) 툴(ex. Docker의 swarm, AWS의 ECS, 하시코프의 Nomad, Mesos의 Marathon 등)보다 비교적 늦게 등장하였지만, 구글의 힘으로 지금은 표준이 되었다. 추가로, 많은 대기업에서 쿠버네티스를 기반으로 플랫폼을 만들어 대세임을 다시 한 번 입증하였고, 관리형 서비스를 내놓음으로써 Cloud Conatiner 시장을 평정하였다.
Kubernetes란?
컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼.
많은 컨테이너 예제들이 웹 앱을 다루지만, 실제론 훨씬 다양한 분야의 애플리케이션들이 배포되고 있다. (ex. 모바일, 게임, 딥러닝 / 빅데이터 모델 등)
쿠버네티스의 기능
- 다수의 노드 관리
- 컨테이너 스케줄링
- 롤링 업데이트
- 스케일링 / 오토 스케일링
- 컨테이너 모니터링
- 복구 자동화
- 서비스 디스커버리
- 로드 밸런싱
- 워크로드 관리
- 로그 관리
- 선언적 코드를 사용한 관리
이 중, 몇 가지에 대해 알아보자
선언적 코드를 사용한 관리(IaC)
쿠버네티스는 YAML 형식으로 작성한 선언적 코드(메니페스트라고 한다)를 통해 배포하는 컨테이너로 주변 리소스를 관리할 수 있어 IaC(Infrastructure as Code)를 구현할 수 있다.
스케일링 / 오토 스케일링
쿠버네티스는 컨테이너를 클러스터링하여 여러 노드를 관리하는데, 컨테이너 이미지를 기반으로 쿠버네티스 위에 컨테이너를 배포할 때 같은 이미지를 기반으로 여러 컨테이너(레플리카)를 배포함으로써 부하 분산 및 다중화도 가능하며, 부하에 따라 레플리카 수를 자동으로 늘리거나 줄일 수도 있다.
스케줄링
컨테이너를 쿠버네티스 노드에 배포할 때 어떤 쿠버네티스 노드에 배포할 것인지를 기준을 정하고 설정(스케줄링)할 수 있다.
리소스 관리
컨테이너 배치를 위한 지정이 특별히 없을 경우, 쿠버네티스 노드의 리소스 가용량에 따라 스케줄링하는 기능을 제공한다.
자동화된 복구
쿠버네티스는 프로세스 정지를 감지하면 다시 컨테이너 스케줄링을 실행하여 컨테이너를 자동으로 재배포함으로써, 클러스터 노드에 장애가 발생하거나 노드를 축출했을 경우 그 노드의 컨테이너가 사라진다 해도 서비스 영향 없이 애플리케이션을 자동 복구하도록 만들어져 있다.
로드 밸런싱과 서비스 디스커버리
쿠버네티스는 로드 밸런서 기능을 제공하며, 사전에 정의한 조건과 일치하는 컨테이너 그룹에 라우팅하는 엔드포인트를 할당할 수 있다.
API 오브젝트
Ingress
다양한 앱들을 하나의 로드밸런서(Load Balancer)로 서비스하기 위해 Ingress 기능을 제공한다. 여기서 Ingress란, 클러스터 내 서비스에 대한 외부 접근을 관리하는 API 오브젝트를 의미한다.
예를 들어, 웹 애플리케이션을 배포하는 과정을 보면 외부에서 직접 접근할 수 없도록 애플리케이션을 내부망에 설치하고, 외부에서 접근이 가능한 프록시(Proxy) 서버(ex. ALB, Nginx, Apache 등)을 둔다. 추가로, 부하에 따라 자동으로 서버를 늘리는 기능(이를 오토 스케일링[AutoScaling]이라 한다.)이 있고 IP를 할당 받아 LB로 사용할 수 있다.
출처 : subicura.com/2019/05/19/kubernetes-basic-1.html
쿠버네티스 시작하기 - Kubernetes란 무엇인가?
쿠버네티스는 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼입니다. 1주일에 수십억 개의 컨테이너를 생성하는 구글이 내부 배포시스템으로 사용하던 borg를 기
subicura.com
'DevOps > K8s' 카테고리의 다른 글
MSA가 도대체 뭐야?! (0) | 2022.02.14 |
---|---|
Kubernetes란? (2/2) (0) | 2022.02.10 |
간단한 Docker 복습 (0) | 2022.02.09 |