Mettre à niveau Anthos Service Mesh sur GKE

Ce guide explique comment mettre à niveau Anthos Service Mesh de la version 1.6.4+ vers la version 1.7.8 sur GKE. Pour mettre à niveau Anthos Service Mesh 1.4.5 ou version ultérieure, vous devez d'abord passer à Anthos Service Mesh 1.5. Il n'est pas possible de mettre à niveau Anthos Service Mesh 1.4 directement vers 1.6.

Les installations Anthos Service Mesh 1.7 et ultérieures sont compatibles avec les mises à niveau de versions ignorées. Pour passer directement à la version 1.10, consultez la page Mettre à niveau Anthos Service Mesh vers la dernière version.

Lors de la mise à niveau, nous vous recommandons d'effectuer une mise à niveau du plan de contrôle double (également appelée mise à niveau Canary), où les versions nouvelle et précédente du plan de contrôle sont exécutées lorsque vous testez la nouvelle version avec un faible pourcentage de vos charges de travail. Cette approche est plus sûre qu'une mise à niveau sur place, où la nouvelle version du plan de contrôle remplace la version précédente. Notez que le service istio-ingressgateway est mis à niveau. Vous devez donc prévoir certaines interruptions sur votre cluster.

Le redéploiement des composants du plan de contrôle d'Anthos Service Mesh prend environ 5 à 10 minutes. En outre, vous devez injecter de nouveaux proxys side-car dans toutes vos charges de travail afin qu'elles soient mises à jour avec la version actuelle d'Anthos Service Mesh. Le temps nécessaire à la mise à jour des proxys side-car dépend de nombreux facteurs, tels que le nombre de pods, le nombre de nœuds, les paramètres de scaling du déploiement, les budgets d'interruption de pod et d'autres paramètres de configuration. Une estimation approximative du temps nécessaire à la mise à jour des proxys side-car est de 100 pods par minute.

Préparer la mise à niveau

Cette section décrit les étapes à suivre pour préparer la mise à niveau d'Anthos Service Mesh.

  1. Consultez la page Fonctionnalités compatibles et ce guide pour vous familiariser avec les fonctionnalités et le processus de mise à niveau.

  2. Si vous avez activé des fonctionnalités facultatives lors de l'installation de la version précédente d'Anthos Service Mesh, vous devez activer les mêmes fonctionnalités lors de la mise à niveau. Vous activez des fonctionnalités facultatives en ajoutant des options --set values ou en spécifiant l'option -f avec un fichier YAML lorsque vous exécutez la commande istioctl install.

  3. Si vous installez Anthos Service Mesh sur un cluster privé, vous devez ouvrir le port 15017 dans le pare-feu pour que le webhook utilisé avec l'injection side-car automatique fonctionne correctement. Pour en savoir plus, consultez la page Ouvrir un port sur un cluster privé.

  4. Si vous effectuez une mise à niveau à partir de Anthos Service Mesh 1.5, procédez comme suit au cas où vous auriez besoin d'effectuer un rollback :

    1. Créez un répertoire appelé asm-1-5.

    2. Téléchargez le fichier d'installation 1.5 dans le répertoire asm-1-5.

    3. Extrayez le contenu du fichier vers le répertoire asm-1-5.

    4. Assurez-vous de vous trouver dans le répertoire racine d'installation d'Anthos Service Mesh 1.5.

    5. Téléchargez le package kpt 1.5 et configurez le fichier istio-operator.yaml de version 1.5.

Configurer votre environnement

Pour les installations sur Google Kubernetes Engine, vous pouvez suivre les guides d'installation via Cloud Shell, une interface de ligne de commande intégrée au navigateur vers vos ressources Google Cloud, ou votre propre ordinateur fonctionnant sous Linux ou macOS.

Option A : Utiliser Cloud Shell

Cloud Shell provisionne une machine virtuelle (VM) g1-small Compute Engine exécutant un système d'exploitation Linux basé sur Debian. Les avantages liés à l'utilisation de Cloud Shell sont les suivants :

  • Il comprend, entre autres, les outils de ligne de commande gcloud, kubectl et helm.

  • Votre répertoire Cloud Shell $HOME dispose d'un espace de stockage persistant de 5 Go.

  • Nous vous proposons plusieurs éditeurs de texte :

    • Éditeur de code, auquel vous accédez en cliquant sur en haut de la fenêtre Cloud Shell.

    • Emacs, Vim ou Nano, auxquels vous accédez depuis la ligne de commande dans Cloud Shell.

