일반적인 규제 요구사항은 기업이 재해 복구(DR) 기능을 입증할 수 있어야 한다는 것입니다. 클라우드에서 실행되는 애플리케이션의 경우 이 요구사항에는 한 영역에서 호스팅된 서버를 일정 기간 사용할 수 없게 되었을 경우의 서비스 신뢰성과 가용성이 포함됩니다. 이 문서는 Google Kubernetes Engine(GKE) Standard 리전 클러스터를 사용할 때 영역 장애 조치를 시뮬레이션하는 방법을 알아보려는 관리자 및 설계자, 운영자, 백업 및 재해 복구(DR) 관리자를 대상으로 합니다.
GKE 리전 클러스터는 사용자가 선택한 리전에 생성되며 선택한 리전 내 여러 영역에 있는 VM에서 컨트롤 플레인을 실행합니다. GKE Autopilot 클러스터는 항상 리전이며 GKE Standard 클러스터는 리전이나 영역일 수 있습니다. 이 튜토리얼에서는 GKE Standard 리전 클러스터를 사용합니다. 클러스터 노드는 부하 분산기를 통해 컨트롤 플레인과 통신합니다. 즉, 노드 위치와 컨트롤 플레인 VM 위치가 항상 일치하지는 않습니다. Google Cloud 콘솔에서 리전 클러스터를 사용할 때는 특정 영역을 사용 중지할 수 없습니다. 자세한 내용은 GKE 클러스터 아키텍처를 참조하세요.
이 튜토리얼에서는 영역 오류를 시뮬레이션하는 세 가지 방법을 제공합니다. 자체 규정 준수 목적에 필요한 방법을 사용하여 영역 오류를 시뮬레이션하고 올바른 애플리케이션 응답을 확인할 수 있습니다.
이 문서의 방법은 단일 영역 및 멀티 영역을 포함한 영역 클러스터에도 적용됩니다. 이러한 방법은 타겟팅된 영역의 노드에만 영향을 미치며 GKE 컨트롤 플레인은 영향을 받지 않습니다.
목표
- 기본 구성을 사용하여 리전 GKE Standard 클러스터를 만듭니다.
- 샘플 마이크로서비스 애플리케이션을 리전 클러스터에 배포합니다.
- 다음 세 가지 방법 중 하나를 사용하여 영역 중단을 시뮬레이션합니다.
- 리전 클러스터에서 노드 풀 영역을 줄입니다.
- 단일 영역 노드 풀을 사용합니다.
- 대상 장애 영역의 노드를 차단하고 드레이닝합니다.
- 마이크로서비스 가용성을 확인합니다.
비용
이 튜토리얼에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
- Compute Engine
- GKE Standard 모드 클러스터
가격 계산기를 사용하면 예상 사용량을 기준으로 예상 비용을 산출할 수 있습니다.
시작하기 전에
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Enable the Kubernetes Engine API, Compute Engine APIs:
gcloud services enable container.googleapis.com
compute.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Enable the Kubernetes Engine API, Compute Engine APIs:
gcloud services enable container.googleapis.com
compute.googleapis.com
리전 Standard 클러스터 만들기
영역 장애를 시뮬레이션하기 전에 멀티 영역 노드 풀이 있는 리전 클러스터를 만듭니다. 클러스터의 제어 영역 및 노드는 지정된 리전의 여러 영역 간에 복제됩니다.
Google Cloud CLI를 사용하여 클러스터를 만듭니다.
기본 구성을 사용하여 새 GKE Standard 클러스터를 만듭니다.
gcloud container clusters create CLUSTER_NAME \ --region REGION \ --num-nodes 2
다음 매개변수를 바꿉니다.
CLUSTER_NAME
: 클러스터의 이름입니다.REGION
: 클러스터에 사용할 리전입니다(예:us-central1
).
GKE에서 클러스터를 만들고 모든 항목이 정상적으로 작동하는지 확인하는 데 몇 분 정도 걸립니다. 지정한 리전의 각 영역에 노드 2개가 생성됩니다.
이전 단계에서 만든 각 노드의 영역을 확인합니다.
kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
출력은 다음 예시와 같이 표시됩니다.
NAME ZONE INT_IP regional-cluster-1-default-pool-node1 asia-southeast1-c 10.128.0.37 regional-cluster-1-default-pool-node2 asia-southeast1-c 10.128.0.36 regional-cluster-1-default-pool-node3 asia-southeast1-b 10.128.0.38 regional-cluster-1-default-pool-node4 asia-southeast1-b 10.128.0.33 regional-cluster-1-default-pool-node5 asia-southeast1-a 10.128.0.35 regional-cluster-1-default-pool-node6 asia-southeast1-a 10.128.0.34
클러스터에 연결합니다.
gcloud container clusters get-credentials CLUSTER_NAME \ --region REGION
샘플 마이크로서비스 애플리케이션 배포
이 문서에서 시뮬레이션된 장애 조치의 영향을 확인하려면 샘플 마이크로서비스 기반 애플리케이션을 클러스터에 배포합니다. 이 문서에서는 샘플 Cymbal Bank 애플리케이션을 사용합니다.
셸에서 다음 GitHub 저장소를 클론하고 디렉터리로 변경합니다.
git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git cd bank-of-anthos/
Cymbal Bank 샘플 애플리케이션을 이전 섹션에서 만든 GKE 클러스터에 배포합니다.
kubectl apply -f ./extras/jwt/jwt-secret.yaml kubectl apply -f ./kubernetes-manifests
포드가 준비될 때까지 기다립니다.
kubectl get pods
몇 분 후 포드가
Running
상태로 표시됩니다.NAME READY STATUS RESTARTS AGE accounts-db-0 1/1 Running 0 16s balancereader-7dc7d9ff57-sstm5 0/1 Running 0 15s contacts-7ddc76d94-rr28x 0/1 Running 0 14s frontend-747b84bff4-2mtlv 0/1 Running 0 13s ledger-db-0 1/1 Running 0 13s ledgerwriter-f6cc7889d-9qjfg 0/1 Running 0 13s loadgenerator-57d4cb57cc-zqvqb 1/1 Running 0 13s transactionhistory-5dd7c7fd77-lwkv8 0/1 Running 0 12s userservice-cd5ddb4bb-wwhml 0/1 Running 0 12s
포드가 모두
Running
상태가 되면 프런트엔드 서비스 외부 IP 주소를 가져옵니다.kubectl get service frontend | awk '{print $4}'
웹브라우저 창에서
kubectl get service
명령어 출력에 표시된 IP 주소를 열어 Cymbal Bank 인스턴스에 액세스합니다.기본 사용자 인증 정보가 자동으로 채워지므로 앱에 로그인하여 일부 샘플 거래와 잔액을 살펴볼 수 있습니다. Cymbal Bank가 성공적으로 실행되는지 확인하는 것 외에는 특별히 수행해야 할 작업은 없습니다. 모든 서비스가 올바르게 시작하고 사용자가 로그인할 수 있게 되는 데 1~2분 정도 걸릴 수 있습니다. 모든 포드가
Running
상태가 되고 Cymbal Bank 사이트에 성공적으로 로그인할 수 있을 때까지 기다렸다가 다음 섹션으로 이동하여 영역 오류를 시뮬레이션합니다.
영역 장애 시뮬레이션
이 섹션에서는 영역 중 하나에서 장애를 시뮬레이션합니다. 이 장애 조치를 시뮬레이션하는 방법에는 세 가지가 있습니다. 한 가지 방법만 선택해야 합니다. 자체 규정 준수 목적에 필요한 메서드를 사용하여 영역 장애를 시뮬레이션하고 올바른 애플리케이션 응답을 확인합니다.
노드 풀 영역 줄이기
기본적으로 리전 클러스터의 노드 풀에는 리전의 모든 영역에 걸쳐 있는 노드가 있습니다. 다음 다이어그램에서 Cloud Load Balancing은 영역 3개에 걸쳐 있는 노드 풀에 트래픽을 배포합니다. 영역마다 노드 2개가 있으며 포드는 이러한 영역의 노드에서 실행될 수 있습니다.
이 섹션에서는 노드 풀이 영역 3개 중 2개에서만 실행되도록 업데이트하여 영역 장애를 시뮬레이션합니다. 이 방식은 포드와 트래픽을 다른 영역에 올바르게 재배포하여 애플리케이션에서 영역 손실에 대응할 수 있는지 확인합니다.
특정 영역에서만 실행되도록 노드 풀을 업데이트하고 장애를 시뮬레이션하려면 다음 단계를 완료합니다.
리전 클러스터와 서비스의 가용성을 확인합니다.
kubectl get po -o wide \ kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
결과는 다음 출력 예시와 비슷합니다.
NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 6m30s 10.28.1.5 regional-cluster-1-default-pool-node3 balancereader-7dc7d9ff57-shwg5 1/1 Running 0 6m30s 10.28.5.6 regional-cluster-1-default-pool-node1 contacts-7ddc76d94-qv4x5 1/1 Running 0 6m29s 10.28.4.6 regional-cluster-1-default-pool-node2 frontend-747b84bff4-xvjxq 1/1 Running 0 6m29s 10.28.3.6 regional-cluster-1-default-pool-node6 ledger-db-0 1/1 Running 0 6m29s 10.28.5.7 regional-cluster-1-default-pool-node1 ledgerwriter-f6cc7889d-mttmb 1/1 Running 0 6m29s 10.28.1.6 regional-cluster-1-default-pool-node3 loadgenerator-57d4cb57cc-7fvrc 1/1 Running 0 6m29s 10.28.4.7 regional-cluster-1-default-pool-node2 transactionhistory-5dd7c7fd77-cmc2w 1/1 Running 0 6m29s 10.28.3.7 regional-cluster-1-default-pool-node6 userservice-cd5ddb4bb-zfr2g 1/1 Running 0 6m28s 10.28.5.8 regional-cluster-1-default-pool-node1 NAME ZONE INT_IP regional-cluster-1-default-pool-node5 asia-southeast1-c 10.148.0.6 regional-cluster-1-default-pool-node6 asia-southeast1-c 10.148.0.7 regional-cluster-1-default-pool-node2 asia-southeast1-a 10.148.0.8 regional-cluster-1-default-pool-node1 asia-southeast1-a 10.148.0.9 regional-cluster-1-default-pool-node3 asia-southeast1-b 10.148.0.5 regional-cluster-1-default-pool-node4 asia-southeast1-b 10.148.0.4
이 예시에서는 모든 Cymbal Bank 워크로드가 모든 영역에 배포됩니다. 오류를 시뮬레이션하려면 프런트엔드 서비스가 배포되는
asia-southeast1-c
와 같은 영역 중 하나를 사용 중지합니다.영역 중단을 시뮬레이션합니다. 3개 영역 중 2개 영역만 지정하도록 기존 노드 풀(
default-pool
)을 업데이트합니다.gcloud container node-pools update default-pool \ --cluster=CLUSTER_NAME \ --node-locations=ZONE_A, ZONE_B \ --region=REGION
ZONE_A, ZONE_B
를 노드 풀을 계속 실행할 영역 2개로 바꿉니다.노드 풀을 업데이트한 후 마이크로서비스 가용성을 확인합니다.
kubectl get po -o wide kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
출력은 다음 예시와 같이 표시됩니다.
NAME ZONE INT_IP regional-cluster-1-default-pool-node2 asia-southeast1-a 10.148.0.8 regional-cluster-1-default-pool-node1 asia-southeast1-a 10.148.0.9 regional-cluster-1-default-pool-node3 asia-southeast1-b 10.148.0.5 regional-cluster-1-default-pool-node4 asia-southeast1-b 10.148.0.4 NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 28m 10.28.1.5 regional-cluster-1-default-pool-node3 balancereader-7dc7d9ff57-shwg5 1/1 Running 0 28m 10.28.5.6 regional-cluster-1-default-pool-node1 contacts-7ddc76d94-qv4x5 1/1 Running 0 28m 10.28.4.6 regional-cluster-1-default-pool-node2 frontend-747b84bff4-mdnkd 1/1 Running 0 9m21s 10.28.1.7 regional-cluster-1-default-pool-node3 ledger-db-0 1/1 Running 0 28m 10.28.5.7 regional-cluster-1-default-pool-node1 ledgerwriter-f6cc7889d-mttmb 1/1 Running 0 28m 10.28.1.6 regional-cluster-1-default-pool-node3 loadgenerator-57d4cb57cc-7fvrc 1/1 Running 0 28m 10.28.4.7 regional-cluster-1-default-pool-node2 transactionhistory-5dd7c7fd77-w2vqs 1/1 Running 0 9m20s 10.28.4.8 regional-cluster-1-default-pool-node2 userservice-cd5ddb4bb-zfr2g 1/1 Running 0 28m 10.28.5.8 regional-cluster-1-default-pool-node1
이 출력 예시에서
asia-southeast1-c
는 더 이상 사용되지 않습니다. URLhttp://EXTERNAL_IP
를 사용하여 브라우저에서 액세스하는 프런트엔드 서비스에는 계속 액세스할 수 있습니다. 영역 중 하나를 더 이상 사용할 수 없더라도 사용자는 계속 입금 및 결제 작업을 수행할 수 있습니다.
단일 영역 노드 풀 사용
이 섹션에서는 노드 풀 2개를 삭제하여 영역 장애를 시뮬레이션합니다. 이 방식은 포드와 트래픽을 다른 영역의 노드 풀에 올바르게 재배포하여 애플리케이션에서 노드 풀 손실에 대응할 수 있는지 확인합니다. 리전 클러스터에서 영역 중단을 시뮬레이션하려면 이전에 만든 기본 클러스터를 확장하여 여러 노드 풀에서 Cymbal Bank 애플리케이션을 실행합니다. 클러스터에 여러 노드 풀이 있는 경우가 더 일반적이므로 영역 중단을 시뮬레이션하는 이 방법은 노드 풀에서 활성 영역 업데이트의 첫 번째 예시보다 실제 영역 장애를 더 정확하게 반영합니다.
단일 영역 노드 풀 장애를 시뮬레이션하기 위해 이 섹션에서 빌드하는 클러스터에는 다음 구성요소가 포함됩니다.
일반적으로 리전 GKE Standard 클러스터를 만들 때 생성되는 기본 노드 풀은 멀티 영역 노드 풀(
default-pool
)입니다.단일
default-pool
이 있는 이 클러스터는 이 문서의 앞 부분에서 만든 클러스터입니다.또한 Cymbal Bank 애플리케이션 예시의 서비스를 실행하는 추가 노드 풀(
zonal-node-pool-1
및zonal-node-pool-2
)이 있습니다.
다이어그램의 점선은 default-pool
및 zonal-node-pool-1
의 장애를 시뮬레이션한 후 트래픽이 zonal-node-pool-2
에만 처리되는 방식을 보여줍니다.
추가 노드 풀을 만들고 장애를 시뮬레이션하려면 다음 단계를 완료합니다.
리전 클러스터 가용성을 확인합니다.
gcloud container node-pools list \ --cluster=CLUSTER_NAME \ --region REGION kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
결과는 다음 출력 예시와 비슷합니다.
NAME: default-pool MACHINE_TYPE: e2-medium DISK_SIZE_GB: 100 NODE_VERSION: 1.27.8-gke.1067004 NAME ZONE. INT_IP regional-cluster-1-default-pool-node5-pzmc asia-southeast1-c 10.148.0.6 regional-cluster-1-default-pool-node6-qf1l asia-southeast1-c 10.148.0.7 regional-cluster-1-default-pool-node2-dlk2 asia-southeast1-a 10.148.0.8 regional-cluster-1-default-pool-node1-pkfd asia-southeast1-a 10.148.0.9 regional-cluster-1-default-pool-node3-6b6n asia-southeast1-b 10.148.0.5 regional-cluster-1-default-pool-node4-h0lc asia-southeast1-b 10.148.0.4
이 출력 예시에서 모든 Cymbal Bank 포드는 같은 클러스터의 모든 영역에 배포되고 기존
default-pool
에서 실행됩니다.단일 영역 노드 풀 2개를 새로 만듭니다.
gcloud beta container node-pools create zonal-node-pool-1 \ --cluster CLUSTER_NAME \ --region REGION \ --num-nodes 4 \ --node-locations ZONE_A gcloud beta container node-pools create zonal-node-pool-2 \ --cluster CLUSTER_NAME \ --region REGION \ --num-nodes 4 \ --node-locations ZONE_B
ZONE_A
및ZONE_B
를 새 단일 영역 노드 풀을 실행할 두 영역으로 바꿉니다.영역 장애를 시뮬레이션하려면
default-pool
리전 노드 풀과 새 단일 영역 노드 풀 중 하나를 삭제합니다.gcloud container node-pools delete default-pool \ --cluster=CLUSTER_NAME \ --region=REGION gcloud container node-pools delete zonal-node-pool-1 \ --cluster=CLUSTER_NAME \ --region=REGION
node-pool
삭제 프로세스 중에 워크로드가 종료되고 사용 가능한 다른 노드 풀로 다시 예약됩니다. 이 프로세스가 발생하면 서비스와 배포를 사용할 수 없습니다. 이러한 동작으로 인해 DR 보고 또는 문서에 다운타임 기간을 지정해야 합니다.마이크로서비스를 계속 사용할 수 있는지 확인합니다.
kubectl get po -o wide \ kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
다음 예시와 비슷한 출력이 표시됩니다.
NAME ZONE INT_IP regional-cluster-1-node-pool3-node1 asia-southeast1-b 10.148.0.8 regional-cluster-1-node-pool3-node2 asia-southeast1-b 10.148.0.9 regional-cluster-1-node-pool3-node3 asia-southeast1-b 10.148.0.5 regional-cluster-1-node-pool3-node4 asia-southeast1-b 10.148.0.4 NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 28m 10.28.1.5 regional-cluster-1-zonal-node-pool-2-node3 balancereader-7dc7d9ff57-shwg5 1/1 Running 0 28m 10.28.5.6 regional-cluster-1-zonal-node-pool-2-node1 contacts-7ddc76d94-qv4x5 1/1 Running 0 28m 10.28.4.6 regional-cluster-1-zonal-node-pool-2-node2 frontend-747b84bff4-mdnkd 1/1 Running 0 9m21s 10.28.1.7 regional-cluster-1-zonal-node-pool-2-node3 ledger-db-0 1/1 Running 0 28m 10.28.5.7 regional-cluster-1-zonal-node-pool-2-node4 ledgerwriter-f6cc7889d-mttmb 1/1 Running 0 28m 10.28.1.6 regional-cluster-1-zonal-node-pool-2-node3 loadgenerator-57d4cb57cc-7fvrc 1/1 Running 0 28m 10.28.4.7 regional-cluster-1-zonal-node-pool-2-node2 transactionhistory-5dd7c7fd77-w2vqs 1/1 Running 0 9m20s 10.28.4.8 regional-cluster-1-zonal-node-pool-2-node2 userservice-cd5ddb4bb-zfr2g 1/1 Running 0 28m 10.28.5.8 regional-cluster-1-zonal-node-pool-2-node1
이 출력 예시에서는
default-pool
및zonal-node-pool-1
이 더 이상 존재하지 않으므로 모든 서비스가zonal-node-pool-2
에서 실행됩니다.
영역의 노드 차단 및 드레이닝
이 섹션에서는 클러스터에서 특정 노드를 차단하고 드레이닝합니다. 단일 영역에서 모든 노드를 차단하고 드레이닝하여 영역의 해당 노드에서 실행되는 포드의 손실을 시뮬레이션합니다.
이 다이어그램에서는 첫 번째 영역의 노드를 차단하고 드레이닝합니다. 다른 두 영역의 노드는 계속 실행됩니다. 이 방식은 포드와 트래픽을 다른 영역에서 실행되는 노드에 올바르게 재배포하여 애플리케이션에서 한 영역의 모든 노드 손실에 대응할 수 있는지 확인합니다.
영역 중 하나에서 노드를 차단하고 드레이닝하여 장애를 시뮬레이션하려면 다음 단계를 완료합니다.
리전 클러스터와 서비스의 가용성을 확인합니다. 대상 장애 영역의 노드 이름을 확인합니다. 프런트엔드 포드가 실행되는 영역을 지정하려고 합니다.
kubectl get pods -o wide
출력은 다음 예시와 같이 표시됩니다.
NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 4m7s 10.96.4.4 regional-cluster-1-default-pool-node2 balancereader-7dc7d9ff57-lv4z7 1/1 Running 0 4m7s 10.96.1.5 regional-cluster-1-default-pool-node1 contacts-7ddc76d94-wxvg5 1/1 Running 0 4m7s 10.96.6.11 regional-cluster-1-default-pool-node3 frontend-747b84bff4-gvktl 1/1 Running 0 4m7s 10.96.1.4 regional-cluster-1-default-pool-node1 ledger-db-0 1/1 Running 0 4m7s 10.96.4.5 regional-cluster-1-default-pool-node2 ledger-db-1 1/1 Running 0 3m50s 10.96.0.13 regional-cluster-1-default-pool-node5 ledgerwriter-f6cc7889d-4hqbm 1/1 Running 0 4m6s 10.96.0.12 regional-cluster-1-default-pool-node5 loadgenerator-57d4cb57cc-fmq52 1/1 Running 0 4m6s 10.96.4.6 regional-cluster-1-default-pool-node2 transactionhistory-5dd7c7fd77-72zpx 1/1 Running 0 4m6s 10.96.6.12 regional-cluster-1-default-pool-node3 userservice-cd5ddb4bb-b7862 1/1 Running 0 4m6s 10.96.1.6 regional-cluster-1-default-pool-node1
이전 출력에 나열된 포드를 노드의 영역과 연결합니다.
kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
출력은 다음 예시와 같이 표시됩니다.
NAME ZONE INT_IP regional-cluster-1-default-pool-node1 asia-southeast1-b 10.148.0.41 regional-cluster-1-default-pool-node2 asia-southeast1-b 10.148.0.42 regional-cluster-1-default-pool-node3 asia-southeast1-a 10.148.0.37 regional-cluster-1-default-pool-node4 asia-southeast1-a 10.148.0.38 regional-cluster-1-default-pool-node5 asia-southeast1-c 10.148.0.40 regional-cluster-1-default-pool-node6 asia-southeast1-c 10.148.0.39
이전 출력 예시에서 프런트엔드 포드는
asia-southeast1-b
영역의regional-cluster-1-default-pool-node1
에 있습니다.다음 단계에서는
asia-southeast1-b
영역(이 출력 예시에서는regional-cluster-1-default-pool-node1
및regional-cluster-1-default-pool-node2
)의 모든 노드를 추적합니다.영역 중 하나에서 대상 노드를 차단하고 드레이닝합니다. 이 예시에서는
asia-southeast1-b
의 노드 2개입니다.kubectl drain regional-cluster-1-default-pool-node1 \ --delete-emptydir-data --ignore-daemonsets kubectl drain regional-cluster-1-default-pool-node2 \ --delete-emptydir-data --ignore-daemonsets
이 명령어는 노드를 예약할 수 없는 것으로 표시하고 노드 장애를 시뮬레이션합니다. Kubernetes는 포드를 작동 영역의 다른 노드로 다시 예약합니다.
이전에 장애 영역의 노드에서 실행되었던 새 프런트엔드 포드와 기타 Cymbal Bank 포드 예시가 이제 어디에서 다시 예약되었는지 확인합니다.
kubectl get po -o wide kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
출력은 다음 예시와 같이 표시됩니다.
NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 4m7s 10.96.4.4 regional-cluster-1-default-pool-node4 balancereader-7dc7d9ff57-lv4z7 1/1 Running 0 4m7s 10.96.1.5 regional-cluster-1-default-pool-node6 contacts-7ddc76d94-wxvg5 1/1 Running 0 4m7s 10.96.6.11 regional-cluster-1-default-pool-node3 frontend-747b84bff4-gvktl 1/1 Running 0 4m7s 10.96.1.4 regional-cluster-1-default-pool-node3 ledger-db-0 1/1 Running 0 4m7s 10.96.4.5 regional-cluster-1-default-pool-node6 ledger-db-1 1/1 Running 0 3m50s 10.96.0.13 regional-cluster-1-default-pool-node5 ledgerwriter-f6cc7889d-4hqbm 1/1 Running 0 4m6s 10.96.0.12 regional-cluster-1-default-pool-node5 loadgenerator-57d4cb57cc-fmq52 1/1 Running 0 4m6s 10.96.4.6 regional-cluster-1-default-pool-node4 transactionhistory-5dd7c7fd77-72zpx 1/1 Running 0 4m6s 10.96.6.12 regional-cluster-1-default-pool-node3 userservice-cd5ddb4bb-b7862 1/1 Running 0 4m6s 10.96.1.6 regional-cluster-1-default-pool-node3 NAME ZONE INT_IP regional-cluster-1-default-pool-node3 asia-southeast1-a 10.148.0.37 regional-cluster-1-default-pool-node4 asia-southeast1-a 10.148.0.38 regional-cluster-1-default-pool-node5 asia-southeast1-c 10.148.0.40 regional-cluster-1-default-pool-node6 asia-southeast1-c 10.148.0.39
이 출력 예시에는 차단된 노드에서 실행되는 Cymbal Bank 포드 예시가 없으며 이제 모든 포드가 다른 두 영역에서만 실행됩니다.
노드의 포드 중단 예산(PDB)으로 인해 노드 드레이닝이 차단될 수 있습니다. 차단 및 드레이닝 작업 전에 PDB 정책을 평가합니다. PDB 및 중단 관리와의 관계에 대한 자세한 내용은 GKE 클러스터의 신뢰성과 업타임을 보장하는 방법을 참조하세요.
삭제
이 튜토리얼에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 안내를 따르세요.
프로젝트 삭제
청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
다음 단계
- 리전 관리형 인스턴스 그룹(MIG)의 영역 중단을 시뮬레이션하는 방법 알아보기
- Google Cloud의 재해 복구에 대해 알아보기
- 여러 영역에서 고가용성 PostgreSQL 설정
- 포드 중단 예산 고려사항
- 영역 영구 디스크와 리전 영구 디스크 비교 알아보기
- GKE에서 고가용성 데이터베이스를 실행하는 방법 알아보기
- Google Cloud의 재해 복구 권장사항 자세히 알아보기
- Backup for GKE 알아보기