자동 노드 복구
노드 자동 복구 기능은 노드 풀에 있는 각 노드의 상태를 지속적으로 모니터링합니다. 노드가 비정상이 되면 노드 자동 복구 기능이 자동으로 노드를 복구합니다. 이 기능은 클러스터 중단 및 성능 저하 가능성을 줄이고 클러스터의 수동 유지보수 필요성을 최소화합니다.
노드 풀을 만들거나 업데이트할 때 노드 자동 복구를 사용 설정할 수 있습니다. 개별 노드가 아닌 노드 풀에서 이 기능을 사용 설정하거나 중지하세요.
비정상 노드 조건
노드 자동 복구는 각 노드의 상태를 검사하여 복구가 필요한지 결정합니다. Ready
상태를 보고하면 노드가 정상으로 간주됩니다.
그렇지 않고 특정 기간 동안 비정상 상태를 연속적으로 보고하면 복구가 시작됩니다.
비정상 상태는 NotReady
상태에서 발생할 수 있으며 약 15분 동안의 연속 검사에서 감지됩니다. 또는 부팅 디스크 공간이 고갈되어 비정상 상태가 발생할 수 있으며 약 30분 동안 식별될 수 있습니다.
kubectl get nodes
명령어를 실행하면 언제든 노드의 상태 신호를 수동으로 검사할 수 있습니다.
노드 복구 전략
노드 자동 복구는 클러스터의 전반적인 상태와 복구 프로세스 중 애플리케이션 가용성을 모두 보장하는 특정 전략을 따릅니다. 이 섹션에서는 노드 자동 복구 기능이 PodDisruptionBudget
구성을 적용하고, Pod Termination
Grace Period
를 준수하고, 노드를 복구할 때 클러스터 중단을 최소화하는 기타 조치를 취하는 방법을 설명합니다.
30분 동안 PodDisruptionBudget
적용
노드를 복구해야 하는 경우 즉시 드레이닝되고 다시 생성되지 않습니다. 대신 노드 자동 복구 기능이 PodDisruptionBudget(PDB) 구성을 최대 30분 동안 적용합니다. 이후 노드의 모든 포드가 삭제됩니다. (PDB 구성은 특정 시점에서 사용 가능해야 하는 특정 포드의 최소 복제본 수를 정의합니다.)
약 30분 동안 PodDisruptionBudget
을 준수하여 노드 자동 복구 기능은 포드를 안전하게 다시 예약하고 클러스터의 다른 정상 노드에 재배포할 수 있는 기회를 제공합니다. 이렇게 하면 복구 프로세스 중에 원하는 수준의 애플리케이션 가용성을 유지할 수 있습니다.
30분의 제한 시간이 지나면 PodDisruptionBudget
을 위반하더라도 노드 자동 복구가 복구 프로세스를 진행합니다. 시간 제한이 없다면 PodDisruptionBudget
구성이 복구에 필요한 제거를 방지하는 경우 복구 프로세스가 무기한 정지될 수 있습니다.
포드 종료 유예 기간 적용
또한 노드 자동 복구 기능에는 약 30분의 포드 종료 유예 기간이 적용됩니다. 포드 종료 유예 기간은 종료 중 단계적 종료를 위한 기간을 포드에 제공합니다. 유예 기간 동안 노드의 kubelet은 삭제 태스크를 실행하고 해당 노드의 포드와 연결된 리소스를 해제합니다. 노드 자동 복구 기능은 kubelet이 삭제를 완료하도록 최대 30분을 허용합니다. 할당된 30분이 지나면 포드가 정상적으로 종료되었는지 여부에 관계없이 노드가 강제 종료됩니다.
추가 노드 복구 전략
노드 자동 복구는 또한 다음 전략을 구현합니다.
- 여러 노드에 복구가 필요하면 클러스터 중단을 제한하고 워크로드를 보호하기 위해 한 번에 하나씩 복구됩니다.
- 복구 프로세스 중 노드 자동 복구를 사용 중지하더라도 진행 중인 복구는 복구 작업이 성공 또는 실패할 때까지 계속됩니다.
자동 노드 복구 사용 설정 및 사용 중지 방법
노드 풀을 만들거나 업데이트할 때 노드 자동 복구를 사용 설정 또는 사용 중지할 수 있습니다. 개별 노드가 아닌 노드 풀에서는 이 기능을 사용 설정하거나 중지합니다.
새 노드 풀에 자동 복구 사용 설정
gcloud container azure node-pools create NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--node-version 1.29.3-gke.600 \
--vm-size VM_SIZE \
--max-pods-per-node 110 \
--min-nodes MIN_NODES \
--max-nodes MAX_NODES \
--azure-availability-zone AZURE_ZONE \
--ssh-public-key SSH_PUBLIC_KEY" \
--subnet-id SUBNET_ID \
--enable-autorepair
다음을 바꿉니다.
NODE_POOL_NAME
: 노드 풀의 고유한 이름입니다(예:node-pool-1
).CLUSTER_NAME
: Azure용 GKE 클러스터의 이름GOOGLE_CLOUD_LOCATION
: 클러스터를 관리하는 Google Cloud 위치NODE_VERSION
: 노드 풀의 각 노드에 설치할 Kubernetes 버전(예: '1.29.3-gke.600')VM_SIZE
: 지원되는 Azure VM 크기MIN_NODES
: 노드 풀의 최소 노드 수입니다. 자세한 내용은 클러스터 자동 확장 처리를 참조하세요.MAX_NODES
: 노드 풀의 최대 노드 수AZURE_ZONE
: Azure용 GKE가 노드 풀을 실행하는 Azure 가용성 영역입니다(예:3
).SSH_PUBLIC_KEY
: SSH 공개 키의 텍스트입니다.SUBNET_ID
: 노드 풀의 서브넷 ID입니다.
기존 노드 풀에 자동 복구 사용 설정
기존 노드 풀에서 노드 자동 복구를 사용 설정하려면 다음 명령어를 실행합니다.
gcloud container azure node-pools update NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--enable-autorepair
다음을 바꿉니다.
NODE_POOL_NAME
: 노드 풀의 고유한 이름입니다(예:node-pool-1
).CLUSTER_NAME
: 클러스터 이름입니다.GOOGLE_CLOUD_LOCATION
: 클러스터를 관리하는 Google Cloud 리전
기존 노드 풀에 자동 복구 사용 중지
gcloud container azure node-pools update NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--no-enable-autorepair
다음을 바꿉니다.
NODE_POOL_NAME
: 노드 풀의 고유한 이름입니다(예:node-pool-1
).CLUSTER_NAME
: 클러스터 이름입니다.GOOGLE_CLOUD_LOCATION
: 클러스터를 관리하는 Google Cloud 리전
Azure용 GKE는 단계적 노드 자동 복구 사용 중지를 수행합니다. 기존 노드 풀에 대해 노드 자동 복구를 사용 중지하면 Azure용 GKE가 노드 풀 업데이트 작업을 시작합니다. 이 작업은 기존 노드 풀 복구가 완료될 때까지 기다린 후 수행됩니다.
노드 자동 복구가 사용 설정되었는지 확인
다음 명령어를 실행하여 노드 자동 복구가 사용 설정되었는지 확인합니다.
gcloud container azure node-pools describe NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION
다음을 바꿉니다.
NODE_POOL_NAME
: 노드 풀의 고유한 이름입니다(예:node-pool-1
).CLUSTER_NAME
: 클러스터 이름입니다.GOOGLE_CLOUD_LOCATION
: 클러스터를 관리하는 Google Cloud 리전
노드 복구 내역
다음 명령어를 실행하여 노드 풀에서 수행된 복구 내역을 볼 수 있습니다.
gcloud container azure operations list \
--location GOOGLE_CLOUD_LOCATION \
--filter="metadata.verb=repair AND metadata.target=projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/azureClusters/CLUSTER_NAME/azureNodePools/NODEPOOL_NAME
다음을 바꿉니다.
GOOGLE_CLOUD_LOCATION
: 클러스터를 관리하는 지원되는 Google Cloud 리전(예:us-west1
)PROJECT_ID
: Google Cloud 프로젝트CLUSTER_NAME
: 클러스터 이름입니다.NODE_POOL_NAME
: 노드 풀의 고유한 이름입니다(예:node-pool-1
).
노드 풀 상태 요약
노드 자동 복구를 사용 설정한 후 다음 명령어를 실행하여 노드 풀 상태 요약을 생성할 수 있습니다.
gcloud container azure node-pools describe NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION
노드 풀 상태 요약은 다음 샘플과 비슷합니다.
{ "name": "some-np-name", "version": "some-version", "state": "RUNNING", ... "errors": [ { "message": "1 node(s) is/are identified as unhealthy among 2 total node(s) in the node pool. No node is under repair." } ], }
노드 풀 상태 요약은 노드 풀의 현재 상태를 이해하는 데 도움이 됩니다. 이 예시에서 요약에는 노드 풀의 두 노드 중 하나가 비정상임을 나타내는 오류 메시지가 포함되어 있습니다. 또한 현재 복구 프로세스가 진행 중인 노드가 없다고 보고합니다.