쿠버네티스 만화
Kubernetes comic을 정리한 글입니다.
만화를 통해 쿠버네티스에 대해 소개하겠습니다.
서비스를 제공하는 건 어렵습니다.
과거 모놀리틱(Monolithic) 앱은 상호 의존적인 부분들이 많아 배포가 어려웠습니다.
모놀리틱(Monolithic) 이란 모든 비지니스 로직이 한 앱에 포함된 구조를 의미합니다.
모놀리스는 상호 의존적(Interdependent)인 부분이 많아 통합과 배포가 어려웠습니다.
이를 개별 프로세스들로 나누어 컨트롤할 수 있다는 것을 알게 되었습니다.
이 마이크로서비스(Microservices) 각각은 전체 프로젝트의 중단없이
개별적으로 디버깅, 업데이트 및 배포 할 수 있습니다.
이 과정은 지속적인 통합 및 배포(Continuous Integration and Delivery) 로
가기 위해 중요한 단계였습니다.
이 서비스들을 한 OS 에서 실행한다면, 라이브러리 버전들과 앱 컴포넌트들이
서로 충돌할 수 있습니다.
VM(Virtual Machine)을 사용하더라도 앱들은 여전히 충돌할 수 있었고,
또 각 VM은 여전히 무겁고 소모적이며 비쌉니다.
각 프로세스가 스스로 실행될 수 있도록 라이브러리와 세팅을 같이 굽는 것은 어떨까요?
즉, 각 프로세스가 모든 머신에서 실행하는 데 필요한 모든 것을 포함한다는 의미입니다.
이것이 자급자족 프로세스(A Self-Contained Process) 인 컨테이너입니다.
쿠버네티스는 컨테이너를 관리하기 위한 오픈 소스 솔루션입니다.
쿠버네티스의 주요 목표는 다음과 같습니다.
- 논리적이고 효율적으로 컨테이너를 배포하기
- 운영(Operations) 환경에서 빠르게 확장(또는 축소)하기
- 프로세스들의 실행과 안정성을 유지하기
- 마지막으로, 세세히 관리하지 않고도 무슨 일이 일어나는 지 쉽게 알기
이를 위해, 쿠버네티스는 새로운 수준의 추상화 파드(Pod) 를 추가했습니다.
파드 는 쿠버네티스 객체 모델에서 가장 작은 구성 요소입니다.
파드 는 컨테이너를 감시하고, 쿠버네티스는 파드 만 감시합니다.
대부분의 파드 는 한 컨테이너만 관리하지만,
단단히-결합된(tightly-coupled) 프로세스들은 한 파드 를 공유 하기도 합니다.
파드 그룹 은 노드 라는 단일 머신 (물리 or 가상)에 함께 배치됩니다.
노드 의 그룹을 클러스터 라고 합니다.
각각의 노드 는 마스터 노드 가 감독합니다.
이 클러스터 들은 배포(Deployment) 를 통해 배치됩니다:
배포 는 사용자가 작성한 간단한 .yaml 파일입니다.
이 선언에는 명령(Bidding)을 수행하기 위해 실행할 프로세스들이 선언되어 있습니다.
이제 쿠버네티스는 머신을 선택 하고
배포 에 지정된 컨테이너 이미지 를 가져와
각 파드 에 컨테이너 를 전파(propagate) 합니다.
모두 같은 추상화된 장비이므로 ,
프로세스가 어느 장비에서 실행되는 지 신경쓸 필요가 없습니다.
이것이 쿠버네티스가 구성한 추상화된 인프라 의 장점입니다.
같은 이미지로 만든 모든 컨테이너들은 서로 교환(Interchangeable) 할 수 있습니다.
불변의 템플릿으로부터 생성했기 때문에 모두 동일합니다(Identical).
쿠버네티스는 각 복제본(Replica)을 적절하게 위치할 수 있습니다.
CPU 낭비에 지쳤나요?
쿠버네티스가 더 효율적인 바이너리 포장(Bin Packing)을 찾을 것입니다.
위험이 분산될 수 있기 때문에, 실행 중인 프로세스가
단일 실패 지점(Single Failure Point) 으로 중단되지 않습니다.
시스템이 신속하게 이상적인 배포 상태로 복원 하는 동안
복제본은 계속 원활하게 실행 됩니다.
쿠버네티스는 스스로 치유합니다.
시스템이 배포 설정의 이상적인 상태와 실제 운영 환경의 파드 및 클러스터 의 상태를
열심히 확인합니다.
위반이나 불일치가 감지되면, 종료시키고 다시 만듭니다.
업데이트도 마찬가지입니다.
새 컨테이너 이미지는 레지스트리에서 가져오고
보통 원활하고 안정적인 전환을 위한 롤링 업데이트 로 배포합니다.
레이블(Label) 을 사용하면 프로세스의 모든 복제본을
지정된 클러스터 내의 단일 항목으로 쉽게 처리할 수 있습니다.
레이블(Label) 은 단일 서비스에 추가되는 복제본 집합입니다.
쿠버네티스는 개별 프로세스에 대해 걱정하지 않습니다.
실제 결과에만 관심이 있습니다: 즉, 쿠버네티스가 제공하는 집계 서비스만 신경씁니다.
쿠버네티스는 이러한 서비스를 매 분단위로 실행하고 문제 없이 유지합니다.
쿠버네티스를 사용하면, 원하는만큼 계속 실행할 수 있습니다.
모듈성(Modularity) 과 불변성(Immutability) 이 지속적인 통합 을
촉진하는 것처럼, 컨테이너 와 쿠버네티스 는 지속적인 배포를 가능하게 합니다.
문제 가 생겨도, 실행을 멈출 필요가 없고,
업그레이드 나 새 모델 이 필요해도 마찬가지입니다.
댓글남기기