[Kubernetes] 소개


(참고: Kubernetes up and running 2/e Chapter 1, O'Reilly)

 

쿠버네티스(Kubernetes)는 2014년에 처음 소개됐습니다. 신뢰성, 확장성을 갖춘 분산 시스템을 구축, 배포하는데 사용됩니다

쿠버네티스는 아래와 같은 이점이 있습니다

  • 속도
  • 확장성
  • 인프라 추상화
  • 효율성

 

속도

쿠버네티스는 가용성을 보장하면서 빠르게 작업할 수 있는데, 이를 위한 핵심 개념은 아래와 같습니다

  • 불변성 (Immutability)
  • 선언적 설정 (Declarative Configuration)
  • 온라인 자가치유 (Online self-healing system)

1. 불변형 인프라를 사용하면 기존의 증분 업데이트가 아닌 새 컨테이너 이미지 빌드 후 컨테이너 레지스트리 푸시, 기존 컨테이너 중지하고 새 컨테이너 시작과 같은 식으로 변경할 수 있습니다. 불변형 인프라의 장점은 기존 이미지가 남아있어 에러 발생시 즉시 롤백이 가능하고, 생성한 아티팩트와 생성 방법에 대한 기록을 토대로 diff를 명확하고 쉽게 확인할 수 있습니다.

(문제가 생겼을 때 실행중 컨테이너를 kubectl로 부득이하게 변경할 수 있지만, 선택의 여지가 없을 때만 사용하는 방식입니다. 문제를 해결하고, 변경된 부분을 선언형 설정 업데이트로 기록해야 합니다)

 

2. 쿠버네티스의 모든 구성요소는 선언형 설정 객체입니다. 실제 상태(actual state)와 원하는 상태(desired state)를 일치시키는 것이 k8s의 역할입니다.

명령형 설정(Imperative configuration)의 실제 상태는 일련의 커맨드로 구성되는 반면, 선언적 설정은 상태를 정의합니다

(ex. 3중 복제본 생성하려면? 명령형 설정 -> "A 실행, B 실행, C 실행" // 선언적 설정 -> "복제본 개수==3")

 

3. 쿠버네티스는 온라인 자가치유 시스템으로, 현재 상태와 원하는 상태를 일치시키기 위해 끊임없이 움직입니다

예를 들어 원하는 상태가 복제본 개수 3개이고, 수동으로 네번째 복사본 생성하면 k8s가 하나를 없앱니다. 반대로 복제본 하나를 지우면 k8s가 복제본 하나를 생성할 겁니다

온라인 자가치유로 개발자들은 운영, 유지보수에 드는 시간과 에너지를 아낄 수 있습니다

 

확장성

쿠버네티스는 분리된 아키텍처(Decoupled Architecture)를 지향해 확장성을 달성합니다. 쿠버네티스는 마이크로서비스 아키텍처를 더 쉽게 구축할 수 있도록 다양한 추상화, API를 제공합니다

  • 팟(pod): 컨테이너 단일 배포단위
  • 서비스(service): 로드밸런싱, 네이밍 및 격리된 마이크로서비스를 위한 디스커버리 기능 제공
  • 네임스페이스(namespace): 격리, 접근제어 제공
  • 인그레스(ingress): 마이크로서비스를 단일 외부 API로 그룹화해 사용할 수 있는 프론트엔드 제공

 

인프라 추상화

예를 들어 PersistentVolume, PersistentVolumeClaim 등의 경우 애플리케이션을 특정 스토리지 구현체로부터 추상화할 수 있습니다

 

효율성

개발자가 머신 관점에서 관리할 필요가 없기 때문에 여러 애플리케이션을 서로 영향을 주지 않고 팟으로 배포할 수 있습니다

반응형