Utiliser des charges de travail basées sur des VM

Cette page vous explique comment déployer des VM sur des clusters Anthos sur Bare Metal à l'aide de l'environnement d'exécution des VM Anthos. L'environnement d'exécution des VM Anthos utilise KubeVirt pour orchestrer les VM sur des clusters, ce qui vous permet de travailler avec vos applications et charges de travail basées sur des VM dans un environnement de développement uniforme. Vous pouvez activer l'environnement d'exécution des VM Anthos lors de la création d'un cluster et sur des clusters existants.

Avant de commencer

Ces instructions supposent que vous disposez d'un cluster opérationnel. Si ce n'est pas le cas, vous pouvez suivre les instructions du guide de démarrage rapide d'un cluster Bare Metal pour configurer rapidement un cluster sur votre poste de travail.

Activer l'environnement d'exécution des VM Anthos

L'environnement d'exécution des VM Anthos est désactivé par défaut. Pour activer l'environnement d'exécution des VM Anthos, modifiez la ressource personnalisée VMRuntime dans le cluster. À partir de la version 1.10.0 de Anthos clusters on bare metal, la ressource personnalisée VMRuntime est automatiquement installée sur les clusters.

Pour activer l'environnement d'exécution des VM Anthos, procédez comme suit :

  1. Mettez à jour la ressource personnalisée VMRuntime pour définir enabled sur true.

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: true
      # useEmulation default to false if not set.
      useEmulation: true
      # vmImageFormat default to "qcow2" if not set.
      vmImageFormat: qcow2
    
  2. Si votre nœud n'est pas compatible avec la virtualisation matérielle, ou si vous n'êtes pas sûr, définissez useEmulation 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é.

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: true
      # useEmulation default to false if not set.
      useEmulation: true
      # vmImageFormat default to "qcow2" if not set.
      vmImageFormat: qcow2
    
  3. Vous pouvez modifier le format d'image utilisé pour les VM que vous créez en définissant le champ vmImageFormat.

    Le champ 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 Anthos 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.

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: true
      # useEmulation default to false if not set.
      useEmulation: true
      # vmImageFormat default to "qcow2" if not set.
      vmImageFormat: qcow2
    
  4. Enregistrez la configuration et 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 Anthos est activé et fonctionne lorsque VMRuntime.Status.Ready est défini sur true.

Mettre à niveau les clusters

La ressource personnalisée VMRuntime est automatiquement installée sur les clusters mis à jour vers la version 1.10.0 ou ultérieure. Lorsque vous mettez à jour un cluster 1.9.x vers la version 1.10.0 ou une version ultérieure, le processus de mise à niveau vérifie les paramètres de votre cluster et configure la ressource personnalisée VMRuntime afin qu'elle corresponde aux paramètres de l'environnement d'exécution des VM Anthos sur votre cluster 1.9.x. Si spec.kubevirt est présent dans la ressource de cluster 1.9.x, le processus de mise à niveau active l'environnement d'exécution des VM Anthos.

Les paramètres de la ressource personnalisée VMRuntime prévalent sur les anciens paramètres de cluster de l'environnement d'exécution des VM Anthos, tels que spec.kubevirt.useEmulation, dans les clusters version 1.10.0 ou ultérieure. Mettez à jour la ressource personnalisée VMRuntime pour modifier les paramètres de l'environnement d'exécution des VM Anthos pour votre cluster version 1.10.0 ou ultérieure.

Installez virtctl.

  1. Installer l'outil d'interface de ligne de commande virtctl en tant que plug-in kubectl

    export GOOGLE_APPLICATION_CREDENTIALS="bm-gcr.json"
    sudo -E ./bmctl install virtctl
    
  2. Vérifiez que virtctl est installé :

    kubectl plugin list
    

    Si virtctl est listé dans la réponse, alors il a été correctement installé.

Créer une VM

Une fois que vous avez activé KubeVirt sur votre cluster et installé le plug-in virtctl pour kubectl, vous pouvez commencer à créer des VM dans votre cluster à l'aide de la commande kubectl virt create vm. Avant d'exécuter cette commande, nous vous recommandons de configurer un fichier cloud-init pour vous assurer que vous disposez d'un accès console à la VM une fois celui-ci créé.

Créer un fichier cloud-init personnalisé pour l'accès à la console

Il existe deux façons de créer un fichier cloud-init personnalisé. La méthode la plus simple consiste à spécifier l'option --os=<OPERATING_SYSTEM> lors de la création de la VM. Cette méthode configure automatiquement un fichier cloud-init simple et fonctionne pour les systèmes d'exploitation suivants.

  • Ubuntu
  • CentOS
  • Debian
  • Fedora

Une fois votre VM créée, vous pouvez y accéder pour la première fois avec les identifiants suivants, puis modifier le mot de passe :

