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

[6장] 클러스터 운영하기

by 잼있는잼니 2023. 8. 3.

클러스터 사이징과 스케일링

클러스터 용량 계획 세우기

용량을 산정하는 초기 측정 법은 동일한 애플리케이션을 실행하는 데 필요한 기존 서버의 수를 계산하는 것이다.

 

가장 작은 클러스터

가장 작은 쿠버네티스 클러스터는 단일 노드 구성이나, 안정적인 쿠버네티스 클러스터를 위한 최소한의 마스터 노드 개수는 세 개이다. 워크로드를 실행하는데 작은 클러스터로도 가능하나 권장하지 않는다.

 

클러스터 컨트롤 플레인이 고가용성을 보장한다면, 단일 노드로 운영해도 되나, 노드 장애를 고려해서 최소 두 개의 워커 노드로, 쿠버네티스가 모든 파드의 레플리카를 최소 두 개씩 실행하게 하는 것을 권한다.

 

가장 큰 클러스터

쿠버네티스는 공식적으로 최대 5000개 노드의 클러스터를 지원하며, 15만 개 이하의 파드, 30만 개 이하의 컨테이너, 노드당 파드 100개 이하를 지원한다. 클러스터가 크면 클수록 마스터 노드의 부하가 커진다는걸 고려해야한다.


클러스터 페더레이션

페더레이션은 두 개 이상의 클러스터를 동기화해 동일한 워크로드를 실행할 수 있으며, 쿠버네티스 클러스터가 복구를 위해 멀티 클라우드를 사용하거나 사용자 지연 시간을 줄이기 위해 여러 지역에 있어야 하는 경우 유용하다.

 

멀티 클러스터가 필요한가??

대규모 서비스가 아니면 한두개의 클러스터면 적당하다.


노드와 인스턴스

적절한 노드 크기 선정

클러스터에서 필요한 노드 개수는 노드 크기에 따라 다르며, 파드 레플리케이션이나 고가용성과 같은 쿠버네티스가 제공하는 기능을 활용하기 위해선 여러 대의 노드로 작업 분산이 좋다.

 

클라우드 인스턴스 유형

kubelet과 같은 쿠버네티스 컴포넌트도 리소스를 사용하기에 원할한 워크로드를 위해서 여유 용량이 필요하다.

소규모 클러스터의 마스터 노드는 CPU 1개, 메모리 4GiB가 합리적인 최소 크기이다.

대규모 클러스터의 경우 두 대 혹은 세 대의 다른 인스턴스 크기를 혼합해 프로비저닝하는 것이 더 좋을수도 있다.

 

다양한 종류의 노드

쿠버네티스의 리소스 상한 기능을 사용해, 특정 파드가 GPU 같은 특수 속성을 가진 노드에서만 작동하게하며, 파드에서의 우선순위를 정할 수 있다.


클러스터 스케일링

인스턴스 그룹

kops와 같은 클러스터 관리도구를 이용해 노드를 추가할 수 있으며, kops는 주어진 인스턴스 유형의 노드 집합인 인스턴스 그룹이라는 개념을 사용한다.

그룹의 최소, 최대 크기를 변경하거나 특정 인스턴스 유형을 변경해 그룹의 크기를 조정할 수 있다.

 

다운스케일링

이론상 쿠버네티스 클러스터 축소는 문제가 없으며, kubectl drain 명령어를 사용하여 노드를 비울 수 있다.

대부분의 애플리케이션에서 노드를 종료하고 파드를 즉시 제거하는 것 보다 비우기 작업 수행이 더 바람직하다.

 

오토스케일링

오토스케일링은 스케줄이나 메트릭에 따라 그룹 내 인스턴스 개수를 자동으로 늘리거나 줄인다.

kops같은 쿠버네티스 클러스터 관리 도구들은 오토스케일링을 지원한다.

수요의 변동이 큰 대규모 애플리케이션의 경우 사용하기 유용한 기능이다.

 


카오스 테스팅

고가용성을 실제로 검증하는 유일한 방법은 하나 이상의 클러스터 노드를 제거하고 어떻게 되는지 확인하는 것이며, 이는 쿠버네티스 파드나 애플리케이션도 동일하다. 다만, 이런 프로세스를 자동화된 테스트는 카오스 몽키 테스트로 알려져 있다.

시미안 아미는 다양한 카오스 엔지니어링 도구를 제공하며, 레이턴시 몽키는 네트워크 문제를 위해 통신 지연 발생하며, 시큐리티 몽키는 보안 취약점을 찾는다.

 

카오스 몽키의 개념을 쿠버네티스 애플리케이션에도 적용할 수 있으며, 스테이징 클러스터에서 실행이 가능하나, 실제 서비스 환경과 동일한 결과를 보장하지 않는다. 즉, 상용 환경에 대해서 알고 싶으면 상용 환경에서 테스트해야 한다.

 


 

댓글