이 문서에서는 Google Distributed Cloud의 사용자 클러스터 자동 확장을 설명합니다.
클러스터 자동 확장은 워크로드 수요를 기준으로 노드 풀의 노드 수를 늘리거나 줄입니다.
시작하기 전에
클러스터 자동 확장 처리의 제한사항에 대해 알아봅니다.
클러스터 자동 확장 처리는 다음과 같은 가정을 합니다.
복제된 모든 포드를 다른 일부 노드에서 다시 시작할 수 있으며, 결과적으로 일시적인 중단이 발생할 수 있습니다. 서비스에 중단이 허용되지 않는 경우에는 클러스터 자동 확장 처리를 사용하지 않는 것이 좋습니다.
사용자 또는 관리자는 노드를 수동으로 관리하지 않습니다. 노드 풀에 자동 확장이 사용 설정된 경우 노드 풀의
replicas
필드를 재정의할 수 없습니다.단일 노드 풀의 모든 노드에 동일한 라벨 집합이 포함됩니다.
클러스터 자동 확장 작동 방법
클러스터 자동 확장 처리는 노드 풀 기준으로 작동합니다. 노드 풀에 자동 확장을 사용 설정하는 경우 풀의 최소 및 최대 노드 수를 지정합니다.
클러스터 자동 확장 처리는 실제 리소스 사용률 대신 노드에서 실행되는 포드의 리소스 요청에 따라 자동으로 풀의 노드 수를 늘리거나 줄입니다. 주기적으로 포드 및 노드의 상태를 확인하고 작업을 수행합니다.
풀에 노드가 충분하지 않아 포드를 예약할 수 없는 경우 클러스터 자동 확장 처리가 지정된 최댓값까지 노드를 추가합니다.
노드의 사용률이 적고 풀에 있는 더 적은 노드로 모든 포드를 예약할 수 있는 경우 클러스터 자동 확장 처리는 지정된 최솟값까지 노드를 삭제합니다. 노드를 정상적으로 드레이닝할 수 없으면 노드가 강제로 종료되고 연결된 Kubernetes 관리 디스크가 안전하게 분리됩니다.
포드가 너무 적은 리소스를 요청한 경우(또는 부족할 수 있는 기본값을 변경하지 않은 경우), 그리고 노드에 리소스 부족이 발생한 경우, 클러스터 자동 확장 처리는 이러한 상황을 해결하지 않습니다. 모든 워크로드에 명시적인 리소스 요청을 수행하여 클러스터 자동 확장 처리가 정확하게 작동하도록 보장할 수 있습니다.
개별 노드 풀의 경우 minReplicas
는 1 이상이어야 합니다. 그러나 특정 시점에서 할당되지 않은 사용자 클러스터 노드의 합계는 최소 3 이상이어야 합니다. 즉, 모든 자동 확장된 노드 풀의 minReplicas
값 합계는 모든 자동 확장되지 않은 노드 풀의 replicas
값 합계를 포함하여 최소 3 이상이어야 합니다.
클러스터 자동 확장 처리는 여러 노드 풀에서 인스턴스 유형의 상대적 비용을 고려하고, 가능한 한 낭비가 가장 적은 방법으로 노드 풀을 확장하려고 시도합니다.
자동 확장을 사용하여 사용자 클러스터 만들기
노드 풀에 자동 확장이 사용 설정된 사용자 클러스터를 만들려면 사용자 클러스터 구성 파일에서 노드 풀에 대해 autoscaling
섹션을 작성합니다. 예를 들면 다음과 같습니다.
nodePools: - name: pool‐1 … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
이전 구성은 3개의 복제본이 있는 노드 풀을 만들고 최소 노드 풀 크기를 1로 하고 최대 노드 풀 크기를 5로 하여 자동 확장을 적용합니다.
minReplicas
값은 1이상이어야 합니다. 노드 풀은 0개 노드로 축소할 수 없습니다.
자동 확장을 사용하는 노드 풀 추가
자동 확장을 사용하는 노드 풀을 기존 클러스터에 추가하려면 다음 안내를 따르세요.
사용자 클러스터 구성 파일을 수정하여 새 노드 풀을 추가하고 풀에
autoscaling
섹션을 포함합니다.replicas
,minReplicas
,maxReplicas
값을 원하는 대로 설정합니다. 예를 들면 다음과 같습니다.nodePools: - name: my-new-node-pool … replicas: 3 ... autoscaling: minReplicas: 2 maxReplicas: 6
클러스터를 업데이트합니다.
gkectl update cluster --config USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
기존 노드 풀에 자동 확장 사용 설정
기존 클러스터의 노드 풀에 자동 확장을 사용 설정하려면 다음 안내를 따르세요.
사용자 클러스터 구성 파일에서 특정
nodePool
을 수정하고autoscaling
섹션을 포함합니다.minReplicas
및maxReplicas
값을 원하는 대로 설정합니다.nodePools: - name: my-existing-node-pool … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
클러스터를 업데이트합니다.
gkectl update cluster --config USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
기존 노드 풀의 자동 확장 사용 중지
특정 노드 풀의 자동 확장을 사용 중지하려면 다음 안내를 따르세요.
사용자 클러스터 구성 파일을 수정하고 노드 풀의
autoscaling
섹션을 삭제합니다.gkectl update cluster
를 실행합니다.
클러스터 자동 확장 처리 동작 확인
클러스터 자동 확장 처리가 수행하는 작업은 여러 방법으로 확인할 수 있습니다.
클러스터 자동 확장 처리 로그 확인
먼저 클러스터 자동 확장 처리 포드의 이름을 찾습니다.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods -n USER_CLUSTER_NAME | grep cluster-autoscaler
클러스터 자동 확장 처리 포드의 로그를 확인합니다.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG logs cluster-autoscaler-POD_NAME --container cluster-autoscaler -n USER_CLUSTER_NAME
POD_NAME을 클러스터 자동 확장 처리 포드의 이름으로 바꿉니다.
구성 맵 확인
클러스터 자동 확장 처리가 kube-system/cluster-autoscaler-status
구성 맵을 게시합니다.
구성 맵을 보려면 다음 안내를 따르세요.
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get configmap cluster-autoscaler-status -n kube-system -o yaml
클러스터 자동 확장 이벤트 확인
다음에서 클러스터 자동 확장 이벤트를 확인할 수 있습니다.
- 포드(특히 예약할 수 없는 노드 또는 사용량이 적은 노드)
- 노드
kube-system/cluster-autoscaler-status
구성 맵
제한사항
클러스터 자동 확장 처리에는 다음과 같은 제한사항이 있습니다.
변경된 필터를 사용한 커스텀 예약은 지원되지 않습니다.
포드의
-10
아래에PriorityClass
값이 있으면 노드가 확장되지 않습니다. 클러스터 자동 확장 처리가 포드 우선순위 및 선점으로 작동하는 방식 자세히 알아보기Windows 노드 풀에서는 자동 확장이 지원되지 않습니다.
문제 해결
가끔 클러스터 자동 확장 처리가 완전히 축소되지 못하고 축소 후에 추가 노드가 존재하는 경우가 있습니다. 이 현상은 필요한 시스템 포드가 다른 노드에 예약된 경우 발생할 수 있습니다. 이러한 포드가 다른 노드로 이동하기 위한 트리거가 없기 때문입니다. 사용량이 적은 노드가 두 개 있지만 축소되지 않습니다. 이유가 무엇인가요?를 참조하세요. 포드 중단 예산을 구성하여 이 제한을 우회할 수 있습니다.
클러스터를 축소하는 데 문제가 있으면 포드 예약 및 중단을 참조하세요.
kube-system
pod에PodDisruptionBudget
을 추가해야 할 수 있습니다.kube-system
포드의PodDisruptionBudget
을 수동으로 추가하는 방법에 대한 상세 설명은 Kubernetes 클러스터 자동 확장 처리 FAQ를 참조하세요.축소 시에 클러스터 자동 확장 처리는 pod에 설정된 예약 및 축출 규칙을 고려합니다. 이러한 제한에 따라 자동 확장 처리로 노드가 삭제되지 않을 수 있습니다. 다음 조건의 포드가 포함된 경우에는 노드 삭제가 방해될 수 있습니다.
포드의 어피니티 또는 안티-어피니티 규칙에 따라 재예약이 방지됩니다.
포드에 로컬 저장소가 포함됨
포드가 배포, StatefulSet, 작업 또는 ReplicaSet와 같은 컨트롤러로 관리되지 않습니다.
포드가 kube-system 네임스페이스에 있고 PodDisruptionBudget을 포함하지 않습니다.
애플리케이션의 PodDisruptionBudget도 자동 확장을 방지할 수 있습니다. 노드를 삭제하여 예산이 초과될 수 있으면, 클러스터가 축소되지 않습니다.
추가 정보
클러스터 자동 확장 처리 및 장애 방지에 대한 자세한 내용은 Kubernetes 클러스터 자동 확장 처리 FAQ에서 다음 항목을 참조하세요.
- 축소는 어떻게 작동하나요?
- 클러스터 자동 확장 처리가 축소되면 PodDisruptionBudget과 함께 작동하나요?
- 클러스터 자동 확장 처리에서 노드를 제거하지 못하게 할 수 있는 포드의 유형은 무엇입니까?