Administra máquinas virtuales

En esta página, se describe cómo administrar máquinas virtuales en tu implementación conectada de Google Distributed Cloud que ejecuta 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 de Distributed Cloud conectado 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

Google Distributed Cloud connected usa 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 comunicarse con el 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. Para obtener más información, consulta Instala Symcloud Storage en un nodo conectado de Distributed Cloud.

  1. Crea el espacio de nombres robin-admin con el siguiente comando:

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

    kubectl apply -f LICENSE_FILE
    

    Reemplaza LICENSE_FILE por la ruta de acceso al archivo de licencia.

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

    kubectl describe robincluster
    

    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
    
  6. 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 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=v1.3.1-anthos1.35-gke.39
    gcloud storage cp gs://anthos-baremetal-release/virtctl/${VERSION}/linux-amd64/virtctl ./virtctl
    sudo mv ./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 VM

Completa los pasos de esta sección para crear un bucket de Cloud Storage para las imágenes de tu máquina virtual. El bucket usa la federación de identidades para cargas de trabajo para vincular una cuenta de servicio de Kubernetes a la cuenta de servicio de Google Cloud correspondiente para acceder al bucket; en otras palabras, la cuenta de servicio de Kubernetes suplanta a la cuenta de servicio de Google Cloud. Si ya tienes un repositorio de imágenes establecido, omite esta sección.

Para reducir el riesgo de identidad idéntica en una flota de varios clústeres, sigue las instrucciones que se indican en Prácticas recomendadas para la federación de identidades para cargas de trabajo de la flota cuando completes los pasos de esta sección.

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

  2. Crea una cuenta de servicio Google Cloud para acceder al bucket:

    export GSA_PROJECT_ID=GSA_PROJECT_ID
    export GSA_NAME=GSA_NAME
    gcloud iam service-accounts create ${GSA_NAME}

    Reemplaza lo siguiente:

    • GSA_NAME: Un nombre significativo para esta Google Cloud cuenta de servicio.
    • GSA_PROJECT_ID: Es el ID del proyecto Google Cloud que aloja la cuenta de servicioGoogle Cloud de destino.
  3. Otorga permisos a la cuenta de servicio Google Cloud para acceder al bucket:

    export BUCKET_PROJECT_ID=BUCKET_PROJECT_ID
    export GSA_NAME=GSA_NAME
    gcloud storage buckets add-iam-policy-binding gs://${BUCKET_PROJECT_ID}-vm-images \
       --member="serviceAccount:${GSA_NAME}@${GSA_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/storage.objectViewer" \
       --project=${BUCKET_PROJECT_ID}

    Reemplaza lo siguiente:

    • GSA_NAME: Es el nombre de la cuenta de servicio Google Cloud de destino.
    • BUCKET_PROJECT_ID: Es el ID del proyecto de Google Cloud que aloja el bucket.
    • GSA_PROJECT_ID: Es el ID del proyecto Google Cloud que aloja la cuenta de servicioGoogle Cloud de destino.
  4. Crea una cuenta de servicio de Kubernetes en el espacio de nombres de la máquina virtual de destino para vincularla a tu cuenta de servicio Google Cloud :

    export GSA_PROJECT_ID=GSA_PROJECT_ID
    export VM_NAMESPACE=NAMESPACE
    export KSA_NAME=KSA_NAME
    export GSA_EMAIL=${GSA_NAME}@${GSA_PROJECT_ID}.iam.gserviceaccount.com
    kubectl create serviceaccount ${KSA_NAME} -n ${VM_NAMESPACE}
    kubectl annotate serviceaccount ${KSA_NAME} gsaEmail=${GSA_EMAIL} -n ${VM_NAMESPACE}

    Reemplaza lo siguiente:

    • GSA_PROJECT_ID: Es el ID del proyecto Google Cloud que aloja la cuenta de servicioGoogle Cloud de destino.
    • NAMESPACE: Es el espacio de nombres de la máquina virtual de destino.
    • KSA_NAME: Un nombre significativo para esta cuenta de servicio de Kubernetes.
    • GSA_NAME: Es el nombre de la cuenta de servicio Google Cloud correspondiente.
  5. Busca el nombre del grupo de identidades para cargas de trabajo y el proveedor de identidad de tu clúster:

    gcloud container fleet memberships describe MEMBERSHIP_ID \
        --project=FLEET_PROJECT_ID \
        --format="table(authority.identityProvider,authority.workloadIdentityPool,name)"

    Reemplaza lo siguiente:

    • MEMBERSHIP_ID: Es el nombre de la membresía de la flota del clúster. Por lo general, es el nombre de tu clúster.
    • FLEET_PROJECT_ID: Es el ID del proyecto Google Cloud host de la flota.

    El comando muestra un resultado similar al siguiente:

    IDENTITY_PROVIDER: IDENTITY_PROVIDER
    WORKLOAD_IDENTITY_POOL: WORKLOAD_IDENTITY_POOL
    

    En el resultado, toma nota de los siguientes valores:

  6. Vincula la cuenta de servicio de Kubernetes a la cuenta de servicio de Google Cloud para configurar la suplantación:

    export GSA_PROJECT_ID=GSA_PROJECT_ID
    export GSA_NAME=GSA_NAME
    export KSA_NAME=KSA_NAME
    export VM_NAMESPACE=NAMESPACE
    export WI_POOL=WORKLOAD_IDENTITY_POOL
    gcloud iam service-accounts add-iam-policy-binding ${GSA_NAME}@${GSA_PROJECT_ID}.iam.gserviceaccount.com \
       --project=${GSA_PROJECT_ID} \
       --role=roles/iam.workloadIdentityUser \
       --member="serviceAccount:${WI_POOL}[${VM_NAMESPACE}/${KSA_NAME}]" \
       --condition="IAM_CONDITION" \
       --condition-from-file="IAM_CONDITION_FILE"

    Reemplaza lo siguiente:

    • GSA_PROJECT_ID: Es el ID del proyecto Google Cloud que aloja la cuenta de servicioGoogle Cloud de destino.
    • GSA_NAME: Es el nombre de la cuenta de servicio Google Cloud correspondiente.
    • KSA_NAME: Es el nombre de la cuenta de servicio de Kubernetes de destino.
    • NAMESPACE: Es el espacio de nombres de la máquina virtual de destino.
    • WORKLOAD_IDENTITY_POOL: Es el nombre del grupo de identidades para cargas de trabajo de tu clúster.
    • IAM_CONDITION: Opcional. Especifica las condiciones de IAM para limitar el acceso a clústeres específicos dentro de la flota. Si se omite o se establece en None, no se aplican condiciones de IAM.
    • IAM_CONDITION_FILE: Opcional. Especifica el archivo que contiene las condiciones de IAM para limitar el acceso a clústeres específicos dentro de la flota. Si se omite, no se aplican condiciones de IAM, a menos que se especifique la marca --condition y se establezca en un valor distinto de None.
  7. Almacena tus imágenes en el bucket.

