Administra máquinas virtuales en servidores conectados de Distributed Cloud

En esta página, se describe cómo administrar máquinas virtuales en servidores conectados de Google Distributed Cloud que ejecutan VM Runtime en Google Distributed Cloud. Antes de completar los pasos de esta página, debes conocer el entorno de ejecución de VM en GDC. Para obtener una lista de los sistemas operativos invitados compatibles, consulta Sistemas operativos invitados verificados para el entorno de ejecución de VM en GDC.

Para obtener información sobre cómo las máquinas virtuales son un componente esencial de la plataforma conectada de Distributed Cloud, consulta Extiende GKE Enterprise para administrar VMs perimetrales locales.

Los clústeres conectados de Distributed Cloud admiten webhooks de máquina virtual. Esto permite que Distributed Cloud Connected valide las solicitudes de los usuarios realizadas al servidor de la API de Kubernetes local. Las solicitudes rechazadas generan información detallada sobre el motivo del rechazo.

Configura Symcloud Storage

Los servidores conectados de Google Distributed Cloud usan Rakuten Symcloud Storage como solución de almacenamiento. Symcloud Storage es una solución de terceros que actúa como una capa de abstracción de almacenamiento local en cada nodo conectado de Distributed Cloud y pone su almacenamiento local a disposición de las cargas de trabajo que se ejecutan en otros nodos conectados de Distributed Cloud.

Symcloud Storage se implementa desde Google Cloud Marketplace y está sujeto a las condiciones que se indican allí. Google proporciona asistencia limitada para usar Symcloud Storage con Distributed Cloud conectado y puede contratar al proveedor externo para obtener asistencia. Las actualizaciones de software de Symcloud Storage se incluyen en las actualizaciones de software conectadas de Distributed Cloud.

Configura tu clúster conectado de Google Distributed Cloud de la siguiente manera para habilitar Symcloud Storage para máquinas virtuales:

  1. Crea el espacio de nombres robinio con el siguiente comando:

    kubectl create ns robinio
    
  2. Obtén el archivo de licencia de Symcloud Storage y aplícalo al clúster con el siguiente comando:

    kubectl apply LICENSE_FILE
    
  3. Verifica que Symcloud Storage esté en funcionamiento con el siguiente comando:

    kubectl apply LICENSE_FILE
    

    El comando muestra un resultado similar al siguiente:

     Name:         robin
     Namespace:
     Labels:       app.kubernetes.io/instance=robin
                   app.kubernetes.io/managed-by=robin.io
                   app.kubernetes.io/name=robin
     Annotations:  <none>
     API Version:  manage.robin.io/v1
     Kind:         RobinCluster
     Metadata:
       
     Spec:
       
     Status:
       
       Phase:             Ready
       
    
  4. Aplica la siguiente configuración al clúster para crear la clase de almacenamiento robin-block-immediate:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: robin-block-immediate
    parameters:
      faultdomain: host
      replication: "3"
      blocksize:   "512"
    provisioner: robin
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    
  5. Crea la clase de instantánea de volumen robin-snapshotclass aplicando la siguiente configuración al clúster:

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: robin-snapshotclass
      labels:
        app.kubernetes.io/instance: robin
        app.kubernetes.io/managed-by: robin.io
        app.kubernetes.io/name: robin
      annotations:
        snapshot.storage.kubernetes.io/is-default-class: "true"
    driver: robin
    deletionPolicy: Delete
    

Actualiza las máquinas virtuales existentes a la versión 1.7.0 de Distributed Cloud Connected

Debes agregar lo siguiente a la sección spec del recurso VMRuntime en tu clúster y, luego, aplicar el recurso modificado al clúster antes de actualizar el software conectado de Distributed Cloud a la versión 1.7.0:

spec:
  haPolicy:
    defaultRecoveryStrategy: Reschedule
    nodeHeartbeatInterval: 15s
    nodeMonitorGracePeriod: 55s

Habilita la compatibilidad con el entorno de ejecución de VM en GDC en Distributed Cloud Connected

De forma predeterminada, la compatibilidad con máquina virtual del entorno de ejecución de VM en GDC está inhabilitada en Distributed Cloud Connected. Para habilitarlo, completa los pasos de esta sección. En las instrucciones de esta sección, se supone que tienes un clúster de Distributed Cloud conectado que funciona correctamente.

