Gérer les machines virtuelles sur les racks Distributed Cloud connectés

Cette page explique comment gérer les machines virtuelles sur les racks Google Distributed Cloud connectés exécutant VM Runtime sur Google Distributed Cloud. Avant de suivre les étapes de cette page, vous devez connaître VM Runtime sur GDC. Pour obtenir la liste des systèmes d'exploitation invités compatibles, consultez Systèmes d'exploitation invités validés pour l'environnement d'exécution de VM sur GDC.

Pour découvrir comment les machines virtuelles constituent un élément essentiel de la plate-forme connectée Distributed Cloud, consultez Étendre GKE Enterprise pour gérer les VM périphériques sur site.

Les clusters connectés Distributed Cloud sont compatibles avec les Webhooks de machine virtuelle. Cela permet à Distributed Cloud Connected de valider les requêtes utilisateur envoyées au serveur d'API Kubernetes local. Les demandes refusées génèrent des informations détaillées sur le motif du refus.

Activer la compatibilité avec l'environnement d'exécution de VM sur GDC sur Distributed Cloud connecté

Par défaut, la compatibilité avec les machines virtuelles de l'environnement d'exécution de VM sur GDC est désactivée sur Distributed Cloud Connected. Pour l'activer, suivez les étapes décrites dans cette section. Les instructions de cette section supposent que vous disposez d'un cluster Distributed Cloud connecté entièrement fonctionnel.

  1. Modifiez la ressource personnalisée VMRuntime avec le contenu suivant et appliquez-la à votre cluster :

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      # Enable Anthos VM Runtime support
      enabled: true
      # vmImageFormat defaults to "raw" if not set
      vmImageFormat: "raw"
      # Set node grace period to 55 seconds;
      haPolicy:
        defaultRecoveryStrategy: Reschedule
        nodeHeartbeatInterval: 15s
        nodeMonitorGracePeriod: 55s

    Ne modifiez pas la valeur du paramètre vmImageFormat. Distributed Cloud Connected n'est compatible avec aucun autre format de disque virtuel.

    Cette opération prend généralement plusieurs minutes.

    Ne modifiez pas la valeur du paramètre vmImageFormat. Distributed Cloud Connected n'est compatible avec aucun autre format de disque virtuel.

    Cette opération prend généralement plusieurs minutes.

  2. Exécutez la commande suivante pour vérifier que la ressource personnalisée VMRuntime a été appliquée à votre cluster :

    kubectl get vmruntime -o yaml

    La commande renvoie un résultat semblable à l'exemple suivant :

     - apiVersion: vm.cluster.gke.io/v1
       kind: VMRuntime
       metadata:
         name: vmruntime
         ...
       spec:
         enabled: true
         vmImageFormat: raw
       status:
         ...
       ready: true
         ...
    
  3. Exécutez la commande suivante pour vérifier que la compatibilité avec les machines virtuelles VM Runtime sur GDC a été activée sur votre cluster :

    kubectl get pods -n vm-system

    La commande renvoie un résultat indiquant les pods du sous-système VM Runtime sur GDC en cours d'exécution sur votre cluster, semblable à l'exemple suivant :

    NAME                                                READY   STATUS         RESTARTS        AGE
    cdi-apiserver-6c76c6cf7b-n68wn                      1/1     Running        0               132m
    cdi-deployment-f78fd599-vj7tv                       1/1     Running        0               132m
    cdi-operator-65c4df9647-fcb9d                       1/1     Running        0               134m
    cdi-uploadproxy-7765ffb694-6j7bf                    1/1     Running        0               132m
    macvtap-fjfjr                                       1/1     Running        0               134m
    virt-api-77dd99dbbb-bs2fb                           1/1     Running        0               132m
    virt-api-77dd99dbbb-pqc27                           1/1     Running        0               132m
    virt-controller-5b44dbbbd7-hc222                    1/1     Running        0               132m
    virt-controller-5b44dbbbd7-p8xkk                    1/1     Running        0               132m
    virt-handler-n76fs                                  1/1     Running        0               132m
    virt-operator-86565697d9-fpxqh                      2/2     Running        0               134m
    virt-operator-86565697d9-jnbt7                      2/2     Running        0               134m
    vm-controller-controller-manager-7844d5fb7b-72d8m   2/2     Running        0               134m
    vmruntime-controller-manager-845649c847-m78r9       2/2     Running        0               175m
    

