Esegui la migrazione da un cluster a un cluster gestito su un nuovo cluster

Questo tutorial mostra come eseguire la migrazione di un'applicazione da una Cluster Google Kubernetes Engine (GKE) che utilizza Cloud Service Mesh nel cluster in un nuovo cluster utilizzando Cloud Service Mesh gestito, il servizio completamente gestito e conforme a Istio di Google mesh.

In questo tutorial imparerai a:

  1. Crea un nuovo cluster Google Kubernetes Engine e installa Cloud Service Mesh nel cluster e il gateway in entrata Cloud Service Mesh sul cluster. Questo cluster agirà come cluster esistente da cui vuoi migrare.
  2. Esegui il deployment Negozio online di esempio nel cluster con Cloud Service Mesh nel cluster.
  3. Creare un altro cluster Google Kubernetes Engine nello stesso progetto Google Cloud.
  4. Esegui il provisioning di Cloud Service Mesh gestito sul secondo cluster ed esegui il deployment Gateway in entrata di Cloud Service Mesh.
  5. Esegui il deployment di Online Boutique nel cluster con Cloud Service Mesh gestito per di replicare il deployment dal cluster con Cloud Service Mesh nel cluster.
  6. 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.
  7. Completa la migrazione da Cloud Service Mesh nel cluster a Cloud Service Mesh gestito puntando la voce DNS (Domain Name System) del cluster con Cloud Service Mesh nel cluster nel cluster con Cloud Service Mesh gestito.

Il traffico degli utenti è suddiviso per 50-50 tra un cluster con Cloud Service Mesh nel cluster e un cluster con Cloud Service Mesh gestito. Ogni cluster contiene il proprio deployment di Online Boutique.

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. it comporta l'aumento incrementale della percentuale di traffico inviato al nuovo completamente gestita. 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 più piccoli e più numerosi. 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 di uso comune per la migrazione da Cloud Service Mesh nel cluster a Cloud Service Mesh gestito:

  • Migrazione del piano di controllo canary: in questa strategia, esegui il provisioning Cloud Service Mesh gestito sullo stesso cluster in cui Cloud Service Mesh nel cluster sia installato.
  • 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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the required APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the required APIs.

    Enable the APIs

Avvia Cloud Shell

In questo tutorial utilizzerai Cloud Shell, una shell ospitato su Google Cloud che ti consente di gestire dell'accesso a specifiche risorse Google Cloud.

Cloud Shell è preinstallato Google Cloud CLI kubectl e istioctl a riga di comando. gcloud CLI fornisce l'interfaccia a riga di comando principale per Google Cloud.

Apri una sessione di Cloud Shell dall'angolo in alto a destra di questo fai clic su e poi su Accetta. Si apre una sessione di Cloud Shell all'interno di un frame più in basso sulla pagina. Completa i seguenti comandi in Cloud Shell durante la sessione.

Scarica il codice campione.

Clona i repository Git contenenti le risorse Kubernetes e Istio utilizzerà:

  git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
  git clone https://github.com/GoogleCloudPlatform/microservices-demo.git

Configura il cluster con Cloud Service Mesh nel cluster

Crea il cluster e installa Cloud Service Mesh nel cluster

In questa sezione creerai il tuo cluster che utilizza Cloud Service Mesh nel cluster. Nella ovvero i cluster che stai già utilizzando.

  1. Sostituisci PROJECT_ID con 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
    
  2. 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
    
  3. Verifica che il contesto del cluster sia stato rinominato:

    kubectl config get-contexts --output="name"
    
  4. Scarica la versione che installa Cloud Service Mesh 1.23.3 su nella directory di lavoro corrente:

    curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.23 > asmcli
    

    Ti verrà chiesto di digitare "y" e premi 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
    
  5. Rendi eseguibile lo script asmcli:

    chmod +x asmcli
    
  6. 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 genera messaggi informativi per permetterti di seguirne i progressi.

    Se l'operazione riesce, l'output è simile al seguente:

    ...
    asmcli: Successfully installed ASM.
    

