Questo documento fornisce istruzioni per collegare un disco permanente di una macchina virtuale (VM) a un'istanza in Google Distributed Cloud (GDC) con air gap.
Collega dischi non di avvio alla VM per soddisfare i requisiti specifici del tuo carico di lavoro. Il disaccoppiamento dello spazio di archiviazione dall'istanza VM garantisce che i dati critici vengano conservati indipendentemente dal ciclo di vita della VM, con scalabilità automatica delle prestazioni e della capacità in base alle esigenze del carico di lavoro.
Questo documento è rivolto agli sviluppatori dei gruppi di amministratori della piattaforma o di operatori delle applicazioni che aggiungono e configurano i dischi delle VM in un ambiente Distributed Cloud. Per saperne di più, consulta la documentazione relativa ai segmenti di pubblico per GDC con air gap.
Prima di iniziare
Per utilizzare i comandi dell'interfaccia a riga di comando (CLI) gdcloud, assicurati di aver scaricato, installato e configurato l'interfaccia a riga di comando gdcloud.
Tutti i comandi per Distributed Cloud utilizzano l'interfaccia a riga di comando gdcloud o kubectl e richiedono un ambiente del sistema operativo (OS).
Ottieni il percorso del file kubeconfig
Per eseguire i comandi sul server dell'API di gestione, assicurati di disporre delle seguenti risorse:
Accedi e genera il file kubeconfig per il server API di gestione, se non ne hai uno.
Utilizza il percorso del file kubeconfig del server API di gestione per sostituire
MANAGEMENT_API_SERVERin queste istruzioni.
Richiedi ruoli IAM
Contatta l'amministratore del progetto IAM per richiedere i seguenti ruoli nel tuo progetto:
Virtual Machine Project Admin (
project-vm-admin): crea, modifica, elenca ed elimina le VM nello spazio dei nomi del progetto.Visualizzatore progetto(
project-viewer): visualizza tutte le risorse all'interno degli spazi dei nomi del progetto.
Tutti i ruoli delle VM devono essere associati allo spazio dei nomi del progetto in cui si trova la VM. Segui i passaggi per verificare il tuo accesso.
Collega un disco a una VM
Crea e collega dischi non di avvio alla VM. Per ogni disco aggiuntivo puoi specificare un'immagine personalizzata o un disco vuoto. Puoi aggiungere più dischi contemporaneamente a una VM.
Console
Nel menu di navigazione, fai clic su Macchine virtuali > Istanze.
Nell'elenco delle VM, fai clic sul nome di una VM per visualizzarne i dettagli.
Fai clic su Aggiungi nuovo disco.
Nella finestra di dialogo di conferma, fai clic su Arresta per arrestare la VM.
Attendi qualche minuto affinché la VM si arresti.
Fai clic su Aggiorna.
Quando la VM è in stato di arresto, fai di nuovo clic su Aggiungi nuovo disco.
Nella finestra di dialogo Aggiungi disco, scegli un nuovo disco o un disco esistente.
Per eseguire il provisioning di un nuovo disco, fai clic sulla scheda Nuovo disco.
- Nel campo Nome disco, inserisci un nuovo nome disco univoco per il progetto.
- Nel campo Dimensioni, inserisci una dimensione del disco compresa tra 10 e 65.536 GiB. Ad esempio, 10 GiB.
- Nella sezione Regola di eliminazione, fai clic su Conserva disco o Elimina disco.
Per scegliere un disco esistente, fai clic sulla scheda Disco esistente.
- Nell'elenco Disco, seleziona un disco.
- Nella sezione Regola di eliminazione, fai clic su Conserva disco o Elimina disco.
Fai clic su Salva. Il disco viene visualizzato nell'elenco dei dischi della VM.
API
Crea un
VirtualMachineDisk:kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ apply -f - <<EOF apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineDisk metadata: name: NON_BOOT_BLANK_DISK spec: size: NON_BOOT_BLANK_DISK_SIZE EOFAggiungi
VirtualMachineDiskallaspec.disksVirtualMachineesistente:kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ edit virtualmachines.virtualmachine.gdc.goog VM_NAMEModifica quanto segue nell'editor di testo:
# … disks: - virtualMachineDiskRef: name: VM_BOOT_DISK_NAME boot: true - virtualMachineDiskRef: name: NON_BOOT_BLANK_DISK autoDelete: false # …Sostituisci le variabili utilizzando le seguenti definizioni.
Variabile Definizione MANAGEMENT_API_SERVERIl file kubeconfig del server dell'API di gestione. PROJECTIl progetto Google Distributed Cloud con air gap (GDC) in cui creare la VM. VM_NAMEIl nome della nuova VM. VM_BOOT_DISK_NAMEIl nome del disco di avvio della nuova VM. NON_BOOT_BLANK_DISKIl nome del tuo disco aggiuntivo. NON_BOOT_BLANK_DISK_SIZELe dimensioni dei dischi aggiuntivi, ad esempio 20G.
Formatta e monta un disco non di avvio
Dopo aver collegato un disco alla VM, esegui i seguenti passaggi necessari per renderlo accessibile all'interno della VM.
Connettiti alla VM
Formatta il disco
Elenca i dischi collegati all'istanza in base al numero di serie e individua il disco che vuoi formattare e montare.
ls -l /dev/disk/by-id/Questo output di esempio mostra i nomi dei dischi come numeri di serie:
total 0 lrwxrwxrwx 1 root root 9 Sep 13 23:51 ata-QEMU_HARDDISK_agentSADisk -> ../../sdc lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-0ATA_QEMU_HARDDISK_agentSADisk -> ../../sdc lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot -> ../../sda lrwxrwxrwx 1 root root 10 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part1 -> ../../sda1 lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part14 -> ../../sda14 lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part15 -> ../../sda15 lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-1ATA_QEMU_HARDDISK_agentSADisk -> ../../sdc lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-SATA_QEMU_HARDDISK_agentSADisk -> ../../sdc lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot -> ../../sda lrwxrwxrwx 1 root root 10 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part1 -> ../../sda1 lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part14 -> ../../sda14 lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part15 -> ../../sda15 lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdbLe informazioni che seguono la freccia,
->, su ogni riga indicano il nome del dispositivo disco. Ad esempio, inscsi-SQEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb, il numero di serie èscsi-SQEMU_QEMU_HARDDISK_vm-disk-datae il nome del dispositivo èsdb.Identifica il numero di serie del disco da questo elenco.
Comportamento importante delle funzionalità situazionali che può influire sull'elenco dei numeri di serie:
- Se il valore
virtualMachineDiskRef.nameè più lungo di 20 caratteri, solo i primi 20 caratteri vengono utilizzati come numero di serie. - Se esistono due dischi con gli stessi primi 20 caratteri, solo il primo disco ha un numero di serie.
- Se il valore
Formatta il disco:
sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/disk/by-id/DISK_ID
- Sostituisci
DISK_IDcon il numero di serie del disco che stai formattando. - Per questo esempio, specifica
scsi-SQEMU_QEMU_HARDDISK_vm-disk-dataper formattare l'intero disco senza una tabella di partizione.
Per massimizzare le prestazioni del disco, utilizza le opzioni di formattazione consigliate nel
flag -E. Poiché non è necessario dedicare spazio per il volume root sul disco secondario, specifica -m 0 per utilizzare tutto lo spazio su disco disponibile.
Monta il disco
Crea una directory che funga da punto di montaggio per il nuovo disco. Puoi utilizzare qualsiasi directory. L'esempio seguente crea una directory in
/mnt/disks/:sudo mkdir -p /mnt/disks/MOUNT_DIRSostituisci
MOUNT_DIRcon la directory in cui vuoi montare il disco.Monta il disco sull'istanza e attiva l'opzione discard:
sudo mount -o discard,defaults /dev/disk/by-id/DISK_ID /mnt/disks/MOUNT_DIRSostituisci quanto segue:
DISK_IDcon il numero di serie del disco da montare.MOUNT_DIRcon la directory in cui vuoi montare il disco.
(Facoltativo) Configura le autorizzazioni di lettura e scrittura sul disco. Il seguente comando concede l'accesso in scrittura,
a+w, al disco per tutti gli utenti.sudo chmod a+w /mnt/disks/MOUNT_DIR(Facoltativo) Configura il montaggio automatico al riavvio della VM utilizzando l'identificatore univoco universale (UUID) o lo script di avvio.
Configura il montaggio automatico al riavvio della VM - UUID del disco
Aggiungi il disco al file /etc/fstab in modo che venga montato di nuovo automaticamente al riavvio della VM. Su un sistema operativo, il nome del dispositivo cambia a ogni riavvio, ma l'UUID del dispositivo fa sempre riferimento allo stesso volume, anche quando sposti i dischi da un sistema all'altro. Pertanto, utilizza sempre l'UUID del dispositivo
per configurare il montaggio automatico al riavvio della VM.
Crea un backup del file
/etc/fstabcorrente:sudo cp /etc/fstab /etc/fstab.backupElenca l'UUID del disco:
sudo blkid /dev/DEVICE_NAMEL'output di esempio mostra l'UUID di
accc19c5-d0d6-4157-9672-37d4e1d48eb5per il disco/dev/sdb: UUID="accc19c5-d0d6-4157-9672-37d4e1d48eb5" TYPE="ext4"DEVICE_NAMEè il nome del dispositivo del disco che vuoi montare automaticamente. Se hai creato una tabella di partizione sul disco, specifica la partizione che vuoi montare come suffisso del nome del dispositivo. Ad esempio, sesdbè il nome del dispositivo disco e vuoi montare la partizione 1,DEVICE_NAMEdiventasdb1.Apri il file
/etc/fstabin un editor di testo e crea una voce che includa l'UUID:UUID=UUID_VALUE /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2Sostituisci quanto segue:
UUID_VALUEcon il discoUUID, elencato come output del comando Elenca l'UUID.MOUNT_DIRcon la directory in cui hai montato il disco.MOUNT_OPTIONcon il valoreMOUNT_OPTIONper il tuo sistema operativo, che specifica cosa fa il sistema operativo se non riesce a montare il disco al momento dell'avvio.
Verifica che le voci
/etc/fstabsiano corrette:Il seguente comando verifica le voci
/etc/fstabrispetto ai dischi e alle partizioni esistenti collegati alla VM:findmnt --verifyL'esempio seguente mostra una verifica riuscita. Puoi ignorare tranquillamente l'avviso previsto:
[W] your fstab has been modified, but systemd still uses the old version; use 'systemctl daemon-reload' to reload 0 parse errors, 0 errors, 1 warningSe sono presenti errori, controlla se le voci
fstabsono valide. Un problema comune è l'aggiunta di caratteri non stampabili non validi alla voce. Puoi eseguire il comando seguente per visualizzare tutti i caratteri speciali nel file/etc/fstab:cat --show-nonprinting /etc/fstabDi seguito è riportato un esempio di output valido:
LABEL=cloudimg-rootfs / ext4 defaults 0 1 LABEL=UEFI /boot/efi vfat umask=0077 0 1 UUID=UUID_VALUE /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2Assicurati che non siano presenti caratteri imprevisti, ad esempio caratteri non stampabili che iniziano con
M-o^.
Se scolleghi questo disco o crei uno snapshot dal disco di avvio per questa VM, modifica il file /etc/fstab e rimuovi la voce relativa a questo disco. Anche se hai impostato MOUNT_OPTION su nofail o nobootwait, mantieni il file /etc/fstab sincronizzato con i dispositivi collegati alla VM. Rimuovi queste voci prima di creare lo snapshot del disco di avvio o scollegare il disco.
Configura il montaggio automatico al riavvio della VM - Script di avvio della VM
Puoi anche utilizzare uno script di avvio per montare il disco a ogni riavvio aggiungendo i comandi di Monta il disco a uno script di avvio. Prima di aggiungere lo script per montare il disco, formattalo utilizzando i comandi della sezione Formatta il disco.
Crea il secret dello script di avvio.
cat <<EOF >>mount-disk-script #!/bin/bash mkdir -p /mnt/disks/MOUNT_DIR mount -o discard,defaults /dev/disk/by-id/DISK_ID /mnt/disks/MOUNT_DIR EOFkubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ create secret generic VM_NAME-mount-script \ --from-file=script=mount-disk-scriptrm mount-disk-scriptAggiungi lo script di avvio alla VM.
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ edit virtualmachines.virtualmachine.gdc.goog VM_NAMEModifica il
spec.startupScriptsin modo da includere il nome del secret.apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachine metadata: name: VM_NAME namespace: PROJECT spec: # … startupScripts: - name: mount-script scriptSecretRef: name: VM_NAME-mount-script
Per saperne di più sulla configurazione degli script di avvio, consulta.