이 문서에서는 노드 풀 크기를 자동으로 제어하는 클러스터 자동 확장 처리에 대해 설명합니다. 클러스터 자동 확장 처리는 노드 풀의 노드 수에 최솟값과 최댓값을 지정하면 사용 설정됩니다. 노드 풀을 만들거나 노드 풀을 업데이트할 때 이러한 값을 지정합니다.
노드 풀 자동 확장
클러스터 자동 확장 처리는 워크로드 수요를 기준으로 지정된 노드 풀에서 노드 수 크기를 자동으로 조정합니다. 수동으로 노드를 추가, 삭제하거나 노드 풀을 과도하게 프로비저닝할 필요가 없습니다. 대신 노드 풀의 최소 및 최대 크기를 지정하면 나머지는 자동으로 지정됩니다.
클러스터를 자동 확장할 때 리소스를 삭제하거나 이동해야 할 경우 워크로드가 일시적으로 중단될 수 있습니다. 예를 들어 워크로드가 단일 복제본이 포함된 컨트롤러로 구성되었으면, 현재 노드가 삭제된 경우 해당 복제본의 Pod를 다른 노드에서 다시 예약할 수 있습니다. 따라서 잠재적인 중단을 견디도록 또는 중요한 포드가 중단되지 않도록 워크로드를 설계해야 합니다.
클러스터 자동 확장 처리 작동 방식
클러스터 자동 확장 처리는 노드당 풀 기준으로 작동합니다. 클러스터 자동 확장 처리를 사용하여 노드 풀을 구성할 때는 노드 풀의 최소 및 최대 크기를 지정합니다. 노드 풀을 만들거나 노드 풀을 업데이트할 때 최소 및 최대 크기를 변경할 수 있습니다.
클러스터 자동 확장 처리는 실제 리소스 사용률 대신 노드 풀의 리소스 요청에 따라 자동으로 노드 풀의 크기를 늘리거나 줄입니다. 클러스터 자동 확장 처리는 포드 객체를 예약할 수 없고 요청을 충족하기에 노드 풀에 용량이 충분하지 않은 경우 노드를 추가합니다.
또한 활용률이 낮고 모든 포드 객체를 더 적은 노드 수로 예약할 수 있으면 클러스터 자동 확장 처리가 노드를 삭제합니다. 10분 후에 노드를 정상적으로 드레이닝할 수 없으면 노드가 강제로 종료됩니다. 이 기간은 구성할 수 없습니다.
포드가 너무 적은 리소스를 요청하는 경우(예: 기본값이 부족한 경우) 클러스터 자동 확장 처리는 이러한 상황을 해결하지 않습니다. 모든 워크로드에 적절한 리소스 요청을 만들어서 클러스터 자동 확장 처리가 가능한 한 정확하게 작동하도록 보장할 수 있습니다. 자세한 내용은 컨테이너에 대한 리소스 관리를 참조하세요.
작동 조건
클러스터 자동 확장 처리는 노드 풀 크기를 조절할 때 다음 가정을 따릅니다.
- 복제된 모든 포드 객체를 다른 일부 노드에서 다시 시작할 수 있으며, 결과적으로 일시적인 중단이 발생할 수 있습니다. 워크로드에서 중단이 허용되지 않으면 자동 확장이 사용 중지된 노드 풀에서 실행되도록 워크로드를 구성합니다. 자세한 내용은 노드 taint로 예약 관리를 참조하세요.
- 클러스터 자동 확장 처리는 사용자가 수행하는 수동 노드 관리 작업을 재정의할 수 있습니다.
- 단일 노드 풀의 모든 노드에 동일한 라벨 집합이 포함됩니다.
- 클러스터 자동 확장 처리는 확장 후 유휴 CPU 또는 사용되지 않는 메모리가 가장 적은 노드 그룹을 선택합니다. 이 동작은 동일한 클러스터에서 노드 크기가 다를 때(예: 높은 CPU 또는 높은 메모리 노드) 확장되는 노드 풀에 영향을 줍니다.
최소 및 최대 노드 풀 크기
min-nodes
및 max-nodes
플래그를 사용하여 클러스터의 각 노드 풀에 대해 최소 및 최대 크기를 지정할 수 있습니다. 자동 확장을 사용 중지하려면 min-nodes
및 max-nodes
를 같은 숫자로 설정합니다. 클러스터 자동 확장 처리가 크기 경계 내에서 확장 결정을 수행합니다.
노드 풀의 최대 크기를 설정할 때 모든 워크로드를 실행하기에 충분히 큰지 확인합니다. 클러스터의 노드 풀에 모든 워크로드를 실행하는데 사용 가능한 메모리 및 CPU가 부족하면 중단이 발생할 수 있습니다.
PodDisruptionBudget
을 사용하여 워크로드 보호
PodDisruptionBudget
으로 워크로드 중단에 대비하도록 AWS용 GKE를 구성할 수 있습니다. PodDisruptionBudget
을 만들 때 사용 가능한 포드 복제본의 최소 개수 또는 언제든지 사용할 수 없는 포드 복제본의 최대 개수를 지정합니다. 자세한 내용은 애플리케이션에 중단 예산 지정을 참조하세요.
노드 0개에서 수직 확장
다음 AWS용 GKE 버전부터 클러스터 자동 확장 처리가 노드 0개에서 노드 풀 수직 확장을 지원합니다.
- 버전 1.29 이상
- 1.28.8-gke.800 이상의 1.28 버전
- 1.27.12-gke.800 이상의 1.27 버전
이전 버전을 사용하는 경우 이 기능을 사용하려면 클러스터를 해당 버전 중 하나로 업그레이드해야 합니다. 기존 클러스터에 이 기능을 사용 설정하려면 클러스터를 지원되는 버전으로 업데이트한 후 Kubernetes 버전을 업데이트하여 노드 풀의 순차적 업데이트를 수행합니다. 노드 풀 업데이트에 대한 자세한 내용은 노드 풀 업데이트를 참조하세요.
클러스터 자동 확장 처리는 확장 결정을 내릴 때 참조할 수 있는 노드가 없는 경우에도 노드 풀에 정의한 라벨과 taint를 준수합니다. AWS용 GKE는 노드 풀의 기본 AWS 자동 확장 그룹에 필요한 라벨과 taint 태그를 자동으로 설정합니다. 이러한 태그에 대한 자세한 내용은 AWS의 클러스터 자동 확장 처리 구성을 설명하는 GitHub 페이지의 자동 검색 설정 섹션을 참조하세요.
이러한 라벨 및 taint 태그를 설정하면 AWS용 GKE는 클러스터 자동 확장 처리가 정확한 노드 템플릿을 만들 수 있게 해줍니다. 노드 템플릿은 노드 풀에 물리적 노드가 없는 경우에도 올바른 노드 구성, 라벨, taint가 포함된 노드의 가상 표현입니다. 이렇게 정확한 노드 템플릿을 사용하면 클러스터 자동 확장 처리가 올바른 확장 결정을 내릴 수 있습니다.
노드 풀에 taint를 구성할 때는 AWS 자동 확장 그룹에 제한이 있습니다. 키가 동일하지만 값 효과 조합이 서로 다른 여러 taint를 적용하는 경우 중복된 키가 있는 마지막으로 적용된 taint만 클러스터 자동 확장 처리에서 고려됩니다.