Installer des extensions de VM en créant des règles d'extension

Ce document explique comment créer des stratégies d'extension de VM, qui vous permettent d'installer et de gérer automatiquement des extensions sur un parc de machines virtuelles (VM) Compute Engine. En définissant une règle, vous pouvez vous assurer que des extensions spécifiques sont installées et gérées sur toutes les VM qui correspondent aux critères que vous spécifiez, tels que les libellés de VM.

Avant de commencer

Rôles IAM requis

Pour obtenir l'autorisation nécessaire pour créer une stratégie d'extension, demandez à votre administrateur de vous accorder le rôle IAM Administrateur de stratégies d'extension de VM (roles/compute.vmExtensionPolicyAdmin). Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Ce rôle prédéfini contient l'autorisation compute.vmExtensionPolicies.create, qui est nécessaire pour créer une stratégie d'extension.

Vous pouvez également obtenir cette autorisation avec des rôles personnalisés ou d'autres rôles prédéfinis.

Pour en savoir plus sur les rôles et autorisations IAM dans Compute Engine, consultez Rôles et autorisations Compute Engine.

Priorité des règles et résolution des conflits

Lorsque plusieurs règles s'appliquent à la même VM, VM Extension Manager utilise la priorité des règles pour résoudre les conflits.

Lorsque deux règles sont en conflit pour la même extension, celle ayant la priorité la plus élevée prévaut. Les valeurs de priorité sont comprises entre 0 et 65 535, où un nombre inférieur signifie une priorité plus élevée. La priorité par défaut est de 1 000. Si plusieurs règles ont la même priorité, le Gestionnaire d'extensions de VM applique la règle la plus récemment mise à jour aux VM. La suppression d'une règle n'entraîne pas la suppression de l'extension si une règle de priorité inférieure s'applique toujours à la VM.

Créer une règle d'extension de VM globale

Vous pouvez créer une règle d'extension de VM globale pour installer des extensions sur des VM dans plusieurs zones de votre projet selon un plan de déploiement. Une règle d'extension de VM globale n'est pas appliquée directement aux VM. Au lieu de cela, à mesure que la règle est déployée, VM Extension Manager crée des règles dans chaque zone en fonction du plan de déploiement. Ces règles gèrent ensuite l'installation des extensions sur les VM dans leurs zones respectives.

Vous pouvez utiliser gcloud ou la méthode globalVmExtensionPolicies.insert pour créer des règles d'extension globales.

À propos des plans de déploiement

Les stratégies d'extension de VM mondiales utilisent des plans de déploiement pour gérer le déploiement des extensions dans différents emplacements. Vous pouvez utiliser l'un des plans de déploiement prédéfinis ou créer un plan de déploiement personnalisé.

Plans de déploiement prédéfinis

  • slow_rollout : déploie la règle sur cinq jours. Le déploiement lent est le plan de déploiement par défaut.
  • fast_rollout : déploie immédiatement la règle dans toutes les zones.

Plans de déploiement personnalisés

Vous pouvez créer des plans de déploiement personnalisés à l'aide de la méthode rolloutPlans.insert. Par exemple, le code JSON suivant définit un plan de déploiement nommé test-rollout-plan qui cible deux zones :

{
  "name": "test-rollout-plan",
  "waves": [
    {
      "selectors": [
        {
          "locationSelector": {
            "includedLocations": [
              "us-central1-a",
              "us-west1-a"
            ]
          }
        }
      ],
      "validation": {
        "type": "time",
        "timeBasedValidationMetadata": {
          "waitDuration": "0s"
        }
      },
      "orchestrationOptions": {
        "maxConcurrentResourcesPerLocation": "10",
        "maxConcurrentLocations": "10"
      }
    }
  ]
}

Vous pouvez ensuite utiliser ce plan de déploiement personnalisé lorsque vous créez une stratégie globale, comme illustré dans l'exemple 2.

Créer une règle globale

Exécutez la commande gcloud beta compute global-vm-extension-policies create pour créer une règle d'extension de VM globale :

  gcloud beta compute global-vm-extension-policies create POLICY_NAME 
