Activer ou désactiver l'environnement d'exécution des VM sur Google Distributed Cloud

Ce document explique comment activer ou désactiver l'environnement d'exécution des VM sur Google Distributed Cloud en mettant à jour la ressource personnalisée VMRuntime ou en exécutant des commandes bmctl.

Avant de commencer

Pour activer ou désactiver l'environnement d'exécution des VM sur Google Distributed Cloud, vous devez avoir accès aux ressources et outils suivants:

Activer l'environnement d'exécution des VM sur Google Distributed Cloud

L'environnement d'exécution des VM sur Google Distributed Cloud est automatiquement installé dans la version 1.10 ou ultérieure de GKE sur Bare Metal, mais il est désactivé par défaut. Avant de pouvoir exécuter des ressources de VM dans votre environnement GKE sur Bare Metal, vous devez activer l'environnement d'exécution des VM sur Google Distributed Cloud.

bmctl

  • Pour activer l'environnement d'exécution, utilisez l'outil bmctl :

    bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH
    

    Indiquez le chemin d'accès au fichier kubeconfig du cluster. GKE sur Bare Metal génère le fichier kubeconfig sur le poste de travail administrateur lorsque vous créez un cluster. Par défaut, le chemin d'accès est bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig.

    Si l'environnement d'exécution des VM sur Google Distributed Cloud est déjà activé, la commande renvoie une erreur.

Vous pouvez configurer des paramètres supplémentaires, tels que l'émulation ou le format d'image, en modifiant la ressource personnalisée VMRuntime.

Ressource personnalisée

Pour activer l'environnement d'exécution, mettez à jour la ressource personnalisée VMRuntime. Cette ressource personnalisée est installée par défaut.

  1. Modifiez la ressource personnalisée VMRuntime :

    kubectl edit vmruntime
    
  2. Définissez enabled:true dans la spécification :

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: true
      # useEmulation defaults to "false" if not set.
      useEmulation: true
      # vmImageFormat defaults to "qcow2" if not set.
      vmImageFormat: qcow2
    

    Dans la section spec précédente, les valeurs suivantes peuvent être définies :

    • enabled: défini sur "true" pour activer l'environnement d'exécution des VM sur Google Distributed Cloud
    • useEmulation : si votre nœud n'est pas compatible avec la virtualisation matérielle, ou si vous n'êtes pas sûr, définissez la valeur sur "true". Si elle est disponible, la virtualisation matérielle offre de meilleures performances que l'émulation logicielle. Le champ useEmulation est défini par défaut sur false s'il n'est pas spécifié.
    • vmImageFormat : accepte deux valeurs de format d'image disque : raw et qcow2. Si vous ne définissez pas vmImageFormat, l'environnement d'exécution des VM sur Google Distributed Cloud utilise le format d'image disque raw pour créer des VM. Le format raw peut améliorer les performances par rapport à qcow2, un format qui utilise la copie sur écriture, mais peut utiliser plus d'espace disque. Pour en savoir plus sur les formats d'image de votre VM, consultez la section Formats de fichiers d'image disque dans la documentation de QEMU.
  3. Enregistrez la ressource personnalisée dans votre éditeur.

  4. Vérifiez que la ressource personnalisée VMRuntime est activée :

    kubectl describe vmruntime vmruntime
    

    Les détails de la ressource personnalisée VMRuntime incluent une section Status. L'environnement d'exécution des VM sur Google Distributed Cloud est activé et fonctionne lorsque VMRuntime.Status.Ready indique true.

Désactiver l'environnement d'exécution des VM sur Google Distributed Cloud

Lorsque vous n'avez plus besoin d'utiliser l'environnement d'exécution des VM sur Google Distributed Cloud, vous pouvez désactiver cette fonctionnalité.

bmctl

  • Pour désactiver l'environnement d'exécution, utilisez l'outil bmctl :

    bmctl disable vmruntime --kubeconfig KUBECONFIG_PATH \
      --force=true
    

    Indiquez le chemin d'accès au fichier kubeconfig de votre cluster et les valeurs à utiliser pour les options de configuration suivantes :

    • --force : définissez la valeur sur true pour confirmer que vous souhaitez supprimer les ressources de VM existantes. La valeur par défaut est false.

Ressource personnalisée

