일반적인 규제 요구사항은 기업이 재해 복구(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 모드 클러스터
가격 계산기를 사용하면 예상 사용량을 토대로 예상 비용을 산출할 수 있습니다.
시작하기 전에
- 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.
-
-
Kubernetes Engine API, Compute Engine API를 사용 설정합니다.
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/
이전 섹션에서 만든 GKE 클러스터에 Cymbal Bank 샘플 애플리케이션을 배포합니다.
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
는 더 이상 사용되지 않습니다. URL이http://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
의 두 노드입니다.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 및 PDB와 중단 관리와의 관계에 대한 자세한 내용은 GKE 클러스터의 안정성과 업타임을 보장하는 방법을 참조하세요.
삭제
이 튜토리얼에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 안내를 따르세요.
프로젝트 삭제
청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.
- Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.
- 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
- 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.
다음 단계
- 리전 관리형 인스턴스 그룹(MIG)의 영역 중단을 시뮬레이션하는 방법 알아보기
- Google Cloud의 재해 복구에 대해 알아보기
- 여러 영역에서 고가용성 PostgreSQL 설정
- 포드 중단 예산 고려사항
- 영역 영구 디스크와 리전 영구 디스크 비교 알아보기
- GKE에서 고가용성 데이터베이스 실행 방법 알아보기
- Google Cloud의 재해 복구 권장사항 자세히 알아보기
- Backup for GKE 알아보기