Para habilitar el entorno de ejecución de VM en el subsistema de máquina virtual de GDC, completa los siguientes pasos:

  1. Modifica el recurso personalizado VMRuntime con el siguiente contenido y aplícalo a tu clúster:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      annotations:
        baremetal.cluster.gke.io/vmrumtime-force-disable: "false"
        vm.cluster.gke.io/enable-vm-backup: "true"
    spec:
      enabled: true
      storage:
        defaultStorageClass: robin-block-immediate
    haPolicy:
      defaultRecoveryStrategy: Reschedule
      nodeHeartbeatInterval: 15s
      nodeMonitorGracePeriod: 55s

    Este proceso suele tardar varios minutos en completarse.

  2. Usa el siguiente comando para verificar que el recurso personalizado VMRuntime se haya aplicado a tu clúster:

    kubectl get vmruntime
    

    El comando muestra un resultado similar al siguiente ejemplo:

    NAME        AGE   ENABLED   READY   PREFLIGHTCHECK
    vmruntime   5m   true      true    true
    
  3. Modifica el storageprofile para la clase de almacenamiento robin-block-immediate con el siguiente contenido y aplícalo a tu clúster:

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: StorageProfile
    metadata:
      name: robin-block-immediate
    spec:
      claimPropertySets:
        accessModes:
          ReadWriteMany
      volumeMode: Block

Instala la herramienta de administración de virtctl

Necesitas la herramienta de cliente virtctl para administrar máquinas virtuales en tu clúster conectado a Distributed Cloud. Para instalar la herramienta, completa los siguientes pasos:

  1. Instala la herramienta de cliente virtctl como un complemento 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. Verifica que el complemento virt esté instalado:

    kubectl plugin list

    Si el complemento se instaló correctamente, el resultado del comando mostrará kubectl-virt como uno de los complementos.

Crea un bucket de Cloud Storage para las imágenes de máquina virtual

Completa los pasos de esta sección para crear un bucket de Cloud Storage para las imágenes de tu máquina virtual. Si ya tienes un repositorio de imágenes establecido, omite esta sección.

  1. Completa los pasos en Crea buckets para crear un bucket.

  2. Configura una cuenta de servicio y una clave para acceder al bucket con los siguientes comandos:

    export PROJECT_ID=$(gcloud config get-value project)
    gcloud iam service-accounts create image-access
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:image-access@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/storage.objectViewer" \
    gcloud iam service-accounts keys create ./image-access-gcr.json \
      --iam-account="image-access@${PROJECT_ID}.iam.gserviceaccount.com"
  3. Crea un secreto en el clúster para acceder al bucket. Si tu bucket es público, omite este paso. Este secreto debe existir en el mismo espacio de nombres que los discos de tu máquina virtual. Debes crear un secreto en cada espacio de nombres afectado.

    kubectl create secret generic gcs-image-sa --from-file=creds-gcp.json=./image-access-gcr.json -n NAMESPACE

    Reemplaza CLUSTER_ID por el nombre del espacio de nombres de destino.

  4. Almacena tus imágenes en el bucket.

Crea un disco de máquina virtual a partir de una imagen de máquina virtual

Completa los pasos de esta sección para crear un disco de máquina virtual a partir de una imagen de máquina virtual.

Crea un disco a partir de una imagen almacenada en Cloud Storage

Crea un disco de máquina virtual a partir de una máquina virtual almacenada en tu bucket de Cloud Storage aplicando la siguiente configuración a tu clúster:

 apiVersion: vm.cluster.gke.io/v1
 kind: VirtualMachineDisk
 metadata:
   name: DISK_NAME
   namespace: NAMESPACE
 spec:
   source:
     gcs:
       url: gs://{PROJECT_ID}-vm-images/IMAGE_FILE
       secretRef: gcs-image-sa
   size: DISK_SIZE
   storageClassName: robin-block-immediate

