Questo documento è destinato ai proprietari di applicazioni che eseguono cluster Anthos su Bare Metal. Questo documento mostra come creare e gestire le risorse del disco per le macchine virtuali (VM) che utilizzano il runtime VM di Anthos.
Prima di iniziare
Per completare questo documento, devi accedere alle seguenti risorse:
- Accesso ai cluster Anthos su Bare Metal versione 1.12.0 (
anthosBareMetalVersion: 1.12.0
) o superiore. Puoi utilizzare qualsiasi tipo di cluster in grado di eseguire carichi di lavoro. Se necessario, prova i cluster Anthos su Bare Metal su Compute Engine o consulta la panoramica sulla creazione dei cluster. - Lo strumento client
virtctl
è stato installato come plug-in perkubectl
. Se necessario, installa lo strumento client Virtctl.
Crea una VM con un disco collegato
Quando crei una VM, puoi collegare un disco di avvio o di dati esistente, creare un disco da un'immagine (anche per il disco di avvio) o creare un disco vuoto.
Disco vuoto
In questo scenario, crei un disco vuoto e lo colleghi alla VM. Questo scenario ti consente di creare un disco dati per archiviare i dati dell'applicazione.
Crea un manifest che definisce
VirtualMachineDisk
eVirtualMachine
, comemy-vm.yaml
, nell'editor che preferisci:nano my-vm.yaml
Copia e incolla la seguente definizione 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
Sostituisci quanto segue:
DISK_NAME
: il nome del disco vuoto che stai creando e collegando alla tua VM.VM_NAME
: il nome della VM che stai creando.Questo esempio crea un disco
10Gi
vuoto (10 gibibyte) denominatoDISK_NAME
. Nella sezionespec.disks
della VM, devi collegare anche un disco di avvio, ad esempio da un'immagine, come mostrato nella sezione successiva.
Salva e chiudi il file manifest nell'editor.
Crea la VM e il disco utilizzando
kubectl
:kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
Sostituisci
KUBECONFIG
con il percorso del file kubeconfig del cluster.
Dall'immagine
In questo scenario, crei un disco da un'immagine e lo colleghi alla VM. Questo scenario ti permette di creare un disco di avvio, ad esempio da un'immagine. Puoi anche creare e collegare dischi dati da un'immagine.
Origini immagine supportate
Il runtime VM di Anthos consente una varietà di formati delle immagini e supporta tre tipi di origini immagine che possono essere specificati nella specifica VirtualMachineDisk
. Ciascuno dei seguenti esempi crea un disco da 20 gibibyte da un'origine immagine supportata diversa.
HTTP (HyperText Transfer Protocol)
L'esempio
VirtualMachineDisk
che segue mostra la struttura di base per un'origine immagine HTTP. Il campourl
prevede un 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
L'esempio seguente mostra come creare un disco da un'immagine in un bucket Cloud Storage. Se le credenziali predefinite dell'applicazione sulla macchina non sono sufficienti per accedere all'URL di Cloud Storage, devi fornire le credenziali. Nell'esempio seguente,
my-gcs
è un secret contenente una chiave dell'account di servizio con codifica 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 hai utilizzato le chiavi degli account di servizio scaricate per creare il cluster, puoi utilizzare la chiave dell'account di servizio di Container Registry per l'accesso a Cloud Storage. Se crei un account di servizio separato per accedere a Cloud Storage, consulta Configurare un account di servizio in grado di accedere a un bucket Cloud Storage.
Utilizza il comando seguente per creare un secret di Kubernetes dal file della chiave dell'account di servizio scaricato:
kubectl create secret generic SECRET_NAME --from-file=KEY_FILE --namespace default \ --kubeconfig KUBECONFIG
Sostituisci quanto segue:
SECRET_NAME
: nome del secret.KEY_FILE
: percorso del file JSON della chiave dell'account di servizio scaricato. Ad esempio,bmctl-workspace/.sa-keys/my-project-anthos-baremetal-gcr.json
.KUBECONFIG
: percorso del file kubeconfig del cluster.
Per ulteriori informazioni sull'utilizzo delle credenziali per accedere a Cloud Storage, consulta Creare e utilizzare le credenziali per importare immagini da Cloud Storage.
Esempio di Container Registry
Sono supportati i registry di container che rispettano la distribution-spec per Open Container Initiative (OCI). L'esempio seguente crea un disco da un'immagine archiviata in un registro 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
Formati di immagine validi
Quando crei un disco da un'immagine, puoi utilizzare uno qualsiasi dei seguenti formati:
- Archivio Zip di GNU (gzip) (
.gz
) - RAW (
.raw
,.img
) - Copia QEMU sull'immagine disco di scrittura versione 2 (qcow2) (
.qcow2
) - Archivio compresso con xz (
.xz
) - File del disco virtuale (VMDK) (
.vmdk
) - File VDI (Virtual Disk Image) di VirtualBox (
.vdi
) - File immagine Virtual Hard Disk (VHD) (
.vdh
) - File VDX (Virtual Hard Disk versione) 2 (
.vdhx
) - File immagine ISO del disco (
.iso
)
Esempio di disco creato da un'immagine HTTP
I seguenti passaggi creano un disco di avvio da un'immagine Ubuntu:
Crea un manifest che definisce
VirtualMachineDisk
eVirtualMachine
, ad esempio my-vm.yaml,nell'editor che preferisci:nano my-vm.yaml
Copia e incolla la seguente definizione 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
Questo esempio crea un disco
20Gi
(20 gibibyte) denominatoVM_NAME-boot-dv
utilizzando un'immagine Ubuntu pubblica. Nella sezionespec.disks
della VM, il disco è impostato suboot: true
.Salva e chiudi il manifest nell'editor.
Crea la VM e il disco utilizzando
kubectl
:kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
Sostituisci
KUBECONFIG
con il percorso del file kubeconfig del cluster.
Disco esistente
In questo scenario, crei un disco vuoto e lo colleghi alla VM. Questo scenario ti consente di creare un disco dati per archiviare i dati dell'applicazione.
Crea un manifest
VirtualMachine
, ad esempio my-vm.yaml, nell'editor che preferisci:nano my-vm.yaml
Copia e incolla la seguente definizione 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
Questo esempio collega un disco esistente denominato
EXISTING_DISK_NAME
.Nella sezione
spec.disks
della VM devi collegare anche un disco di avvio, ad esempio da un'immagine, come mostrato nella sezione precedente.Salva e chiudi il manifest della VM nell'editor.
Crea la VM utilizzando
kubectl
:kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
Sostituisci
KUBECONFIG
con il percorso del file kubeconfig del cluster.
Individuazione dei dischi
A partire dai cluster Anthos su Bare Metal versione 1.13.0, quando crei una VM, Anthos VM Runtime utilizza i nomi dei dischi specificati nella risorsa VM per impostare i numeri di serie del disco. In particolare, i nomi specificati con spec.disks.virtualMachineDiskName
nella risorsa personalizzata VirtualMachine
sono utilizzati nel numero di serie dei dischi. Questa funzionalità semplifica l'individuazione dei dischi nella VM quando è necessario eseguire operazioni sul disco, come la formattazione o il montaggio.
Ad esempio, se hai creato una VM e specificato un disco di avvio denominato
sample-boot-dv
, la risorsa personalizzata VirtualMachine
sarà simile a questa:
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
Per le VM Linux, quando accedi alla tua VM, puoi eseguire il comando seguente per elencare i dischi in base al numero di serie:
ls -l /dev/disk/by-id/
La risposta dovrebbe essere simile all'output di esempio, dove i nomi del disco appaiono come numeri di 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
Osserva il seguente comportamento relativo alle funzionalità situazionali:
- Se il valore
virtualMachineDiskName
supera i 20 caratteri, il runtime di VM Anthos utilizza solo i primi 20 caratteri come numero di serie. - Se ci sono due dischi con gli stessi primi 20 caratteri, solo il primo disco avrà un numero di serie.
Crea e collega i dischi a una VM esistente
Se hai una VM esistente, puoi creare e collegare i dischi per supportare i cicli di vita delle applicazioni. La VM deve essere in uno stato arrestato prima di collegare un disco.
Disco vuoto
In questo scenario, crei un disco vuoto e lo colleghi alla VM. Questo scenario ti consente di creare un disco dati per archiviare i dati dell'applicazione.
Utilizza
kubectl
per arrestare la VM, se necessario:kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
Sostituisci quanto segue:
VM_NAME
: il nome della VM che vuoi arrestare.KUBECONFIG
: il percorso del file kubeconfig del cluster.
Modifica la risorsa VM esistente, ad esempio
my-vm
:kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
Aggiorna il manifest YAML
VirtualMachine
per aggiungere una sezioneVirtualMachineDisk
in alto, quindi collega il disco alla fine della sezionespec.disks
della 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
Questo esempio crea un disco
10Gi
vuoto (10 gibibyte) denominatoDISK_NAME
.Salva e chiudi il manifest della VM aggiornato nell'editor.
Usa
kubectl
per avviare la VM:kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
Dall'immagine
In questo scenario, crei un disco da un'immagine di origine e lo colleghi alla VM.
Utilizza
kubectl
per arrestare la VM, se necessario:kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
Sostituisci quanto segue:
VM_NAME
: il nome della VM che vuoi arrestare.KUBECONFIG
: il percorso del file kubeconfig del cluster.
Modifica la risorsa VM esistente, ad esempio
my-vm
:kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
Aggiorna il manifest
VirtualMachine
per aggiungere una sezioneVirtualMachineDisk
in alto, quindi collega il disco alla fine della sezionespec.disks
della 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
Questo esempio crea un disco
10Gi
(10 gibibyte) denominatoDISK_NAME
dall'origine HTTPhttp://example.com/my-disk-img.qcow2
.Salva e chiudi il manifest della VM aggiornato nell'editor.
Usa
kubectl
per avviare la VM:kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
Crea un disco
In questo scenario, crei le risorse del disco separatamente da quelle della VM. Questo scenario ti consente di creare i dischi in anticipo e di collegarli alle VM secondo necessità.
Disco vuoto
Per creare un disco vuoto, completa i seguenti passaggi.
Crea un manifest
VirtualMachineDisk
, ad esempio my-disk.yaml, nell'editor che preferisci:nano my-disk.yaml
Copia e incolla la seguente definizione YAML:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi
Questo esempio crea un disco
10Gi
vuoto (10 gibibyte) denominatoDISK_NAME
.Salva e chiudi il manifest del disco nell'editor.
Crea il disco utilizzando
kubectl
:kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
Sostituisci
KUBECONFIG
con il percorso del file kubeconfig del cluster.
Dall'immagine
Per creare un disco da un'immagine, completa i seguenti passaggi.
Crea un manifest
VirtualMachineDisk
, ad esempiomy-disk.yaml
, nell'editor che preferisci:nano my-disk.yaml
Copia e incolla la seguente definizione 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
Questo esempio crea un disco
20Gi
(20 gibibyte) denominatoDISK_NAME
utilizzando un'immagine Ubuntu pubblica.Salva e chiudi il manifest del disco nell'editor.
Crea il disco utilizzando
kubectl
:kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
Sostituisci
KUBECONFIG
con il percorso del file kubeconfig del cluster.
Passaggi successivi
- Creare e utilizzare le credenziali per importare immagini da Cloud Storage.
- Crea e utilizza classi di archiviazione in Cluster Anthos su Bare Metal.
- Quando non hai più bisogno di VM o delle relative risorse su disco virtuali, elimina una VM in Cluster Anthos on bare metal.