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

  1. Ouvrez la configuration du cluster en exécutant la commande suivante :

    kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig edit cluster CLUSTER_NAME -n cluster-CLUSTER_NAME
    

    Remplacez CLUSTER_NAME par le nom de votre cluster.

  2. Ajoutez kubevirt à la section spec de la configuration du cluster. Si le nœud est compatible avec la virtualisation matérielle, définissez useEmulation sur false pour de meilleures performances. Si la virtualisation matérielle n'est pas compatible ou si vous n'êtes pas sûr, définissez-la sur true.

    spec:
      anthosBareMetalVersion: 1.8.9
      kubevirt:
        useEmulation: true
      bypassPreflightCheck: false
    
  3. Enregistrez la configuration et vérifiez que KubeVirt est activé :

    kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig get pods -n kubevirt
    

    Remplacez CLUSTER_NAME par le nom de votre cluster.

    La commande renvoie un résultat semblable au suivant :

    NAME                              READY   STATUS    RESTARTS   AGE
    virt-api-767bc4ccd5-56fk2         1/1     Running   0          11d
    virt-api-767bc4ccd5-ms8tn         1/1     Running   0          11d
    virt-controller-c8468c84c-l4dzr   1/1     Running   0          11d
    virt-controller-c8468c84c-tljnj   1/1     Running   1          11d
    virt-handler-6wk5v                1/1     Running   0          11d
    virt-handler-ngth6                1/1     Running   0          11d
    virt-operator-7447547957-c6g5d    1/1     Running   1          11d
    virt-operator-7447547957-nl826    1/1     Running   0          11d
    

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
    

    virtctl est installé s'il est répertorié dans la réponse.

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 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_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

Avant de pouvoir désactiver l'environnement d'exécution des VM Anthos dans un cluster, vous devez vous assurer que toutes les VM de ce cluster ont été supprimées. La désactivation de l'environnement d'exécution des VM Anthos supprime tous les déploiements associés à KubeVirt, tels que les pods et les services des espaces de noms KubeVirt et CDI.

  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. Ouvrez la configuration du cluster en exécutant la commande suivante :

    kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig edit cluster CLUSTER_NAME -n cluster-CLUSTER_NAME
    

    Remplacez CLUSTER_NAME par le nom de votre cluster.

  3. Supprimez kubevirt de la section spec de la configuration du cluster.

    spec:
      anthosBareMetalVersion: 1.8.9
      kubevirt:
        useEmulation: true
      bypassPreflightCheck: false
    
  4. Enregistrez la configuration.

Étapes suivantes