Reemplaza lo siguiente:

  • DISK_NAME: Es el nombre de este disco de máquina virtual.
  • NAMESPACE: Es el espacio de nombres de destino.
  • IMAGE_FILE: Es el nombre del archivo de imagen de la máquina virtual.
  • DISK_SIZE: Es el tamaño de disco deseado. Este valor debe ser mayor que el valor virtual-size del archivo de imagen de la máquina virtual. Puedes encontrar este valor con el comando qemu-img info DISK_SIZE.

Si no especificas un valor de storageClassName, se usa el valor predeterminado especificado en el recurso VMRuntime.

Crea un disco a partir de una imagen de disco existente

Sigue estos pasos para crear un disco de máquina virtual a partir de un disco o archivo de imagen de máquina virtual existente en tu clúster.

  1. Aplica la siguiente configuración a tu clúster para crear el disco de destino:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: IMAGE_DISK_NAME
      namespace: NAMESPACE
    spec:
      source:
        virtualMachineDisk:
          name: EXISTING_DISK_NAME
      size: DISK_SIZE
      storageClassName: robin-block-immediate

    Reemplaza lo siguiente:

    • IMAGE_DISK_NAME: Es el nombre de este disco de máquina virtual.
    • NAMESPACE: Es el espacio de nombres de destino.
    • EXISTING_DISK_NAME: Es el nombre del disco de máquina virtual existente.
    • DISK_SIZE: Es el tamaño de disco deseado. Este valor debe ser igual o mayor que el tamaño del disco o archivo de imagen existente.

    Puedes obtener el tamaño de tu disco o archivo de imagen existente con la herramienta qemu-img de la siguiente manera:

    qemu-img info EXISTING_DISK_NAME

    Si no especificas un valor de storageClassName, se usa el valor predeterminado especificado en el recurso VMRuntime.

  2. Crea un disco nuevo a partir de tu archivo de imagen existente aplicando la siguiente configuración a tu clúster:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
      namespace: NAMESPACE
    spec:
      source:
        virtualMachineDisk:
          name: IMAGE_DISK_NAME
      size: DISK_SIZE
      storageClassName: robin-block-immediate

    Reemplaza lo siguiente:

    • IMAGE_DISK_NAME: Es el nombre del disco de la máquina virtual que creaste en el paso anterior.
    • NAMESPACE: Es el espacio de nombres de destino.
    • DISK_SIZE: Es el tamaño de disco deseado. Debe ser igual al tamaño del disco de la máquina virtual que creaste en el paso anterior.
  3. Cambia el tamaño del disco de destino al tamaño deseado con el siguiente comando:

    kubectl edit gdisk DISK_NAME -n NAMESPACE

    Reemplaza lo siguiente:

    • DISK_NAME: Es el nombre del disco de la máquina virtual que creaste en el paso anterior.
    • NAMESPACE: Es el espacio de nombres de destino.
  4. Modifica el valor de spec.size en la configuración del disco y aplícalo a tu clúster.

Crea un disco vacío

Aplica la siguiente configuración a tu clúster para crear un disco de máquina virtual vacío:

 apiVersion: vm.cluster.gke.io/v1
 kind: VirtualMachineDisk
 metadata:
   name: DISK_NAME
   namespace: NAMESPACE
 spec:
   size: DISK_SIZE
   storageClassName: robin-block-immediate

Reemplaza lo siguiente:

  • DISK_NAME: Es el nombre de este disco de máquina virtual.
  • NAMESPACE: Es el espacio de nombres de destino.
  • DISK_SIZE: Es el tamaño de disco deseado en gibibytes. Este valor debe ser mayor que el valor virtual-size del archivo de imagen de la máquina virtual. Puedes encontrar este valor con el comando qemu-img info DISK_SIZE.

Si no especificas un valor de storageClassName, se usa el valor predeterminado especificado en el recurso VMRuntime.

Configura redes virtuales

Sigue los pasos que se indican en Networking para configurar las redes virtuales de tus máquinas virtuales.

Crea una máquina virtual

Completa los pasos de esta sección para crear una máquina virtual en la implementación del servidor conectado de Distributed Cloud. Las instrucciones de esta sección son ejemplos destinados a ilustrar configuraciones para diferentes situaciones. Para obtener información detallada sobre la configuración de máquinas virtuales, consulta Crea una VM con recursos de CPU y memoria específicos usando el entorno de ejecución de VM en GDC.

