클러스터는 컨트롤 플레인에 의해 관리되며 쿠버네티스 에이전트를 실행하는 노드 (물리 또는 가상 머신)의 집합이다. 쿠버네티스 v1.37는 최대 5,000개의 노드를 가진 클러스터를 지원한다. 더 구체적으로, 쿠버네티스는 다음 기준을 모두 충족하는 구성을 수용하도록 설계되었다.
노드를 추가하거나 제거하여 클러스터를 스케일링할 수 있다. 이를 수행하는 방법은 클러스터가 배포된 방법에 따라 다르다.
여러 노드를 가진 클러스터를 생성할 때 클라우드 프로바이더 쿼터 문제에 부딪히는 것을 피하려면, 다음을 고려한다.
대규모 클러스터의 경우, 충분한 컴퓨트 및 기타 리소스를 가진 컨트롤 플레인이 필요하다.
일반적으로 장애 영역당 한두 개의 컨트롤 플레인 인스턴스를 실행하고, 먼저 해당 인스턴스를 수직으로 스케일링한 다음 (수직) 스케일링 효율이 떨어지는 지점에 도달한 후 수평으로 스케일링한다.
내결함성을 제공하려면 장애 영역당 최소 하나의 인스턴스를 실행해야 한다. 쿠버네티스 노드는 동일한 장애 영역에 있는 컨트롤 플레인 엔드포인트로 트래픽을 자동으로 유도하지 않는다. 그러나, 클라우드 프로바이더는 이를 수행하기 위한 자체 메커니즘을 가지고 있을 수 있다.
예를 들어 관리형 로드 밸런서를 사용해 장애 영역 A 에 있는 kubelet 및 파드에서 발생하는 트래픽을 전송하고, 해당 트래픽을 역시 A 영역에 있는 컨트롤 플레인 호스트로만 향하게 하도록 로드 밸런서를 구성한다. 장애 영역 A 에 있는 단일 컨트롤 플레인 호스트 또는 엔드포인트가 오프라인이 되면, 이는 A 영역의 노드에 대한 모든 컨트롤 플레인 트래픽이 이제 영역 간에 전송됨을 의미한다. 각 영역에서 여러 컨트롤 플레인 호스트를 실행하면 이러한 상황이 발생할 가능성을 줄일 수 있다.
대규모 클러스터의 성능을 향상시키기 위해, 별도의 전용 etcd 인스턴스에 이벤트(Event) 오브젝트를 저장할 수 있다.
클러스터를 생성할 때, (사용자 도구를 사용하여) 다음을 수행할 수 있다.
대규모 클러스터를 위한 etcd 구성 및 관리에 대한 자세한 내용은 쿠버네티스를 위한 etcd 클러스터 운영하기 및 kubeadm으로 고가용성 etcd 클러스터 설정하기를 참조한다.
쿠버네티스 리소스 한도(limits)는 파드와 컨테이너가 다른 컴포넌트에 영향을 미칠 수 있는 메모리 누수 및 기타 방식의 영향을 최소화하는 데 도움이 된다. 이러한 리소스 한도(limits)는 애플리케이션 워크로드에 적용되는 것과 마찬가지로 애드온 리소스에도 적용된다.
예를 들어, 로깅 컴포넌트에 대한 CPU 및 메모리 한도(limits)를 설정할 수 있다.
...
containers:
- name: fluentd-cloud-logging
image: fluent/fluentd-kubernetes-daemonset:v1
resources:
limits:
cpu: 100m
memory: 200Mi
애드온의 기본 한도(limits)는 일반적으로 각 애드온을 소규모 또는 중규모 쿠버네티스 클러스터에서 운영한 경험으로부터 수집된 데이터를 기반으로 한다. 대규모 클러스터에서 실행할 때, 애드온은 종종 일부 리소스를 기본 한도(limits)보다 더 많이 소비한다. 대규모 클러스터가 이러한 값을 조정하지 않고 배포될 경우, 애드온은 메모리 한도(limit)에 계속 도달하여 지속적으로 종료될 수 있다. 또는 애드온이 실행되긴 하지만 CPU 타임 슬라이스 제한으로 인해 성능이 저하될 수 있다.
여러 노드를 가지는 클러스터를 생성할 때 클러스터 애드온 리소스 문제에 부딪히는 것을 피하려면, 다음을 고려한다.
클러스터 필수 컴포넌트(CoreDNS, metrics-server 및 기타 중요 애드온)가 다른 워크로드보다 먼저 스케줄링되고 우선순위가 낮은 파드에 의해 선점되지 않도록 하려면, system-cluster-critical 또는 system-node-critical과 같은 시스템 프라이어리티클래스(PriorityClass)로 이를 실행한다.
VerticalPodAutoscaler는 파드에 대한 리소스 요청(requests) 및 한도(limits)를 관리하는 데 도움을 주기 위해
클러스터에 배포할 수 있는 사용자 정의 리소스이다.
Vertical Pod Autoscaler에 대해 자세히 알아보고,
이를 사용하여 클러스터 필수 애드온을 포함한 클러스터 컴포넌트를 스케일링하는 방법에 대해
알아본다.
노드 오토스케일링에 대해 읽어본다.
애드온 리사이저는 클러스터 스케일이 변경됨에 따라 애드온의 크기를 자동으로 조정하는 데 도움이 된다.