Pour utiliser Cloud Shell, procédez comme suit :

  1. Accédez à Google Cloud Console.
  2. Sélectionnez votre projet Google Cloud.
  3. Cliquez sur le bouton Activer Cloud Shell en haut de la fenêtre de la console Google Cloud.

    Console Google Cloud Platform

    Une session Cloud Shell s'ouvre dans un nouveau cadre en bas de la console Google Cloud et affiche une invite de ligne de commande.

    Session Cloud Shell

  4. Mettez à jour les composants :

    gcloud components update
    

    La commande renvoie un résultat semblable à celui-ci :

    ERROR: (gcloud.components.update)
    You cannot perform this action because the gcloud CLI component manager
    is disabled for this installation. You can run the following command
    to achieve the same result for this installation:
    
    sudo apt-get update && sudo apt-get --only-upgrade install ...
  5. Copiez la commande longue, puis collez-la pour mettre à jour les composants.

  6. Assurez-vous que Git se trouve dans votre chemin pour que kpt puisse le trouver.

Option B : Utiliser des outils de ligne de commande localement

Sur votre ordinateur local, installez et initialisez Google Cloud CLI.

Si gcloud CLI est déjà installé :

  1. Authentifiez-vous en utilisant gcloud CLI :

    gcloud auth login
    
  2. Mettez à jour les composants :

    gcloud components update
    
  3. Installez kubectl :

    gcloud components install kubectl
    
  4. Installez kpt :

    gcloud components install kpt
    
  5. Assurez-vous que Git se trouve dans votre chemin pour que kpt puisse le trouver.

Définir des variables d'environnement

  1. Obtenez l'ID du projet dans lequel le cluster a été créé et le numéro du projet hôte du parc.

    gcloud

    Exécutez la commande suivante :

    gcloud projects list
    

    Console

    1. Accédez à la page Tableau de bord de la console Google Cloud.

      Accéder à la page "Tableau de bord"

    2. Cliquez sur la liste déroulante de sélection du projet située en haut de la page. Sélectionnez votre projet dans la fenêtre Sélectionnez une organisation qui vous est présentée.

      L'ID du projet est affiché sur la fiche Informations sur le projet du tableau de bord du projet.

  2. Créez une variable d'environnement pour l'ID du projet dans lequel le cluster a été créé:

    export PROJECT_ID=YOUR_PROJECT_ID

  3. Créez une variable d'environnement pour le numéro de projet du projet hôte du parc.

    export FLEET_PROJECT_NUMBER=YOUR_FLEET_PROJECT_NUMBER

  4. Créez les variables d'environnement suivantes :

    • Définissez le nom du cluster :

      export CLUSTER_NAME=YOUR_CLUSTER_NAME
    • Définissez le paramètre CLUSTER_LOCATION sur la zone ou la région de votre cluster :

      export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION

Modifier l'ID de maillage sur le cluster (facultatif)

Si votre maillage de services contient ou contiendra plusieurs clusters faisant partie de différents projets, tous les clusters doivent avoir le même ID de maillage, qui est basé sur le numéro du projet hôte du parc. L'ID de maillage défini sur votre cluster doit correspondre à celui que vous configurez pour Anthos Service Mesh.

Si vous ne disposez que d'un seul cluster ou si votre maillage de services contient ou contiendra plusieurs clusters appartenant au même projet, ignorez les étapes suivantes et passez à la section Définir des identifiants et des autorisations.

Pour définir le nouveau libellé d'ID de maillage sur le cluster, procédez comme suit :

  1. Créez une variable d'environnement pour l'ID du maillage:

    export MESH_ID="proj-${FLEET_PROJECT_NUMBER}"

  2. Si votre cluster contient des libellés existants que vous souhaitez conserver, vous devez les inclure lors de l'ajout du libellé mesh_id.

    1. Pour savoir si votre cluster possède des libellés existants, procédez comme suit :

      gcloud container clusters describe ${CLUSTER_NAME} \
        --project ${PROJECT_ID}

      Recherchez le champ resourceLabels dans le résultat. Chaque libellé est stocké sur une ligne distincte du champ resourceLabels, par exemple :

      resourceLabels:
        csm: ''
        env: dev
        release: stable

      Vous n'avez pas besoin de conserver le mesh_id existant. Remplacez-le par le nouveau libellé mesh_id.

      Pour plus de commodité, vous pouvez ajouter les libellés à une variable d'environnement. Dans la commande suivante, remplacez YOUR_EXISTING_LABELS par la liste des libellés existants de votre cluster (séparés par une virgule) au format KEY=VALUE, par exemple : env=dev,release=stable

      export EXISTING_LABELS="YOUR_EXISTING_LABELS"
    2. Définissez le libellé mesh_id :

      • Si votre cluster contient des libellés existants que vous souhaitez conserver, mettez à jour le cluster avec le libellé mesh_id et les libellés existants :

        gcloud container clusters update ${CLUSTER_NAME} \
          --project ${PROJECT_ID}
          --update-labels=mesh_id=${MESH_ID},${EXISTING_LABELS}
      • Si votre cluster ne comporte aucun libellé existant, mettez à jour le cluster avec uniquement le nouveau libellé mesh_id :

        gcloud container clusters update ${CLUSTER_NAME} \
          --project=${PROJECT_ID} \
          --update-labels=mesh_id=${MESH_ID}

