이 튜토리얼에서는 멀티 클러스터 인그레스를 사용하여 멀티 클러스터 Google Kubernetes Engine(GKE) 환경을 업그레이드하는 방법을 설명합니다. 이 튜토리얼은 프로세스, 아키텍처, 용어를 자세히 설명하는 멀티 클러스터 인그레스를 사용한 멀티 클러스터 GKE 업그레이드 문서와 이어지는 내용입니다. 이 튜토리얼을 진행하기 전에 개념 문서를 읽는 것이 좋습니다.
멀티 클러스터 인그레스(MCI), 멀티 클러스터 게이트웨이(MCG), 독립형 네트워크 엔드포인트 그룹을 사용하는 부하 분산기(LB 및 독립형 NEG) 간의 자세한 비교는 GKE용 멀티 클러스터 부하 분산 API 선택을 참조하세요.
이 문서는 GKE 클러스터 그룹을 유지보수해야 하는 Google Cloud 관리자를 대상으로 합니다.
GKE 클러스터를 자동 업그레이드하는 것이 좋습니다. 자동 업그레이드는 Google Cloud에서 결정한 출시 일정에 따라 클러스터(컨트롤 플레인 및 노드)를 자동으로 업데이트하는 완전 관리형 방식입니다. 따라서 운영자의 개입이 필요하지 않습니다. 그러나 이 가이드에서는 클러스터를 업그레이드하는 방법과 시기를 세부적으로 관리할 수 있도록 앱이 모든 클러스터에서 실행되는 여러 클러스터를 업그레이드하는 방법을 단계별로 살펴봅니다. 그런 다음 업그레이드 전에 멀티 클러스터 인그레스를 사용하여 한 번에 하나의 클러스터를 드레이닝합니다.
아키텍처
이 가이드에서는 다음 아키텍처를 사용합니다. 총 3개의 클러스터가 있는데, 클러스터 2개(blue
및 green
)는 같은 앱이 배포된 동일한 클러스터 역할을 하고 나머지 클러스터 1개(ingress-config
)는 멀티 클러스터 인그레스를 구성하는 컨트롤 플레인 클러스터 역할을 합니다. 이 튜토리얼에서는 앱 클러스터 2개(blue
및 green
클러스터)에 샘플 앱을 배포합니다.
목표
- GKE 클러스터를 3개 만들어 Fleet으로 등록합니다.
- 하나의 GKE 클러스터(
ingress-config
)를 중앙 구성 클러스터로 구성합니다. - 다른 GKE 클러스터에 샘플 앱 배포
- 두 앱 클러스터에서 실행 중인 앱으로 클라이언트 트래픽을 보내도록 멀티 클러스터 인그레스를 구성합니다.
- 앱의 부하 생성기를 설정하고 모니터링을 구성합니다.
- 멀티 클러스터 인그레스에서 하나의 앱 클러스터를 삭제 또는 드레이닝하고 드레이닝된 클러스터를 업그레이드합니다.
- 멀티 클러스터 인그레스를 사용하여 업그레이드된 클러스터로 트래픽을 다시 보냅니다.
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
- 이 튜토리얼에서는 멀티 클러스터 인그레스를 설정하여 다음을 설정해야 합니다.
- 네임스페이스, 배포, 서비스 등의 동일한 앱이 모든 클러스터에서 실행 중인 2개 이상의 클러스터
- 모든 클러스터에서 자동 업그레이드가 사용 중지됨
- 클러스터가 VPC 기반 클러스터로 별칭 IP 주소 범위를 사용함
- HTTP 부하 분산이 사용 설정됨(기본적으로 사용 설정됨)
gcloud --version
은 369 이상이어야 함 GKE 클러스터 등록 단계는 이 버전 이상에서 달라집니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, activate Cloud Shell.
기본 프로젝트를 설정합니다.
export PROJECT=$(gcloud info --format='value(config.project)') gcloud config set project ${PROJECT}
GKE, Hub,
multiclusteringress
API를 사용 설정합니다.gcloud services enable container.googleapis.com \ gkehub.googleapis.com \ multiclusteringress.googleapis.com \ multiclusterservicediscovery.googleapis.com
환경 설정
Cloud Shell에서 저장소를 클론하여 이 가이드에 사용할 파일을 가져옵니다.
cd ${HOME} git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
WORKDIR
디렉터리를 만듭니다.cd kubernetes-engine-samples/networking/gke-multicluster-upgrade-mci/ export WORKDIR=`pwd`
GKE 클러스터 만들기 및 허브 등록
이 섹션에서는 GKE 클러스터를 3개 만들어 GKE Enterprise 허브에 등록합니다.
GKE 클러스터 만들기
Cloud Shell에서 GKE 클러스터를 3개 만듭니다.
gcloud container clusters create ingress-config --zone us-west1-a \ --release-channel=None --no-enable-autoupgrade --num-nodes=4 \ --enable-ip-alias --workload-pool=${PROJECT}.svc.id.goog --quiet --async gcloud container clusters create blue --zone us-west1-b --num-nodes=3 \ --release-channel=None --no-enable-autoupgrade --enable-ip-alias \ --workload-pool=${PROJECT}.svc.id.goog --quiet --async gcloud container clusters create green --zone us-west1-c --num-nodes=3 \ --release-channel=None --no-enable-autoupgrade --enable-ip-alias \ --workload-pool=${PROJECT}.svc.id.goog --quiet
이 튜토리얼에서는
us-west1-a
,us-west1-b
,us-west1-c
의 세 영역에서 단일 리전에 클러스터를 만듭니다. 리전과 영역에 대한 자세한 내용은 위치 및 리전을 참조하세요.클러스터가 모두 생성될 때까지 몇 분 정도 기다립니다. 클러스터가 실행 중인지 확인합니다.
gcloud container clusters list
출력은 다음과 비슷합니다.
NAME: ingress-config LOCATION: us-west1-a MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 35.233.186.135 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 4 STATUS: RUNNING NAME: blue LOCATION: us-west1-b MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 34.82.35.222 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 3 STATUS: RUNNING NAME: green LOCATION: us-west1-c MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 35.185.204.26 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 3 STATUS: RUNNING
kubeconfig
파일을 만든 후 모든 클러스터에 연결하여kubeconfig
파일에 항목을 생성합니다.touch gke-upgrade-kubeconfig export KUBECONFIG=gke-upgrade-kubeconfig gcloud container clusters get-credentials ingress-config \ --zone us-west1-a --project ${PROJECT} gcloud container clusters get-credentials blue --zone us-west1-b \ --project ${PROJECT} gcloud container clusters get-credentials green --zone us-west1-c \ --project ${PROJECT}
kubeconfig
파일에서 각 클러스터의 사용자와 컨텍스트를 만들어 클러스터에 대한 인증을 만듭니다.kubeconfig
파일을 만든 후에는 클러스터 간에 컨텍스트를 빠르게 전환할 수 있습니다.kubeconfig
파일에 클러스터가 3개 있는지 확인합니다.kubectl config view -ojson | jq -r '.clusters[].name'
출력은 다음과 같습니다.
gke_gke-multicluster-upgrades_us-west1-a_ingress-config gke_gke-multicluster-upgrades_us-west1-b_blue gke_gke-multicluster-upgrades_us-west1-c_green
나중에 사용할 수 있도록 클러스터 3개의 컨텍스트를 가져옵니다.
export INGRESS_CONFIG_CLUSTER=$(kubectl config view -ojson | jq \ -r '.clusters[].name' | grep ingress-config) export BLUE_CLUSTER=$(kubectl config view -ojson | jq \ -r '.clusters[].name' | grep blue) export GREEN_CLUSTER=$(kubectl config view -ojson | jq \ -r '.clusters[].name' | grep green) echo -e "${INGRESS_CONFIG_CLUSTER}\n${BLUE_CLUSTER}\n${GREEN_CLUSTER}"
출력은 다음과 같습니다.
gke_gke-multicluster-upgrades_us-west1-a_ingress-config gke_gke-multicluster-upgrades_us-west1-b_blue gke_gke-multicluster-upgrades_us-west1-c_green
Fleet에 GKE 클러스터 등록
Fleet에 클러스터를 등록하면 하이브리드 환경에서 Kubernetes 클러스터를 운영할 수 있습니다. Fleet에 등록된 클러스터는 멀티 클러스터 인그레스와 같은 고급 GKE 기능을 사용할 수 있습니다. GKE 클러스터를 Fleet에 등록하려면 Google Cloud 서비스 계정을 직접 사용하거나 GKE 클러스터의 Kubernetes 서비스 계정이 Identity and Access Management 서비스 계정으로 작동하도록 허용하는 권장 GKE용 워크로드 아이덴티티 제휴 방법을 사용하면 됩니다.
클러스터 3개를 Fleet으로 등록합니다.
gcloud container fleet memberships register ingress-config \ --gke-cluster=us-west1-a/ingress-config \ --enable-workload-identity gcloud container fleet memberships register blue \ --gke-cluster=us-west1-b/blue \ --enable-workload-identity gcloud container fleet memberships register green \ --gke-cluster=us-west1-c/green \ --enable-workload-identity
클러스터가 등록되었는지 확인합니다.
gcloud container fleet memberships list
출력은 다음과 비슷합니다.
NAME: blue EXTERNAL_ID: 401b4f08-8246-4f97-a6d8-cf1b78c2a91d NAME: green EXTERNAL_ID: 8041c36a-9d42-40c8-a67f-54fcfd84956e NAME: ingress-config EXTERNAL_ID: 65ac48fe-5043-42db-8b1e-944754a0d725
허브를 통해
multiclusteringress
기능을 사용 설정하여ingress-config
클러스터를 멀티 클러스터 인그레스의 구성 클러스터로 구성합니다.gcloud container fleet ingress enable --config-membership=ingress-config
위의 명령어는
MulticlusterIngress
및MulticlusterService
CRD(커스텀 리소스 정의)를ingress-config
클러스터에 추가합니다. 이 명령어는 완료되는 데 몇 분 정도 걸립니다. 다음 단계로 진행하기 전에 기다립니다.ingress-cluster
클러스터가 멀티 클러스터 인그레스에 대해 성공적으로 구성되었는지 확인합니다.watch gcloud container fleet ingress describe
다음과 비슷한 출력이 나타날 때까지 기다립니다.
createTime: '2022-07-05T10:21:40.383536315Z' membershipStates: projects/662189189487/locations/global/memberships/blue: state: code: OK updateTime: '2022-07-08T10:59:44.230329189Z' projects/662189189487/locations/global/memberships/green: state: code: OK updateTime: '2022-07-08T10:59:44.230329950Z' projects/662189189487/locations/global/memberships/ingress-config: state: code: OK updateTime: '2022-07-08T10:59:44.230328520Z' name: projects/gke-multicluster-upgrades/locations/global/features/multiclusteringress resourceState: state: ACTIVE spec: multiclusteringress: configMembership: projects/gke-multicluster-upgrades/locations/global/memberships/ingress-config state: state: code: OK description: Ready to use updateTime: '2022-07-08T10:57:33.303543609Z' updateTime: '2022-07-08T10:59:45.247576318Z'
watch
명령어를 종료하려면 Control+C를 누르세요.
블루 및 그린 클러스터에 샘플 애플리케이션 배포
Cloud Shell에서 샘플
whereami
앱을blue
및green
클러스터에 배포합니다.kubectl --context ${BLUE_CLUSTER} apply -f ${WORKDIR}/application-manifests kubectl --context ${GREEN_CLUSTER} apply -f ${WORKDIR}/application-manifests
몇 분 정도 기다린 후
blue
및green
클러스터의 모든 포드가Running
상태인지 확인합니다.kubectl --context ${BLUE_CLUSTER} get pods kubectl --context ${GREEN_CLUSTER} get pods
출력은 다음과 비슷합니다.
NAME READY STATUS RESTARTS AGE whereami-deployment-756c7dc74c-zsmr6 1/1 Running 0 74s NAME READY STATUS RESTARTS AGE whereami-deployment-756c7dc74c-sndz7 1/1 Running 0 68s.
멀티 클러스터 인그레스 구성
이 섹션에서는 blue
및 green
클러스터 모두에서 실행되는 애플리케이션에 트래픽을 전송하는 멀티 클러스터 인그레스를 만듭니다. Cloud Load Balancing을 사용하여 blue
및 green
클러스터 모두에서 whereami
앱을 백엔드로 사용하는 부하 분산기를 만듭니다. 부하 분산기를 만들려면 MultiClusterIngress
와 1개 이상의 MultiClusterServices
가 필요합니다.
MultiClusterIngress
및 MultiClusterService
객체는 단일 클러스터 컨텍스트에서 사용되는 기존 Kubernetes 인그레스 및 서비스 리소스의 멀티 클러스터 아날로그입니다.
Cloud Shell에서
MulticlusterIngress
리소스를ingress-config
클러스터에 배포합니다.kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/multicluster-manifests/mci.yaml
출력은 다음과 같습니다.
multiclusteringress.networking.gke.io/whereami-mci created
MulticlusterService
리소스를ingress-config
클러스터에 배포합니다.kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/multicluster-manifests/mcs-blue-green.yaml
출력은 다음과 같습니다.
multiclusterservice.networking.gke.io/whereami-mcs created
두 리소스를 비교하려면 다음 안내를 따르세요.
MulticlusterIngress
리소스를 검사합니다.kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusteringress -o yaml
출력에는 다음이 포함됩니다.
spec: template: spec: backend: serviceName: whereami-mcs servicePort: 8080
MulticlusterIngress
리소스는MulticlusterService
사양이serviceName
리소스를 가리킨다는 것을 제외하고 Kubernetes 인그레스 리소스와 비슷합니다.MulticlusterService
리소스를 검사합니다.kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice -o yaml
출력에는 다음이 포함됩니다.
spec: clusters: - link: us-west1-b/blue - link: us-west1-c/green template: spec: ports: - name: web port: 8080 protocol: TCP targetPort: 8080 selector: app: whereami
MulticlusterService
리소스는clusters
사양이 있다는 것을 제외하고 Kubernetes 서비스 리소스와 비슷합니다.clusters
값은MulticlusterService
리소스가 생성되는 등록된 클러스터 목록입니다.MulticlusterIngress
리소스가MulticlusterService
리소스를 가리키는 백엔드 서비스로 부하 분산기를 생성했는지 확인합니다.watch kubectl --context ${INGRESS_CONFIG_CLUSTER} \ get multiclusteringress -o jsonpath="{.items[].status.VIP}"
최대 10분 정도 걸릴 수 있습니다. 다음과 비슷한 출력이 나타날 때까지 기다립니다.
34.107.246.9
watch
명령어를 종료하려면Control+C
를 누르세요.
Cloud Shell에서 Cloud Load Balancing VIP를 가져옵니다.
export GCLB_VIP=$(kubectl --context ${INGRESS_CONFIG_CLUSTER} \ get multiclusteringress -o json | jq -r '.items[].status.VIP') \ && echo ${GCLB_VIP}
출력은 다음과 비슷합니다.
34.107.246.9
curl
을 사용하여 부하 분산기와 배포된 애플리케이션에 액세스합니다.curl ${GCLB_VIP}
출력은 다음과 비슷합니다.
{ "cluster_name": "green", "host_header": "34.107.246.9", "pod_name": "whereami-deployment-756c7dc74c-sndz7", "pod_name_emoji": "😇", "project_id": "gke-multicluster-upgrades", "timestamp": "2022-07-08T14:26:07", "zone": "us-west1-c" }
curl
명령어를 반복해서 실행합니다. 요청은 두 클러스터blue
및green
에 배포된whereami
애플리케이션 간에 부하 분산됩니다.
부하 생성기 설정
이 섹션에서는 Cloud Load Balancing VIP에 대한 클라이언트 트래픽을 생성하는 loadgenerator
서비스를 설정합니다. 먼저 MulticlusterService
리소스가 blue
및 green
클러스터에 트래픽을 보내도록 설정되어 있기 때문에 트래픽이 두 클러스터로 전송됩니다. 나중에 단일 클러스터로 트래픽을 전송하도록 MulticlusterService
리소스를 구성합니다.
클라이언트 트래픽을 Cloud Load Balancing으로 보내도록
loadgenerator
매니페스트를 구성합니다.TEMPLATE=loadgen-manifests/loadgenerator.yaml.templ && envsubst < ${TEMPLATE} > ${TEMPLATE%.*}
ingress-config
클러스터에loadgenerator
을 배포합니다.kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/loadgen-manifests
ingress-config
클러스터의loadgenerator
포드가 모두Running
상태인지 확인합니다.kubectl --context ${INGRESS_CONFIG_CLUSTER} get pods
출력은 다음과 비슷합니다.
NAME READY STATUS RESTARTS AGE loadgenerator-5498cbcb86-hqscp 1/1 Running 0 53s loadgenerator-5498cbcb86-m2z2z 1/1 Running 0 53s loadgenerator-5498cbcb86-p56qb 1/1 Running 0 53s
포드 중 하나라도
Running
상태가 아니면 몇 분 정도 기다린 후 명령어를 다시 실행하세요.
트래픽 모니터링
이 섹션에서는 Google Cloud 콘솔을 사용하여 whereami
앱에 대한 트래픽을 모니터링합니다.
이전 섹션에서 Cloud Load Balancing VIP를 통해 whereami
앱에 액세스하여 클라이언트 트래픽을 시뮬레이션하는 loadgenerator
배포를 설정했습니다. Google Cloud 콘솔을 통해 이러한 측정항목을 모니터링할 수 있습니다. 업그레이드를 위해 클러스터를 드레이닝할 때 모니터링할 수 있도록 먼저 모니터링을 설정합니다(다음 섹션 참조).
멀티 클러스터 인그레스에 도달하는 트래픽을 표시할 대시보드를 만듭니다.
export DASH_ID=$(gcloud monitoring dashboards create \ --config-from-file=dashboards/cloud-ops-dashboard.json \ --format=json | jq -r ".name" | awk -F '/' '{print $4}')
출력은 다음과 비슷합니다.
Created [721b6c83-8f9b-409b-a009-9fdf3afb82f8]
Google Cloud 콘솔에서 Cloud Load Balancing의 측정항목을 사용할 수 있습니다. URL을 생성합니다.
echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"
출력은 다음과 비슷합니다.
https://console.cloud.google.com/monitoring/dashboards/builder/721b6c83-8f9b-409b-a009-9fdf3afb82f8/?project=gke-multicluster-upgrades&timeDomain=1h"
브라우저에서 위의 명령어로 생성된 URL로 이동합니다.
샘플 애플리케이션의 트래픽은 부하 생성기에서
blue
및green
클러스터로 이동합니다(클러스터가 있는 두 영역으로 표시됨). 타임라인 측정항목 차트는 두 백엔드로 이동하는 트래픽을 보여줍니다.k8s1-
마우스 오버 값은 두 프런트엔드MulticlusterServices
에 대한 네트워크 엔드포인트 그룹(NEG)이blue
및green
클러스터에서 실행되고 있음을 나타냅니다.
blue
클러스터 드레이닝 및 업그레이드
이 섹션에서는 blue
클러스터를 드레이닝합니다. 클러스터를 드레이닝하면 부하 분산 풀에서 클러스터가 삭제됩니다. blue
클러스터를 드레이닝한 후에는 대상이 애플리케이션인 모든 클라이언트 트래픽이 green
클러스터로 이동합니다.
이전 섹션의 설명대로 이 프로세스를 모니터링할 수 있습니다. 클러스터가 드레이닝되면 드레이닝된 클러스터를 업그레이드할 수 있습니다. 업그레이드 후에는 부하 분산 풀에 다시 배치할 수 있습니다. 위의 단계를 반복하여 다른 클러스터도 업그레이드합니다(이 가이드에 표시되지 않음).
blue
클러스터를 드레이닝하려면 ingress-cluster
클러스터의 MulticlusterService
리소스를 업데이트하고 clusters
사양에서 blue
클러스터를 삭제합니다.
블루 클러스터 드레이닝
Cloud Shell에서
ingress-config
클러스터의MulticlusterService
리소스를 업데이트합니다.kubectl --context ${INGRESS_CONFIG_CLUSTER} \ apply -f ${WORKDIR}/multicluster-manifests/mcs-green.yaml
clusters
사양에green
클러스터만 있는지 확인합니다.kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice \ -o json | jq '.items[].spec.clusters'
출력은 다음과 같습니다.
[ { "link": "us-west1-c/green" } ]
green
클러스터만clusters
사양에 나열되므로 부하 분산 풀에는green
클러스터만 있습니다.Google Cloud 콘솔에서 Cloud Load Balancing 측정항목의 측정항목을 볼 수 있습니다. URL을 생성합니다.
echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"
브라우저에서 이전 명령어로 생성된 URL로 이동합니다.
차트에서는
green
클러스터만 트래픽을 수신하고 있음을 보여줍니다.
blue
클러스터를 업그레이드합니다.
이제 blue
클러스터가 더 이상 클라이언트 트래픽을 수신하지 않으므로 클러스터(컨트롤 플레인 및 노드)를 업그레이드할 수 있습니다.
Cloud Shell에서 클러스터의 현재 버전을 가져옵니다.
gcloud container clusters list
출력은 다음과 비슷합니다.
NAME: ingress-config LOCATION: us-west1-a MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 35.233.186.135 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 4 STATUS: RUNNING NAME: blue LOCATION: us-west1-b MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 34.82.35.222 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 3 STATUS: RUNNING NAME: green LOCATION: us-west1-c MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 35.185.204.26 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 3 STATUS: RUNNING
이 가이드를 완료하는 시기에 따라 클러스터 버전이 달라질 수 있습니다.
영역에서 사용 가능한
MasterVersions
버전 목록을 가져옵니다.gcloud container get-server-config --zone us-west1-b --format=json | jq \ '.validMasterVersions[0:20]'
출력은 다음과 비슷합니다.
[ "1.24.1-gke.1400", "1.23.7-gke.1400", "1.23.6-gke.2200", "1.23.6-gke.1700", "1.23.6-gke.1501", "1.23.6-gke.1500", "1.23.5-gke.2400", "1.23.5-gke.1503", "1.23.5-gke.1501", "1.22.10-gke.600", "1.22.9-gke.2000", "1.22.9-gke.1500", "1.22.9-gke.1300", "1.22.8-gke.2200", "1.22.8-gke.202", "1.22.8-gke.201", "1.22.8-gke.200", "1.21.13-gke.900", "1.21.12-gke.2200", "1.21.12-gke.1700" ]
영역에서 사용 가능한
NodeVersions
버전 목록을 가져옵니다.gcloud container get-server-config --zone us-west1-b --format=json | jq \ '.validNodeVersions[0:20]'
출력은 다음과 비슷합니다.
[ "1.24.1-gke.1400", "1.23.7-gke.1400", "1.23.6-gke.2200", "1.23.6-gke.1700", "1.23.6-gke.1501", "1.23.6-gke.1500", "1.23.5-gke.2400", "1.23.5-gke.1503", "1.23.5-gke.1501", "1.22.10-gke.600", "1.22.9-gke.2000", "1.22.9-gke.1500", "1.22.9-gke.1300", "1.22.8-gke.2200", "1.22.8-gke.202", "1.22.8-gke.201", "1.22.8-gke.200", "1.22.7-gke.1500", "1.22.7-gke.1300", "1.22.7-gke.900" ]
MasterVersions
및NodeVersions
목록에 있고blue
클러스터의 현재 버전보다 높은MasterVersion
및NodeVersion
버전에 대한 환경 변수를 설정합니다. 예를 들면 다음과 같습니다.export UPGRADE_VERSION="1.22.10-gke.600"
이 가이드에서는
1.22.10-gke.600
버전을 사용합니다. 클러스터 버전은 이 가이드를 완료하는 시기에 사용 가능한 버전에 따라 달라질 수 있습니다. 업그레이드에 대한 자세한 내용은 클러스터 및 노드 풀 업그레이드를 참조하세요.blue
클러스터의control plane
노드를 업그레이드합니다.gcloud container clusters upgrade blue \ --zone us-west1-b --master --cluster-version ${UPGRADE_VERSION}
업그레이드를 확인하려면
Y
를 누르세요.과정을 완료하는 데 몇 분 정도 걸립니다. 업그레이드가 완료될 때까지 기다렸다가 계속 진행합니다.
업데이트가 완료되면 출력은 다음과 같습니다.
Updated [https://container.googleapis.com/v1/projects/gke-multicluster-upgrades/zones/us-west1-b/clusters/blue].
blue
클러스터의 노드를 업그레이드합니다.gcloud container clusters upgrade blue \ --zone=us-west1-b --node-pool=default-pool \ --cluster-version ${UPGRADE_VERSION}
업데이트를 확인하려면
Y
를 누르세요.과정을 완료하는 데 몇 분 정도 걸립니다. 노드 업그레이드가 완료될 때까지 기다렸다가 계속 진행합니다.
업그레이드가 완료되면 출력은 다음과 같습니다.
Upgrading blue... Done with 3 out of 3 nodes (100.0%): 3 succeeded...done. Updated [https://container.googleapis.com/v1/projects/gke-multicluster-upgrades/zones/us-west1-b/clusters/blue].
blue
클러스터가 업그레이드되었는지 확인합니다.gcloud container clusters list
출력은 다음과 비슷합니다.
NAME: ingress-config LOCATION: us-west1-a MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 35.233.186.135 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 4 STATUS: RUNNING NAME: blue LOCATION: us-west1-b MASTER_VERSION: 1.22.10-gke.600 MASTER_IP: 34.82.35.222 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.10-gke.600 NUM_NODES: 3 STATUS: RUNNING NAME: green LOCATION: us-west1-c MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 35.185.204.26 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 3 STATUS: RUNNING
부하 분산 풀에 blue
클러스터 다시 추가
이 섹션에서는 blue
클러스터를 부하 분산 풀에 다시 추가합니다.
Cloud Shell에서 부하 분산 풀에 다시 추가하기 전에 애플리케이션 배포가
blue
클러스터에서 실행 중인지 확인합니다.kubectl --context ${BLUE_CLUSTER} get pods
출력은 다음과 비슷합니다.
NAME READY STATUS RESTARTS AGE whereami-deployment-756c7dc74c-xdnb6 1/1 Running 0 17m
MutliclusterService
리소스를 업데이트하여blue
클러스터를 부하 분산 풀에 다시 추가합니다.kubectl --context ${INGRESS_CONFIG_CLUSTER} apply \ -f ${WORKDIR}/multicluster-manifests/mcs-blue-green.yaml
클러스터 사양에
blue
및green
클러스터가 모두 있는지 확인합니다.kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice \ -o json | jq '.items[].spec.clusters'
출력은 다음과 같습니다.
[ { "link": "us-west1-b/blue" }, { "link": "us-west1-c/green" } ]
blue
및green
클러스터가 이제clusters
사양에 있습니다.Google Cloud 콘솔에서 Cloud Load Balancing 측정항목의 측정항목을 사용할 수 있습니다. URL을 생성합니다.
echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"
브라우저에서 이전 명령어로 생성된 URL로 이동합니다.
차트에서는 블루 및 그린 클러스터 모두 부하 분산기를 사용하여 부하 생성기에서 트래픽을 수신하고 있음을 보여줍니다.
수고하셨습니다. 멀티 클러스터 인그레스를 사용하여 멀티 클러스터 아키텍처에서 GKE 클러스터를 업그레이드했습니다.
green
클러스터를 업그레이드하려면 블루 클러스터를 드레이닝하고 업그레이드하는 프로세스를 반복합니다. 여기서blue
를green
으로 바꿉니다.
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 Google Cloud 프로젝트를 삭제하는 것입니다. 또는 개별 리소스를 삭제할 수 있습니다.
클러스터 삭제
Cloud Shell에서
blue
및green
클러스터를 등록 취소하고 삭제합니다.gcloud container fleet memberships unregister blue --gke-cluster=us-west1-b/blue gcloud container clusters delete blue --zone us-west1-b --quiet gcloud container fleet memberships unregister green --gke-cluster=us-west1-c/green gcloud container clusters delete green --zone us-west1-c --quiet
ingress-config
클러스터에서MuticlusterIngress
리소스를 삭제합니다.kubectl --context ${INGRESS_CONFIG_CLUSTER} delete -f ${WORKDIR}/multicluster-manifests/mci.yaml
이 명령어는 프로젝트에서 Cloud Load Balancing 리소스를 삭제합니다.
ingress-config
클러스터를 등록 취소하고 삭제합니다.gcloud container fleet memberships unregister ingress-config --gke-cluster=us-west1-a/ingress-config gcloud container clusters delete ingress-config --zone us-west1-a --quiet
모든 클러스터가 삭제되었는지 확인합니다.
gcloud container clusters list
출력은 다음과 같습니다.
*<null>*
kubeconfig
파일을 재설정합니다.unset KUBECONFIG
WORKDIR
폴더를 삭제합니다.cd ${HOME} rm -rf ${WORKDIR}
프로젝트 삭제
- 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.
다음 단계
- 멀티 클러스터 인그레스 자세히 알아보기
- 클러스터에 멀티 클러스터 인그레스를 배포하는 방법 알아보기
- Google Cloud에 대한 참조 아키텍처, 다이어그램, 권장사항 살펴보기. Cloud 아키텍처 센터 살펴보기