Installer l'outil de gestion virtctl

Vous avez besoin de l'outil client virtctl pour gérer les machines virtuelles sur votre cluster connecté Distributed Cloud. Pour installer l'outil, procédez comme suit :

  1. Installer l'outil de client virtctl en tant que plug-in kubectl :

    export VERSION=v0.59.0-anthos1.28-gke.8
    gcloud storage cp gs://anthos-baremetal-release/virtctl/${VERSION}/linux-amd64/virtctl /usr/local/bin/virtctl
    cd /usr/local/bin
    sudo ln -s virtctl kubectl-virt
    sudo chmod a+x virtctl
    cd -
  2. Vérifiez que le plug-in virt est installé :

    kubectl plugin list

    Si le plug-in a été installé, le résultat de la commande liste kubectl-virt comme l'un des plug-ins.

Provisionner une machine virtuelle sur Distributed Cloud connected

Cette section fournit des exemples de configuration qui illustrent comment provisionner une machine virtuelle Linux et une machine virtuelle Windows sur un cluster connecté Distributed Cloud avec la couche d'abstraction Symcloud Storage.

Notez que vous ne pouvez pas créer de machine virtuelle sur un cluster connecté Distributed Cloud directement à l'aide de la commande kubectl virt, car Distributed Cloud Connected ne fournit pas de stockage de système de fichiers aux machines virtuelles.

Avant de suivre les étapes de cette section, vous devez d'abord suivre celles de la section Configurer Distributed Cloud connected pour Symcloud Storage. Si vous désactivez ultérieurement Symcloud Storage sur le cluster, les machines virtuelles configurées pour utiliser Symcloud Storage échoueront.

Provisionner une machine virtuelle Linux sur Distributed Cloud connecté

L'exemple suivant montre comment provisionner une machine virtuelle Linux avec Symcloud Storage exécutant Ubuntu Server 22.04. La source d'installation est l'image disque ISO Ubuntu Server 22.04.

  1. Créez une ressource VirtualMachineDisk avec le contenu suivant pour l'image de disque d'installation Ubuntu Server, puis appliquez-la à votre cluster :

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: ubuntu-iso-disk
    spec:
      size: 20Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: https://releases.ubuntu.com/jammy/ubuntu-22.04.3-live-server-amd64.iso
  2. Créez une ressource VirtualMachineDisk avec le contenu suivant pour le disque dur virtuel de la machine virtuelle, puis appliquez-la à votre cluster :

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: "ubuntu-main-disk"
    spec:
      size: 200Gi
      storageClassName: robin
  3. Créez une ressource VirtualMachineType avec le contenu suivant qui spécifie la configuration de la machine virtuelle, puis appliquez-la à votre cluster :

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  4. Créez une ressource VirtualMachine avec le contenu suivant, qui instancie et démarre la machine virtuelle sur le cluster, puis appliquez-la à votre cluster :

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: ubu-vm
      name: ubu-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Linux
      compute:
        virtualMachineTypeName: small-2-20
      interfaces:
        - name: eth0
          networkName: my-network
          default: true
      disks:
        - virtualMachineDiskName: ubuntu-main-disk
          boot: true
        - virtualMachineDiskName: ubuntu-iso-disk

    Vous devez également configurer les fonctionnalités suivantes sur votre cluster :

  5. Installez Ubuntu Server sur la machine virtuelle :

    1. Attendez que le pod importer télécharge l'image disque d'installation d'Ubuntu Server.
    2. Vérifiez l'état de la machine virtuelle :

      kubectl get gvm VM_NAME

      Remplacez VM_NAME par le nom de la machine virtuelle (ubu-vm dans cet exemple).

    3. Connectez-vous à la machine virtuelle à l'aide de SSH ou du Bureau à distance.

    4. Suivez la procédure d'installation d'Ubuntu Linux.

  6. Effectuer un nettoyage :

    1. Arrêtez la machine virtuelle :

      kubectl virt stop VM_NAME

      Remplacez VM_NAME par le nom de la machine virtuelle (ubu-vm dans cet exemple).

    2. Modifiez le fichier YAML de la machine virtuelle pour supprimer la référence à l'image disque d'installation :

      kubectl edit gvm VM_NAME

      Remplacez VM_NAME par le nom de la machine virtuelle (ubu-vm dans cet exemple).

    3. Démarrez la machine virtuelle :

      kubectl virt start VM_NAME

      Remplacez VM_NAME par le nom de la machine virtuelle (ubu-vm dans cet exemple).

    4. Supprimez la ressource VirtualMachineDisk pour l'image disque d'installation :

      kubectl delete virtualmachinedisk ubuntu-iso-disk