--description="DESCRIPTION"
--extensions=EXTENSION_NAME_1,EXTENSION_NAME_2
--version=EXTENSION_NAME_1=VERSION_1,EXTENSION_NAME_2=VERSION_2
--config-from-file=EXTENSION_NAME_1=CONFIG_FILE_PATH_1,EXTENSION_NAME_2=CONFIG_FILE_PATH_2
--inclusion-labels=KEY_1=VALUE_1
--priority=PRIORITY
--rollout-predefined-plan=ROLLOUT_PLAN
--rollout-conflict-behavior=ROLLOUT_CONFLICT_BEHAVIOR

Remplacez les éléments suivants :

  • POLICY_NAME : nom de la règle d'extension de VM.
  • DESCRIPTION : description facultative de la règle.
  • EXTENSION_NAME_1,EXTENSION_NAME_2 : liste d'extensions à ajouter à la règle, séparées par une virgule. Vous devez spécifier au moins une extension. Voici les valeurs valides pour les extensions :
    • ops-agent
    • google-cloud-sap-extension
    • google-cloud-workload-extension
  • EXTENSION_NAME_1=VERSION_1,EXTENSION_NAME_2=VERSION_2 : liste de paires clé/valeur séparées par une virgule, où la clé correspond au nom de l'extension et la valeur à la version de l'extension. Si vous ne spécifiez pas de version pour une extension, le gestionnaire d'extensions de VM utilise la dernière version disponible et la met à niveau automatiquement lorsque de nouvelles versions sont disponibles.

  • EXTENSION_NAME_1=CONFIG_FILE_PATH_1,EXTENSION_NAME_2=CONFIG_FILE_PATH_2 : liste de paires clé/valeur séparées par une virgule, où la clé est le nom de l'extension et la valeur est le chemin d'accès au fichier de configuration de cette extension. Ce fichier se trouve sur la VM sur laquelle vous exécutez la commande gcloud, et non sur celle sur laquelle vous installez l'extension.

    Vous pouvez également fournir la configuration sous forme de chaîne intégrée à l'aide de l'option --config au lieu de --config-from-file, par exemple EXTENSION_NAME_1="CONFIG_1". Vous pouvez utiliser --config-from-file ou --config, mais pas les deux dans la même commande.

  • KEY_1=VALUE_1 : liste de paires clé/valeur séparées par une virgule qui définissent les libellés d'inclusion pour un sélecteur. Pour être ciblées, les VM doivent comporter tous les libellés spécifiés dans un sélecteur. Si vous spécifiez --inclusion-labels plusieurs fois, la règle cible les VM qui correspondent à l'un des sélecteurs fournis (OR logique). Si vous omettez cet indicateur, la règle cible toutes les VM de votre projet dans toutes les zones.

  • PRIORITY : entier qui définit la priorité de la stratégie. Plus le nombre est élevé, plus la priorité est élevée. La valeur par défaut est 0. Si plusieurs règles ont la même priorité, celle qui a été mise à jour le plus récemment est appliquée aux VM.

  • ROLLOUT_PLAN : spécifiez slow_rollout ou fast_rollout. Si vous devez utiliser un plan de déploiement personnalisé, utilisez l'indicateur --rollout-custom-plan au lieu de --rollout-predefined-plan et spécifiez le nom du plan, par exemple :

      --rollout-custom-plan=projects/PROJECT_NUMBER/locations/global/rolloutPlans/ROLLOUT_PLAN_NAME
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : projet dans lequel le plan de déploiement est défini.
    • ROLLOUT_PLAN_NAME : nom du plan de déploiement personnalisé que vous avez défini. Si aucun indicateur de plan de déploiement n'est spécifié, slow_rollout est utilisé.
  • ROLLOUT_CONFLICT_BEHAVIOR : spécifie le comportement lorsqu'un conflit est détecté entre une règle zonale et une règle globale. Les valeurs possibles sont les suivantes :

    • "" (chaîne vide) : la valeur de la règle zonale est utilisée.
    • overwrite : la règle globale remplace la règle zonale.

      Pour en savoir plus, consultez l'option --rollout-conflict-behavior.

    Exemple 1

    La commande suivante crée une stratégie nommée global-test-extension-policy qui installe l'extension ops-agent pour le projet test-project. L'indicateur --config-from-file spécifie le chemin d'accès à un fichier local contenant une configuration YAML pour l'agent Ops, et --rollout-predefined-plan spécifie le plan slow_rollout.

    gcloud beta compute global-vm-extension-policies create global-test-extension-policy \
        --project=test-project \
        --extensions=ops-agent \
        --config-from-file=ops-agent="/usr/ops-agent-config.yaml" \
        --rollout-predefined-plan=slow_rollout

    Exemple 2

    La commande suivante crée une stratégie nommée global-test-extension-policy-2 qui installe l'extension ops-agent pour le projet test-project sur les VM portant le libellé env=prod. La priorité de la règle est définie sur 500, et l'indicateur --config-from-file spécifie le chemin d'accès à un fichier local contenant une configuration YAML pour l'agent Ops. L'option --rollout-custom-plan spécifie un plan de déploiement personnalisé.

     gcloud beta compute global-vm-extension-policies create global-test-extension-policy-2 \
        --project=test-project \
        --extensions=ops-agent \
        --config-from-file=ops-agent="/usr/ops-agent-config.yaml" \
        --priority=500 \
        --inclusion-labels=env=prod \
        --rollout-custom-plan=projects/12345678/locations/global/rolloutPlans/test-rollout-plan

