Este documento está dirigido a los propietarios de aplicaciones que ejecutan Google Distributed Cloud. En este documento se explica cómo crear y gestionar recursos de disco para máquinas virtuales que usan VM Runtime en GDC.
Antes de empezar
Para completar este documento, necesitas tener acceso a los siguientes recursos:
- Acceso a un clúster de Google Distributed Cloud versión 1.12.0 (
anthosBareMetalVersion: 1.12.0
) o posterior. Puedes usar cualquier tipo de clúster que pueda ejecutar cargas de trabajo. Si es necesario, prueba Google Distributed Cloud en Compute Engine o consulta la descripción general de la creación de clústeres. - La herramienta de cliente
virtctl
instalada como complemento dekubectl
. Si es necesario, instala la herramienta de cliente virtctl.
Crear una VM con un disco conectado
Cuando creas una VM, puedes adjuntar un disco de arranque o de datos, crear un disco a partir de una imagen (incluido el disco de arranque) o crear un disco en blanco.
Disco en blanco
En este caso, creas un disco en blanco y lo adjuntas a la VM. Este escenario le permite crear un disco de datos para almacenar datos de aplicaciones.
Crea un manifiesto que defina un
VirtualMachineDisk
y unVirtualMachine
, comomy-vm.yaml
, en el editor que prefieras:nano my-vm.yaml
Copia y pega la siguiente definición de YAML:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: DISK_NAME
Haz los cambios siguientes:
.DISK_NAME
: el nombre del disco en blanco que vas a crear y adjuntar a tu VM.VM_NAME
: el nombre de la VM que vas a crear.En este ejemplo, se crea un disco
10Gi
(10 gibibytes) en blanco llamadoDISK_NAME
. En la secciónspec.disks
de la VM, también debes adjuntar un disco de arranque, como el de una imagen, tal como se muestra en la sección siguiente.
Guarda y cierra el archivo de manifiesto en el editor.
Crea la VM y el disco con
kubectl
:kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
Sustituye
KUBECONFIG
por la ruta al archivo kubeconfig del clúster.
Desde una imagen
En este caso, crearás un disco a partir de una imagen y lo asociarás a la VM. Este escenario te permite crear un disco de arranque, por ejemplo, a partir de una imagen. También puedes crear y adjuntar discos de datos a partir de una imagen.
Fuentes de imágenes admitidas
VM Runtime en GDC permite usar una gran variedad de formatos de imagen y admite tres tipos de fuentes de imagen que se pueden especificar en la especificación VirtualMachineDisk
. En cada uno de los siguientes ejemplos se crea un disco de 20 gibibytes a partir de una fuente de imagen admitida diferente.
Protocolo de transferencia de hipertexto (HTTP)
En el siguiente ejemplo de
VirtualMachineDisk
se muestra la estructura básica de una fuente de imagen HTTP. El campourl
debe contener una URL HTTP o HTTPS.apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: my-disk spec: source: http: url: https://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img size: 20GiB storageClassName: local-shared
Cloud Storage
En el siguiente ejemplo se muestra cómo crear un disco a partir de una imagen de un segmento de Cloud Storage. Si las credenciales predeterminadas de la aplicación en la máquina no son suficientes para acceder a la URL de Cloud Storage, debes proporcionar credenciales. En el ejemplo siguiente,
my-gcs
es un secreto que contiene una clave de cuenta de servicio codificada en base64.apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: my-disk spec: source: gcs: url: gs://kubevirt-ci-vm-images/rhel8.2/rhel8_2_cloud.qcow2 secretRef: my-gcs size: 20GiB storageClassName: local-shared
Si has usado claves de cuentas de servicio descargadas para crear tu clúster, puedes usar la clave de cuenta de servicio de Artifact Registry para acceder a Cloud Storage. Si quieres crear una cuenta de servicio independiente para acceder a Cloud Storage, consulta el artículo Configurar una cuenta de servicio que pueda acceder a un segmento de Cloud Storage.
Usa el siguiente comando para crear un secreto de Kubernetes a partir del archivo de clave de cuenta de servicio descargado:
kubectl create secret generic SECRET_NAME --from-file=KEY_FILE --namespace default \ --kubeconfig KUBECONFIG
Haz los cambios siguientes:
SECRET_NAME
: nombre del secreto.KEY_FILE
: ruta al archivo JSON de la clave de cuenta de servicio descargado. Por ejemplo,bmctl-workspace/.sa-keys/my-project-anthos-baremetal-gcr.json
.KUBECONFIG
: ruta al archivo kubeconfig del clúster.
Para obtener más información sobre cómo usar las credenciales para acceder a Cloud Storage, consulta Crear y usar credenciales para importar imágenes de Cloud Storage.
Ejemplo de registro de contenedor
Se admiten los registros de contenedores que cumplen la distribución-spec de Open Container Initiative (OCI). En el siguiente ejemplo se crea un disco a partir de una imagen almacenada en un registro de Docker.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: my-disk spec: source: registry: url: docker://kubevirt/fedora-cloud-registry-disk-demo size: 20GiB storageClassName: local-shared
Formatos de imagen válidos
Puedes usar cualquiera de los siguientes formatos de imagen al crear un disco a partir de una imagen:
- Archivo GNU zip (gzip) (
.gz
) - RAW (
.raw
,.img
) - Imagen de disco de copia en escritura de QEMU versión 2 (qcow2) (
.qcow2
) - Archivo comprimido XZ (
.xz
) - Archivo de disco de máquina virtual (VMDK) (
.vmdk
) - Archivo de imagen de disco virtual de VirtualBox (VDI) (
.vdi
) - Archivo de imagen de disco duro virtual (VHD) (
.vdh
) - Archivo de disco duro virtual versión 2 (VHDX) (
.vdhx
) - Archivo de imagen de disco ISO (
.iso
)
Ejemplo de un disco creado a partir de una imagen HTTP
Sigue estos pasos para crear un disco de arranque a partir de una imagen de Ubuntu:
Crea un manifiesto que defina un
VirtualMachineDisk
y unVirtualMachine
, como my-vm.yaml,en el editor que prefieras:nano my-vm.yaml
Copia y pega la siguiente definición de YAML:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: VM_NAME-boot-dv spec: size: 20Gi source: http: url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv
En este ejemplo se crea un disco
.20Gi
(20 gibibytes) llamadoVM_NAME-boot-dv
con una imagen pública de Ubuntu. En la secciónspec.disks
de la VM, el disco está configurado comoboot: true
.Guarda y cierra el archivo de manifiesto en tu editor.
Crea la VM y el disco con
kubectl
:kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
Sustituye
KUBECONFIG
por la ruta al archivo kubeconfig del clúster.
Disco disponible
En este caso, creas un disco en blanco y lo adjuntas a la VM. Este escenario le permite crear un disco de datos para almacenar datos de aplicaciones.
Crea un archivo de
VirtualMachine
manifiesto, como my-vm.yaml,en el editor que prefieras:nano my-vm.yaml
Copia y pega la siguiente definición de YAML:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: EXISTING_DISK_NAME
En este ejemplo se acopla un disco llamado
EXISTING_DISK_NAME
.En la sección
spec.disks
de la VM, también debes adjuntar un disco de arranque, como una imagen, tal como se muestra en la sección anterior.Guarda y cierra el manifiesto de la VM en tu editor.
Crea la VM con
kubectl
:kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
Sustituye
KUBECONFIG
por la ruta al archivo kubeconfig del clúster.
Localizar discos
A partir de la versión 1.13.0 de Google Distributed Cloud, cuando creas una VM, VM Runtime en GDC usa los nombres de disco que especificas en el recurso de VM para definir los números de serie de los discos. En concreto, los nombres que especifiques con spec.disks.virtualMachineDiskName
en el recurso personalizado VirtualMachine
se usarán en el número de serie de los discos. Esta función facilita la localización de los discos en la VM cuando necesitas realizar operaciones con ellos, como formatearlos o montarlos.
Por ejemplo, si has creado una VM y has especificado un disco de arranque llamado sample-boot-dv
, tu recurso personalizado VirtualMachine
tendrá un aspecto similar al siguiente:
apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
metadata:
name: sample-vm
spec:
osType: Linux
compute:
cpu:
vcpus: 2
memory:
capacity: 4Gi
interfaces:
- name: eth0
networkName: pod-network
default: true
disks:
- boot: true
virtualMachineDiskName: sample-vm-boot-dv
- virtualMachineDiskName: attached-disk
En las máquinas virtuales Linux, cuando inicies sesión en tu máquina virtual, puedes ejecutar el siguiente comando para enumerar los discos por su número de serie:
ls -l /dev/disk/by-id/
Tu respuesta debería tener un aspecto similar al de este ejemplo, en el que los nombres de los discos aparecen como números de serie:
total 0
lrwxrwxrwx 1 root root 9 Oct 19 17:17 ata-QEMU_HARDDISK_agentInstallation -> ../../sdb
lrwxrwxrwx 1 root root 9 Oct 19 17:17 ata-QEMU_HARDDISK_agentSADisk -> ../../sda
lrwxrwxrwx 1 root root 9 Oct 19 17:17 virtio-sample-boot-dv -> ../../vda
lrwxrwxrwx 1 root root 10 Oct 19 17:17 virtio-sample-boot-dv-part1 -> ../../vda1
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-sample-boot-dv-part14 -> ../../vda14
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-sample-boot-dv-part15 -> ../../vda15
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-attached-disk -> ../../vdb
Ten en cuenta el siguiente comportamiento de la función contextual:
- Si el valor de
virtualMachineDiskName
tiene más de 20 caracteres, el tiempo de ejecución de VM en GDC solo usará los primeros 20 caracteres como número de serie. - Si hay dos discos con los mismos 20 primeros caracteres, solo el primer disco tendrá un número de serie.
Crear y adjuntar discos a una VM
Si tienes una máquina virtual, puedes crear y adjuntar discos para admitir los ciclos de vida de tu aplicación. La VM debe estar detenida para poder adjuntar un disco.
Disco en blanco
En este caso, creas un disco en blanco y lo adjuntas a la VM. Este escenario le permite crear un disco de datos para almacenar datos de aplicaciones.
Usa
kubectl
para detener la VM, si es necesario:kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
Haz los cambios siguientes:
VM_NAME
: el nombre de la VM que quieres detener.KUBECONFIG
: la ruta al archivo kubeconfig del clúster.
Edita el recurso de VM que quieras, como
my-vm
:kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
Actualiza el manifiesto YAML de
VirtualMachine
para añadir una secciónVirtualMachineDisk
en la parte superior y, a continuación, acopla el disco al final de la secciónspec.disks
de la VM:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: DISK_NAME
En este ejemplo, se crea un disco
10Gi
(10 gibibytes) en blanco llamadoDISK_NAME
.Guarda y cierra el manifiesto de la VM actualizado en tu editor.
Usa
kubectl
para iniciar la VM:kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
Desde una imagen
En este caso, creas un disco a partir de una imagen de origen y lo vinculas a la máquina virtual.
Usa
kubectl
para detener la VM, si es necesario:kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
Haz los cambios siguientes:
VM_NAME
: el nombre de la VM que quieres detener.KUBECONFIG
: la ruta al archivo kubeconfig del clúster.
Edita el recurso de VM que quieras, como
my-vm
:kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
Actualiza el archivo de manifiesto
VirtualMachine
para añadir una secciónVirtualMachineDisk
en la parte superior y, a continuación, acopla el disco al final de la secciónspec.disks
de la VM:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi source: http: url: http://example.com/my-disk-img.qcow2 --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: DISK_NAME
En este ejemplo se crea un disco de
.10Gi
(10 gibibytes) llamadoDISK_NAME
a partir de la fuente HTTPhttp://example.com/my-disk-img.qcow2
.Guarda y cierra el manifiesto de la VM actualizado en tu editor.
Usa
kubectl
para iniciar la VM:kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
Crear un disco
En este caso, los recursos de disco se crean por separado de los recursos de la VM. Este caso práctico te permite crear discos con antelación y, a continuación, adjuntarlos a las VMs según sea necesario.
Disco en blanco
Para crear un disco en blanco, sigue estos pasos.
Crea un archivo de
VirtualMachineDisk
manifiesto, como my-disk.yaml,en el editor que prefieras:nano my-disk.yaml
Copia y pega la siguiente definición de YAML:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi
En este ejemplo, se crea un disco
10Gi
(10 gibibytes) en blanco llamadoDISK_NAME
.Guarda y cierra el manifiesto del disco en tu editor.
Crea el disco con
kubectl
:kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
Sustituye
KUBECONFIG
por la ruta al archivo kubeconfig del clúster.
Desde una imagen
Para crear un disco a partir de una imagen, sigue estos pasos:
Crea un archivo de manifiesto
VirtualMachineDisk
, comomy-disk.yaml
, en el editor que prefieras:nano my-disk.yaml
Copia y pega la siguiente definición de YAML:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 20Gi source: http: url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img
En este ejemplo se crea un disco
20Gi
(20 gibibytes) llamadoDISK_NAME
con una imagen pública de Ubuntu.Guarda y cierra el manifiesto del disco en tu editor.
Crea el disco con
kubectl
:kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
Sustituye
KUBECONFIG
por la ruta al archivo kubeconfig del clúster.
Siguientes pasos
- Crea y usa credenciales para importar imágenes de Cloud Storage.
- Crear y usar clases de almacenamiento en Google Distributed Cloud
- Cuando ya no necesites las máquinas virtuales ni sus recursos de disco virtual, elimina una máquina virtual en Google Distributed Cloud.