Crea una máquina virtual a partir de una imagen de disco de arranque

Para crear una máquina virtual a partir de una imagen de disco de arranque, aplica la siguiente configuración a tu clúster:

 kind: VirtualMachine
 metadata:
   name: my-virtual-machine
   namespace: my-vm-namespace
 spec:
   osType: Linux/Windows
   guestEnvironment: {} // comment out this line to enable guest environment for access management
   autoRestartOnConfigurationChange: true 
   compute:
     cpu:
       vcpus: 6
     memory:
       capacity: 8Gi
   interfaces:
      - name: eth0
        networkName: network-410
        ipAddresses:
        - 10.223.237.10/25
   disks:
     - virtualMachineDiskName: my-boot-disk
       boot: true
     - virtualMachineDiskName: my-data-disk

Reemplaza lo siguiente:

  • DISK_NAME: Es el nombre de este disco de máquina virtual.
  • NAMESPACE: Es el espacio de nombres de destino.

Crea una máquina virtual a partir de una imagen de disco óptico ISO

Para crear una máquina virtual a partir de una imagen de disco óptico ISO, completa los pasos que se indican en Crea una VM de Windows a partir de una imagen ISO en Google Distributed Cloud.

Crea una máquina virtual con asistencia de GPU

Completa los pasos

Accede a una máquina virtual

Completa los pasos de esta sección para acceder a una máquina virtual que se ejecuta en la implementación del servidor conectado de Distributed Cloud.

Obtén credenciales de acceso

Completa los pasos de esta sección para obtener las credenciales necesarias para acceder a tu máquina virtual con la función de entorno invitado de Linux.

  1. Aplica la siguiente configuración a tu clúster para habilitar el entorno invitado de Linux en la máquina virtual de destino:

    kind: VirtualMachine
    metadata:
     name: my-virtual-machine
     namespace: my-vm-namespace
    spec:
     osType: Linux
     guestEnvironment: {}
     autoRestartOnConfigurationChange: true 
  2. Genera un archivo id_rsa.pub que contenga un par de claves SSH con el siguiente comando:

    ssh-keygen -t rsa
  3. Crea un recurso VirtualMachineAccessRequest aplicando la siguiente configuración a tu clúster:

    apiVersion: vm.cluster.gke.io/v1alpha1
    kind: VirtualMachineAccessRequest
    metadata:
     name: RESOURCE_NAME
     namespace: NAMESPACE
    spec:
      vm: VM_NAME
      user: USER_NAME
      ssh:
        key: RSA_KEY
        ttl: 2h

Reemplaza lo siguiente:

  • RESOURCE_NAME: Es un nombre descriptivo para este recurso de solicitud de acceso a la máquina virtual.
  • NAMESPACE: Es el espacio de nombres de destino.
  • VM_NAME: Es el nombre de la máquina virtual de destino.
  • USER_NAME: Es el nombre del usuario al que se le otorga acceso.
  • RSA_KEY: Es el contenido del archivo id_rsa.pub que generaste en el paso anterior.
  1. Verifica el estado de la solicitud de acceso con el siguiente comando:

    kubectl get vmar
    

    Cuando el comando muestre el estado Configured, continúa con el siguiente paso.

  2. Accede a la máquina virtual con SSH o Escritorio remoto:

    • Si la máquina virtual está conectada a tu red local, puedes acceder a ella directamente.
    • Si la máquina virtual está conectada a la red de Pods, debes crear un servicio de balanceador de cargas para acceder a los puertos requeridos.

Cómo iniciar, reiniciar o detener una máquina virtual

Usa los siguientes comandos para iniciar, reiniciar o detener una máquina virtual:

  • Inicia una máquina virtual: kubectl virt start vmVM_NAME-nNAMESPACE
  • Reinicia una máquina virtual: kubectl virt restart vmVM_NAME-nNAMESPACE
  • Detén una máquina virtual: kubectl virt stop vmVM_NAME-nNAMESPACE

Reemplaza lo siguiente:

  • VM_NAME: Es el nombre de la máquina virtual de destino.
  • NAMESPACE: Es el espacio de nombres de destino.

¿Qué sigue?