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
virtctlinstalada 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
VirtualMachineDiske umVirtualMachine, comomy-vm.yaml, no editor da sua preferência:nano my-vm.yamlCopie 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_NAMESubstitua 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.disksda 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 KUBECONFIGSubstitua
KUBECONFIGpelo 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
VirtualMachineDiskseguinte mostra a estrutura básica de uma origem de imagem HTTP. O campourlespera 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-sharedCloud 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-sharedSe 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 KUBECONFIGSubstitua 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
VirtualMachineDiskeVirtualMachine, como my-vm.yaml,no editor da sua preferência:nano my-vm.yamlCopie 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-dvEste exemplo cria um disco de
20Gi(20 gibibytes) denominadoVM_NAME-boot-dvcom uma imagem pública do Ubuntu. Na secçãospec.disksda 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 KUBECONFIGSubstitua
KUBECONFIGpelo 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:
VirtualMachinenano my-vm.yamlCopie 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_NAMEEste exemplo anexa um disco existente denominado
EXISTING_DISK_NAME.Na secção
spec.disksda 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 KUBECONFIGSubstitua
KUBECONFIGpelo 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
virtualMachineDiskNametiver 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
kubectlpara parar a VM, se necessário:kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIGSubstitua 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 KUBECONFIGAtualize o manifesto YAML para adicionar uma secção
VirtualMachineDiskna parte superior e, em seguida, anexe o disco no final da secçãospec.disksda VM:VirtualMachineapiVersion: 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_NAMEEste 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
kubectlpara 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
kubectlpara parar a VM, se necessário:kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIGSubstitua 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 KUBECONFIGAtualize o manifesto
VirtualMachinepara adicionar uma secçãoVirtualMachineDiskna parte superior e, em seguida, anexe o disco no final da secçãospec.disksda 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_NAMEEste exemplo cria um disco de
10Gi(10 gibibytes) denominadoDISK_NAMEa partir da origem HTTPhttp://example.com/my-disk-img.qcow2.Guarde e feche o manifesto de VMs atualizado no editor.
Use
kubectlpara 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.yamlCopie e cole a seguinte definição YAML:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10GiEste 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 KUBECONFIGSubstitua
KUBECONFIGpelo 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.yamlCopie 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.imgEste exemplo cria um disco de
20Gi(20 gibibytes) denominadoDISK_NAMEcom 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 KUBECONFIGSubstitua
KUBECONFIGpelo 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.