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.
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 a 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 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_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 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:
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 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 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 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:
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 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.
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, especifica un valor secreto de datos del usuario en el campo User data secret.
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. Para obtener detalles sobre los campos YAML admitidos, consulta la referencia de especificaciones de máquinas virtuales.
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. Usakubectl get priorityclasspara 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,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 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
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_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:
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á 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.
Configura una subred (VLAN): Crea una subred con un ID de VLAN específico con la API de Distributed Cloud Edge Network, usando
gcloudo 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.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.
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 campospec.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.
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.
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.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 recursoVirtualMachineAccessRequest.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
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.
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.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
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