본문 바로가기
데이터엔지니어링/K8s on Cloud

[3장] 쿠버네티스 구축하기

by 잼있는잼니 2023. 6. 6.

클러스터 아키텍처

쿠버네티스는 여러 대의 서버가 하나의 클러스터로 연결되어 있다.

다음은 쿠버네티스의 아키텍처다.

컨트롤 플레인

컨트롤 플레인은 클러스터의 두뇌 역할을 하며 컨테이너 스케줄링, 서비스 관리, API 요청 처리등의 작업 처리를 한다.

컨트롤 플레인은 다음과 같은 컴포넌트로 구성이 된다.

 

-컨트롤 플레인 컴포넌트-

 

kube-apiserver

컨트롤 플레인의 프론트엔트 서버로 API 요청을 처리한다.

 

etcd

어떤 노드가 존재하고 클러스터에 어떤 리소스가 존재하는지와 같은 쿠버네티스와 관련된 모든 정보를 저장하는 데이터 베이스다.

 

kube-scheduler

새로 생성된 파드(pod)를 실행할 노드를 결정한다.

 

kube-controller-manager

디플로이먼트와 같은 리소스 컨트롤러를 관리한다.

 

cloud-controller-manager

클라우드 기반 클러스터는 클라우드 업체와 연동해 로드 밸런서나 디스크 볼륨과 같은 자원을 관리한다.

 

컨트롤 플레인 컴포넌트는 클러스터 내 마스터 노드에서 실행된다.

 

-노드 컴포넌트-

 

워커 노드는 클러스터 내에서 사용자의 워크로드를 실행하는데, 쿠버네티스 클러스터의 각 워커 노드는 다음과 같은 컴포넌트를 실행한다.

 

kubelet

노드에 예약된 워크로드를 실행하기 위해 컨테이너 런타임을 관리하고 상태를 모니터링한다.

 

kube-proxy

서로 다른 노드에 있는 파드 간 통신이나 파드와 인터넷 사이의 네트워크 트래픽을 라우팅한다.

 

컨테이너 런타임

컨테이너를 시작하고 중지하며 컨테이너 간 통신을 처리한다. 일반적으로 도커가 사용되지만 쿠버네티스는 rkt나 CRI-O와 같은 다른 컨테이너 런타임도 지원한다.

 

서로 다른 소프트웨어 컴포넌트를 실행하는 것 외에는 마스터 노드와 워커 노드 사이에 본질적 차이는 없지만, 도커 데스크톱이나 미니쿠브와 같이 클러스터 크기가 매우 작은 경우를 제외하면 마스터 노드는 일반적으로 사용자 워크로드를 실행하지 않는다고 한다.

 

아래는 쿠버네티스 컴포넌트 간 연동 구조다.

