개요
Kubernetes 클러스터는 노드를 효율적으로 관리할 수 있도록 TKE는 노드 풀 개념을 도입했습니다. 기본 노드 풀 기능을 사용하면 편리하고 빠르게 노드를 생성, 관리 및 종료하고 동적으로 노드를 스케일업 또는 스케일 다운할 수 있습니다.
리소스가 부족하여 클러스터의 인스턴스(Pod)를 스케쥴링할 수 없는 경우 자동으로 스케일업되어 인건비가 절감됩니다.
스케일 다운 조건이 충족되면(예: 노드가 유휴 상태일 때) 스케일 다운이 자동으로 트리거되어 리소스 비용이 절감됩니다.
제품 아키텍처
노드 풀의 전체 아키텍처는 다음과 같습니다.
일반적으로 노드 풀의 모든 노드는 다음 속성을 공유합니다.
노드 레벨 운영 체제.
과금 유형(현재 종량제 및 스팟 인스턴스가 지원됨).
CPU/메모리/GPU.
노드용 Kubernetes 컴포넌트의 실행 매개변수.
노드용 사용자 지정 시작 스크립트.
노드에 대한 Kubernetes Label 및 Taints 설정.
또한 TKE는 노드 풀에 대해 다음 기능을 확장합니다.
CRD로 노드 풀 관리 지원.
특정 노드 풀의 각 노드에 대한 최대 Pod 수.
노드 풀 레벨 자동 복구 및 업그레이드.
사용 사례
대규모 클러스터를 사용해야 하는 경우, 대규모 클러스터의 사용성을 향상시키기 위해 노드 풀을 사용하여 노드를 관리하는 것을 권장합니다. 다음 표에서는 대규모 클러스터를 관리하기 위한 여러 사용 사례를 설명하고 각 사용 사례에서 노드 풀의 효과를 보여줍니다.
|
클러스터에는 모델 구성이 다른 많은 이종 노드가 포함됩니다 | 노드 풀을 사용하면 통합된 방식으로 그룹별로 노드를 관리할 수 있습니다. |
클러스터는 자주 노드를 스케일업/다운해야 합니다 | 노드 풀은 OPS 효율성을 개선하고 운영 비용을 줄입니다. |
클러스터의 애플리케이션에 대한 스케쥴링 규칙이 복잡합니다 | 노드 풀 레이블을 사용하면 서비스 스케쥴링 규칙을 빠르게 지정할 수 있습니다. |
클러스터의 노드에는 정기적인 유지 관리가 필요합니다 | 노드 풀을 사용하면 Kubernetes 버전과 Docker 버전을 편리하게 업그레이드할 수 있습니다. |
관련 개념
TKE 오토 스케일링은 Tencent Cloud AutoScaling 및 Kubernetes 커뮤니티의 클러스터 cluster-autoscaler를 기반으로 구현됩니다. 관련 개념은 다음과 같습니다. AS: Tencent Cloud 자동 스케일링 서비스 AutoScaling.
ASG: AutoScaling Group, 구체적인 노드 풀(노드 풀은 오토 스케일링 서비스에서 제공하는 스케일링 그룹에 따라 다릅니다. 노드 풀은 스케일링 그룹에 해당합니다. 노드 풀만 신경쓰면 됩니다).
ASA: AS activity, 스케일링 활동.
ASC: AS config, AS 시작 구성, 즉 노드 템플릿.
노드 풀의 노드 유형
다양한 시나리오의 요구 사항을 충족하기 위해 노드 풀의 노드는 다음 두 가지 유형으로 분류할 수 있습니다.
설명:
기존 노드를 추가하는 것은 권장되지 않습니다. 노드를 생성할 수 있는 권한이 없는 경우 기존 노드를 추가하여 클러스터를 스케일업할 수 있습니다. 그러나 기존 노드를 추가하는 일부 매개변수는 정의한 노드의 템플릿과 일치하지 않을 수 있으며 오토 스케일링을 수행할 수 없습니다.
노드 풀 오토 스케일링 원리
사용하기 전에 노드 풀 오토 스케일링이 어떻게 작동하는지 읽어보십시오.
노드 풀 자동 스케일업 원리
1. 클러스터의 리소스가 부족한 경우(클러스터의 컴퓨팅/스토리지/네트워크 등의 리소스가 Pod의 request /친화도 규칙을 충족할 수 없음) CA(Cluster Autoscaler)는 스케쥴링 실패로 인해 Pending 중인 Pod를 감지합니다.
2. CA는 각 노드 풀의 노드 템플릿을 기반으로 스케쥴링을 판단하고 적절한 노드 템플릿을 선택합니다.
3. 적합한 템플릿이 여러 개 있는 경우 즉, 확장에 여러 노드 풀을 사용할 수 있는 경우 CA는 expanders를 호출하여 여러 템플릿에서 최적의 템플릿을 선택하고 해당 노드 풀을 스케일업합니다.
4. 지정된 노드 풀은 스케일업되고(멀티 서브넷 및 멀티 모델 정책 기반) 두 가지 재시도 정책(노드 풀 생성 시 설정됨)이 제공됩니다. 스케일업이 실패하면 구성된 재시도 정책에 따라 재시도합니다.
설명
특정 노드 풀의 스케일업은 노드 풀 생성 시 설정한 서브넷과 이후의 멀티 모델 구성을 기반으로 수행됩니다. 일반적으로 멀티 모델 정책이 우선하며 그 다음이 다중 가용존/서브넷 정책입니다.
예를 들어 여러 모델 A, B, 여러 서브넷 1, 2, 3을 구성하면 A1, A2, A3, B1, B2, B3을 기준으로 순차적으로 확장이 수행됩니다. A1이 품절되면 B1이 아닌 A2 스케일업을 진행합니다.
다음 이미지는 노드 풀 자동 스케일업이 작동하는 방식을 보여줍니다. 노드 풀 자동 스케일 다운 원리
1. CA(Cluster Autoscaler)는 사용률(Request 값, CPU 사용률과 MEM 사용률의 최대값을 취함)이 설정된 노드보다 낮은 것을 감지합니다. 사용량을 계산할 때 Pod가 차지하는 리소스에 포함되지 않도록 Daemonset 유형을 설정할 수 있습니다.
2. CA는 현재 클러스터 상태에서 스케일 다운이 트리거될 수 있는지 판단합니다. 다음 요구 사항을 충족해야 합니다.
노드 유휴 시간 충족(기본적으로 10분).
클러스터 확장 버퍼 시간 충족(기본적으로 10분).
3. CA는 노드가 스케일 다운 조건을 충족하는지 여부를 판단합니다. 필요에 따라 스케일 다운하지 않을 노드를 설정할 수 있습니다(조건을 충족하는 노드는 CA에 의해 스케일 다운되지 않음).
로컬 스토리지가 있는 노드.
Kube-system namespace에 있고 DaemonSet에서 관리하지 않는 Pod가 있는 노드.
설명
스케일 다운되지 않은 노드는 클러스터 레벨에서만 적용됩니다. 노드가 스케일 다운되지 않도록 보다 세분화된 보호가 필요한 경우 스케일 다운 보호 기능을 사용할 수 있습니다.
4. CA는 노드에서 Pod를 드레이닝한 후 다음 노드를 릴리스/종료합니다.
완전히 유휴 상태인 노드를 동시에 스케일 다운할 수 있습니다(최대 동시 스케일 다운 볼륨을 설정할 수 있습니다).
완전하지 않은 유휴 노드는 하나씩 스케일 다운됩니다.
다음 그림은 노드 풀 자동 스케일 다운이 작동하는 방식을 보여줍니다. 기능 및 참고 사항
|
| 노드 풀 추가 | 단일 클러스터에 대해 20개 이하의 노드 풀을 생성하는 것이 좋습니다. |
| 노드 풀 삭제 시 노드 풀의 노드 종료 여부를 선택할 수 있습니다. 노드가 종료되었는지 여부에 관계없이 노드는 클러스터에 보관되지 않습니다. | 노드 풀을 삭제할 때 노드 종료를 선택하면 노드가 보관되지 않습니다. 필요한 경우 나중에 새 노드를 생성할 수 있습니다. |
노드 풀에 오토 스케일링 활성화 | 노드 풀에 오토 스케일링을 활성화하면 클러스터의 워크로드에 따라 노드 풀의 노드 수가 자동으로 조정됩니다. | 스케일링 그룹 페이지에서 오토 스케일링을 활성화하거나 비활성화하지 마십시오. |
| 노드 풀에 대해 오토 스케일링 비활성화 | 노드 풀에 대해 오토 스케일링을 비활성화한 후 노드 풀의 노드 수가 클러스터의 워크로드에 따라 자동으로 조정되지 않습니다. |
노드 풀의 노드 수 조정 | 노드 풀의 노드 수를 직접 조정할 수 있습니다. 노드 수를 줄이면 노드 제거 정책에 따라 스케일링 그룹의 노드가 스케일 다운됩니다(기본적으로 가장 오래된 노드가 제거됨). 참고: 스케일 다운은 스케일링 그룹에 의해 수행됩니다. TKE는 특정 스케일 다운 노드를 감지할 수 없으며 사전에 drain/cordon할 수 없습니다. | 오토 스케일링을 활성화한 후에는 노드 풀의 크기를 수동으로 조정하지 않는 것이 좋습니다. 콘솔에서 스케일링 그룹의 원하는 용량을 직접 조정하지 마십시오. 오토 스케일링을 통해 노드 풀을 스케일 다운하십시오. 오토 스케일링 중에 노드는 먼저 스케쥴링 불가로 표시되고 노드의 모든 Pod가 드레이닝되거나 삭제된 다음 노드가 릴리스됩니다. |
| 노드 풀 이름, 운영 체제, 스케일링 그룹의 노드 수, Kubernetes label 및 Taint를 수정할 수 있습니다. | Label 및 Taint 속성을 수정하면 노드 풀의 모든 노드에 적용되며 Pod가 다시 스케쥴링될 수 있습니다. |
기존 노드 추가 | 클러스터에 속하지 않는 포드를 노드 풀에 추가할 수 있습니다. 다음 조건이 필요합니다. 포드와 클러스터는 동일한 VPC에 속합니다. 포드는 다른 클러스터에서 사용되지 않으며 노드 풀과 동일한 모델 및 과금 방식 구성을 갖습니다. 노드 풀에 속하지 않는 클러스터의 노드를 추가할 수 있습니다. 노드 포드가 필요하고 노드 풀은 동일한 모델 및 과금 방식으로 구성되어야 합니다. | 특별한 사정이 없는 한 기존 노드를 추가하는 것을 권장하지 않으며, 직접 새로운 노드 풀을 생성하는 것이 좋습니다. |
노드 풀에서 노드 삭제 | 노드 풀에서 모든 노드를 제거할 수 있으며 클러스터에 노드를 보관할지 선택할 수 있습니다. | 콘솔에서 스케일링 그룹에 노드를 추가하지 마십시오. 데이터 불일치가 발생할 수 있습니다. |
기존 스케일링 그룹을 노드 풀로 변환 | 기존 스케일링 그룹을 노드 풀로 변환할 수 있습니다. 변환 후 노드 풀은 원래 스케일링 그룹의 모든 기능을 상속하며 스케일링 그룹은 표시되지 않습니다. 클러스터의 모든 기존 스케일링 그룹이 노드 풀로 변환된 후에는 이 기능이 비활성화됩니다. | 이 작업은 되돌릴 수 없습니다. 변환하기 전에 노드 풀의 기능에 대해 잘 알고 있어야 합니다. |
참고
다음 문서에 따라 TKE 콘솔에 로그인하고 노드 풀 관련 작업을 수행할 수 있습니다.