También tienes la opción de usar el método heredado con un secreto generado a partir de la clave activa de tu cuenta de servicio de Google. Para obtener más información, consulta Crea un bucket de Cloud Storage para máquina virtual virtuales.

Restringe el acceso al bucket con condiciones de IAM

Las condiciones de IAM te permiten especificar a qué clústeres de la flota se puede acceder al bucket. Si no se especifican condiciones de IAM, todos los clústeres de la flota con la misma cuenta de servicio de Kubernetes en el mismo espacio de nombres pueden acceder al bucket, lo que representa un riesgo de similitud de identidad. Si no especificas condiciones de IAM, también puedes recurrir al mecanismo de acceso heredado que usa un secreto generado a partir de la clave activa de una cuenta de servicio de Google. A continuación, se muestra un ejemplo de cómo configurar y aplicar condiciones de IAM para limitar el acceso a tu bucket:

  1. Crea el archivo de condición de IAM:

    cat <<EOF > iam_condition.yaml
    > expression: request.auth.claims.google.providerId == '$IDENTITY_PROVIDER'
    title: allow_only_this_cluster
    > EOF
  2. Aplica el archivo de condiciones de IAM cuando vincules la GSA a la KSA. Ejecuta el siguiente comando en tu proyecto de GSA Google Cloud :

    gcloud iam service-accounts add-iam-policy-binding "${GSA_NAME}@${GSA_PROJECT_ID}.iam.gserviceaccount.com" \
      --project="${GSA_PROJECT_ID}" \
      --role=roles/iam.workloadIdentityUser \
      --member="serviceAccount:${WI_POOL}[${VM_NAMESPACE}/${KSA_NAME}]" \
      --condition-from-file=iam_condition.yaml

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://${BUCKET_PROJECT_ID}-vm-images/IMAGE_FILE_PATH
       serviceAccount: KSA_NAME
   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 la máquina virtual de destino.
  • IMAGE_FILE_PATH: Es la ruta de acceso completa y el nombre del archivo de imagen de la máquina virtual. Haz clic con el botón derecho en la imagen de la Google Cloud consola y selecciona Copiar URI de gsutil para obtener esta ruta de acceso.
  • KSA_NAME: Es la cuenta de servicio de Kubernetes para descargar imágenes de máquina virtual que creaste antes.
  • DISK_SIZE: Es el tamaño del disco de destino. 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 almacenada en un servicio de terceros