Définir des identifiants et des autorisations

  1. Obtenez des identifiants d'authentification pour interagir avec le cluster :

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
        --project=${PROJECT_ID}
    
  2. Accordez des autorisations d'administrateur de cluster à l'utilisateur actuel. Vous avez besoin de ces autorisations pour créer les règles de contrôle d'accès basé sur les rôles (RBAC) nécessaires pour Anthos Service Mesh :

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user="$(gcloud config get-value core/account)"

Si l'erreur "cluster-admin-binding" already exists s'affiche, vous pouvez l'ignorer en toute sécurité et poursuivre avec le cluster-admin-binding existant.

Télécharger le fichier d'installation

    Linux

  1. Téléchargez le fichier d'installation d'Anthos Service Mesh dans votre répertoire de travail actuel :
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz
  2. Téléchargez le fichier de signature et utilisez openssl pour valider la signature :
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig istio-1.7.8-asm.10-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    La sortie attendue est Verified OK.

  3. Extrayez le contenu du fichier vers n’importe quel emplacement de votre système de fichiers. Par exemple, pour extraire le contenu vers le répertoire de travail actuel :
    tar xzf istio-1.7.8-asm.10-linux-amd64.tar.gz

    La commande crée un répertoire d'installation dans votre répertoire de travail actuel, nommé istio-1.7.8-asm.10, et qui contient les éléments suivants:

    • Des exemples d'applications dans le répertoire samples
    • L'outil de ligne de commande istioctl que vous utilisez pour installer Anthos Service Mesh se trouve dans le répertoire bin.
    • Les profils de configuration d'Anthos Service Mesh qui se trouvent dans le répertoire manifests/profiles

  4. macOS

  5. Téléchargez le fichier d'installation d'Anthos Service Mesh dans votre répertoire de travail actuel :
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz
  6. Téléchargez le fichier de signature et utilisez openssl pour valider la signature :
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.7.8-asm.10-osx.tar.gz.1.sig istio-1.7.8-asm.10-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    La sortie attendue est Verified OK.

  7. Extrayez le contenu du fichier vers n’importe quel emplacement de votre système de fichiers. Par exemple, pour extraire le contenu vers le répertoire de travail actuel :
    tar xzf istio-1.7.8-asm.10-osx.tar.gz

    La commande crée un répertoire d'installation dans votre répertoire de travail actuel, nommé istio-1.7.8-asm.10, et qui contient les éléments suivants:

    • Des exemples d'applications dans le répertoire samples
    • L'outil de ligne de commande istioctl que vous utilisez pour installer Anthos Service Mesh se trouve dans le répertoire bin.
    • Les profils de configuration d'Anthos Service Mesh qui se trouvent dans le répertoire manifests/profiles

  8. Windows

  9. Téléchargez le fichier d'installation d'Anthos Service Mesh dans votre répertoire de travail actuel :
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip
  10. Téléchargez le fichier de signature et utilisez openssl pour valider la signature :
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.7.8-asm.10-win.zip.1.sig istio-1.7.8-asm.10-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    La sortie attendue est Verified OK.

  11. Extrayez le contenu du fichier vers n’importe quel emplacement de votre système de fichiers. Par exemple, pour extraire le contenu vers le répertoire de travail actuel :
    tar xzf istio-1.7.8-asm.10-win.zip

    La commande crée un répertoire d'installation dans votre répertoire de travail actuel, nommé istio-1.7.8-asm.10, et qui contient les éléments suivants:

    • Des exemples d'applications dans le répertoire samples
    • L'outil de ligne de commande istioctl que vous utilisez pour installer Anthos Service Mesh se trouve dans le répertoire bin.
    • Les profils de configuration d'Anthos Service Mesh qui se trouvent dans le répertoire manifests/profiles

  12. Assurez-vous d'être dans le répertoire racine de l'installation Anthos Service Mesh.
    cd istio-1.7.8-asm.10
  13. Pour plus de commodité, ajoutez les outils du répertoire /bin à votre variable PATH :
    export PATH=$PWD/bin:$PATH

