[Kubernetes 시작하기] 01. 쿠버네티스 소개

2023. 11. 19. 15:14Infrastructure/Kubernetes

반응형

이 포스팅은 쿠버네티스 시작하기 3/e 책을 정리한 내용입니다.


  1. Kubernetes? (= k8s)
  2. 개발 속도 향상
    1. 불변성
    2. 선언형 configuration
    3. 자가 치유 시스템
  3. 확장
  4. 인프라 추상화
  5. 클라우드 네이티브 에코시스템

1. Kubernetes? (= k8s)

쿠버네티스는 컨테이너화된 애플리케이션을 배포하기 위한 오픈소스 오케스트레이터입니다.

orchestrator
레지스트리 저장소로부터 컨테이너 이미지를 가져오거나 배치하고 실행중인 컨테이너를 관리할 수 있게하는 도구


k로 시작되서 s로 끝나는 쿠버네티스는 k와 s 사이의 8글자를 줄여서 k8s라고 줄여서 부르곤 합니다.

대부분의 Public cloud 에서 지원하고 있으며, Cloud native application 구축을 위한 표준 API로 자리하고 있습니다.

신뢰성과 확장성 갖춘 분산 시스템 인프라 요소입니다.

신뢰성은 시스템의 일부분이 고장나더라도 전체 시스템이 동작하지 않아서는 안되는 성질로,
rollout되는 동안에도 해당 시스템의 가용성을 그대로 보장하는 것을 예시로 들 수 있습니다.

rollout: 배포에 대한 변경사항. rollout을 이용하여 배포를 시작/일시정지/재개/롤백할 수 있습니다.

확장성은 상황에 따라 애플리케이션 용량이나 수를 늘리거나 줄이는 것을 의미합니다.

쿠버네티스와 컨테이너 API를 사용하는 것에는 아래와 같은 장점이 있습니다.

  • 개발 속도 향상
  • 확장성
  • 인프라 추상화
  • 효율성 증대
  • 클라우드 네이티브 에코시스템

2. 개발 속도 향상

속도는 가용성을 갖는 서비스를 유지하면서 제공할 수 있는 서비스의 수로 측정합니다.
이 값이 높을 수록, 새로운 소프트웨어를 안정적으로 배포할 수 있고, 이는 개발 속도 향상에도 큰 영향을 줍니다.

쿠버네티스에서는 속도 개선을 위해 아래과 같은 특징을 지니고 있습니다.

  • 불변성
  • 선언형 configuration
  • 온라인 자가 치유 시스템
  • 재사용 가능한 공유 라이브러리 및 도구

2.1. 불변성

Immutable infrastructure

불변형 인프라.
서버가 한번 배포된 이후 절대 변경되지 않습니다. 따라서, 시스템에서 생성된 artifact(실행파일)는 사용자의 수정에 의해 변경될 수 없습니다.


예전의 방식에서는,
yum update 과 같은 패키지 관리 도구를 통해 기존 인프라 시스템을 업그레이드 했습니다.

더 쉽게 예시를 들자면, Apache와 같은 서버의 업데이트가 필요한 경우, 직접 인프라 구성팀이 Apache 웹서버를 업그레이드 시키기도 했고
httpd.conf 구성파일의 업그레이드가 필요했을 경우, 기존 파일을 덮어쓰는 형태였습니다.

이와 같은 구버전의 방식의 경우, 시스템을 업그레이드 하게되면, 시스템도 업그레이드 되고 구성파일도 변경되기 때문에
다시 예전의 버전으로 되돌리고 싶은 경우 많은 작업이 필요하였습니다.
물론, 기존 구성에 대해 백업을 두는 것도 방법이겠지만 이에 대한 공수도 많이 들어간다는 문제점이 있었습니다.

불변형 인프라는 이에 대한 해결 방안입니다.
사용하는 인프라 서비스(Apache WebServer, DB 등) 버전은 한번 설정하고 개발자에 의해 직접적으로 수정되지 않습니다.
그리고, 그 서비스를 이용하기 위한 구성파일(httpd.conf, my.cnf) 역시 직접적으로 수정되지 않습니다.