También tienes la opción de usar http, https, S3 o un registro de imágenes para almacenar las imágenes de tus máquina virtual. Si tu servicio de almacenamiento requiere credenciales para acceder, conviértelas en un secreto y especifícalo con el campo secretRef.

Por ejemplo:

source:
    http/s3/registry:
       url:
       secretRef: "SECRET_NAME" # optional

Reemplaza SECRET_NAME por el nombre de tu secreto.

Para obtener más información, consulta Fuente de HTTP/S3/GCS/registro.

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 que ilustran 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.

La asignación de recursos para las VMs está limitada por los perfiles de hardware de tu implementación conectada de Distributed Cloud, como el hardware G1 o G2. No puedes dimensionar una sola VM más grande que la máquina física conectada a la Nube distribuida en la que se ejecuta.

Crea una máquina virtual con la Google Cloud consola

Para crear una máquina virtual con la consola de Google Cloud , haz lo siguiente:

  1. En la consola de Google Cloud , ve a la página Clústeres.

    Ir a los clústeres

  2. Selecciona el proyecto Google Cloud de destino.

  3. (Opcional) Si aún no lo hiciste, accede al clúster de destino:

    1. En el panel de navegación de la izquierda, haz clic en Clusters.

    2. En la lista Clústeres administrados de Anthos, haz clic en el clúster de destino.

    3. En el panel de información del lado derecho, haz clic en ACCEDER.

    4. En el cuadro de diálogo emergente que aparece, selecciona tu método de autenticación preferido, ingresa tus credenciales y haz clic en ACCEDER.

  4. Ve a la página Virtual Machines.

    Ir a Virtual Machines

  5. Haz clic en CREAR.

  6. En la sección Básicos, haz lo siguiente:

    1. En el campo Nombre, ingresa un nombre significativo para la máquina virtual.

    2. En el campo Seleccionar clúster, selecciona el clúster de destino para la máquina virtual.

    3. En el campo Espacio de nombres, selecciona el espacio de nombres de destino.

    4. En el campo Tipo de SO, selecciona el sistema operativo de destino.

    5. (Opcional) Si deseas agregar una o más etiquetas a la configuración de esta máquina virtual, haz clic en AGREGAR ETIQUETA.

  7. En la sección Configuración de la máquina, realiza una de las siguientes acciones:

    • Si deseas especificar la cantidad de CPU virtuales y la cantidad de memoria para esta máquina virtual, selecciona Configuración personalizada, ingresa los valores objetivo y, luego, haz clic en SIGUIENTE.

    • Si deseas usar una cantidad predeterminada de CPU virtuales y memoria para esta máquina virtual, selecciona Configuración estándar y elige una configuración de máquina en la lista desplegable Tipo de máquina. Luego, haz clic en SIGUIENTE.

  8. En la sección Almacenamiento, realiza una de las siguientes acciones:

    • Si deseas crear un disco virtual nuevo para esta máquina virtual, selecciona Agregar un disco nuevo y, luego, ingresa un nombre significativo en el campo Nombre, un tamaño en gigabytes en el campo GiB y una URL en el campo Imagen.

    • Si deseas usar un disco virtual existente para esta máquina virtual, selecciona Seleccionar un disco existente y elige la imagen de disco de destino en la lista desplegable Seleccionar un disco.

    • Especifica si quieres que el disco sea de solo lectura y si se borrará automáticamente cuando se borre esta máquina virtual con las casillas de verificación Solo lectura y Borrado automático.

    • Especifica un controlador de disco virtual en la lista desplegable Controlador.

    • Para agregar otro disco a esta máquina virtual, haz clic en AGREGAR UN DISCO en la sección Discos adicionales.

    • Haz clic en SIGUIENTE.

  9. En la sección Red, haz lo siguiente:

    1. En la subsección Interfaz de red predeterminada, especifica el nombre de la interfaz de red principal para esta máquina virtual en el campo Nombre de la interfaz.

    2. Selecciona el tipo de red correspondiente en la lista desplegable Tipo de red.

    3. Especifica si deseas permitir el acceso externo a esta interfaz de red con la casilla de verificación Permitir acceso externo. Si habilitas esta opción, debes ingresar una lista de puertos separados por comas para exponerlos de forma externa en el campo Puertos expuestos.

    4. Si quieres agregar una o más interfaces de red secundarias a esta máquina virtual, haz clic en AGREGAR UNA INTERFAZ DE RED.

    5. Haz clic en SIGUIENTE.

  10. En la sección Opciones avanzadas, usa la casilla de verificación Reinicio automático tras la actualización para especificar si se debe reiniciar esta máquina virtual después de que se actualice el software conectado de Distributed Cloud en el clúster de destino.

  11. En la sección Firmware, haz lo siguiente:

    1. Selecciona el tipo de firmware de destino en el campo Tipo de bootloader. Si seleccionas el firmware UEFI, tienes la opción de habilitar el inicio seguro con la casilla de verificación Inicio seguro.

    2. Especifica un número de serie para esta máquina virtual en el campo Serie.

    3. Especifica un identificador único universal (UUID) para esta máquina virtual en el campo UUID.

  12. En la sección Cloud-init, especifica un valor secreto de datos del usuario en el campo User data secret.

  13. Haz clic en CREATE VM para crear la máquina virtual.