Préparer les fichiers de configuration des ressources

Lorsque vous exécutez la commande istioctl install, vous spécifiez -f istio-operator.yaml sur la ligne de commande. Ce fichier contient des informations sur le projet et le cluster requis par Anthos Service Mesh. Vous devez télécharger un package contenant istio-operator.yaml et d'autres fichiers de configuration des ressources afin de pouvoir définir les informations sur le projet et le cluster.

Pour préparer les fichiers de configuration des ressources, procédez comme suit :

Mesh CA

  1. Créez un répertoire pour les fichiers de configuration des ressources du package Anthos Service Mesh. Nous vous recommandons d'utiliser le nom du cluster comme nom de répertoire.

  2. Accédez au répertoire dans lequel vous souhaitez télécharger le package Anthos Service Mesh.

  3. Téléchargez le package :

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.7-asm asm
    
  4. Définissez l'ID du projet dans lequel le cluster a été créé :

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  5. Définissez le numéro de projet du projet hôte du parc :

    kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
    
  6. Définissez le nom du cluster :

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  7. Définissez la zone ou la région par défaut :

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    
  8. Définissez le tag sur la version d'Anthos Service Mesh que vous installez :

    kpt cfg set asm anthos.servicemesh.tag 1.7.8-asm.10
    
  9. Définissez le webhook de validation pour utiliser un libellé de révision :

    kpt cfg set asm anthos.servicemesh.rev asm-178-10
    

    Lorsque vous installez Anthos Service Mesh, vous définissez un libellé de révision sur istiod. Vous devez définir la même révision sur le webhook de validation.

  10. Comme les clusters de votre configuration multicluster se trouvent dans différents projets, vous devez configurer les alias de domaine de confiance pour les autres projets qui forment les maillages de services multi-clusters/multiprojets.

    1. Obtenez l'ID de projet de tous les clusters qui se trouveront dans le maillage multicluster/multiprojet.

    2. Pour l'ID de projet de chaque cluster, définissez les alias de domaine de confiance. Par exemple, si vous avez des clusters dans trois projets, exécutez la commande suivante en remplaçant PROJECT_ID_1, PROJECT_ID_2 et PROJECT_ID_3 par l'ID de projet de chaque cluster.

      kpt cfg set asm anthos.servicemesh.trustDomainAliases PROJECT_ID_1.svc.id.goog PROJECT_ID_2.svc.id.goog PROJECT_ID_3.svc.id.goog

      Lorsque vous configurez les clusters dans les autres projets, vous pouvez exécuter la même commande.

      Les alias de domaine de confiance permettent à Mesh CA d'authentifier les charges de travail sur les clusters d'autres projets. En plus de définir les alias de domaine de confiance, vous devez activer l'équilibrage de charge interclusters après avoir installé Anthos Service Mesh.

  11. Affichez les valeurs des setters kpt :

    kpt cfg list-setters asm
    

    La sortie de la commande ressemble à ceci :

                              NAME                                                       VALUE
    anthos.servicemesh.canonicalServiceHub               gcr.io/gke-release/asm/canonical-service-controller:1.7.8-asm.10
    anthos.servicemesh.controlplane.monitoring.enabled   true
    anthos.servicemesh.hub                               gcr.io/gke-release/asm
    anthos.servicemesh.hubMembershipID                   MEMBERSHIP_ID
    anthos.servicemesh.tag                               1.7.8-asm.10
    anthos.servicemesh.trustDomainAliases                [example-project-12345.svc.id.goog,example-project-23456.svc.id.goog,example-project-98765.svc.id.goog]
    base-dir                                             base
    gcloud.compute.location                              us-central
    gcloud.compute.network                               default
    gcloud.compute.subnetwork                            default
    gcloud.container.cluster                             example-cluster-1
    gcloud.container.cluster.clusterSecondaryRange
    gcloud.container.cluster.releaseChannel              REGULAR
    gcloud.container.cluster.servicesSecondaryRange
    gcloud.container.nodepool.max-nodes                  4
    gcloud.core.project                                  example-project-12345
    gcloud.project.environProjectID                      FLEET_PROJECT_ID
    gcloud.project.environProjectNumber                  1234567890123
    gcloud.project.projectNumber                         9876543210987

    Vérifiez que les valeurs pour les setters suivantes sont correctes :

    • anthos.servicemesh.rev
    • anthos.servicemesh.tag
    • anthos.servicemesh.trustDomainAliases
    • gcloud.compute.location
    • gcloud.container.cluster
    • gcloud.core.project
    • gcloud.project.environProjectNumber

    Vous pouvez ignorer les valeurs des autres setters.

