En esta página, se describe cómo administrar máquinas virtuales en tu implementación de Google Distributed Cloud conectado que ejecuta VM Runtime on Google Distributed Cloud. Antes de completar los pasos de esta página, debes conocer VM Runtime on GDC. Para obtener una lista de los sistemas operativos invitados compatibles, consulta Sistemas operativos invitados verificados para VM Runtime on 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.
Crea el espacio de nombres
robin-admincon el siguiente comando:kubectl create ns robin-admin
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_FILEpor la ruta de acceso al archivo de licencia.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 …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
Crea la clase de instantánea de volumen
robin-snapshotclassaplicando 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: DeleteModifica el
storageprofilepara la clase de almacenamientorobin-block-immediatecon 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 de Distributed Cloud. Para instalar la herramienta, completa los siguientes pasos:
Instala la herramienta de cliente
virtctlcomo un complementokubectl: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 -
Verifica que el complemento
virtesté instalado:kubectl plugin list
Si el complemento se instaló correctamente, el resultado del comando mostrará
kubectl-virtcomo 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.
Completa los pasos en Crea buckets para crear un bucket.
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.
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.
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.
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 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_POOLEn el resultado, toma nota de los siguientes valores:
IDENTITY_PROVIDER: Es el proveedor de identidad de este clúster.WORKLOAD_IDENTITY_POOL: Es el nombre del grupo de identidades para cargas de trabajo asociado con tu flota. El nombre tiene el formatoFLEET_PROJECT_ID.svc.id.goog. Para obtener más información sobre el comando de este paso, consulta Usa la federación de identidades para cargas de trabajo de la flota en aplicaciones.
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 enNone, 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--conditiony se establezca en un valor distinto deNone.
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 qué clústeres de la flota pueden 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 plantea 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:
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
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 y el nombre completos del archivo de imagen de la máquina virtual. Haz clic con el botón derecho en la imagen en la consola de Google Cloud y seleccionaCopiar URI de gsutilpara 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 valorvirtual-sizedel archivo de imagen de la máquina virtual. Puedes encontrar este valor con el comandoqemu-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 valorvirtual-sizedel archivo de imagen de la máquina virtual. Puedes encontrar este valor con el comandoqemu-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 tu implementación de 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 específicos de CPU y memoria 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 Distributed Cloud 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:
En la consola de Google Cloud , ve a la página Clústeres.
Selecciona el proyecto Google Cloud de destino.
(Opcional) Si aún no lo hiciste, accede al clúster de destino:
En el panel de navegación de la izquierda, haz clic en Clusters.
En la lista Clústeres administrados de Anthos, haz clic en el clúster de destino.
En el panel de información del lado derecho, haz clic en ACCEDER.
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.
Ve a la página Virtual Machines.
Haz clic en CREAR.
En la sección Básicos, haz lo siguiente:
En el campo Nombre, ingresa un nombre significativo para la máquina virtual.
En el campo Seleccionar clúster, selecciona el clúster de destino para la máquina virtual.
En el campo Espacio de nombres, selecciona el espacio de nombres de destino.
En el campo Tipo de SO, selecciona el sistema operativo de destino.
(Opcional) Si deseas agregar una o más etiquetas a la configuración de esta máquina virtual, haz clic en AGREGAR ETIQUETA.
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.
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.
En la sección Red, haz lo siguiente:
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.
Selecciona el tipo de red correspondiente en la lista desplegable Tipo de red.
Especifica si se permite el acceso externo a esta interfaz de red con la casilla de verificación Allow external access. Si habilitas esta opción, debes ingresar una lista separada por comas de puertos para exponerlos de forma externa en el campo Exposed ports.
Si quieres agregar una o más interfaces de red secundarias a esta máquina virtual, haz clic en AGREGAR UNA INTERFAZ DE RED.
Haz clic en SIGUIENTE.
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.
En la sección Firmware, haz lo siguiente:
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.
Especifica un número de serie para esta máquina virtual en el campo Serie.
Especifica un identificador único universal (UUID) para esta máquina virtual en el campo UUID.
En la sección Cloud-init, haz lo siguiente:
Especifica un valor secreto de datos de red en el campo Secret de datos de red.
Especifica un valor secreto de datos del usuario en el campo Secreto de datos del usuario.
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:
En la consola de Google Cloud , ve a la página Clústeres.
Selecciona el proyecto Google Cloud de destino.
(Opcional) Si aún no lo hiciste, accede al clúster de destino:
En el panel de navegación de la izquierda, haz clic en Clusters.
En la lista Clústeres administrados de Anthos, haz clic en el clúster de destino.
En el panel de información del lado derecho, haz clic en ACCEDER.
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.
Ve a la página Virtual Machines.
Haz clic en CREATE WITH YAML.
En el campo Seleccionar clúster, selecciona el clúster de destino para la máquina virtual.
Pega la configuración de la máquina virtual en formato YAML en el campo YAML.
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:
kind: VirtualMachine metadata: name: my-virtual-machine namespace: NAMESPACE spec: osType: Linux/Windows guestEnvironment: {} // comment out this line to enable guest environment for access management priorityClassName: PRIORITY_CLASS compute: cpu: vcpus: 6 memory: capacity: 8Gi interfaces: - name: eth0 networkName: network-410 ipAddresses: - 10.223.237.10/25 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. Usakubectl get priorityclasspara obtener una lista de las clases de prioridad admitidas. Te recomendamos que asignes una clase de prioridad que corresponda a un valor de prioridad entre5,001,000y1,000,000,000. Los valores de prioridad más altos reducen la probabilidad de desalojo de la máquina virtual cuando el sistema está sobrecargado. Si se omite, la máquina virtual obtiene el valor de prioridad más bajo predeterminado.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,4Gio8Gi.ipAddresses: Opcional. Proporciona la asignación de IP estática para la máquina virtual. Si la red L2 subyacente admite DHCP externo, puedes omitiripAddressespara 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 tus rutinas de inicio de cloud-init, específicamente los datos de red, con la configuración de red conectada de Distributed Cloud. Antes de usar la configuración en producción, aplícala a una VM de prueba para asegurarte de que se inicialice correctamente y configure la red de forma adecuada.
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
VM Runtime en GDC admite datos del usuario cloud-init para VMs de Linux. Puedes especificar datos del usuario como una cadena de texto sin formato, una cadena codificada en base64 o haciendo referencia a un Secret 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, verifica 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
Si cloud-init falla antes de que se inicie la VM, posiblemente debido a que falta un secreto de Kubernetes o a que la conexión del volumen está mal formada, no se iniciará el SO invitado. Como paso preliminar para solucionar problemas, inspecciona el estado del recurso de la VM con el comando kubectl describe virtualmachine VM_NAME y los eventos de conexión del volumen del Pod con el comando kubectl describe pod -l kubevirt.io/vm=VM_NAME.
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
VirtualMachineDiskque contiene el archivo ISO de Windows. - Un
VirtualMachineDiskque contiene los controladoresvirtiode KubeVirt para Windows. - Un
VirtualMachineDiskvací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-410 default: true ipAddresses: - 10.223.237.10/25
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:
Para conectarte a la VM con VNC, usa la herramienta
virtctlo el complementokubectl virt:virtctl vnc windows-vmO bien, si instalaste
virtctlcomo un complemento dekubectl, haz lo siguiente:kubectl virt vnc windows-vmPara obtener más información sobre
virtctl, consulta la documentación de KubeVirt.Sigue las instrucciones que muestra el instalador de Windows. Cuando se te solicite, selecciona Instalación personalizada.
Cuando se te solicite, carga los controladores
virtiopara el almacenamiento y la red, y explora el discovirtio-driveradjunto.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á conectada 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 firewall y enrutamiento de tu empresa.
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 que se indican en Configura una máquina virtual para usar recursos de GPU.
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
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.
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
Genera un archivo
id_rsa.pubque contenga un par de claves SSH con el siguiente comando:ssh-keygen -t rsaCrea un recurso
VirtualMachineAccessRequestaplicando 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 archivoid_rsa.pubque generaste en el paso anterior.
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.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.
Cómo iniciar o detener una máquina virtual con la consola de Google Cloud
En la consola de Google Cloud , ve a la página Clústeres.
Selecciona el proyecto Google Cloud de destino.
(Opcional) Si aún no lo hiciste, accede al clúster de destino:
En el panel de navegación de la izquierda, haz clic en Clusters.
En la lista Clústeres administrados de Anthos, haz clic en el clúster de destino.
En el panel de información del lado derecho, haz clic en ACCEDER.
En el diálogo que aparece, selecciona tu método de autenticación preferido, ingresa tus credenciales y haz clic en ACCEDER.
Ve a la página Virtual Machines.
En la lista de máquinas virtuales, selecciona las casillas de verificación de las máquina virtual de destino.
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
En la consola de Google Cloud , ve a la página Clústeres.
Selecciona el proyecto Google Cloud de destino.
(Opcional) Si aún no lo hiciste, accede al clúster de destino:
En el panel de navegación de la izquierda, haz clic en Clusters.
En la lista Clústeres administrados de Anthos, haz clic en el clúster de destino.
En el panel de información del lado derecho, haz clic en ACCEDER.
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.
Ve a la página Virtual Machines.
Haz clic en la máquina virtual de destino.
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
En la consola de Google Cloud , ve a la página Clústeres.
Selecciona el proyecto Google Cloud de destino.
(Opcional) Si aún no lo hiciste, accede al clúster de destino:
En el panel de navegación de la izquierda, haz clic en Clusters.
En la lista Clústeres administrados de Anthos, haz clic en el clúster de destino.
En el panel de información del lado derecho, haz clic en ACCEDER.
En el diálogo que aparece, selecciona tu método de autenticación preferido, ingresa tus credenciales y haz clic en ACCEDER.
Ve a la página Virtual Machines.
En la lista de máquinas virtuales, selecciona la casilla de verificación de la máquina virtual de destino.
Haz clic en BORRAR en la parte superior de la página.
En el diálogo de confirmación que aparece, ingresa el nombre de la máquina virtual y haz clic en BORRAR.
¿Qué sigue?
- Implementa cargas de trabajo en Distributed Cloud conectado
- Administra cargas de trabajo de GPU
- Administrar zonas
- Administrar máquinas
- Administrar clústeres
- Administra grupos de nodos