Pour désactiver l'environnement d'exécution, mettez à jour la ressource personnalisée VMRuntime :

  1. Modifiez la ressource personnalisée VMRuntime :

    kubectl edit vmruntime
    
  2. Définissez enabled:false dans la spécification :

    apiVersion: vm.cluster.gke.io/v1`
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: false
      useEmulation: true
      vmImageFormat: qcow2
    
  3. Enregistrez la spécification de ressource personnalisée mise à jour dans l'éditeur.

  4. Pour vérifier que la ressource personnalisée VMRuntime est désactivée, affichez les pods qui s'exécutent dans l'espace de noms vm-system :

    kubectl get pods --namespace vm-system
    

    L'environnement d'exécution des VM sur Google Distributed Cloud est désactivé lorsque seuls les pods appartenant au déploiement vmruntime-controller-manager s'exécutent dans l'espace de noms.

Comprendre le comportement d'exécution des VM

L'annotation baremetal.cluster.gke.io/vmrumtime-force-disable peut être utilisée sur l'environnement d'exécution des VM sur la ressource Google Distributed Cloud pour définir le comportement en cas de désactivation de l'environnement d'exécution lorsque les VM sont en cours d'exécution dans le cluster.

L'exemple suivant montre que la valeur de cette annotation est définie sur false par défaut :

  // VM runtime yaml file
  apiVersion: vm.cluster.gke.io/v1
  kind: VMRuntime
  metadata:
    annotations:
      baremetal.cluster.gke.io/vmrumtime-force-disable: "false"
    name: vmruntime
  [...]

Lorsque cette annotation est définie sur false, l'environnement d'exécution des VM sur Google Distributed Cloud tente de protéger les VM en cours d'exécution. Supprimez toutes les VM en cours d'exécution avant la désactivation de l'environnement d'exécution des VM sur Google Distributed Cloud ou spécifiez le paramètre --force=true avec la commande bmctl disable vmruntime, comme indiqué dans la section précédente.

Le tableau suivant explique ce qu'il advient des VM lorsque cette annotation est définie sur true ou false, et lorsque vous spécifiez ou non le paramètre --force=true :

État du cluster Paramètre --force Annotation vmrumtime-force-disable Comportement
Aucune VM Non disponible Non disponible Désactivez l'environnement d'exécution des VM sur Google Distributed Cloud.
VM existantes Vrai Vrai Supprime toutes les VM en cours d'exécution et les ressources associées. Désactivez l'environnement d'exécution des VM sur Google Distributed Cloud.
Vrai Faux Supprime toutes les VM en cours d'exécution et les ressources associées. Désactivez l'environnement d'exécution des VM sur Google Distributed Cloud.
Faux Vrai Invite à supprimer les VM en cours d'exécution et les ressources associées. Une fois toutes les VM en cours d'exécution supprimées, désactivez l'environnement d'exécution des VM sur Google Distributed Cloud.
Faux Faux Ne supprime aucune VM en cours d'exécution. Ne désactivez pas l'environnement d'exécution des VM sur Google Distributed Cloud. La commande bmctl renvoie une erreur.

Vérification préliminaire de l'environnement d'exécution de la VM sur Google Distributed Cloud

La vérification préliminaire de l'environnement d'exécution des VM sur Google Distributed Cloud valide un ensemble de conditions préalables sur l'environnement de la machine avant d'utiliser l'environnement d'exécution des VM sur Google Distributed Cloud et sur des VM. La création de la VM est bloquée si la vérification préliminaire de l'environnement d'exécution de VM sur Google Distributed Cloud échoue. La vérification préliminaire de l'environnement d'exécution de VM sur Google Distributed Cloud s'exécute automatiquement lorsque spec.enabled est défini sur "true".

kubectl label nodes NODE_NAME   "kubevm.io/VM-SkipSchedule"= --kubeconfig KUBECONFIG_PATH

La vérification préliminaire de l'environnement d'exécution de VM sur Google Distributed Cloud s'exécute lorsque vous effectuez l'une des opérations suivantes:

  1. Activer l'environnement d'exécution des VM sur Google Distributed Cloud
  2. Activer l'environnement d'exécution des VM sur les fonctionnalités Google Distributed Cloud telles que useEmulation
  3. Mettre à niveau les clusters
  4. Supprimer le libellé kubevm.io/VM-SkipSchedule au niveau des nœuds
  5. Créez indépendamment l'environnement d'exécution de VM sur un objet de vérification préliminaire de Google Distributed Cloud en exécutant la commande bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATH ou en appliquant un fichier manifeste YAML VMRuntimePreflightCheck.

Vous pouvez lancer des VM lorsque la dernière vérification préliminaire de l'environnement d'exécution de VM sur Google Distributed Cloud aboutit. Si la vérification préliminaire échoue, la création de la VM est bloquée et des erreurs de vérification préliminaire s'affichent.

Vérifier le succès de la vérification préliminaire

Pour vérifier si les vérifications préliminaires ont abouti, exécutez les commandes suivantes:

  1. Recherchez les dernières vérifications préliminaires effectuées:

    kubectl get vmruntimepfc -n vm-system --kubeconfig KUBECONFIG_PATH
    

    Le résultat doit se présenter comme suit:

    NAME                                                             PASS    AGE
    vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e   false   42s
    vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5   true    21s
    
  2. Pour connaître l'état d'une vérification préliminaire, exécutez la commande suivante:

       kubectl get vmruntime vmruntime -o yaml --kubeconfig KUBECONFIG_PATH
    
       ...
         preflightCheckSummary:
         preflightCheckSummary:
           featureStatuses:
             CPU:
               passed: true
             KVM:
               passed: true
           preflightCheckName: vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5
           preflightCheckPassed: true
       ...
    
     ```
    

Échec de la vérification préliminaire du débogage

Si la vérification préliminaire échoue, procédez comme suit pour le débogage:

  1. Recherchez les dernières vérifications préliminaires effectuées.

    kubectl get vmruntimepfc -n vm-system
    
  2. Pour en savoir plus, vérifiez l'état de cette vérification préliminaire.

    kubectl get vmruntimepfc -n vm-system \
        vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e -o yaml \
        --kubeconfig KUBECONFIG_PATH
    
      ...
      status:
      checks:
       worker-0--52229ee15841099-22c41577139a7b8c.lab.anthos:
         passed: false
         results:
         - checkName: CPU
           passed: true
         - checkName: KVM
           message: |
             command terminated with exit code 1
             ls: /mnt/dev/kvm: No such file or directory
           passed: false
      ...
    
  3. Résolvez le problème et exécutez à nouveau la vérification préliminaire de l'environnement d'exécution de VM sur Google Distributed Cloud. Voici un exemple de fichier manifeste YAML VMRuntimePreflightCheck:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntimePreflightCheck
    metadata:
      name: vmruntime-preflight-check-manual
      namespace: vm-system
    

Étapes suivantes