En esta página, se describe cómo administrar máquinas virtuales en servidores conectados de Google Distributed Cloud que ejecutan VM Runtime en Google Distributed Cloud. Antes de completar los pasos de esta página, debes conocer el entorno de ejecución de VM en GDC. Para obtener una lista de los sistemas operativos invitados compatibles, consulta Sistemas operativos invitados verificados para el entorno de ejecución de VM en GDC.
Para obtener información sobre cómo las máquinas virtuales son un componente esencial de la plataforma conectada de Distributed Cloud, consulta Extiende GKE Enterprise para administrar VMs perimetrales locales.
Los clústeres conectados de Distributed Cloud admiten webhooks de máquina virtual. Esto permite que Distributed Cloud Connected valide las solicitudes de los usuarios realizadas al servidor de la API de Kubernetes local. Las solicitudes rechazadas generan información detallada sobre el motivo del rechazo.
Configura Symcloud Storage
Los servidores conectados de Google Distributed Cloud usan Rakuten Symcloud Storage como solución de almacenamiento. Symcloud Storage es una solución de terceros que actúa como una capa de abstracción de almacenamiento local en cada nodo conectado de Distributed Cloud y pone su almacenamiento local a disposición de las cargas de trabajo que se ejecutan en otros nodos conectados de Distributed Cloud.
Symcloud Storage se implementa desde Google Cloud Marketplace y está sujeto a las condiciones que se indican allí. Google proporciona asistencia limitada para usar Symcloud Storage con Distributed Cloud conectado y puede contratar al proveedor externo para obtener asistencia. Las actualizaciones de software de Symcloud Storage se incluyen en las actualizaciones de software conectadas de Distributed Cloud.
Configura tu clúster conectado de Google Distributed Cloud de la siguiente manera para habilitar Symcloud Storage para máquinas virtuales:
Crea el espacio de nombres
robiniocon el siguiente comando:kubectl create ns robinio
Obtén el archivo de licencia de Symcloud Storage y aplícalo al clúster con el siguiente comando:
kubectl apply LICENSE_FILE
Verifica que Symcloud Storage esté en funcionamiento con el siguiente comando:
kubectl apply LICENSE_FILE
El comando muestra un resultado similar al siguiente:
Name: robin Namespace: Labels: app.kubernetes.io/instance=robin app.kubernetes.io/managed-by=robin.io app.kubernetes.io/name=robin Annotations: <none> API Version: manage.robin.io/v1 Kind: RobinCluster Metadata: … Spec: … Status: … Phase: Ready …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: Delete
Habilita la compatibilidad con el entorno de ejecución de VM en GDC en Distributed Cloud Connected
De forma predeterminada, la compatibilidad con máquina virtual del entorno de ejecución de VM en GDC está habilitada en Distributed Cloud Connected. Si necesitas habilitarlo de forma manual, completa los pasos de esta sección. En las instrucciones de esta sección, se supone que tienes un clúster de Distributed Cloud conectado que funciona correctamente. Para inhabilitar la compatibilidad con máquina virtual de VM Runtime en tu clúster de GDC, deshace los cambios que se describen en esta sección.
Para habilitar el entorno de ejecución de VM en el subsistema de máquina virtual de GDC, completa los siguientes pasos:
Modifica el recurso personalizado
VMRuntimecon el siguiente contenido y aplícalo a tu clúster:apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: annotations: baremetal.cluster.gke.io/vmrumtime-force-disable: "false" vm.cluster.gke.io/enable-vm-backup: "true" spec: enabled: true storage: defaultStorageClass: robin-block-immediate haPolicy: defaultRecoveryStrategy: Reschedule nodeHeartbeatInterval: 15s nodeMonitorGracePeriod: 55s
Este proceso suele tardar varios minutos en completarse.
Usa el siguiente comando para verificar que el recurso personalizado
VMRuntimese haya aplicado a tu clúster:kubectl get vmruntime
El comando muestra un resultado similar al siguiente ejemplo:
NAME AGE ENABLED READY PREFLIGHTCHECK vmruntime 5m true true trueModifica 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 de 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=v0.59.0-anthos1.28-gke.8 gcloud storage cp gs://anthos-baremetal-release/virtctl/${VERSION}/linux-amd64/virtctl/usr/local/bin/virtctl cd /usr/local/bin sudo ln -s virtctl kubectl-virt sudo chmod a+x virtctl cd -
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 máquina virtual
Completa los pasos de esta sección para crear un bucket de Cloud Storage para las imágenes de tu máquina virtual. Si ya tienes un repositorio de imágenes establecido, omite esta sección.
Completa los pasos en Crea buckets para crear un bucket.
Configura una cuenta de servicio y una clave para acceder al bucket con los siguientes comandos:
export PROJECT_ID=$(gcloud config get-value project) gcloud iam service-accounts create image-access gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:image-access@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer" \ gcloud iam service-accounts keys create ./image-access-gcr.json \ --iam-account="image-access@${PROJECT_ID}.iam.gserviceaccount.com"
Crea un secreto en el clúster para acceder al bucket. Si tu bucket es público, omite este paso. Este secreto debe existir en el mismo espacio de nombres que los discos de tu máquina virtual. Debes crear un secreto en cada espacio de nombres afectado.
kubectl create secret generic gcs-image-sa --from-file=creds-gcp.json=./image-access-gcr.json -n NAMESPACE
Reemplaza
CLUSTER_IDpor el nombre del espacio de nombres de destino.Almacena tus imágenes en el bucket.
Crea un disco de máquina virtual a partir de una imagen de máquina virtual
Completa los pasos de esta sección para crear un disco de máquina virtual a partir de una imagen de máquina virtual.
Crea un disco a partir de una imagen almacenada en Cloud Storage
Crea un disco de máquina virtual a partir de una máquina virtual almacenada en tu bucket de Cloud Storage aplicando la siguiente configuración a tu clúster:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME namespace: NAMESPACE spec: source: gcs: url: gs://{PROJECT_ID}-vm-images/IMAGE_FILE secretRef: gcs-image-sa size: DISK_SIZE storageClassName: robin-block-immediate
Reemplaza lo siguiente:
DISK_NAME: Es el nombre de este disco de máquina virtual.NAMESPACE: Es el espacio de nombres de destino.IMAGE_FILE: Es el nombre del archivo de imagen de la máquina virtual.DISK_SIZE: Es el tamaño de disco deseado. Este valor debe ser mayor que el 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 de disco existente
Sigue estos pasos para crear un disco de máquina virtual a partir de un disco o archivo de imagen de máquina virtual existente en tu clúster.
Aplica la siguiente configuración a tu clúster para crear el disco de destino:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: IMAGE_DISK_NAME namespace: NAMESPACE spec: source: virtualMachineDisk: name: EXISTING_DISK_NAME size: DISK_SIZE storageClassName: robin-block-immediate
Reemplaza lo siguiente:
IMAGE_DISK_NAME: Es el nombre de este disco de máquina virtual.NAMESPACE: Es el espacio de nombres de destino.EXISTING_DISK_NAME: Es el nombre del disco de máquina virtual existente.DISK_SIZE: Es el tamaño de disco deseado. Este valor debe ser igual o mayor que el tamaño del disco o archivo de imagen existente.
Puedes obtener el tamaño de tu disco o archivo de imagen existente con la herramienta
qemu-imgde la siguiente manera:qemu-img info EXISTING_DISK_NAME
Si no especificas un valor de
storageClassName, se usa el valor predeterminado especificado en el recursoVMRuntime.Crea un disco nuevo a partir de tu archivo de imagen existente aplicando la siguiente configuración a tu clúster:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME namespace: NAMESPACE spec: source: virtualMachineDisk: name: IMAGE_DISK_NAME size: DISK_SIZE storageClassName: robin-block-immediate
Reemplaza lo siguiente:
IMAGE_DISK_NAME: Es el nombre del disco de la máquina virtual que creaste en el paso anterior.NAMESPACE: Es el espacio de nombres de destino.DISK_SIZE: Es el tamaño de disco deseado. Debe ser igual al tamaño del disco de la máquina virtual que creaste en el paso anterior.
Cambia el tamaño del disco de destino al tamaño deseado con el siguiente comando:
kubectl edit gdisk DISK_NAME -n NAMESPACE
Reemplaza lo siguiente:
DISK_NAME: Es el nombre del disco de la máquina virtual que creaste en el paso anterior.NAMESPACE: Es el espacio de nombres de destino.
Modifica el valor de
spec.sizeen la configuración del disco y aplícalo a tu clúster.
Crea un disco vacío
Aplica la siguiente configuración a tu clúster para crear un disco de máquina virtual vacío:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME namespace: NAMESPACE spec: size: DISK_SIZE storageClassName: robin-block-immediate
Reemplaza lo siguiente:
DISK_NAME: Es el nombre de este disco de máquina virtual.NAMESPACE: Es el espacio de nombres de destino.DISK_SIZE: Es el tamaño de disco deseado en gibibytes. Este valor debe ser mayor que el 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 destinados a ilustrar configuraciones para diferentes situaciones. Para obtener información detallada sobre la configuración de máquinas virtuales, consulta Crea una VM con recursos de CPU y memoria específicos usando el entorno de ejecución de VM en GDC.
Crea una máquina virtual 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, 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 CREAR CON 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: my-vm-namespace spec: osType: Linux/Windows guestEnvironment: {} // comment out this line to enable guest environment for access management autoRestartOnConfigurationChange: true compute: cpu: vcpus: 6 memory: capacity: 8Gi interfaces: - name: eth0 networkName: network-410 ipAddresses: - 10.223.237.10/25 disks: - virtualMachineDiskName: my-boot-disk boot: true - virtualMachineDiskName: my-data-disk
Reemplaza lo siguiente:
DISK_NAME: Es el nombre de este disco de máquina virtual.NAMESPACE: Es el espacio de nombres de destino.
Crea una máquina virtual a partir de una imagen de disco óptico ISO
Para crear una máquina virtual a partir de una imagen de disco óptico ISO, completa los pasos que se indican en Crea una VM de Windows a partir de una imagen ISO en Google Distributed Cloud.
Crea una máquina virtual con asistencia de GPU
Completa los pasos 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
Completa los pasos de esta sección para obtener las credenciales necesarias para acceder a tu máquina virtual con la función de entorno invitado de Linux.
Aplica la siguiente configuración a tu clúster para habilitar el entorno invitado de Linux en la máquina virtual de destino:
kind: VirtualMachine metadata: name: my-virtual-machine namespace: my-vm-namespace spec: osType: Linux guestEnvironment: {} autoRestartOnConfigurationChange: true
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.
Crea una copia de seguridad de una máquina virtual
En esta sección, se describe cómo configurar tu entorno para crear copias de seguridad de tus cargas de trabajo de máquina virtual y cómo administrar tus copias de seguridad. Para habilitar esta función, comunícate con tu representante de Google.
Requisitos previos
Si aún no lo hiciste, crea el recurso personalizado
robin-block-immediatede tipoStorageClasscon el siguiente contenido y aplícalo a tu clúster:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: robin-block-immediate annotations: storageclass.kubernetes.io/is-default-class: "true" parameters: faultdomain: host replication: "3" blocksize: "512" provisioner: robin reclaimPolicy: Delete volumeBindingMode: Immediate
Si aún no lo hiciste, crea un recurso personalizado
robin-snapshotclassde tipoVolumeSnapshotClasscon el siguiente contenido y aplícalo a tu 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
Crea un repositorio de copias de seguridad en línea
Un repositorio de copias de seguridad en línea es una ubicación de almacenamiento en línea compatible con S3 para las copias de seguridad de tu máquina virtual. También almacena registros de copias de seguridad, planes de copias de seguridad y planes de restablecimiento, y sirve como destino para restablecer copias de seguridad de máquina virtual.
Completa los siguientes pasos para crear un repositorio de copias de seguridad en línea para tus máquinas virtuales:
Crea un bucket de Cloud Storage como se describe en Crea buckets.
Crea una cuenta de servicio y una clave para acceder al bucket con los siguientes comandos:
export PROJECT_ID=$(gcloud config get-value project) export SVC_ACCOUNT=backup-access gcloud iam service-accounts create $SVC_ACCOUNT gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:${SVC_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/backupdr.cloudStorageOperator" gcloud storage hmac create ${SVC_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com > hmac_temp_key_file awk 'NR==1{print "ACCESS_ID=" $NF} NR==2{print "SECRET=" $NF}' < hmac_temp_key_file > hmac_key_file
Configura el secreto para acceder al bucket de copia de seguridad con los siguientes comandos:
source ./hmac_key_file kubectl create secret generic SECRET_NAME \ --from-literal=access-key=$SECRET \ --from-literal=access-key-id=$ACCESS_ID -n NAMESPACE
Reemplaza lo siguiente:
SECRET_NAME: Es un nombre descriptivo para este secreto.NAMESPACE: Es el espacio de nombres de destino.
Crea el recurso
BackupRepositoryaplicando la siguiente configuración a tu clúster:apiVersion: backup.gdc.goog/v1 kind: BackupRepository metadata: name: "REPOSITORY_NAME" spec: secretReference: namespace: NAMESPACE name: gcs-hmac-secret endpoint: "https://storage.googleapis.com" type: "S3" s3Options: bucket: "BUCKET_NAME" region: "REGION" forcePathStyle: true importPolicy: "ReadWrite" # Force attachment for convenience. force: true
Reemplaza lo siguiente:
REPOSITORY_NAME: Es un nombre descriptivo para el repositorio.BUCKET_NAME: Es el nombre del bucket de copia de seguridad.NAMESPACE: Es el espacio de nombres de destino.REGION: Es la región de Google Cloud en la que se creó el clúster de Distributed Cloud de destino.
Verifica que el clúster pueda acceder al repositorio de copias de seguridad con el siguiente comando:
kubectl get BackupRepository
Crea un repositorio de copias de seguridad local
Un repositorio de copias de seguridad local es una ubicación de almacenamiento compatible con S3 para las copias de seguridad de tu máquina virtual que reside de forma local en tu clúster conectado de Distributed Cloud. Un repositorio de copias de seguridad local es funcionalmente idéntico a un repositorio de copias de seguridad en línea.
Genera una clave de encriptación AES256 para usarla en la encriptación de la configuración a nivel de la aplicación:
openssl rand -base64 32
El comando genera una clave aleatoria de 256 bits codificada en
base64. Por ejemplo:aBcD_eFgH1iJkLmN0pQrStUvWxFyZgAhIjKlMnOpQ=Codifica dos veces la clave para usarla como carga útil en la configuración de YAML del recurso
BackupRepository:echo -n "AES_KEY" | base64
Reemplaza
AES_KEYpor la clave AES256 codificada enbase64que generaste en el paso anterior. Almacena esta clave en un archivo local.Configura el secreto para acceder al repositorio de copias de seguridad con los siguientes comandos:
kubectl create secret generic SECRET_NAME \ --from-literal=access-key=ENCODED_AES_KEY \ --namespace NAMESPACE
Reemplaza lo siguiente:
ENCODED_AES_KEY: Es la clave AES256 con codificación doble que generaste en el paso anterior.SECRET_NAME: Es un nombre descriptivo para este secreto.NAMESPACE: Es el espacio de nombres de destino.
Configura
BackupRepositoryaplicando la siguiente configuración a tu clúster:apiVersion: backup.gdc.goog/v1 kind: BackupRepository metadata: name: REPOSITORY_NAME spec: force: true importPolicy: ReadWrite localOptions: encryptionKey: name: SECRET_NAME namespace: NAMESPACE type: Local
Verifica que el clúster pueda acceder al repositorio de copias de seguridad con el siguiente comando:
kubectl get BackupRepository
Reemplaza lo siguiente:
REPOSITORY_NAME: Es un nombre descriptivo para el repositorio.SECRET_NAME: Es el nombre del Secret de Kubernetes que creaste en el paso anterior.NAMESPACE: Es el espacio de nombres en el que creaste el secreto de Kubernetes.
Crear un plan de creación de copias de seguridad
Un plan de copia de seguridad define la programación automatizada para ejecutar la copia de seguridad de tu máquina virtual. Crea un recurso VirtualMachineBackupPlan con el siguiente contenido y aplícalo a tu clúster:
apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachineBackupPlan
metadata:
name: BACKUP_PLAN_NAME
namespace: NAMESPACE
spec:
backupConfig:
backupRepository: REPOSITORY_NAME
backupScope:
selectedVirtualMachines:
- resourceName: VM_NAME
volumeStrategy: LocalSnapshotOnly
backupSchedule:
cronSchedule: "CRON_SCHEDULE"
paused: PAUSED
retentionPolicy:
backupDeleteLockDays: PLAN_LOCK_LENGTH
backupRetainDays: 4
locked: RETENTION_POLICY_LOCKED
numBackupsToRetain: BACKUPS_RETAINED
Reemplaza lo siguiente:
BACKUP_PLAN_NAME: Es un nombre descriptivo para el plan de copia de seguridad.NAMESPACE: Es el nombre del espacio de nombres de destino.REPOSITORY_NAME: Es el repositorio de copias de seguridad de destino.CRON_SCHEDULE: Programación estándar decronpara ejecutar las copias de seguridad. El intervalo mínimo permitido entre las copias de seguridad es de 10 minutos.PAUSED: Especifica si este plan de copia de seguridad está pausado. Los valores válidos sontrueyfalse.VM_NAME: Especifica una carga de trabajo de máquina virtual para crear una copia de seguridad a través de este plan de copia de seguridad. Puedes especificar varios recursos de máquina virtual por plan de copia de seguridad.- *
BACKUP_LOCK_LENGTH: Especifica la cantidad de días después de la creación de la copia de seguridad durante los cuales no se puede borrar. - *
BACKUP_RETENTION_LENGTH: Especifica la cantidad de días que se retendrá esta copia de seguridad. Cuando vence el período de retención, se borra la copia de seguridad. Si se omite, el valor predeterminado es4. - *
RETENTION_POLICY_LOCKED: Especifica si la política de retención de este plan de copia de seguridad está bloqueada. Los valores válidos sontrueyfalse. - *
BACKUPS_RETAINED/var>: Especifica la cantidad de copias de seguridad que se retendrán en este plan de copia de seguridad. Cuando se alcanza este umbral, las copias de seguridad se borran en orden, desde la más antigua hasta la más reciente.
Enumera los planes de copias de seguridad existentes
Para enumerar los planes de copia de seguridad existentes, usa el siguiente comando:
kubectl get VirtualMachineBackupPlans -A
El comando muestra un resultado similar al siguiente:
NAMESPACE NAME LASTBACKUPTIME LASTBACKUPSTATE NEXTBACKUPTIME PAUSED
vm-workloads bkp-template-vm-windows-vm-local
vm-workloads sched-snapshotonly-bkp-plan-10min false
Crea una copia de seguridad manual de una máquina virtual
Completa los pasos de esta sección para crear una copia de seguridad manual de una máquina virtual.
Crea un recurso
VirtualMachineBackupPlanTemplateen el espacio de nombres en el que reside la máquina virtual de destino aplicando la siguiente configuración al clúster:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineBackupPlanTemplate metadata: name: TEMPLATE_NAME namespace: NAMESPACE spec: backupRepository: REPOSITORY_NAME
Reemplaza lo siguiente:
TEMPLATE_NAME: Es un nombre descriptivo para esta plantilla de copia de seguridad.REPOSITORY_NAME: Es el nombre del repositorio de copias de seguridad de destino.NAMESPACE: Es el espacio de nombres de destino.
Para activar la copia de seguridad, crea un recurso
VirtualMachineBackupRequestcon la siguiente configuración y aplícalo al clúster:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineBackupRequest metadata: name: BACKUP_REQUEST_NAME namespace: NAMESPACE spec: vmBackupPlanTemplate: TEMPLATE_NAME virtualMachine: VM_NAME vmBackupName: BACKUP_NAME
Reemplaza lo siguiente:
BACKUP_REQUEST_NAME: Es un nombre descriptivo para esta solicitud de copia de seguridad.TEMPLATE_NAME: Es el nombre de la plantilla de copia de seguridad que creaste en el paso anterior.NAMESPACE: Es el nombre del espacio de nombres de destino.VM_NAME: Es el nombre de la máquina virtual de destino.BACKUP_NAME: Es un nombre descriptivo para esta copia de seguridad.
Verifica la integridad de la copia de seguridad con el siguiente comando:
kubectl get vmbackup BACKUP_NAME -n NAMESPACE
Reemplaza lo siguiente:
BACKUP_NAME: Es el nombre de la copia de seguridad de destino.NAMESPACE: Es el espacio de nombres de destino.
El comando muestra un resultado similar al siguiente:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineBackup metadata: creationTimestamp: "2024-04-09T17:57:44Z" finalizers: - vm.cluster.gke.io/virtual-machine-backup-finalizer generation: 1 name: vmt13-backup-0409-2 namespace: default ownerReferences: - apiVersion: backup.gdc.goog/v1 kind: Backup name: vmt13-backup-0409-2 uid: 0ee0b92c-1e27-48cc-8f8f-5606ea925e88 resourceVersion: "36192759" uid: e471f8c7-637c-485f-acda-108017a5638f spec: backupConfig: backupRepository: default backupScope: selectedVirtualMachines: - resourceName: vm-t13 volumeStrategy: Portable vmBackupPlan: MyVmPlan-vm-vm-t13-portable status: backedUpVirtualMachineDisks: - vm-t13-boot-disk - vm-t13-data-disk backedUpVirtualMachines: - vm-t13 backup: vmt13-backup-0409-2 backupStatus: clusterMetadata: k8sVersion: "1.28" completeTime: "2024-04-09T18:07:36Z" createTime: "2024-04-09T17:57:44Z" jobCreated: true resourceCount: 849 sizeBytes: 1948672 state: Succeeded
Enumera las copias de seguridad de máquina virtual
Para ver las copias de seguridad de máquina virtual existentes, usa el siguiente comando:
kubectl get VirtualMachineBackups -A
El comando muestra un resultado similar al siguiente:
NAMESPACE NAME STATE CREATETIME
vm-workloads vm-backup Succeeded 2025-04-08T04:37:32Z
Restablece una máquina virtual a partir de una copia de seguridad
Completa los pasos de esta sección para restablecer una máquina virtual a partir de una copia de seguridad.
Para activar el proceso de restauración, crea un recurso
VirtualMachineRestoreRequestcon la siguiente configuración y aplícalo a tu clúster:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineRestoreRequest metadata: name: restore-req namespace: NAMESPACE spec: vmBackup: BACKUP_NAME restoreName: RESTORE_NAME restoredResourceName: RESTORED_VM_NAME restoredResourceDescription: RESTORE_DESCRIPTION
Reemplaza lo siguiente:
BACKUP_NAME: Es el nombre de la copia de seguridad de destino.RESTORE_NAME: Es un nombre descriptivo para esta operación de restablecimiento.NAMESPACE: Es el espacio de nombres de destino.RESTORED_VM_NAME: Es el nombre que se le asignó a la máquina virtual durante la restauración. Este nombre no debe entrar en conflicto con ninguna máquina virtual que ya esté presente en el clúster.RESTORE_DESCRIPTION: Es una descripción de esta operación de restablecimiento.
Usa el siguiente comando para verificar el progreso de la operación de restablecimiento:
kubectl get virtualmachinerestores.vm.cluster.gke.io RESTORE_NAME -n NAMESPACE
Reemplaza lo siguiente:
RESTORE_NAME: Es el nombre de la operación de restablecimiento de destino.NAMESPACE: Es el espacio de nombres de destino.
El comando muestra un resultado similar al siguiente:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineRestore metadata: creationTimestamp: "2024-04-09T18:09:51Z" finalizers: - vm.cluster.gke.io/virtual-machine-restore-finalizer generation: 1 name: vmt13-restore-0409-2-1 namespace: default ownerReferences: - apiVersion: backup.gdc.goog/v1 kind: Restore name: vmt13-restore-0409-2-1 uid: 4ce1ca83-eba0-4cc3-bad3-af6cf9185d7d resourceVersion: "36194596" uid: aba50b59-e18d-4687-ad11-47baa45478b4 spec: targetVirtualMachineDisks: - vm-t13-boot-disk - vm-t13-data-disk targetVirtualMachines: - vm-t13 vmBackup: vmt13-backup-0409-2 status: restore: vmt13-restore-0409-2-1 restoreStatus: completeTime: "2024-04-09T18:10:00Z" jobCreated: true resourcesRestoredCount: 5 restoredVolumesCount: 2 startTime: "2024-04-09T18:09:51Z" state: Succeeded stateReason: restore is successful
Cómo ver las operaciones de restablecimiento
Para ver las operaciones de restablecimiento que se iniciaron hasta la fecha, usa el siguiente comando:
kubectl get VirtualMachineRestore.vm.cluster.gke.io -A
El comando muestra un resultado similar al siguiente:
NAMESPACE NAME STARTTIME RESTORE STATE
vm-workloads restore-1 2025-04-08T04:41:04Z restore-1 Succeeded
Borra una copia de seguridad de una máquina virtual
Para borrar una copia de seguridad de una máquina virtual, crea un recurso VirtualMachineDeleteBackupRequest con la siguiente configuración y aplícalo a tu clúster:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDeleteBackupRequest metadata: name: vmdbr namespace: BACKUP_NAME spec: vmBackup: NAMESPACE
Reemplaza lo siguiente:
NAMESPACE: Es el nombre del espacio de nombres de destino.BACKUP_NAME: Es el nombre de la copia de seguridad de destino.
Visualiza los registros de auditoría de la zona de pruebas de AppArmor
Distributed Cloud conectado automáticamente aísla en un entorno de pruebas las cargas de trabajo de máquina virtual con políticas de AppArmor en audit-mode. Cuando se produce un incumplimiento de política, se emite una entrada de registro de auditoría.
Por ejemplo:
{
"jsonPayload": {
"_SOURCE_REALTIME_TIMESTAMP": "1734596844149104",
"SYSLOG_TIMESTAMP": "Dec 19 08:27:24 ",
"MESSAGE": "type=AVC msg=audit(1734596844.148:27742): apparmor=\"ALLOWED\" operation=\"open\" profile=\"virt-launcher-audit\" name=\"/etc/libvirt/virtlogd.conf\" pid=182406 comm=\"virtlogd\" requested_mask=\"r\" denied_mask=\"r\" fsuid=0 ouid=0 FSUID=\"root\" OUID=\"root\"",
"PRIORITY": "6",
...
"SYSLOG_RAW": "<14>Dec 19 08:27:24 audisp-syslog: type=AVC msg=audit(1734596844.148:27742): apparmor=\"ALLOWED\" operation=\"open\" profile=\"virt-launcher-audit\" name=\"/etc/libvirt/virtlogd.conf\" pid=182406 comm=\"virtlogd\" requested_mask=\"r\" denied_mask=\"r\" fsuid=0 ouid=0 FSUID=\"root\" OUID=\"root\"\n",
"SYSLOG_IDENTIFIER": "audisp-syslog",
"_GID": "0",
},
"timestamp": "2024-12-19T08:27:24.149109Z",
"labels": {
"gke.googleapis.com/log_type": "system"
},
"receiveTimestamp": "2024-12-19T08:27:24.721842807Z"
...
...
}
¿Qué sigue?
- Administra máquinas virtuales en bastidores de Distributed Cloud Connected
- 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