Esegui la migrazione dal piano di controllo in-cluster a quello gestito su un nuovo cluster
Questo tutorial mostra come eseguire la migrazione di un'applicazione da un cluster Google Kubernetes Engine (GKE) che utilizza Cloud Service Mesh all'interno del cluster a un nuovo cluster che utilizza Cloud Service Mesh gestito, il servizio mesh di Google completamente gestito e conforme a Istio.
In questo tutorial:
- Crea un nuovo cluster Google Kubernetes Engine e installa Cloud Service Mesh nel cluster e il gateway di ingresso Cloud Service Mesh. Questo cluster agirà come cluster esistente da cui vuoi eseguire la migrazione.
- Esegui il deployment dell'applicazione di esempio Online Boutique nel cluster con Cloud Service Mesh nel cluster.
- Creare un altro cluster Google Kubernetes Engine nello stesso progetto Google Cloud.
- Esegui il provisioning di Cloud Service Mesh gestito sul secondo cluster ed esegui il deployment della Gateway in entrata di Cloud Service Mesh.
- Esegui il deployment di Online Boutique nel cluster con Cloud Service Mesh gestito per riprodurre il deployment dal cluster con Cloud Service Mesh nel cluster.
- Shift il 50% del traffico degli utenti dal cluster con Cloud Service Mesh nel cluster con Cloud Service Mesh gestito, utilizzando la suddivisione del traffico di Istio sul cluster con Cloud Service Mesh nel cluster.
- Completa la migrazione da Cloud Service Mesh all'interno del cluster a Cloud Service Mesh gestito indirizzando la voce DNS (Domain Name System) del cluster con Cloud Service Mesh all'interno del cluster a Cloud Service Mesh gestito.
Deployment canary
"Deployment canary" è una tecnica utilizzata nello sviluppo di software per testare una nuova di un software prima di rilasciarla a tutti gli utenti. Consiste nell'aumentare in modo incrementale la percentuale di traffico inviata alla nuova versione. In questo tutorial configurerai un nuovo cluster con di Cloud Service Mesh e di trasferire in modo incrementale il traffico degli utenti al suo interno. Inizierai con indirizzare lo 0% del traffico di utenti al nuovo cluster, quindi il 50% e, infine, il 100%. In produzione, dovresti usare incrementi sempre più piccoli. Se in qualsiasi momento noterai che il nuovo cluster non è in grado di gestire una percentuale del traffico, puoi eseguire il rollback riducendo la percentuale allo 0%.
Piano di controllo canary e cluster canary
Esistono due strategie comunemente utilizzate per le migrazioni da Cloud Service Mesh all'interno del cluster a Cloud Service Mesh gestito:
- Migrazione del piano di controllo Canary: in questa strategia, esegui il provisioning di Cloud Service Mesh gestito nello stesso cluster in cui è installato Cloud Service Mesh in-cluster.
- Migrazione di cluster canary: in questa strategia, creerai un nuovo cluster e quindi esegui il provisioning di Cloud Service Mesh gestito.
In questo tutorial, seguirai la strategia di migrazione del cluster canary.
Costi
Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:
Al termine del tutorial, puoi evitare i costi continui eliminando le risorse che hai creato. Per maggiori informazioni, vedi Pulizia.
Prima di iniziare
- 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.
-
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.
-
Enable the required APIs.
-
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.
-
Enable the required APIs.
Avvia Cloud Shell
In questo tutorial utilizzerai Cloud Shell, un ambiente shell ospitato su Google Cloud che ti consente di gestire le tue risorse Google Cloud.
Cloud Shell include gli strumenti a riga di comando Google Cloud CLI, kubectl e istioctl. L'interfaccia a riga di comando gcloud fornisce l'interfaccia a riga di comando principale per Google Cloud.
Apri una sessione di Cloud Shell dall'angolo in alto a destra fai clic su terminal e poi su Accetta. Una sessione di Cloud Shell si apre in un frame nella parte inferiore della pagina. Completa i seguenti comandi nella sessione Cloud Shell.
Scarica il codice campione.
Clona i repository Git contenenti le risorse Kubernetes e Istio che utilizzerai:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
Configurare il cluster con Cloud Service Mesh nel cluster
Crea il cluster e installa Cloud Service Mesh al suo interno
In questa sezione crei il cluster che utilizza Cloud Service Mesh nel cluster. In pratica, si tratta dei cluster che stai già utilizzando.
Sostituisci
PROJECT_ID
con il tuo ID progetto e crea un nuovo cluster:gcloud container clusters create cluster-with-in-cluster-asm \ --project=PROJECT_ID \ --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool=PROJECT_ID.svc.id.goog
Rinomina il contesto del cluster in modo che sia più facile da utilizzare:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-in-cluster-asm \ cluster-with-in-cluster-asm
Verifica che il contesto del cluster sia stato rinominato:
kubectl config get-contexts --output="name"
Scarica la versione che installa Cloud Service Mesh 1.23.3 nella directory di lavoro corrente:
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.23 > asmcli
Ti verrà chiesto di digitare "y" e di premere Invio.
L'output è simile a questo:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 167k 100 167k 0 0 701k 0 --:--:-- --:--:-- --:--:-- 701k
Rendi eseguibile lo script
asmcli
:chmod +x asmcli
Installa Cloud Service Mesh nel cluster utilizzando
asmcli
:./asmcli install \ --project_id PROJECT_ID \ --cluster_name cluster-with-in-cluster-asm \ --cluster_location us-central1-a \ --output_dir . \ --enable_all \ --ca mesh_ca
Il completamento dello strumento
asmcli
può richiedere diversi minuti. Lo strumento restituisce messaggi informativi per permetterti di seguirne i progressi.In caso di esito positivo, l'output è simile al seguente:
... asmcli: Successfully installed ASM.
Esegui il deployment del gateway di ingresso di Cloud Service Mesh
Eseguirai il deployment del gateway in entrata di Cloud Service Mesh in una denominato
asm-ingress
. Crea lo spazio dei nomi:kubectl \ --context cluster-with-in-cluster-asm \ create namespace asm-ingress
Utilizza l'etichetta
istio.io/rev=asm-1233-2
per aggiungereasm-ingress
al mesh di servizi e abilitare l'inserimento automatico del proxy sidecar.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace asm-ingress istio.io/rev=asm-1233-2
L'output è simile a questo:
namespace/asm-ingress labeled
Esegui il deployment del gateway di ingresso Cloud Service Mesh:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
L'output è simile a questo:
serviceaccount/asm-ingressgateway created service/asm-ingressgateway created deployment.apps/asm-ingressgateway created gateway.networking.istio.io/asm-ingressgateway created
Deployment di Boutique online
Eseguirai il deployment di Online Boutique in uno spazio dei nomi separato chiamato
onlineboutique
. Crea lo spazio dei nomi:kubectl \ --context cluster-with-in-cluster-asm \ create namespace onlineboutique
Utilizza l'etichetta
istio.io/rev=asm-1233-2
per aggiungere lo spazio dei nomionlineboutique
al service mesh e attivare l'iniezione automatica del proxy sidecar.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace onlineboutique istio.io/rev=asm-1233-2
L'output è simile al seguente:
namespace/onlineboutique labeled
Esegui il deployment dei 12 servizi di Online Boutique, compreso il generatore di carico che che imitano il traffico degli utenti:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
Ottieni l'indirizzo IP esterno del gateway in entrata di Cloud Service Mesh:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Copia l'indirizzo IP esterno del gateway in entrata e accedi tramite nel browser web. Vedrai l'app di esempio Online Boutique.
Configura il nuovo cluster con Cloud Service Mesh gestito
Crea il cluster ed esegui il provisioning di Cloud Service Mesh gestito
In questa sezione, crei il cluster a cui eseguirai la migrazione. Eseguirai il provisioning di Cloud Service Mesh gestito ed eseguirai il deployment di Online Boutique per replicare i deployment dal cluster che utilizza Cloud Service Mesh in-cluster.
Crea un nuovo cluster:
gcloud container clusters create cluster-with-csm \ --project=PROJECT_ID --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool PROJECT_ID.svc.id.goog
Rinomina il contesto del cluster in modo che sia più facile da utilizzare:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-csm \ cluster-with-csm
Verifica che il contesto del cluster sia stato rinominato:
kubectl config get-contexts --output="name"
Abilita Cloud Service Mesh nel parco risorse del tuo progetto. R fleet è un'entità logica di cluster Kubernetes e altre risorse che possono essere gestite in sinergia.
gcloud container fleet mesh enable --project PROJECT_ID
L'output è simile a questo:
Waiting for Feature Service Mesh to be created...done.
Registra il cluster nel parco risorse del progetto:
gcloud container fleet memberships register cluster-with-csm-membership \ --gke-cluster=us-central1-a/cluster-with-csm \ --enable-workload-identity \ --project PROJECT_ID
L'output è simile a questo:
Waiting for membership to be created...done. Finished registering to the Fleet.
Attiva Cloud Service Mesh gestito sul cluster:
gcloud container fleet mesh update \ --management automatic \ --memberships cluster-with-csm-membership \ --project PROJECT_ID
L'output è simile a questo:
Waiting for Feature Service Mesh to be updated...done.
Verifica che sia stato eseguito il provisioning di Cloud Service Mesh gestito per il cluster e che sia pronto per l'uso:
gcloud container fleet mesh describe --project PROJECT_ID
Il provisioning di Cloud Service Mesh e la relativa disponibilità per l'utilizzo sul cluster possono richiedere circa 10 minuti. Se vedi
controlPlaneManagement.state: DISABLED
ocontrolPlaneManagement.state: PROVISIONING
, dovrai eseguire nuovamente il comando precedente a intervalli di alcuni minuticontrolPlaneManagement.state: ACTIVE
.L'output è simile al seguente:
createTime: '2022-07-06T01:05:39.110120474Z' membershipSpecs: projects/123456789123/locations/global/memberships/cluster-with-csm-membership: mesh: management: MANAGEMENT_AUTOMATIC membershipStates: projects/123456789123/locations/global/memberships/cluster-with-csm-membership: servicemesh: controlPlaneManagement: details: - code: REVISION_READY details: 'Ready: asm-managed' state: ACTIVE dataPlaneManagement: details: - code: OK details: Service is running. state: ACTIVE state: code: OK description: 'Revision(s) ready for use: asm-managed.' updateTime: '2022-07-06T01:19:24.243993678Z' name: projects/your-project-id/locations/global/features/servicemesh resourceState: state: ACTIVE spec: {} state: state: {} updateTime: '2022-07-06T01:19:27.475885687Z'
Esegui il deployment del gateway in entrata di Cloud Service Mesh
Eseguirai il deployment del gateway in entrata di Cloud Service Mesh in una denominato
asm-ingress
. Crea lo spazio dei nomi:kubectl \ --context cluster-with-csm \ create namespace asm-ingress
Utilizza l'etichetta
istio.io/rev=asm-managed
per aggiungere lo spazio dei nomiasm-ingress
al mesh di servizi e abilitare l'inserimento automatico del proxy sidecar.kubectl \ --context cluster-with-csm \ label namespace asm-ingress 'istio.io/rev=asm-managed'
Esegui il deployment del gateway di ingresso Cloud Service Mesh:
kubectl \ --context cluster-with-csm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-csm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
L'output è simile al seguente:
namespace/asm-ingress configured serviceaccount/asm-ingressgateway configured service/asm-ingressgateway configured deployment.apps/asm-ingressgateway configured gateway.networking.istio.io/asm-ingressgateway configured
Esegui il deployment di Online Boutique
Distribuirai Online Boutique in uno spazio dei nomi separato
onlineboutique
. Crea lo spazio dei nomi:kubectl \ --context cluster-with-csm \ create namespace onlineboutique
Utilizza l'etichetta
istio.io/rev=asm-managed
per aggiungere lo spazio dei nomionlineboutique
al service mesh e attivare l'iniezione automatica del proxy sidecar.kubectl \ --context cluster-with-csm \ label namespace onlineboutique 'istio.io/rev=asm-managed'
Esegui il deployment dei 12 servizi di Online Boutique, compreso il generatore di carico che che imitano il traffico degli utenti:
kubectl \ --context cluster-with-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
Recupera l'indirizzo IP esterno del gateway di ingresso Cloud Service Mesh:
kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Copia l'indirizzo IP esterno del servizio
asm-ingressgateway
e accedi tramite il browser web. Vedrai l'app di esempio Online Boutique. Userai l'indirizzo IP esterno nella prossima sezione, quindi copialo variabile di ambiente:export INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM=$( \ kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \ )
Testare il cluster con Cloud Service Mesh utilizzando un deployment canary
In questa sezione, configuri il cluster con Cloud Service Mesh all'interno del cluster in modo che il 50% del traffico degli utenti verso Online Boutique venga spostato nell'istanza di Online Boutique nel cluster con Cloud Service Mesh gestito. Per farlo, esegui il deployment di due risorse Istio nel cluster con Cloud Service Mesh nel cluster:
- una ServiceEntry per indicare al Cloud Service Mesh nel cluster la gestione di Cloud Service Mesh endpoint Online Boutique del cluster
- un VirtualService per indicare al gateway di ingresso Cloud Service Mesh nel cluster di suddividere il traffico in parti uguali.
Imposta l'indirizzo IP del gateway in entrata del cluster Cloud Service Mesh gestito all'interno della risorsa
ServiceEntry
:sed -i "s/1.2.3.4/${INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM}/" anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
Esegui il deployment di
ServiceEntry
nel cluster con Cloud Service Mesh nel cluster:kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
Esegui il deployment di
VirtualService
nel cluster con Cloud Service Mesh nel cluster:kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service-in-cluster-asm.yaml
Visita l'indirizzo IP del gateway in entrata del cluster con Cloud Service Mesh all'interno del cluster nel browser web:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get service
Aggiorna la home page della Boutique online più volte e controlla ogni volta il piè di pagina della pagina. Come puoi notare, il 50% delle richieste viene gestito da un pod il cluster con Cloud Service Mesh gestito.
Esegui la migrazione al cluster con Cloud Service Mesh gestito
Questa sezione presuppone che tu possieda un nome di dominio e abbia accesso al relativo DNS (Domain Name Server).
Aggiungi un record A alle impostazioni DNS per associare il nome di dominio (ad esempio example.com) all'indirizzo IP del gateway di ingresso in esecuzione nel cluster con Cloud Service Mesh all'interno del cluster.
Accedi alla boutique online visitando il nome di dominio nel tuo browser web.
Riduci al minimo il valore TTL (Time To Live) del record DNS per assicurarti di poter ripristinare rapidamente la voce DNS in caso di rollback.
Imposta il record A del tuo nome di dominio sull'indirizzo IP esterno del gateway di ingresso del cluster con Cloud Service Mesh gestito.
Se la migrazione è riuscita, elimina il cluster con Cloud Service Mesh nel cluster:
gcloud container clusters delete cluster-with-in-cluster-asm \ --zone=us-central1-a \ --project=PROJECT_ID
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina progetto
- 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.
Elimina le risorse
Elimina il cluster con Cloud Service Mesh gestito:
gcloud container clusters delete cluster-with-managed-asm \
--zone=us-central1-a \
--project=PROJECT_ID
Passaggi successivi
- Informazioni su Cloud Service Mesh gestito.
- Scopri le best practice per la sicurezza di Cloud Service Mesh.