인프라 서비스의 버전과 구성파일에 대한 세팅을 쿠버네티스 설정파일에 정의되고
이미지를 빌드한 후, 실행중인 컨테이너를 직접적으로 수정하는 일이 없으며

만일, 서비스버전을 변경하고 싶거나, 설정파일 수정이 필요하다면 새로운 버전의 이미지를 구성하여 이미지 교체를 통해 변경이 이뤄집니다.

불변형 인프라는, 예전버전의 시스템 및 구성파일로 롤백하는 것이 매우 간편합니다.
단순하게, 예전에 사용했던 이미지로 교체하여 빌드하면 끝이기 때문입니다.


2.2. 선언형 configuration

상태를 선언하는 방법으로,
리소스 존재 유무를 따지는 것보다는 원하는 상태로 업데이트하는 것에 초점을 맞추고 있습니다.
원하는 목적에 달성하기 위한 구체적인 명령 제시가 아닌, 목적에 대한 선언만 있으며
시스템이 스스로 판단하여 목적을 달성합니다.
이는, 시스템 운영에 필요한 판단과 운영에 대해 사람의 개입을 최소화 시킵니다

직접적으로 명령어를 나열하는 것이 아니기 때문에
선언한 명세대로 수행되지 않았을시, 일정시간 동안의 대기 후 다시 재생성 등의 기능을 자동으로 구성하는 것도 손쉽게 가능합니다.


2.3. 자가 치유 시스템

또, 불변형 인프라 시스템에서, 사람이 직접 구성을 변경했을시
선언형 configuration 명세와 현재 구성설정이 다름을 감지하여 최초로 선언된 상태로 복구하는 것도 가능합니다.이는, 의도치않은 수정이 일어나도 자동으로 감지되어 작동되기 때문에 전체 시스템을 더 견고하게 만들어 신뢰성을 높입니다.

전통적인 방식에서는 이러한 변화에 대해 사람이 직접 장애를 분석하고 복구해야했다면, k8s에서는 선언형 configuration을 이용한 자가 치유가 가능합니다.

이는, 신뢰성 있는 시스템 구축에도 도움이 되며, 시스템 운영에 대한 유지보수 비용도 줄여주어 개발자의 개발 속도 향상에 큰 영향을 줍니다.


3. 확장

마이크로서비스로 애플리케이션 서비스를 구성하면, 필요에 따라 각 서비스를 확장하는 것도 용이해집니다.

이벤트로 인해 일시적으로 트래픽이 몰리는 API 서버를 증설하는 등의 행위를 예로 들 수 있습니다.

k8s에서는 이러한 서비스 확장을 선언형 컨피규레이션으로 간단히 정의할 수 있고
새로운 선언상태를 감지하면, 쿠버네티스에서 알아서 서비스를 확장합니다.

쿠버네티스는 아래와 같은 추상화 및 API를 제공하여 마이크로서비스 아키텍처 구축에 편의를 제공합니다.

  • 파드, Pod
  • 디스커버리, Discovery
  • 네임스페이스, Namespace
  • 인그레스, Ingress

4. 인프라 추상화

k8s는 특정 클라우드시스템에 국한된 서비스가 아닌, 다양한 클라우드 시스템에 손쉽게 이식할 수 있습니다.

특정 클라우드에서 제공하고 있는 클라우드 관리형 서비스가 아닌 오픈소스 스토리지 솔루션을 이용한다면 선언형 configuration을 이용하여 새로운 클라우드로 환경 구축을 손쉽게 할 수 있습니다.

이는 k8s가 API 지향 인프라 추상화 특징에 의한 특징입니다.


5. 클라우드 네이티브 에코시스템

k8s는 처음부터 확장 가능한 환경을 염두하여 설계되었습니다.
이러한 설계목표는 쿠버네티스 도구 및 서비스에 대한 활발한 커뮤니티가 형성되어, 쿠버네티스 기반의 에코시스템(비즈니스 생태계)로 이어졌습니다.

이러한 풍부한 클라우드 네이티브 에코시스템은 개발자를 비즈니스 로직 및 서비스 개발에만 집중할 수 있게 해줍니다.


++

  • Kubernetes Up & Running Third Edition
728x90
반응형