Créer une règle d'extension de VM zonale

Utilisez l'une des méthodes suivantes pour créer une règle d'extension de VM zonale. Cette règle zonale définit les extensions à installer et les VM sur lesquelles les installer dans une zone spécifique.

Console

  1. Dans la console Google Cloud , accédez à la page Règles d'extension de VM.

    Accéder aux règles d'extension de VM

  2. Cliquez sur Créer une règle d'extension.
  3. Dans le champ Nom, saisissez un nom pour la règle.
  4. Facultatif : Dans le champ Description, saisissez une description de la règle.
  5. Dans le champ Priorité, spécifiez un numéro de priorité pour résoudre les conflits entre les règles. Plus le nombre est faible, plus la priorité est élevée. La valeur par défaut est 1 000.
  6. Dans la liste Zone, sélectionnez la zone dans laquelle vous souhaitez appliquer cette règle.
  7. Dans la section Extensions, cliquez sur Ajouter une extension, puis procédez comme suit pour chaque extension que vous souhaitez installer sur les VM cibles :
    1. Dans la liste Extension, sélectionnez une extension. Consultez la section Extensions compatibles.
    2. Dans la liste Version, indiquez le numéro de version de l'extension. Laissez ce champ vide pour sélectionner la dernière version.
      • Pour l'agent Ops, vous pouvez spécifier la version 2.58.0 ou une version ultérieure.
      • Pour les charges de travail Extension pour SAP et Extension pour Compute, laissez le champ vide pour sélectionner la dernière version.
    3. Facultatif : Dans le champ Contenu du fichier de configuration, saisissez les paramètres de configuration de l'extension.
  8. Dans la section Instances de VM cibles, sélectionnez les VM pour la règle. Pour sélectionner des VM avec des libellés spécifiques, cliquez sur Ajouter des libellés, puis ajoutez la paire clé-valeur.
  9. Cliquez sur Créer.

gcloud

Pour créer une stratégie d'extension de VM zonale et la déployer sur des VM dans une zone spécifique, utilisez la commande gcloud beta compute zone-vm-extension-policies create :