user: root
password: changeme

Si votre image contient un autre système d'exploitation Linux ou si vous avez besoin d'une configuration plus avancée, vous pouvez créer manuellement un fichier cloud-init personnalisé et spécifier le chemin d'accès à ce fichier avec l'option --cloud-init-file=<path/to/file>. Sous sa forme la plus élémentaire, le fichier cloud-init est un fichier YAML contenant les éléments suivants :

#cloud-config
user: root
password: changeme
lock_passwd: false
chpasswd: {expire: false}
disable_root: false
ssh_authorized_keys:
- <ssh-key>

Pour connaître les configurations plus avancées, consultez les exemples de configuration cloud.

Une fois que vous avez choisi la méthode à utiliser, vous pouvez créer une VM.

Exécuter la commande kubectl virt create vm

Vous pouvez créer des VM à partir d'images publiques ou personnalisées.

Image publique

Si votre cluster dispose d'une connexion externe, vous pouvez créer une VM à partir d'une image publique en exécutant la commande suivante :

kubectl virt create vm VM_NAME \
    --boot-disk-access-mode=MODE \
    --boot-disk-size=DISK_SIZE \
    --boot-disk-storage-class="DISK_CLASS" \
    --cloud-init-file=FILE_PATH \
    --cpu=CPU_NUMBER \
    --image=IMAGE_NAME \
    --memory=MEMORY_SIZE

Remplacez les éléments suivants :

  • VM_NAME par le nom de la VM à laquelle vous souhaitez accéder ;
  • MODE par le mode d'accès du disque de démarrage. Les valeurs possibles sont ReadWriteOnce (par défaut) ou ReadWriteMany ;
  • DISK_SIZE par la taille souhaitée pour le disque de démarrage ; La valeur par défaut est 20Gi.
  • DISK_CLASS par la classe de stockage du disque de démarrage. La valeur par défaut est local-shared. Pour obtenir la liste des classes de stockage disponibles, exécutez la commande kubectl get storageclass ;
  • FILE_PATH par le chemin d'accès complet du fichier cloud-init personnalisé. Selon l'image, cette opération peut être nécessaire pour obtenir l'accès de la console à la VM après sa création. Si vous envisagez de configurer automatiquement le fichier cloud-init avec l'option --os, ne spécifiez pas l'option --cloud-init-file. Si vous spécifiez l'option --cloud-init-file, l'option --os est ignorée. Les valeurs acceptables pour --os sont ubuntu, centos, debian et fedora.
  • CPU_NUMBER par le nombre de processeurs que vous souhaitez configurer pour la VM. La valeur par défaut est 1.
  • IMAGE_NAME par l'image de la VM, qui peut être ubuntu20.04 (par défaut), centos8 ou une URL de l'image ;
  • MEMORY_SIZE par la taille de la mémoire de la VM. La valeur par défaut est 4Gi.

Image personnalisée

Lorsque vous créez une VM à partir d'une image personnalisée, vous pouvez spécifier une image à partir d'un serveur d'images HTTP ou d'une image stockée en local.

Serveur d'images HTTP

Vous pouvez configurer un serveur HTTP à l'aide d'Apache ou de nginx et importer l'image personnalisée dans son dossier exposé. Vous pouvez ensuite créer une VM à partir de l'image personnalisée en exécutant la commande suivante :

kubectl virt create vm VM_NAME \
    --boot-disk-access-mode=DISK_ACCESS_MODE \
    --boot-disk-size=DISK_SIZE \
    --boot-disk-storage-class=DISK_CLASS \
    --cloud-init-file=FILE_PATH \
    --cpu=CPU_NUMBER \
    --image=http://SERVER_IP/IMAGE_NAME \
    --memory=MEMORY_SIZE

Remplacez les éléments suivants :

  • VM_NAME par le nom de la VM que vous souhaitez créer ;
  • DISK_ACCESS_MODE par le mode d'accès du disque de démarrage. Les valeurs possibles sont ReadWriteOnce (par défaut) ou ReadWriteMany.
  • DISK_SIZE par la taille souhaitée pour le disque de démarrage. La valeur par défaut est 20Gi.
  • DISK_CLASS par la classe de stockage du disque de démarrage. La valeur par défaut est local-shared. Pour obtenir la liste des classes de stockage disponibles, exécutez la commande kubectl get storageclass ;
  • FILE_PATH par le chemin d'accès complet du fichier cloud-init personnalisé. Selon l'image, cette opération peut être nécessaire pour obtenir l'accès de la console à la VM après sa création. Si vous envisagez de configurer automatiquement le fichier cloud-init avec l'option --os, ne spécifiez pas l'option --cloud-init-file. Si vous spécifiez l'option --cloud-init-file, l'option --os est ignorée. Les valeurs autorisées pour --os sont ubuntu, centos, debian et fedora.
  • CPU_NUMBER par le nombre de processeurs que vous souhaitez configurer pour la VM. La valeur par défaut est 1.
  • SERVER_IP par l'adresse IP du serveur qui héberge l'image.
  • IMAGE_NAME par le nom de fichier de l'image personnalisée ;
  • MEMORY_SIZE par la taille de la mémoire de la VM. La valeur par défaut est 4Gi.