Citadel

  1. Créez un répertoire pour les fichiers de configuration des ressources du package Anthos Service Mesh. Nous vous recommandons d'utiliser le nom du cluster comme nom de répertoire.

  2. Accédez au répertoire dans lequel vous souhaitez télécharger le package Anthos Service Mesh.

  3. Téléchargez le package :

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.7-asm asm
    
  4. Définissez l'ID du projet dans lequel le cluster a été créé :

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  5. Définissez le numéro de projet du projet hôte du parc :

    kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
    
  6. Définissez le nom du cluster :

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  7. Définissez la zone ou la région par défaut :

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    
  8. Définissez le tag sur la version d'Anthos Service Mesh que vous installez :

    kpt cfg set asm anthos.servicemesh.tag 1.7.8-asm.10
    
  9. Définissez le webhook de validation pour utiliser un libellé de révision :

    kpt cfg set asm anthos.servicemesh.rev asm-178-10
    
  10. Affichez les valeurs des setters kpt :

    kpt cfg list-setters asm
    

    La sortie de la commande ressemble à ceci :

                              NAME                                                       VALUE
    anthos.servicemesh.canonicalServiceHub               gcr.io/gke-release/asm/canonical-service-controller:1.7.8-asm.10
    anthos.servicemesh.controlplane.monitoring.enabled   true
    anthos.servicemesh.hub                               gcr.io/gke-release/asm
    anthos.servicemesh.hubMembershipID                   MEMBERSHIP_ID
    anthos.servicemesh.tag                               1.7.8-asm.10
    anthos.servicemesh.trustDomainAliases
    base-dir                                             base
    gcloud.compute.location                              us-central
    gcloud.compute.network                               default
    gcloud.compute.subnetwork                            default
    gcloud.container.cluster                             example-cluster-1
    gcloud.container.cluster.clusterSecondaryRange
    gcloud.container.cluster.releaseChannel              REGULAR
    gcloud.container.cluster.servicesSecondaryRange
    gcloud.container.nodepool.max-nodes                  4
    gcloud.core.project                                  example-project-12345
    gcloud.project.environProjectID                      FLEET_PROJECT_ID
    gcloud.project.environProjectNumber                  1234567890123
    gcloud.project.projectNumber                         9876543210987

    Vérifiez que les valeurs pour les setters suivantes sont correctes :

    • anthos.servicemesh.rev
    • anthos.servicemesh.tag
    • gcloud.compute.location
    • gcloud.container.cluster
    • gcloud.core.project
    • gcloud.project.environProjectNumber

    Vous pouvez ignorer les valeurs des autres setters.

Mettre à niveau Anthos Service Mesh

Pour installer une nouvelle version d'Anthos Service Mesh, nous vous recommandons de suivre le processus de mise à niveau du plan de contrôle double (appelé mise à niveau Canary dans la documentation d'Istio). Avec une mise à niveau du plan de contrôle double, vous installez une nouvelle version du plan de contrôle à côté du plan de contrôle existant. Lors de l'installation de la nouvelle version, vous incluez le libellé revision qui identifie la version du nouveau plan de contrôle. Chaque révision est une mise en œuvre complète du plan de contrôle d'Anthos Service Mesh avec ses propres déploiement et service.

Vous effectuez ensuite une migration vers la nouvelle version en définissant le même libellé revision sur vos charges de travail de sorte qu'il pointe vers le nouveau plan de contrôle et en effectuant un redémarrage progressif pour réinjecter les proxys avec la nouvelle version d'Anthos Service Mesh. Avec cette approche, vous pouvez surveiller l'effet de la mise à niveau sur un petit pourcentage de vos charges de travail. Après avoir testé votre application, vous pouvez migrer tout le trafic vers la nouvelle version. Cette approche est beaucoup plus sûre qu'une mise à niveau sur place, où un nouveau plan de contrôle remplace la version précédente.

