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
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.
Ajoutez
kubevirt
à la sectionspec
de la configuration du cluster. Si le nœud est compatible avec la virtualisation matérielle, définissezuseEmulation
surfalse
pour de meilleures performances. Si la virtualisation matérielle n'est pas compatible ou si vous n'êtes pas sûr, définissez-la surtrue
.spec: anthosBareMetalVersion: 1.8.9 kubevirt: useEmulation: true bypassPreflightCheck: false
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
.
Installer l'outil d'interface de ligne de commande
virtctl
en tant que plug-inkubectl
export GOOGLE_APPLICATION_CREDENTIALS="bm-gcr.json" sudo -E ./bmctl install virtctl
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) ouReadWriteMany
; - 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 commandekubectl 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
sontubuntu
,centos
,debian
etfedora
. - 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) ouReadWriteMany
. - 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 commandekubectl 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
sontubuntu
,centos
,debian
etfedora
. - 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) ouReadWriteMany
. - 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
sontubuntu
,centos
,debian
etfedora
. - 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 :
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.
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 :
Dans Google Cloud Console, sélectionnez Surveillance ou cliquez sur le bouton suivant :
Sélectionnez Tableaux de bord.
Cliquez sur État des VM des clusters Anthos dans la liste Tous les tableaux de bord.
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.
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.
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.
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.
Supprimez
kubevirt
de la sectionspec
de la configuration du cluster.spec: anthosBareMetalVersion: 1.8.9
kubevirt:useEmulation: truebypassPreflightCheck: falseEnregistrez la configuration.
Étapes suivantes
- Découvrez les problèmes connus de l'environnement d'exécution des VM Anthos.
- Consultez le guide de l'utilisateur de KubeVirt.