Image stockée localement

Vous pouvez stocker l'image personnalisée localement et créer une VM à partir de celle-ci en exécutant la commande suivante :

kubectl virt create vm VM_NAME \
    --boot-disk-access-mode=DISK_ACCESS_MODE \
    --boot-disk-size=DISK_SIZE \
    --boot-disk-storage-class=DISK_CLASS \
    --cloud-init-file=FILE_PATH \
    --cpu=CPU_NUMBER \
    --image=IMAGE_PATH \
    --memory=MEMORY_SIZE \

Remplacez les éléments suivants :

  • VM_NAME par le nom de la VM que vous souhaitez créer ;
  • DISK_ACCESS_MODE par le mode d'accès du disque de démarrage. Les valeurs possibles sont ReadWriteOnce (par défaut) ou ReadWriteMany.
  • DISK_SIZE par la taille souhaitée pour le disque de démarrage. La valeur par défaut est 20Gi.
  • DISK_CLASS par la classe de stockage du disque de démarrage. La valeur par défaut est local-shared.
  • FILE_PATH par le chemin d'accès complet du fichier cloud-init personnalisé. Selon l'image, cette opération peut être nécessaire pour obtenir l'accès de la console à la VM après sa création. Si vous envisagez de configurer automatiquement le fichier cloud-init avec l'option --os, ne spécifiez pas l'option --cloud-init-file. Si vous spécifiez l'option --cloud-init-file, l'option --os est ignorée. Les valeurs autorisées pour --os sont ubuntu, centos, debian et fedora.
  • CPU_NUMBER par le nombre de processeurs que vous souhaitez configurer pour la VM. La valeur par défaut est 1.
  • IMAGE_PATH par le chemin d'accès au fichier local de l'image personnalisée.
  • MEMORY_SIZE par la taille de la mémoire de la VM. La valeur par défaut est 4Gi.

Modifier les valeurs par défaut des options

La commande kubectl virt create vm utilise des valeurs par défaut pour remplir automatiquement les indicateurs non spécifiés lors de l'exécution de la commande. Vous pouvez modifier ces valeurs par défaut en exécutant la commande suivante :

kubectl virt config default FLAG

Remplacez FLAG par l'option du paramètre pour lequel vous souhaitez modifier la valeur par défaut.

Exemple : la commande suivante fait passer la configuration par défaut du processeur de 1 à 2 :

kubectl virt config default --cpu=2

Pour obtenir la liste des options compatibles et de leurs valeurs par défaut actuelles, exécutez la commande suivante :

kubectl virt config default -h

Les configurations par défaut sont stockées côté client sous la forme d'un fichier local appelé ~/.virtctl.default. Vous pouvez également modifier les configurations par défaut en modifiant ce fichier.

Accéder à votre VM

Vous pouvez accéder aux VM à l'aide des méthodes suivantes :

Accès à la console

Pour accéder à une VM depuis la console, exécutez la commande suivante :

kubectl virt console VM_NAME

Remplacez VM_NAME par le nom de la VM à laquelle vous souhaitez accéder.

Accès via VNC

Pour accéder à une VM via VNC, exécutez la commande suivante :

# This requires remote-viewer from the virt-viewer package and a graphical desktop from where you run virtctl
kubectl virt vnc VM_NAME

Remplacez VM_NAME par le nom de la VM à laquelle vous souhaitez accéder.

Accès interne

Les adresses IP de vos VM de cluster sont directement accessibles par tous les autres pods du cluster. Pour trouver l'adresse IP d'une VM, exécutez la commande suivante :

kubectl get vmi VM_NAME

Remplacez VM_NAME par le nom de la VM à laquelle vous souhaitez accéder.

La commande renvoie un résultat semblable au suivant :

NAME     AGE   PHASE     IP              NODENAME
vm1      13m   Running   192.168.1.194   upgi-bm002

Accès externe