Crea una máquina virtual a partir de un archivo YAML

Para crear una máquina virtual a partir de un archivo de configuración YAML, haz lo siguiente:

  1. En la consola de Google Cloud , ve a la página Clústeres.

    Ir a los clústeres

  2. Selecciona el proyecto Google Cloud de destino.

  3. (Opcional) Si aún no lo hiciste, accede al clúster de destino:

    1. En el panel de navegación de la izquierda, haz clic en Clusters.

    2. En la lista Clústeres administrados de Anthos, haz clic en el clúster de destino.

    3. En el panel de información del lado derecho, haz clic en ACCEDER.

    4. En el cuadro de diálogo emergente que aparece, selecciona tu método de autenticación preferido, ingresa tus credenciales y haz clic en ACCEDER.

  4. Ve a la página Virtual Machines.

    Ir a Virtual Machines

  5. Haz clic en CREATE WITH YAML.

  6. En el campo Seleccionar clúster, selecciona el clúster de destino para la máquina virtual.

  7. Pega la configuración de la máquina virtual en formato YAML en el campo YAML. Para obtener detalles sobre los campos YAML admitidos, consulta la referencia de especificaciones de máquinas virtuales.

  8. Haz clic en CREAR.

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. Para personalizar esta configuración, como las opciones de CPU, memoria o red, consulta la Referencia de especificaciones de máquinas virtuales:

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
metadata:
  name: my-virtual-machine
  namespace: NAMESPACE
spec:
  osType: Linux/Windows
  # guestEnvironment: {} # uncomment this line to disable guest environment
  priorityClassName: PRIORITY_CLASS
  compute:
    cpu:
      vcpus: 6
    memory:
      capacity: 8Gi
  interfaces:
    - name: eth0
      networkName: NETWORK_NAME
      ipAddresses:
        - IP_ADDRESS/PREFIX
  disks:
    - virtualMachineDiskName: DISK_NAME
      boot: true
    - virtualMachineDiskName: DISK_NAME

Reemplaza lo siguiente:

  • NAMESPACE: Es el espacio de nombres de destino.
  • PRIORITY_CLASS: Es la clase de prioridad de esta máquina virtual. Una clase de prioridad es un rango de valores de prioridad. Usa kubectl get priorityclass para ver una lista de las clases de prioridad admitidas. Una mayor prioridad de programación reduce la posibilidad de desalojo de la VM cuando los recursos del nodo son limitados. Si se omite, la máquina virtual obtiene el valor de prioridad más bajo predeterminado.
  • NETWORK_NAME: Es el nombre de la red de nivel 2 a la que se conectará la interfaz de la VM.
  • DISK_NAME: Son los nombres de los discos de esta máquina virtual.
  • vcpus: Es la cantidad de CPU virtuales que se asignan a la VM.
  • capacity: Es la cantidad de memoria que se asigna a la VM. Por ejemplo, 4Gi o 8Gi.
  • ipAddresses: Opcional. Proporciona la asignación de IP estática para la máquina virtual. Si la red L2 subyacente admite DHCP externo, puedes omitir ipAddresses para permitir la asignación dinámica.