Provisionner une machine virtuelle Windows sur Distributed Cloud connecté

L'exemple suivant montre comment provisionner une machine virtuelle Windows avec Symcloud Storage. Les étapes sont semblables à celles du provisionnement d'une machine virtuelle Linux, avec l'ajout de l'image de disque de pilote virtio, qui est requise pour installer Windows.

  1. Obtenez une copie sous licence de Windows et de son image de support d'installation.

  2. Créez une ressource VirtualMachineDisk avec le contenu suivant pour l'image de disque d'installation Windows, puis appliquez-la à votre cluster :

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-iso-disk
      namespace: default
    spec:
      size: 5Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: WINDOWS_ISO_URL

    Remplacez NAT_GATEWAY par l'URL complète de l'image disque ISO d'installation de Windows cible.

  3. Créez une ressource VirtualMachineDisk avec le contenu suivant pour le pilote virtio, puis appliquez-la à votre cluster :

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-virtio-driver
      namespace: default
    spec:
      size: 1Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
  4. Créez une ressource VirtualMachineDisk avec le contenu suivant pour le disque dur virtuel de la machine virtuelle, puis appliquez-la à votre cluster :

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-main-disk
      namespace: default
    spec:
      size: 15Gi
      storageClassName: robin
  5. Créez une ressource VirtualMachineType avec le contenu suivant qui spécifie la configuration de la machine virtuelle, puis appliquez-la à votre cluster :

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  6. Créez une ressource VirtualMachine avec le contenu suivant, qui instancie et démarre la machine virtuelle sur le cluster, puis appliquez-la à votre cluster :

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: win-vm
      name: win-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Windows
      compute:
        virtualMachineTypeName: my-vmt
      interfaces:
        - name: eth0
          networkName: my-network
          default: true
      disks:
        - virtualMachineDiskName: windows-main-disk
          boot: true
        - virtualMachineDiskName: windows-iso-disk
        - virtualMachineDiskName: win-virtio-driver

    Vous devez également configurer les fonctionnalités suivantes sur votre cluster :

  7. Installez Windows sur la machine virtuelle :

    1. Attendez que le pod importer télécharge l'image disque d'installation de Windows.
    2. Vérifiez l'état de la machine virtuelle :

      kubectl get gvm VM_NAME

      Remplacez VM_NAME par le nom de la machine virtuelle (win-vm dans cet exemple).

    3. Terminez l'installation de Windows en suivant les étapes décrites dans Se connecter à une VM Windows et terminer l'installation de l'OS.

  8. Effectuer un nettoyage :

    1. Arrêtez la machine virtuelle :

      kubectl virt stop VM_NAME

      Remplacez VM_NAME par le nom de la machine virtuelle (win-vm dans cet exemple).

    2. Suivez la procédure décrite dans Détacher l'image ISO et le disque de pilotes.

Gérer les machines virtuelles exécutées sur Distributed Cloud connecté

Pour obtenir des instructions sur la gestion des machines virtuelles exécutées sur Distributed Cloud connecté, consultez la documentation suivante sur l'environnement d'exécution de VM sur GDC :

Pour gérer les machines virtuelles exécutées sur Distributed Cloud connecté, vous devez d'abord configurer la connectivité kubectl.

Désactiver l'environnement d'exécution de VM sur GDC sur Distributed Cloud connecté

Suivez les étapes de cette section pour désactiver VM Runtime sur GDC sur Distributed Cloud connecté. Avant de pouvoir désactiver l'environnement d'exécution de VM sur GDC sur Distributed Cloud connecté, vous devez arrêter et supprimer toutes les machines virtuelles de votre cluster Distributed Cloud connecté, comme décrit dans Supprimer une VM.

Pour désactiver VM Runtime sur GDC sur Distributed Cloud Connected, modifiez la ressource personnalisée VMRuntime en définissant le paramètre de spécification enabled sur false comme suit, puis appliquez-le à votre cluster :

apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
  name: vmruntime
spec:
  # Disable Anthos VM Runtime
  enabled: false
  # vmImageFormat defaults to "raw" if not set
  vmImageFormat: "raw"

Étapes suivantes