Este documento destina-se a proprietários de aplicações que executam o Google Distributed Cloud. Este documento mostra-lhe como criar e gerir recursos de disco para máquinas virtuais (MVs) que usam o tempo de execução de MVs no GDC.
Antes de começar
Para preencher este documento, precisa de ter acesso aos seguintes recursos:
- Acesso à versão 1.12.0 do Google Distributed Cloud (
anthosBareMetalVersion: 1.12.0
) ou a um cluster superior. Pode usar qualquer tipo de cluster capaz de executar cargas de trabalho. Se necessário, experimente o Google Distributed Cloud no Compute Engine ou consulte a vista geral da criação de clusters. - A ferramenta de cliente
virtctl
instalada como um plug-in para okubectl
. Se necessário, instale a ferramenta de cliente virtctl.
Crie uma VM com um disco anexado
Quando cria uma VM, pode anexar um disco de arranque ou de dados existente, criar um disco a partir de uma imagem (inclusive para o disco de arranque) ou criar um disco em branco.
Disco vazio
Neste cenário, cria um disco em branco e anexa-o à VM. Este cenário permite-lhe criar um disco de dados para armazenar dados de aplicações.
Crie um manifesto que defina um
VirtualMachineDisk
e umVirtualMachine
, comomy-vm.yaml
, no editor da sua preferência:nano my-vm.yaml
Copie e cole a seguinte definição 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
Substitua o seguinte:
DISK_NAME
: o nome do disco em branco que está a criar e a anexar à sua VM.VM_NAME
: o nome da VM que está a criar.Este exemplo cria um disco em branco de
10Gi
(10 gibibytes) com o nomeDISK_NAME
. Na secçãospec.disks
da VM, também tem de anexar um disco de arranque, como o de uma imagem, conforme mostrado na secção seguinte.
Guarde e feche o ficheiro de manifesto no editor.
Crie a VM e o disco com
kubectl
:kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
Substitua
KUBECONFIG
pelo caminho para o ficheiro kubeconfig do cluster.
A partir de uma imagem
Neste cenário, cria um disco a partir de uma imagem e anexa-o à VM. Este cenário permite-lhe criar um disco de arranque, por exemplo, a partir de uma imagem. Também pode criar e anexar discos de dados a partir de uma imagem.
Origens de imagens suportadas
O tempo de execução da VM no GDC permite uma variedade de formatos de imagem
e suporta três tipos de origens de imagens que podem ser especificados na
especificação VirtualMachineDisk
. Cada um dos exemplos seguintes cria um disco de 20 gibibytes
a partir de uma origem de imagem suportada diferente.
Protocolo de Transferência de Hipertexto (HTTP)
O exemplo
VirtualMachineDisk
seguinte mostra a estrutura básica de uma origem de imagem HTTP. O campourl
espera um URL HTTP ou 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
O exemplo seguinte mostra como criar um disco a partir de uma imagem num contentor do Cloud Storage. Se as credenciais predefinidas da aplicação na máquina não forem suficientes para aceder ao URL do Cloud Storage, tem de fornecer credenciais. No exemplo seguinte,
my-gcs
é um segredo que contém uma chave de conta de serviço codificada em 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
Se usou chaves de contas de serviço transferidas para criar o cluster, pode usar a chave da conta de serviço do Artifact Registry para aceder ao Cloud Storage. Se criar uma conta de serviço separada para aceder ao Cloud Storage, consulte o artigo Configure uma conta de serviço que possa aceder a um contentor do Cloud Storage.
Use o seguinte comando para criar um segredo do Kubernetes a partir do ficheiro de chave da conta de serviço transferido:
kubectl create secret generic SECRET_NAME --from-file=KEY_FILE --namespace default \ --kubeconfig KUBECONFIG
Substitua o seguinte:
SECRET_NAME
: nome do seu segredo.KEY_FILE
: caminho para o ficheiro JSON da chave da conta de serviço transferido. Por exemplo,bmctl-workspace/.sa-keys/my-project-anthos-baremetal-gcr.json
.KUBECONFIG
: caminho para o ficheiro kubeconfig do cluster.
Para mais informações sobre a utilização de credenciais para aceder ao Cloud Storage, consulte o artigo Crie e use credenciais para importar imagens do Cloud Storage.
Exemplo de registo de contentores
Os registos de contentores em conformidade com a distribution-spec da Open Container Initiative (OCI) são suportados. O exemplo seguinte cria um disco a partir de uma imagem armazenada num registo do 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 imagem válidos
Pode usar qualquer um dos seguintes formatos de imagem quando cria um disco a partir de uma imagem:
- Arquivo GNU zip (gzip) (
.gz
) - RAW (
.raw
,.img
) - Imagem de disco da versão 2 (qcow2) de cópia na gravação do QEMU (
.qcow2
) - Arquivo comprimido XZ (
.xz
) - Ficheiro de disco de máquina virtual (VMDK) (
.vmdk
) - Ficheiro de imagem de disco virtual (VDI) do VirtualBox (
.vdi
) - Ficheiro de imagem de disco rígido virtual (VHD) (
.vdh
) - Ficheiro de disco rígido virtual versão 2 (VDHX) (
.vdhx
) - Ficheiro de imagem de disco ISO (
.iso
)
Exemplo de um disco criado a partir de uma imagem HTTP
Os passos seguintes criam um disco de arranque a partir de uma imagem do Ubuntu:
Crie um manifesto que defina um
VirtualMachineDisk
eVirtualMachine
, como my-vm.yaml,no editor da sua preferência:nano my-vm.yaml
Copie e cole a seguinte definição 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
Este exemplo cria um disco de
20Gi
(20 gibibytes) denominadoVM_NAME-boot-dv
com uma imagem pública do Ubuntu. Na secçãospec.disks
da VM, o disco está definido comoboot: true
.Guarde e feche o manifesto no editor.
Crie a VM e o disco com
kubectl
:kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
Substitua
KUBECONFIG
pelo caminho para o ficheiro kubeconfig do cluster.
Disco existente
Neste cenário, cria um disco em branco e anexa-o à VM. Este cenário permite-lhe criar um disco de dados para armazenar dados de aplicações.
Crie um manifesto, como my-vm.yaml,no editor da sua escolha:
VirtualMachine
nano my-vm.yaml
Copie e cole a seguinte definição 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
Este exemplo anexa um disco existente denominado
EXISTING_DISK_NAME
.Na secção
spec.disks
da VM, também tem de anexar um disco de arranque, como a partir de uma imagem, conforme mostrado na secção anterior.Guarde e feche o manifesto da VM no editor.
Crie a VM com
kubectl
:kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
Substitua
KUBECONFIG
pelo caminho para o ficheiro kubeconfig do cluster.
A localizar discos
A partir da versão 1.13.0 do Google Distributed Cloud, quando cria uma VM, o VM Runtime no GDC usa os nomes de discos que especifica no recurso de VM para definir os números de série dos discos. Especificamente, os nomes que especificar com
spec.disks.virtualMachineDiskName
no recurso personalizado VirtualMachine
são
usados no número de série dos discos. Esta funcionalidade facilita a localização dos discos na VM quando precisa de realizar operações de disco, como a formatação ou a montagem.
Por exemplo, se criou uma VM e especificou um disco de arranque com o nome
sample-boot-dv
, o seu recurso personalizado VirtualMachine
tem um aspeto semelhante ao seguinte:
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
Para VMs Linux, quando inicia sessão na sua VM, pode executar o seguinte comando para listar os discos pelo respetivo número de série:
ls -l /dev/disk/by-id/
A sua resposta deve ter um aspeto semelhante ao deste exemplo de resultado, em que os nomes dos discos aparecem como números de série:
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
Tenha em atenção o seguinte comportamento das funcionalidades situacionais:
- Se o valor
virtualMachineDiskName
tiver mais de 20 carateres, o tempo de execução da VM no GDC usa apenas os primeiros 20 carateres como o número de série. - Se existirem dois discos com os mesmos primeiros 20 carateres, apenas o primeiro disco tem um número de série.
Crie e anexe discos a uma VM existente
Se tiver uma VM existente, pode criar e anexar discos para suportar os ciclos de vida da sua aplicação. A VM tem de estar num estado parado antes de anexar um disco.
Disco vazio
Neste cenário, cria um disco em branco e anexa-o à VM. Este cenário permite-lhe criar um disco de dados para armazenar dados de aplicações.
Use
kubectl
para parar a VM, se necessário:kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
Substitua o seguinte:
VM_NAME
: o nome da VM que quer parar.KUBECONFIG
: o caminho para o ficheiro kubeconfig do cluster.
Edite o recurso de VM existente, como
my-vm
:kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
Atualize o manifesto YAML para adicionar uma secção
VirtualMachineDisk
na parte superior e, em seguida, anexe o disco no final da secçãospec.disks
da VM:VirtualMachine
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
Este exemplo cria um disco em branco de
10Gi
(10 gibibytes) com o nomeDISK_NAME
.Guarde e feche o manifesto de VMs atualizado no editor.
Use
kubectl
para iniciar a VM:kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
A partir de uma imagem
Neste cenário, cria um disco a partir de uma imagem de origem e anexa-o à VM.
Use
kubectl
para parar a VM, se necessário:kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
Substitua o seguinte:
VM_NAME
: o nome da VM que quer parar.KUBECONFIG
: o caminho para o ficheiro kubeconfig do cluster.
Edite o recurso de VM existente, como
my-vm
:kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
Atualize o manifesto
VirtualMachine
para adicionar uma secçãoVirtualMachineDisk
na parte superior e, em seguida, anexe o disco no final da secçãospec.disks
da 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
Este exemplo cria um disco de
10Gi
(10 gibibytes) denominadoDISK_NAME
a partir da origem HTTPhttp://example.com/my-disk-img.qcow2
.Guarde e feche o manifesto de VMs atualizado no editor.
Use
kubectl
para iniciar a VM:kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
Crie um disco
Neste cenário, cria os recursos de disco separadamente dos recursos de VM. Este cenário permite-lhe criar discos antecipadamente e, em seguida, anexá-los a VMs conforme necessário.
Disco vazio
Para criar um disco em branco, conclua os seguintes passos.
Crie um manifesto
VirtualMachineDisk
, como my-disk.yaml,no editor da sua escolha:nano my-disk.yaml
Copie e cole a seguinte definição YAML:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi
Este exemplo cria um disco em branco de
10Gi
(10 gibibytes) com o nomeDISK_NAME
.Guarde e feche o manifesto do disco no editor.
Crie o disco com
kubectl
:kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
Substitua
KUBECONFIG
pelo caminho para o ficheiro kubeconfig do cluster.
A partir de uma imagem
Para criar um disco a partir de uma imagem, conclua os passos seguintes.
Crie um manifesto
VirtualMachineDisk
, comomy-disk.yaml
, no editor à sua escolha:nano my-disk.yaml
Copie e cole a seguinte definição 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
Este exemplo cria um disco de
20Gi
(20 gibibytes) denominadoDISK_NAME
com uma imagem pública do Ubuntu.Guarde e feche o manifesto do disco no editor.
Crie o disco com
kubectl
:kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
Substitua
KUBECONFIG
pelo caminho para o ficheiro kubeconfig do cluster.
O que se segue?
- Crie e use credenciais para importar imagens do Cloud Storage.
- Crie e use classes de armazenamento no Google Distributed Cloud.
- Quando já não precisar das VMs nem dos respetivos recursos de disco virtual, elimine uma VM no Google Distributed Cloud.