Usa la API de cloud-init para inicializar las VMs

La API de cloud-init es una forma estándar de inicializar una VM en la nube. Usa cloud-init para configurar archivos, usuarios y otros aspectos de tu VM.

Para garantizar la compatibilidad, valida las rutinas de inicio de cloud-init. Antes de usar la configuración en producción, aplícala a una VM de prueba para asegurarte de que se inicialice correctamente.

Los siguientes ejemplos son genéricos y deben probarse en tu entorno.

Automatiza la configuración de la VM con datos del usuario de cloud-init

El entorno de ejecución de VM en GDC admite datos del usuario de cloud-init para las VMs de Linux. Puedes especificar los datos del usuario como una cadena de texto sin formato, una cadena codificada en base64 o haciendo referencia a un secreto de Kubernetes.

Para asegurarte de que tu VM se inicialice correctamente, valida todas las configuraciones de datos del usuario antes de implementarlas en un entorno de producción.

En el siguiente ejemplo, se muestra un manifiesto de VirtualMachine que incluye datos del usuario de cloud-init en texto sin encriptar para ejecutar un comando cuando se inicia la VM:

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
metadata:
  name: VM_NAME
spec:
  compute:
    cpu:
      vcpus: 2
    memory:
      capacity: 4Gi
  osType: Linux
  cloudInit:
    noCloud:
      userData: |
        #cloud-config
        runcmd:
          - echo "Hello World" > /tmp/hello.txt

Reemplaza VM_NAME por el nombre de la máquina virtual.

Para crear la VM con datos de cloud-init, guarda el manifiesto como vm-cloud-init.yaml y aplícalo a tu clúster ejecutando el comando kubectl apply:

kubectl apply -f vm-cloud-init.yaml

Soluciona problemas de cloud-init

Si tienes problemas con cloud-init, consulta los registros dentro de la VM. Por lo general, puedes encontrar los registros en los siguientes directorios:

  • /var/log/cloud-init.log
  • /var/log/cloud-init-output.log

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

Puedes crear una máquina virtual (VM) de Windows que se inicie desde una imagen ISO con el entorno de ejecución de VM en GDC. Esta capacidad te permite migrar aplicaciones empresariales heredadas basadas en Windows, software especializado de terceros o sistemas de punto de venta personalizados directamente a tus clústeres conectados de Distributed Cloud.

Las imágenes que se usan para los discos de VM se importan desde un bucket de imágenes conectado a Distributed Cloud. Antes de crear los manifiestos, debes descargar la ISO de instalación de Windows y la ISO de los controladores de virtio de KubeVirt, y subirlas a tu bucket de imágenes. Te recomendamos que mantengas una copia verificada de la ISO de los controladores en un repositorio interno o que la transfieras previamente a Cloud Storage para garantizar compilaciones de máquina virtual confiables y repetibles.

Crea los manifiestos

Para arrancar desde una imagen ISO de Windows, necesitas los siguientes manifiestos:

  • Un objeto VirtualMachineDisk que contiene el archivo ISO de Windows.
  • Un VirtualMachineDisk que contiene los controladores virtio de KubeVirt para Windows.
  • Un VirtualMachineDisk vacío que servirá como disco de arranque en el que se instalará Windows.

En los siguientes ejemplos, se muestran los manifiestos de VirtualMachineDisk para los tres discos obligatorios.

En los manifiestos, reemplaza lo siguiente:

  • BUCKET_PROJECT_ID: Es el ID del proyecto en el que reside tu bucket de imágenes.
  • KSA_NAME: Es la cuenta de servicio de Kubernetes con permisos para leer desde el bucket.

El PVC size solicitado en los manifiestos siempre debe ser mayor o igual que el tamaño virtual exacto de la ISO.

Disco ISO de Windows

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachineDisk
metadata:
  name: windows-iso
spec:
  size: 10Gi
  storageClassName: robin-block-immediate
  diskType: cdrom
  source:
    gcs:
      url: gs://BUCKET_PROJECT_ID-vm-images/windows.iso
      serviceAccount: KSA_NAME