Mettre à jour le plan de contrôle

Exécutez la commande suivante pour déployer le nouveau plan de contrôle à l'aide du profil de configuration que vous avez défini dans le fichier istio-operator.yaml. Si vous souhaitez activer une fonctionnalité facultative compatible, incluez -f et le nom du fichier YAML dans la ligne de commande suivante. Pour plus d'informations, consultez la page Activer les fonctionnalités facultatives.

  istioctl install \
    -f asm/cluster/istio-operator.yaml \
    --set revision=asm-178-10

L'argument --set revision ajoute un libellé istio.io/rev à Istiod. Après avoir exécuté la commande, deux déploiements de plan de contrôle et des services s'exécutent côte à côte :

kubectl get pods -n istio-system

Exemple de résultat :

NAME                                        READY   STATUS    RESTARTS   AGE
istio-ingressgateway-c56675fcd-86zdn        1/1     Running   0          2m9s
istio-ingressgateway-c56675fcd-vn4nv        1/1     Running   0          2m21s
istiod-asm-178-10-6d5cfd4b89-xztlr           1/1     Running   0          3m44s
istiod-fb7f746f4-wcntn                      1/1     Running   0          50m

Redéployer des charges de travail

L'installation de la nouvelle révision n'a aucune incidence sur les proxys side-car existants. Pour les mettre à niveau, vous devez les configurer de sorte qu'ils pointent vers le nouveau plan de contrôle. Cette opération est contrôlée lors de l'injection side-car en fonction du libellé d'espace de noms istio.io/rev.

  1. Mettez à jour les charges de travail à injecter avec la nouvelle version d'Anthos Service Mesh :

    kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-178-10 --overwrite

    Le libellé istio-injection doit être supprimé, car il est prioritaire sur le libellé istio.io/rev.

  2. Redémarrez les pods pour déclencher la réinjection :

    kubectl rollout restart deployment -n NAMESPACE
  3. Vérifiez que les pods sont configurés de sorte qu'ils pointent vers le plan de contrôle istiod-asm-178-10 :

    kubectl get pods -n NAMESPACE -l istio.io/rev=asm-178-10

  4. Testez votre application pour vérifier que les charges de travail fonctionnent correctement.

  5. Si vous avez des charges de travail dans d'autres espaces de noms, répétez les étapes précédentes pour chaque espace de noms.

  6. Si vous êtes sûr que votre application fonctionne comme prévu, passez à la section Terminer la mise à niveau. Sinon, procédez comme suit pour effectuer un rollback vers la version précédente :

    1. Mettez à jour les charges de travail à injecter avec la version précédente du plan de contrôle :

       kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite

    2. Redémarrez les pods pour déclencher une réinjection afin que les proxys aient la version précédente :

       kubectl rollout restart deployment -n NAMESPACE

    3. Effectuer un rollback des composants du plan de contrôle :

      Revenir à la version 1.6 précédente

      1. Redéployez la version précédente du fichier istio-ingressgateway :

        kubectl -n istio-system rollout undo deploy istio-ingressgateway
        
      2. Supprimez le nouveau plan de contrôle :

        kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-asm-178-10 -n istio-system --ignore-not-found=true
        

      Rollback vers la version 1.5

      1. Accédez au répertoire dans lequel vous avez téléchargé le fichier d'installation 1.5 d'Anthos Service Mesh.

      2. Réinstallez la version précédente d'Anthos Service Mesh. Dans la commande suivante, si vous avez activé les fonctionnalités facultatives, veillez à inclure les options --set values applicables ou l'option -f avec le nom du fichier YAML.

        bin/istioctl install \
        -f asm/cluster/istio-operator.yaml

Terminer la mise à niveau

Si vous êtes sûr que votre application fonctionne comme prévu, procédez comme suit pour terminer la mise à niveau :

  1. Supprimez l'ancien plan de contrôle :

    kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
    
  2. Exécutez la commande suivante pour déployer le contrôleur de service canonique :

    kubectl apply -f asm/canonical-service/controller.yaml

    La commande déploie le contrôleur de service canonique sur votre cluster. Le contrôleur de service canonique regroupe les charges de travail appartenant au même service logique. Il est nécessaire de débloquer les fonctionnalités supplémentaires du tableau de bord des services dans la console Google Cloud. Pour en savoir plus, consultez la page Activer et désactiver le contrôleur de service canonique.

Étapes suivantes