Les VM créées dans votre cluster disposent d'adresses réseau de pod accessibles uniquement depuis le cluster. Pour accéder aux VM de cluster en externe, procédez comme suit :

  1. Exposez la VM en tant que service d'équilibreur de charge :

    kubectl virt expose vm VM_NAME \
        --port=LB_PORT \
        --target-port=VM_PORT \
        --type=LoadBalancer \
        --name=SERVICE_NAME
    

    Remplacez les éléments suivants :

    • VM_NAME par le nom de la VM à laquelle vous souhaitez accéder.
    • LB_PORT par le port du service d'équilibrage de charge exposé ;
    • VM_PORT par le port de la VM auquel vous souhaitez accéder via le service d'équilibrage de charge ;
    • SERVICE_NAME par le nom que vous souhaitez attribuer à ce service d'équilibrage de charge.
  2. Obtenez l'adresse IP externe du service d'équilibrage de charge :

    kubectl get svc SERVICE_NAME
    

    Remplacez SERVICE_NAME par le nom du service d'équilibrage de charge qui expose la VM.

    Vous pouvez accéder au port cible de la VM via l'adresse IP répertoriée dans le champ EXTERNAL-IP de la réponse.

Exemple

Si vous souhaitez accéder à une VM nommée galaxy depuis l'extérieur du cluster à l'aide de SSH, exécutez la commande suivante :

kubectl virt expose vm galaxy \
   --port=25022 \
   --target-port=22 \
   --type=LoadBalancer \
   --name=galaxy-ssh

Obtenez ensuite l'adresse IP de l'équilibreur de charge :

kubectl get svc galaxy-ssh

La commande renvoie un résultat semblable au suivant :

NAME        TYPE          CLUSTER-IP     EXTERNAL-IP   PORT(S)           AGE
galaxy-ssh  LoadBalancer  10.96.250.76   21.1.38.202   25000:30499/TCP   4m40s

Vous pouvez maintenant accéder à la VM à l'aide de SSH via 21.1.38.202:25022 (VIP:port) depuis l'extérieur du cluster :

ssh root@21.1.38.202:22 -p 25022

Inspecter les journaux de télémétrie et de console de VM

Les journaux de télémétrie et de console de VM ont été intégrés à Google Cloud Console. Les informations de télémétrie et les données de journal sont essentielles pour surveiller l'état de vos VM et résoudre les problèmes liés à vos VM de cluster.

Télémétrie des VM

Le tableau de bord État des VM des clusters Anthos fournit des données de télémétrie en direct pour les VM de votre cluster.

Pour afficher les informations de télémétrie de vos VM de cluster, procédez comme suit :

  1. Dans Google Cloud Console, sélectionnez Surveillance ou cliquez sur le bouton suivant :

    Accéder à Monitoring

  2. Sélectionnez Tableaux de bord.

    Tableau de bord d'état de la VM du cluster Anthos dans la liste des tableaux de bord Surveillance

  3. Cliquez sur État des VM des clusters Anthos dans la liste Tous les tableaux de bord.

    Détails de l'état de la VM du cluster Anthos

Journaux de la console de VM

Les journaux de console série des VM sont diffusés vers Cloud Logging et peuvent être consultés dans l'explorateur de journaux.

Explorateur de journaux affichant les données de la VM du cluster Anthos

Supprimer des VM et leurs ressources

Supprimer uniquement la VM

kubectl virt delete vm VM_NAME

Remplacez VM_NAME par le nom de la VM à laquelle vous souhaitez supprimer.

Supprimer uniquement les disques de VM

kubectl virt delete disk DISK_NAME

Remplacez DISK_NAME par le nom du disque que vous souhaitez supprimer. Si vous essayez de supprimer un disque de VM avant de supprimer la VM, le disque est marqué pour suppression en attente de suppression de la VM.

Supprimer la VM et les ressources

kubectl virt delete vm VM_NAME --all

Remplacez VM_NAME par le nom de la VM à laquelle vous souhaitez supprimer.

Si vous souhaitez vérifier les ressources utilisées par la VM à supprimer, vous pouvez spécifier l'option --dry-run avec --all.

Désactiver l'environnement d'exécution des VM Anthos

Lorsque vous n'avez plus besoin d'utiliser l'environnement d'exécution des VM Anthos, 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 \
      --timeout TIMEOUT_IN_MINUTES \
      --force true
    

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

    • --timeout : TIMEOUT_IN_MINUTES pour attendre la suppression des ressources de VM existantes. La valeur par défaut est de dix minutes.
    • --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

Avant de pouvoir désactiver l'environnement d'exécution des VM Anthos dans un cluster en modifiant la ressource personnalisée VMRuntime, vous devez vous assurer que toutes les VM de ce cluster ont été supprimées.

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

  1. Recherchez les VM existantes dans le cluster :

    kubectl get vm
    

    Si la commande indique que votre cluster contient toujours des VM, vous devez les supprimer avant de continuer.

  2. Modifiez la ressource personnalisée VMRuntime :

    kubectl edit vmruntime
    
  3. 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
    
  4. Enregistrez la spécification de ressource personnalisée mise à jour dans l'éditeur.

  5. 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 Anthos est désactivé lorsque seuls les pods appartenant au déploiement vmruntime-controller-manager sont en cours d'exécution dans l'espace de noms.

Étapes suivantes