Disco de controladores VirtIO

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachineDisk
metadata:
  name: virtio-driver
spec:
  size: 1Gi
  storageClassName: robin-block-immediate
  diskType: cdrom
  source:
    gcs:
      url: gs://BUCKET_PROJECT_ID-vm-images/virtio-win.iso
      serviceAccount: KSA_NAME

Disco de arranque vacío

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachineDisk
metadata:
  name: windows-vm-boot-dv
spec:
  size: 40Gi
  storageClassName: robin-block-immediate

Crea los discos

Para crear estos discos, guarda los manifiestos VirtualMachineDisk y aplícalos a tu clúster ejecutando el comando kubectl apply:

kubectl apply -f windows-iso.yaml
kubectl apply -f virtio-driver.yaml
kubectl apply -f windows-vm-boot-dv.yaml

Crea una VM de Windows

Para crear una VM de Windows, crea un manifiesto que defina la VM y haga referencia a los discos. La VM se inicia desde el disco ISO para comenzar la instalación.

En el siguiente ejemplo, se muestra un manifiesto de VirtualMachine:

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
metadata:
  labels:
    kubevirt.io/vm: windows-vm
  name: windows-vm
spec:
  osType: Windows
  disks:
    - virtualMachineDiskName: windows-vm-boot-dv
      boot: true
    - virtualMachineDiskName: windows-iso
    - virtualMachineDiskName: virtio-driver
  compute:
    cpu:
      vcpus: 2
    memory:
      capacity: 4Gi
  interfaces:
    - name: eth0
      networkName: NETWORK_NAME
      default: true
      ipAddresses:
        - IP_ADDRESS/PREFIX

Para crear la VM, guarda el manifiesto como windows-vm.yaml y aplícalo a tu clúster con la ejecución del comando kubectl apply:

kubectl apply -f windows-vm.yaml

Conecta y completa la instalación

Para conectarte y completar la instalación, sigue estos pasos:

  1. Para conectarte a la VM con VNC, usa la herramienta virtctl o el complemento kubectl virt:

    virtctl vnc windows-vm
    

    O bien, si instalaste virtctl como un complemento de kubectl, haz lo siguiente:

    kubectl virt vnc windows-vm
    

    Para obtener más información sobre virtctl, consulta la documentación de KubeVirt.

  2. Sigue las instrucciones que muestra el instalador de Windows. Cuando se te solicite, selecciona Instalación personalizada.

  3. Cuando se te solicite, carga los controladores virtio para el almacenamiento y la red, y explora el disco virtio-driver adjunto.

  4. Completa la instalación.

Acceso a través del protocolo de escritorio remoto

Después de instalar y habilitar el protocolo de escritorio remoto (RDP) en el SO invitado, puedes acceder a la VM a través de RDP.

Como la máquina virtual está adjunta a una red L2, se puede acceder a ella directamente desde fuera del clúster con la dirección IP asignada (por ejemplo, 10.223.237.10). Conéctate a esta dirección IP en el puerto 3389 con un cliente RDP. Asegúrate de que se pueda acceder a la dirección IP interna de L2 desde tu máquina cliente a través de las reglas de enrutamiento y el firewall corporativo.

Crea una máquina virtual con asistencia de GPU

Completa los pasos que se describen en esta página para crear una máquina virtual configurada de acuerdo con los requisitos de tu empresa y, luego, completa los pasos en Configura una máquina virtual para usar recursos de GPU.

Referencia de especificaciones de máquinas virtuales

En la siguiente tabla, se describen los campos clave de la especificación de VirtualMachine. Usa estos campos cuando configures un manifiesto YAML de máquina virtual para aplicarlo a tu clúster con kubectl apply o cuando uses la opción Crear con YAML en la consola de Google Cloud .