Esegui il deployment del gateway in entrata di Cloud Service Mesh

  1. Eseguirai il deployment del gateway in entrata di Cloud Service Mesh in una chiamato asm-ingress. Crea lo spazio dei nomi:

    kubectl \
      --context cluster-with-in-cluster-asm \
      create namespace asm-ingress
    
  2. Utilizza l'etichetta istio.io/rev=asm-1233-2 per aggiungere asm-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
    
  3. Esegui il deployment di Cloud Service Mesh Gateway in entrata:

    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

  1. Distribuirai Online Boutique in uno spazio dei nomi separato onlineboutique. Crea lo spazio dei nomi:

    kubectl \
      --context cluster-with-in-cluster-asm \
      create namespace onlineboutique
    
  2. Utilizza l'etichetta istio.io/rev=asm-1233-2 per aggiungere onlineboutique al mesh di servizi e abilitare l'inserimento automatico del proxy sidecar.

    kubectl \
      --context cluster-with-in-cluster-asm \
      label --overwrite namespace onlineboutique istio.io/rev=asm-1233-2
    

    L'output è simile a questo:

    namespace/onlineboutique labeled
    
  3. 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
    
  4. 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}'
    
  5. 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 creerai il cluster in cui eseguirai la migrazione. Potrai eseguire il provisioning di Cloud Service Mesh gestito ed eseguire il deployment di Online Boutique per di replicare i deployment dal cluster che utilizza Cloud Service Mesh nel cluster.

  1. 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
    
  2. 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
    
  3. Verifica che il contesto del cluster sia stato rinominato:

    kubectl config get-contexts --output="name"
    
  4. 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.
    
  5. 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.
    
  6. Abilita 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.
    
  7. Verifica che sia stato eseguito il provisioning di Cloud Service Mesh gestito per il cluster e pronto per essere utilizzato:

    gcloud container fleet mesh describe --project PROJECT_ID
    

    Potrebbero essere necessari circa 10 minuti prima che Cloud Service Mesh esegua il provisioning pronti per essere usati sul cluster. Se vedi controlPlaneManagement.state: DISABLED o controlPlaneManagement.state: PROVISIONING, dovrai eseguire nuovamente il comando precedente a intervalli di alcuni minuti controlPlaneManagement.state: ACTIVE.

    L'output è simile a questo:

    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

  1. Eseguirai il deployment del gateway in entrata di Cloud Service Mesh in una chiamato asm-ingress. Crea lo spazio dei nomi:

    kubectl \
      --context cluster-with-csm \
      create namespace asm-ingress
    
  2. Utilizza l'etichetta istio.io/rev=asm-managed per aggiungere lo spazio dei nomi asm-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'
    
  3. Esegui il deployment di Cloud Service Mesh Gateway in entrata:

    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 a questo:

    namespace/asm-ingress configured
    serviceaccount/asm-ingressgateway configured
    service/asm-ingressgateway configured
    deployment.apps/asm-ingressgateway configured
    gateway.networking.istio.io/asm-ingressgateway configured
    

Deployment di Boutique online

  1. Distribuirai Online Boutique in uno spazio dei nomi separato onlineboutique. Crea lo spazio dei nomi:

    kubectl \
      --context cluster-with-csm \
      create namespace onlineboutique
    
  2. Utilizza l'etichetta istio.io/rev=asm-managed per aggiungere onlineboutique al mesh di servizi e abilitare l'inserimento automatico del proxy sidecar.

    kubectl \
      --context cluster-with-csm \
      label namespace onlineboutique 'istio.io/rev=asm-managed'
    
  3. 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
    
  4. Ottieni l'indirizzo IP esterno del gateway in entrata di Cloud Service Mesh:

    kubectl \
      --context cluster-with-csm \
      --namespace asm-ingress \
      get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
    
  5. 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}' \
      )
    

Testa il cluster con Cloud Service Mesh utilizzando un deployment canary

In questa sezione configurerai il cluster con Cloud Service Mesh nel cluster in modo che Il 50% del traffico di utenti verso Online Boutique viene spostato all'istanza di Online Boutique Boutique sul cluster con Cloud Service Mesh gestito. A questo scopo, devi eseguire il deployment 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
  • a VirtualService per indicare al gateway in entrata Cloud Service Mesh nel cluster di suddividere il traffico traffico 50-50.
  1. 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
    
  2. 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
    
  3. 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
    
  4. Visita l'indirizzo IP del gateway in entrata del cluster con Cloud Service Mesh nel cluster, nel browser web:

    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace asm-ingress \
      get service
    

    Aggiorna più volte la home page di Boutique online e controlla il piè di pagina di pagina ogni volta. 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).

  1. Aggiungi un record A alle impostazioni DNS per puntare il nome di dominio (ad esempio example.com) all'indirizzo IP del gateway in entrata in esecuzione sul cluster con Cloud Service Mesh nel cluster.

  2. Accedi a Online Boutique visitando il nome di dominio nel tuo browser web.

  3. Riduci al minimo la durata (TTL) del record DNS per poter ripristinare rapidamente Voce DNS se è necessario eseguire il rollback.

  4. Imposta il record A del tuo nome di dominio sull'indirizzo IP esterno del gateway in entrata del cluster con Cloud Service Mesh gestito.

  5. 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 usati in questo tutorial, elimina il progetto che contiene le risorse oppure il progetto ed eliminare le singole risorse.

Elimina progetto

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. 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