gcloud beta compute zone-vm-extension-policies create POLICY_NAME \
    --zone=ZONE \
    --description="DESCRIPTION" \
    --extensions=EXTENSION_NAME_1,EXTENSION_NAME_2 \
    --version=EXTENSION_NAME_1=VERSION_1,EXTENSION_NAME_2=VERSION_2 \
    --config-from-file=EXTENSION_NAME_1=CONFIG_FILE_PATH_1,EXTENSION_NAME_2=CONFIG_FILE_PATH_2 \
    --inclusion-labels=KEY_1=VALUE_1 \
    --priority=PRIORITY

Remplacez les éléments suivants :

  • POLICY_NAME : nom de la règle d'extension de VM.
  • ZONE : zone à laquelle s'applique cette règle.
  • DESCRIPTION : description facultative de la règle.
  • EXTENSION_NAME_1,EXTENSION_NAME_2 : liste d'extensions à ajouter à la stratégie, séparées par une virgule. Vous devez spécifier au moins une extension. Voici les valeurs valides pour les extensions :
    • ops-agent
    • google-cloud-sap-extension
    • google-cloud-workload-extension
  • EXTENSION_NAME_1=VERSION_1,EXTENSION_NAME_2=VERSION_2 : liste de paires clé/valeur séparées par une virgule, où la clé correspond au nom de l'extension et la valeur à la version de l'extension. Si vous ne spécifiez pas de version pour une extension, le gestionnaire d'extensions de VM utilise la dernière version disponible et la met à niveau automatiquement lorsque de nouvelles versions sont disponibles.

  • EXTENSION_NAME_1=CONFIG_FILE_PATH_1,EXTENSION_NAME_2=CONFIG_FILE_PATH_2 : liste de paires clé/valeur séparées par des virgules, où la clé est le nom de l'extension et la valeur est le chemin d'accès au fichier de configuration de cette extension. Ce chemin d'accès se trouve sur la VM sur laquelle vous exécutez la commande gcloud, et non sur celle sur laquelle vous installez l'extension.

    Vous pouvez également fournir la configuration sous forme de chaîne intégrée à l'aide de l'option --config au lieu de --config-from-file, par exemple EXTENSION_NAME_1="CONFIG_1". Vous pouvez utiliser --config-from-file ou --config, mais pas les deux dans la même commande.

  • KEY_1=VALUE_1 : liste de paires clé/valeur séparées par une virgule qui définissent les libellés d'inclusion pour un sélecteur. Pour être ciblées, les VM doivent comporter tous les libellés spécifiés dans un sélecteur. Si vous spécifiez --inclusion-labels plusieurs fois, la règle cible les VM qui correspondent à l'un des sélecteurs fournis (OR logique). Si vous omettez cet indicateur, la règle cible toutes les VM de la zone spécifiée.

  • PRIORITY : entier compris entre 0 et 65 535 qui définit la priorité de la stratégie. Plus le nombre est faible, plus la priorité est élevée. La valeur par défaut est 1 000.

    La commande échoue si une règle portant le nom spécifié existe déjà dans la zone.

Exemple 1

La commande suivante crée une règle nommée test-extension-policy qui installe l'extension ops-agent dans la zone us-central1-f pour le projet test-project. L'indicateur --config-from-file spécifie le chemin d'accès à un fichier local contenant une configuration YAML pour l'agent Ops.

gcloud beta compute zone-vm-extension-policies create test-extension-policy  \
    --project=test-project \
    --zone=us-central1-f \
    --extensions=ops-agent \
    --config-from-file=ops-agent="/usr/ops-agent-config.yaml"

Exemple 2

La commande suivante crée une règle nommée test-extension-policy-2 qui installe l'extension ops-agent dans la zone us-central1-f pour le projet test-project sur les VM portant le libellé env=prod. La priorité de la règle est définie sur 500, et l'indicateur --config-from-file spécifie le chemin d'accès à un fichier local contenant une configuration YAML pour l'agent Ops.

 gcloud beta compute zone-vm-extension-policies create test-extension-policy-2  \
    --project=test-project \
    --zone=us-central1-f \
    --extensions=ops-agent \
    --config-from-file=ops-agent="/usr/ops-agent-config.yaml" \
    --priority=500 \
    --inclusion-labels=env=prod

Étapes suivantes