Campo Descripción Obligatorio
apiVersion Debe ser vm.cluster.gke.io/v1. Obligatorio
kind Debe ser VirtualMachine. Obligatorio
metadata.name Es un nombre único para la máquina virtual. Obligatorio
metadata.namespace Es el espacio de nombres de Kubernetes en el que se ejecuta la VM. Obligatorio
spec.osType Es el tipo de sistema operativo invitado. Valores admitidos: Linux y Windows. Obligatorio
spec.guestEnvironment Configura el entorno de invitado. Si se omite, el entorno invitado se habilita de forma predeterminada. Para inhabilitarla, configúrala como {}. Opcional
spec.priorityClassName Es la clase de prioridad de la VM. Una prioridad más alta reduce la probabilidad de desalojo. Opcional
spec.compute Configura los recursos de procesamiento para la VM. Obligatorio
spec.compute.cpu.vcpus Cantidad de CPU virtuales que se asignarán. Los valores aceptados son del 1 al 96. Obligatorio
spec.compute.memory.capacity Capacidad de memoria, por ejemplo, 8Gi. Obligatorio
spec.interfaces Es la lista de interfaces de red de la VM. Obligatorio
spec.interfaces[].name Nombre de la interfaz, por ejemplo, eth0. Obligatorio
spec.interfaces[].networkName Es el nombre de la subred a la que se conectará, que se asigna a un recurso Network en el clúster. Obligatorio
spec.interfaces[].ipAddresses Son las direcciones IP estáticas que se asignarán a esta interfaz. Si la subred no tiene habilitado el DHCP, debes especificar una dirección IP estática. Opcional
spec.disks Es la lista de discos que se adjuntarán a la VM. Obligatorio
spec.disks[].virtualMachineDiskName Nombre del recurso VirtualMachineDisk. Obligatorio
spec.disks[].boot Se establece en true para el disco de arranque. Solo se puede marcar un disco como de arranque. Opcional

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.

Requisitos de red para el acceso directo

Para acceder a una máquina virtual directamente desde tu red local sin usar un servicio LoadBalancer de Kubernetes, debes configurar los componentes de redes lógicos y físicos. Distributed Cloud Connected administra automáticamente los recursos de red dentro del clúster, pero debes configurar la red externa y la interfaz de la VM.

  1. Configura una subred (VLAN): Crea una subred con un ID de VLAN específico con la API de Distributed Cloud Edge Network, usando gcloud o la API. Distributed Cloud Connected sincroniza automáticamente esta configuración con tu clúster. No es necesario que crees manualmente recursos de red de Kubernetes. Consulta Crea y administra subredes.

  2. Configura tu red local: Tu administrador de red debe configurar los routers y conmutadores físicos conectados a los servidores conectados de Distributed Cloud para que hagan lo siguiente:

    • Permite el ID de VLAN configurado en los puertos del conmutador (enlace troncal de VLAN).
    • Habilita el enrutamiento entre tu red local y la subred. Si el Protocolo de puerta de enlace fronteriza (BGP), un protocolo de enrutamiento dinámico, está configurado en los routers conectados de Distributed Cloud, estas rutas se anuncian automáticamente después de que se crea la subred. De lo contrario, debes configurar rutas estáticas en tus routers físicos para enrutar el tráfico del rango de IP (CIDR) de la subred a los nodos conectados de Distributed Cloud.
  3. Configura la interfaz de la VM: En la configuración de YAML de VirtualMachine, configura la VM para que use esta subred. Para ello, especifica el nombre de la red en el campo spec.interfaces. Para obtener más información, consulta la referencia de especificaciones de máquinas virtuales.

Obtén credenciales de acceso para VMs de Linux

Si aún no tienes credenciales para acceder a la máquina virtual, completa los pasos de esta sección para obtenerlas 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: // enabled by default; disable with guestEnvironment: {}
       accessManagement:
        enable: 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.
  4. Para verificar el estado de la solicitud de acceso, ejecuta el comando kubectl get:

    kubectl get vmar
    

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

  5. Accede a la máquina virtual con SSH. Si la máquina virtual está conectada a tu red local, accede a ella directamente con SSH:

    ssh USERNAME@VM_IP_ADDRESS -i PATH_TO_KEY

    Reemplaza lo siguiente:

    • USERNAME: Es el nombre de usuario con el que se accede, por ejemplo, el usuario configurado en el recurso VirtualMachineAccessRequest.
    • VM_IP_ADDRESS: Es la dirección IP de tu máquina virtual.
    • PATH_TO_KEY: Es la ruta de acceso a la clave SSH privada que corresponde a la clave pública generada en los pasos anteriores.

Usa RDP para acceder a una VM de Windows

Para acceder a una VM de Windows con el protocolo de escritorio remoto (RDP) desde tu red local, habilita el RDP en el SO invitado, asegúrate de que se pueda acceder a la VM a través de la red y configura las credenciales del usuario.

Requisitos previos