{"originWidth":700,"originHeight":313,"style":"alignCenter","caption":"Components of Kubernetes Architecture

 

고가용성

정상적인 쿠버네티스 컨트롤 플레인은 마스터 노드로 여러 개로 구성되어 고가용성을 보장한다.

개별 마스터 노드에 장애가 발생하거나 컨트롤 플레인이 중지되어도 클러스터는 정상 작동하며, 네트워크 장애로 컴포넌트끼리 통신하지 못하는 네트워크 파티션 상황에서도 컨트롤 플레인의 고가용성으로 이를 처리할 수 있다.

 

etcd 데이터베이스는 여러 노드에 걸쳐 복제되며, etcd 복제본의 절반 이상이 사용 가능한 상태면 개별 etcd 노드 장애에도 고가용성을 보장한다.

 

컨트롤 플레인 장애

컨트롤 플레인 장애는 사용자의 애플리케이션을 다운 시키지는 않으나 잘못된 작동을 유발할 수 있다.

예를 들어 클러스터의 모든 마스터 노드를 중지할 경우 워커 노드의 파드는 한동안 계속 실행되나 새로운 컨테이너를 배포하거나 쿠버네티스 리소스를 변경할 수는 없으며 디플로이먼트와 같은 컨트롤러는 중지가 된다.

그래서 컨트롤 플레인의 고가용성은 매우 중요하며, 노드에서 장애가 발생해도 클러스터가 정족수(quorum)를 유지할 수 있도록 충분한 수의 마스터 노드가 필요하다.(상용 클러스터의 경우 마스터 노드가 최소 3개 이상 필요)

 

워커 노드 장애

워커 노드의 장애는 마스터 노드 장애보다 별로 중요하지 않다. 컨트롤 플레인이 작동중이면 쿠버네티스가 워커 노드의 장애를 감지하고 파드를 다른 노드로 재조정하기 때문이다.

워커 노드의 개수가 적을수록 각 노드가 클러스터 내에서 차지하는 용량의 비율이 커진다는 것 명심!!

 

클라우드 가용성 영역 전체에 장애가 발생할 가능성도 있어서, 모든 워커 노드를 동일존에 두는 것보다 2개나 3개로 분산시키는게 좋다.

 

고가용성은 마스터 노드 하나 혹은 워커 노드 몇 개에 장애가 발생하더라도 클러스터에는 아무 문제가 없도록 보장하기에, 실제로 그러한지 테스트해봐야한다. 시스템 점검 시간이나 트래픽 적은 시간대에 워커 노드를 재부팅하고 확인하거나, 마스터 노드를 재부팅하기가 있다.


관리형 쿠버네티스 서비스

구글 쿠버네티스 엔진

쿠버네티스를 개발한 구글의 관리형 쿠버네티스 서비스로 구글 클라우드 모든 서비스와 완벽 통합이 되어있어 책의 저자는 가장 좋은 관리형 쿠버네티스 서비스를 제공한다고 생각하고, 추천한다.

 

아마존 일래스틱 쿠버네티스 서비스

아마존의  EKS서비스로 GKE처럼 많은 기능을 제공하지 않아 직접 설정할게 많다고 한다.

 

애저 쿠버네티스 서비스

AKS는 GKE와 같은 기능을 대부분 제공하며, 웹 인터페이스나 애저 az 명령줄 도구를 사용하여 클러스터를 생성이 가능하다.

 

오픈시프트

서비스형 플랫폼(PaaS) 제품으로 관리형 쿠버테니스 서비스 이상의 역할을 하며, CI와 소프트웨어 개발 수명 주기 관리를 목표로 한다.

 

IBM 클라우드 쿠버네티스 서비스

바닐라 쿠버네티스 클러스터 구축이 가능하며 매우 직관적이고 간단하다고한다.

 

VM웨어 PKS

멀티 퍼블릭 클라우드에서 운영 중인 클러스터의 보안과 확장성을 원하는 대기업이라면 괜찮아 보인다.

 

턴키형 쿠버네티스 솔루션

웹 브라우저에서 버튼만 클릭하면 바로 사용 가능한 상용 쿠버네티스 클러스터를 제공하는 것이 목표이며, 아래는 턴키형 솔루션의 일부다.

 

스택포인트

자체 호스팅과 완전하게 관리되는 서비스 사이의 절충안이며, 웹 기반에서 쿠버네티스를 프로비저닝하고 관리할 수 있으며 자신의 퍼블릭 클라우드 인프라에서 워커 노드를 실행하고자 하는 기업에게 매력적 솔루션이다.

 

컨테이너십 쿠버네티스 엔진

적절한 기본값으로 클러스터를 구축하고 실행할 수 있으며 클러스터에 요구되는 거의 모든 사항을 사용자가 지정 가능하다.


쿠버네티스 설치 프로그램

관리형이나 턴키형 클러스터를 사용할 수 없다면 자체 호스팅으로 쿠버네티스를 구축하고 실행하는 것을 고려할 때의 프로그램들이다.

 

kops

쿠버네티스 클러스터의 자동 프로비저닝을 위한 명령줄 도구이며, 상용 쿠버네티스 배포에 적합한 고가용성 클러스터 구축을 지원한다. AWS 전용 도구로 사용되었기 때문에 AWS에서 자체 호스팅 쿠버네티스를 운영한다면 좋은 선택이다.

 

kubespray(이전 이름 Kargo)

쿠버네티스 산하 프로젝트로 상용 클러스터를 쉽게 배포하는 도구로, 고가용성과 다중 플랫폼 지원 등 다양한 기능 제공하며, 온프레미스 베어 메탈 서버에 쿠버네티스를 설치하는 데 중점을 두나, 클라우드 환경에도 적합하다.

 

TK8

테라폼(클라우드 서버 생성용)과 kubespray(쿠버네티스 설치용)를 모두 활용하는 명령줄 도구로 쿠버네티스 클러스터 프로비저닝을 위해 사용하며 Go로 작성되어있다. 쿠버네티스 구축뿐 아니라 추가 기능 설치를 제공한다.

 

켈시 하이타워의 튜토리얼

쿠버네티스 클러스터 수동 설치 설명 자료로, 구축 과정에서 연관된 부분의 복잡한 상태를 잘 보여준다. 쿠버네티스가 내부적으로 어떻게 작용하는지 이해하기 위해 따라 해볼 가치가 있다.

 

kubeadm

쿠버네티스에서 제공하는 도구로 쿠버네티스 클러스터를 최적으로 설치하고 관리할 수 있도록 도와준다. 클러스터에 인프라를 프로비저닝하지는 않으므로 베어 메탈 서버나 클라우드 인스턴스에 쿠버네티스를 설치하는 데 적합하다.

 

Tarmak

쿠버네티스 클러스터의 수명 주기를 관리하는 도구로 클러스터 노드의 수정과 업그레이드 작업을 안정적이고 쉽게 할 수 있도록 도와준다. 내부적으로 테라폼을 사용하여 클러스터 노드를 프로비저닝하고 퍼핏(puppet)을 사용하여 노드의 설정을 관리한다.

 

랜처 쿠버네티스 엔진

RKE는 노드 프로비저닝을 제공하지 않으므로 클러스터를 구축하기 전에 직접 도커를 설치해야 하며, 컨트롤 플레인의 고가용성을 지원한다.

 

퍼핏 쿠버네티스 모듈

퍼핏 쿠버네티스 모듈은 컨트롤 플레인과 etcd의 고가용성 지원을 포함한 쿠버네티스의 설치 및 설정을 제공한다.

 

kubeformation

온라인 쿠버네티스 구성 도구로 웹 인터페이스를 사용하여 클러스터에대한 옵션을 선택할 수 있다. 다른 도구만큼 사용하기 쉽지는 않지만 배포 관리자와 같은 기존의 자동화 도구와 연속성을 가지고 있어서 매우 유연하다.


상식적인 원칙을 토대로 추천을 하는데, 적게 실행하는 소프트웨어 철학(Run less software - The Intercom Blog)

 

- 표준 기술을 선택해라

- 차별화되지 않는 고된 일은 아웃소싱해라

- 지속적인 경쟁 우위를 창출해라

 

위의 철학을 기반으로 가능하면 관리형 쿠버네티스를 사용하는것을 권장한다.

 

적게 실행하는 소프트웨어 철학을 기반으로 가능하면 관리형 쿠버네티스를 사용하는게 좋다고 한다.

쿠버네티스 클러스터를 설치, 구성, 유지, 보안, 업그레이드 하는것은 차별화되지 않은 고된 일이기 때문이다.

 

특정 업체의 관리형 쿠버네티스 서비스를 이용한다면 그 업체에 종속되는 것이 아닌가라는 의문이 들 수 있지만, 쿠버네티스는 표준 플랫폼이기 때문에 다른 쿠버네티스 제공 업체의 시스템에서도 작동할 것이다.

 

관리형 쿠버네티스에서 제공하는 특별 기능이 필요없다면 직접 구축해야하는데, 이때 표준 쿠버네티스 설치 도구를 이용하자.(kops 나 kubespray)


다음은 4장 쿠버네티스 오브젝트 다루기!!

댓글