Kubernetes

[Kubernetes] 쿠버네티스를 사용해야 하는 이유

둘섭 2024. 8. 1. 12:51

오늘날 많은 서비스들이 Container를 통해 운영되고 있다.

 

개발과 운영환경 간의 동일 서비스 보장, 대규모 시스템에서의 마이크로서비스 등 Container가 쓰이고 있는 이유는 정말 다양하다.

하지만 단순히 Container 기술뿐만 아니라 이렇게 다량으로 운영되고 있는 Container를 관리해줄 중앙 구심점 역시도 필요하다.

 

Kubernetes 란

 

 

 

Kubernetes, 줄여서 K8S라고도 부르는 쿠버네티스는 Google에서 개발한 오픈소스 Container Orchestration 플랫폼이다.

 

Container Orchestration 도구는 Kubernetes 말고도 RedHat 사의 OpenShift 등 여러가지가 있지만 

 

완전 오픈소스인데다 어디서든 Reference를 구할 수 있을 만큼 생태계가 풍부하고, On-premise나 Cloud Native 등 환경에 구애받지 않고 어디서든 구동할 수 있다는 점 때문에 현재 Container Orchestration의 표준이 되었다.

 

 

Container Orchestration 이란

 

간단히 말하자면 그냥 수많은 Container들을 관리해주는 것인데, 아래의 Action들을 포함한다

 

자동화된 스케일링

- 트래픽의 변동에 따라 Container를 자동으로 증가시키거나 감소

 

자동화된 Roll-out, Roll-back

- Roll-out: 업데이트 시, 점진적으로 새 버전을 배포하고 모니터링하여 문제가 없으면 점차적으로 전체 시스템에 배포

- Roll-back: 문제가 발생하면 자동으로 이전 버전으로 롤백하여 서비스 중단을 최소화

 

자동화된 복구
- 컨테이너 상태를 계속 감시하고 있는 control tower 필요

- 문제가 발생한 Container를 재시작하고 가용성을 높이고 다운타임을 감소

 

자동화된 Bin Packing

- Bin packing: 리소스를 최대한 효율적으로 사용하기 위해 컨테이너를 클러스터 노드에 자동으로 배치하는 기능

 

시크릿과 구성 관리

- 애플리케이션에서 사용하는 secret을 안전하게 저장

- 환경 설정이나 구성 파일을 중앙에서 관리하여 운영의 일관성을 유지


Service Discovery와 로드 밸런싱

- 각 서비스가 서로 통신할 수 있도록 네트워크를 설정

- 로드 밸런서를 사용하여 Container 간에 트래픽을 균등하게 분배하여 특정 Container에 과부하가 걸리지 않도록 관리

 

Storage Orchestration
- 클라우드 기반의 스토리지 서비스나 로컬 디스크를 Container에 mount

 

IaC를 사용한 운영

- 인프라 설정을 코드로 정의하고 자동으로 provisioning

 

 

Kubernetes의 구성

출처: Kubernetes 공식 페이지

 

Kubernetes는 크게 Control PlaneData plane으로 나뉜다

 

Control plane (Master node) 은 Kubernetes 전체를 통제/관리하는 역할을 담당하며, 아래의 4가지를 포함한다.

  • kube-apiserver
  • etcd
  • kube-scheduler
  • kube-controller-manager

 

Data plane (Worker node) 은 실제 Container Runtime이 있는 부분이며, 실제 애플리케이션이 배포되는 곳이다.

아래 4가지를 포함한다.

  • kubelet
  • kube-proxy
  • continer runtime

 

사용자가 Kubernetes를 사용하기 위해 kubectl (보통 '쿠베시티엘' 이라고 발음) 이라는 명령어를 사용하는데, 이 명령어는 Control plane 으로 전달되며 Container 워크로드에 대한 작업을 수행하게 된다.