Habilita RDP en Windows: Se debe habilitar RDP en el SO invitado de Windows. Si RDP aún no está habilitado, usa una consola de Virtual Network Computing (VNC) para acceder directamente a la pantalla de la VM y habilitarlo. El comando kubectl virt vnc abre una ventana del visor gráfico en tu estación de trabajo local y requiere un cliente del visor de VNC, como Remote Viewer o VNC Viewer, instalado en tu estación de trabajo:

kubectl virt vnc VM_NAME -n NAMESPACE

Reemplaza lo siguiente:

  • VM_NAME: El nombre de tu VM de Windows.
  • NAMESPACE: Es el espacio de nombres de la VM.

Conéctate con RDP

  1. Para obtener la dirección IP de la VM, ejecuta el comando kubectl get:

    kubectl get vmi VM_NAME -n NAMESPACE -o jsonpath='{.status.interfaces[*].ipAddress}'

    Reemplaza lo siguiente:

    • VM_NAME: El nombre de tu VM de Windows.
    • NAMESPACE: Es el espacio de nombres de la VM.

    Toma nota de la dirección IP que pertenece a tu subred con enrutamiento del resultado.

  2. Usa un cliente RDP estándar, como Conexión a escritorio remoto en Windows o Remmina en Linux, para conectarte a la dirección IP recuperada en el puerto 3389.

  3. Usa el nombre de usuario y la contraseña para acceder.

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.

Cómo iniciar o detener una máquina virtual con la consola de Google Cloud

  1. En la consola de Google Cloud , ve a la página Clústeres.

    Ir a los clústeres

  2. Selecciona el proyecto Google Cloud de destino.

  3. (Opcional) Si aún no lo hiciste, accede al clúster de destino:

    1. En el panel de navegación de la izquierda, haz clic en Clusters.

    2. En la lista Clústeres administrados de Anthos, haz clic en el clúster de destino.

    3. En el panel de información del lado derecho, haz clic en ACCEDER.

    4. En el diálogo que aparece, selecciona tu método de autenticación preferido, ingresa tus credenciales y haz clic en ACCEDER.

  4. Ve a la página Virtual Machines.

    Ir a Virtual Machines

  5. En la lista de máquinas virtuales, selecciona las casillas de verificación de las máquina virtual de destino.

  6. En la parte superior de la página, haz clic en INICIAR o DETENER, según corresponda.

Visualiza el estado de una máquina virtual con la consola de Google Cloud

  1. En la consola de Google Cloud , ve a la página Clústeres.

    Ir a los clústeres

  2. Selecciona el proyecto Google Cloud de destino.

  3. (Opcional) Si aún no lo hiciste, accede al clúster de destino:

    1. En el panel de navegación de la izquierda, haz clic en Clusters.

    2. En la lista Clústeres administrados de Anthos, haz clic en el clúster de destino.

    3. En el panel de información del lado derecho, haz clic en ACCEDER.

    4. En el cuadro de diálogo emergente que aparece, selecciona tu método de autenticación preferido, ingresa tus credenciales y haz clic en ACCEDER.

  4. Ve a la página Virtual Machines.

    Ir a Virtual Machines

  5. Haz clic en la máquina virtual de destino.

  6. En la página que aparece, haz clic en las pestañas Detalles, Eventos y YAML para ver la información correspondiente sobre esta máquina virtual.

Modifica una máquina virtual

Para modificar una máquina virtual, debes borrarla y volver a crearla con la configuración actualizada.

Borra una máquina virtual con la consola de Google Cloud

  1. En la consola de Google Cloud , ve a la página Clústeres.

    Ir a los clústeres

  2. Selecciona el proyecto Google Cloud de destino.

  3. (Opcional) Si aún no lo hiciste, accede al clúster de destino:

    1. En el panel de navegación de la izquierda, haz clic en Clusters.

    2. En la lista Clústeres administrados de Anthos, haz clic en el clúster de destino.

    3. En el panel de información del lado derecho, haz clic en ACCEDER.

    4. En el diálogo que aparece, selecciona tu método de autenticación preferido, ingresa tus credenciales y haz clic en ACCEDER.

  4. Ve a la página Virtual Machines.

    Ir a Virtual Machines

  5. En la lista de máquinas virtuales, selecciona la casilla de verificación de la máquina virtual de destino.

  6. Haz clic en BORRAR en la parte superior de la página.

  7. En el diálogo de confirmación que aparece, ingresa el nombre de la máquina virtual y haz clic en BORRAR.

¿Qué sigue?