Questa pagina descrive in che modo i cluster Google Kubernetes Engine (GKE) possono raggruppare e condividere la capacità di archiviazione, il throughput e le IOPS tra i dischi utilizzando i pool di archiviazione Hyperdisk di GKE.
Panoramica
I pool di archiviazione raggruppano logicamente i dispositivi di archiviazione fisici, consentendoti di segmentare le risorse. Puoi eseguire il provisioning di Hyperdisk di Google Cloud all'interno di questi pool di archiviazione, creando in sostanza pool di archiviazione Hyperdisk. I pool di archiviazione Hyperdisk offrono capacità, velocità effettiva e IOPS pre-provisioned che i dischi del cluster GKE possono condividere.
Puoi utilizzare i pool di archiviazione Hyperdisk per gestire le risorse di archiviazione in modo più efficiente e con un buon rapporto costi/benefici. In questo modo puoi sfruttare tecnologie di efficienza come la deduplica e il thin provisioning.
In questa guida utilizzerai la zona us-east4-c
per creare il pool di archiviazione Hyperdisk Balanced e altre risorse.
Considerazioni sulla pianificazione
Tieni presente i seguenti requisiti e limitazioni prima di eseguire il provisioning e utilizzare il pool di archiviazione Hyperdisk.
Creazione e gestione dei pool di archiviazione
Si applicano i seguenti requisiti e limitazioni:
- Si applicano tutte le limitazioni dei pool di archiviazione Hyperdisk di Compute Engine.
- Si applicano tutte le limitazioni relative alla creazione di dischi in un pool di archiviazione Hyperdisk.
- Il tipo di pool dello spazio di archiviazione Hyperdisk che crei determina il tipo di dischi che puoi creare nel pool dello spazio di archiviazione. Consulta la sezione Tipi di pool di archiviazione Hyperdisk.
Eseguire il provisioning dei dischi di avvio nei pool di archiviazione
Si applicano i seguenti requisiti e limitazioni:
- Assicurati che le località dei nodi del cluster e le località dei nodi del pool di nodi corrispondano esattamente alle zone del pool di archiviazione. Questa limitazione non si applica se hai attivato il provisioning automatico dei nodi. Se necessario, il provisioning automatico dei nodi può creare automaticamente pool di nodi nelle zone corrette.
- Assicurati che il tipo di macchina su cui è in esecuzione il pod supporti l'attacco del tipo di disco Hyperdisk bilanciato. Hyperdisk Throughput non è supportato come disco di avvio. Consulta la documentazione relativa al supporto dei tipi di macchine Hyperdisk.
- Puoi eseguire il provisioning dei dischi di avvio nei pool di archiviazione solo nei pool di nodi creati o aggiornati manualmente.
- Quando i nodi vengono creati automaticamente tramite il provisioning automatico dei nodi, i dischi di avvio di questi nodi non possono essere inseriti in un pool di archiviazione.
Eseguire il provisioning del disco collegato nei pool di archiviazione
Si applicano i seguenti requisiti e limitazioni:
- La versione minima di GKE richiesta per il provisioning dei dischi collegati nei pool di archiviazione è 1.29.2-gke.1035000 e successive.
- Assicurati che il driver CSI per il disco permanente di Compute Engine sia abilitato. Il driver per i dischi permanenti di Compute Engine è attivo per impostazione predefinita nei nuovi cluster Autopilot e standard e non può essere disattivato o modificato nei cluster Autopilot. Per attivare il driver, consulta Attivare il driver CSI del disco permanente di Compute Engine in un cluster esistente.
- Assicurati che il pool di archiviazione si trovi in almeno una delle sedi dei nodi del cluster e del pool di nodi.
- Puoi eseguire il provisioning solo dei dischi Hyperdisk Throughput e Hyperdisk Balanced collegati nei pool di archiviazione. Il tipo di disco collegato deve corrispondere al tipo del pool di archiviazione. Per ulteriori informazioni, vedi Tipi di pool di archiviazione Hyperdisk.
- Assicurati che il tipo di macchina su cui è in esecuzione il pod supporti il collegamento del tipo di disco che utilizzi dal pool di archiviazione. Per ulteriori informazioni, consulta Supporto del tipo di macchina Hyperdisk.
Quota
Quando crei un pool di archiviazione Hyperdisk, puoi configurarlo con provisioning standard o avanzato per la capacità e le prestazioni. Se vuoi aumentare la quota per capacità, throughput o IOPS, richiedi una quota più alta per il filtro della quota pertinente.
Per ulteriori informazioni, consulta Visualizzare le quote per il progetto e Richiedere una quota superiore.
Utilizza i seguenti filtri di quota per i pool di archiviazione bilanciati Hyperdisk:
HDB-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region
: per aumentare la capacità con il provisioning della capacità avanzata.HDB-STORAGE-POOL-TOTAL-ADVANCED-IOPS-per-project-region
: per aumentare le IOPS con il provisioning delle prestazioni avanzate.HDB-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region
: per aumentare la velocità effettiva con il provisioning del rendimento avanzato.HDB-TOTAL-GB-per-project-region
: per aumentare la capacità con il provisioning della capacità standard.HDB-TOTAL-IOPS-per-project-region
: per aumentare le IOPS con il provisioning delle prestazioni standard.HDB-TOTAL-THROUGHPUT-per-project-region
: per aumentare la velocità effettiva con il provisioning delle prestazioni standard.
Utilizza i seguenti filtri di quota per i pool di archiviazione Hyperdisk Throughput:
HDT-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region
: per aumentare la capacità con il provisioning della capacità avanzata.HDT-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region
: per aumentare la velocità effettiva con il provisioning del rendimento avanzato.HDT-TOTAL-GB-per-project-region
: per aumentare la capacità con il provisioning della capacità standard.HDT-TOTAL-THROUGHPUT-per-project-region
: per aumentare la velocità effettiva con il provisioning delle prestazioni standard.
Ad esempio, se vuoi aumentare la capacità totale dei pool di archiviazione bilanciati Hyperdisk con provisioning della capacità avanzata, per progetto e per regione, richiedi una quota maggiore per il seguente filtro:
hdb-storage-pool-total-advanced-capacity-per-project-region
.
Prezzi
Per i dettagli sui prezzi, consulta Prezzi dei pool di archiviazione Hyperdisk .
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installa e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo
gcloud components update
.
- Esamina le regioni e le zone supportate per la creazione del pool di archiviazione Hyperdisk bilanciato.
Creare un pool di archiviazione Hyperdisk
Crea un pool di archiviazione Hyperdisk prima di eseguire il provisioning dei dischi di avvio o dei dischi collegati in quel pool di archiviazione. Per ulteriori informazioni, consulta Creare pool di archiviazione Hyperdisk.
Assicurati di creare pool di archiviazione in una delle zone supportate.
Ad esempio, utilizza il seguente comando per creare un pool di archiviazione Hyperdisk bilanciato con capacità avanzata e prestazioni avanzate e per eseguire il provisioning di una capacità di 10 TB, 10000 IOPS/s e una velocità effettiva di 1024 MB/s nella zona us-east4-c
:
export PROJECT_ID=PROJECT_ID
export ZONE=us-east4-c
gcloud compute storage-pools create pool-$ZONE \
--provisioned-capacity=10tb --storage-pool-type=hyperdisk-balanced \
--zone=$ZONE --project=$PROJECT_ID --capacity-provisioning-type=advanced \
--performance-provisioning-type=advanced --provisioned-iops=10000 \
--provisioned-throughput=1024
Sostituisci PROJECT_ID
con l'ID progetto del tuo account Google Cloud.
Ispeziona le zone del pool di archiviazione
Per i cluster Autopilot e i cluster standard con il provisioning automatico dei nodi attivo, puoi creare un pool di archiviazione in qualsiasi zona all'interno della regione del cluster. Se non esiste un pool di nodi nella zona in cui hai creato il pool di archiviazione, i pod rimangono nello stato
Pending
finché il gestore della scalabilità automatica del cluster GKE non può eseguire il provisioning di un nuovo pool di nodi nella zona.Per i cluster standard senza provisioning automatico dei nodi, crea pool di archiviazione nelle zone dei nodi predefinite del cluster, poiché i pool di archiviazione sono risorse zonali. Puoi impostare le zone dei nodi del tuo cluster utilizzando il flag
--node-locations
.- Per i cluster di zona, se non specifichi
--node-locations
, tutti i nodi vengono creati nella zona principale del cluster. - Per i cluster regionali, se non specifichi
--node-locations
, GKE distribuisce i nodi worker in tre zone scelte in modo casuale all'interno della regione.
- Per i cluster di zona, se non specifichi
Per controllare le zone dei nodi predefinite di un cluster, esegui il comando seguente:
gcloud container clusters describe CLUSTER_NAME | yq '.locations'
Sostituisci CLUSTER_NAME
con il nome del cluster
che stai creando durante il provisioning di un disco di avvio o di un disco collegato.
Esegui il provisioning di un disco di avvio GKE in un pool dello spazio di archiviazione Hyperdisk
Puoi eseguire il provisioning di un disco di avvio GKE in un pool di archiviazione Hyperdisk quando esegui una delle seguenti operazioni:
- Quando crei un nuovo cluster GKE
- Quando crei un nuovo pool di nodi
- Durante l'aggiornamento di un pool di nodi esistente
Quando crei un cluster
Per creare un cluster GKE con dischi di avvio di cui è stato eseguito il provisioning in un pool di archiviazione, utilizza il seguente comando:
gcloud container clusters create CLUSTER_NAME \
--disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
--node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
--zone=ZONE
Sostituisci quanto segue:
CLUSTER_NAME
: fornisci un nome univoco per il cluster che stai creando.DISK_TYPE
: impostalo suhyperdisk-balanced.
Se non viene inserito nulla, il tipo di disco predefinito è Hyperdisk bilanciato.STORAGE_POOL,[...]
: un elenco separato da virgole di percorsi delle risorse del pool di archiviazione (ad esempioprojects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
) dove verrà eseguito il provisioning dei dischi di avvio del cluster. Assicurati che le zone nei percorsi delle risorse del pool di archiviazione corrispondano a quelle in--node-locations
.ZONE,[...]
: un elenco separato da virgole delle zone in cui deve essere replicata l'impronta del tuo nodo. Per i cluster regionali, puoi specificare le regioni. Tutte le zone devono trovarsi nella stessa regione del cluster, specificata dagli indicatori-location
,--zone
o--region
.MACHINE_TYPE
: il tipo di macchina supportato che vuoi utilizzare per i tuoi nodi.ZONE
: la zona in cui vuoi creare il tuo cluster. Utilizza il flag—region
per creare un cluster a livello di area geografica.
Quando crei un pool di nodi
Per creare un pool di nodi GKE con dischi di avvio di cui è stato eseguito il provisioning in un pool di archiviazione, utilizza il seguente comando:
gcloud container node-pools create NODE_POOL_NAME \
--disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
--node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
--zone=ZONE --cluster=CLUSTER_NAME
Sostituisci quanto segue:
NODE_POOL_NAME
: fornisci un nome univoco per il pool di nodi che stai creando.DISK_TYPE
: impostalo suhyperdisk-balanced.
Se non viene inserito nulla, il tipo di disco predefinito è Hyperdisk bilanciato.STORAGE_POOL,[...]
: un elenco separato da virgole di percorsi delle risorse del pool di archiviazione (ad esempioprojects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
) dove verrà eseguito il provisioning dei dischi di avvio del cluster. Assicurati che le zone nei percorsi delle risorse del pool di archiviazione corrispondano ai valori in--node-locations
.ZONE,[...]
: un elenco separato da virgole delle zone in cui deve essere replicata l'impronta del tuo nodo. Tutte le zone devono trovarsi nella stessa regione del cluster, specificata dagli indicatori-location
,--zone
o--region
.MACHINE_TYPE
: il tipo di macchina supportato che vuoi utilizzare per i tuoi nodi.ZONE
: la zona in cui vuoi creare il pool di nodi.CLUSTER_NAME
: un cluster esistente in cui stai creando il pool di nodi.
Quando aggiorni un pool di nodi
Puoi utilizzare un comando update
per aggiungere o sostituire i pool di archiviazione in un pool di nodi.
Questo comando non può essere utilizzato per rimuovere i pool di archiviazione da un pool di nodi.
Per aggiornare un pool di nodi GKE in modo che i relativi dischi di avvio vengano configurati in un pool di archiviazione, utilizza il seguente comando.
gcloud container node-pools update NODE_POOL_NAME \
--storage-pools=STORAGE_POOL,[...] \
--zone=ZONE --cluster=CLUSTER_NAME
NODE_POOL_NAME
: il nome di un pool di nodi esistente che vuoi aggiornare per utilizzare un pool di archiviazione.STORAGE_POOL,[...]
: un elenco separato da virgole di percorsi delle risorse del pool di archiviazione esistenti (ad esempioprojects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
). Assicurati che le zone nei percorsi delle risorse del pool di archiviazione corrispondano alla zona del pool di nodi che stai aggiornando.ZONE
: la zona in cui si trova il pool di nodi.CLUSTER_NAME
: il nome del cluster GKE a cui appartiene questo pool di nodi.
Questa modifica richiede la ricreazione dei nodi, il che può causare interruzioni dei carichi di lavoro in esecuzione. Per informazioni dettagliate su questa modifica specifica, individua la riga corrispondente nella tabella Modifiche manuali che ricreano i nodi utilizzando una strategia di upgrade dei nodi senza rispettare i criteri di manutenzione. Per scoprire di più sugli aggiornamenti dei nodi, consulta Pianificare le interruzioni per gli aggiornamenti dei nodi.
Esegui il provisioning di un disco collegato a GKE in un pool dello spazio di archiviazione Hyperdisk
In questa sezione:
- Crea un nuovo cluster GKE con dischi collegati provisionati in un pool di archiviazione.
- Crea un StorageClass per il provisioning dinamico di un
PersistentVolume
(PV) quando un pod lo richiede tramite un PersistentVolumeClaim (PVC). Affinché un PV possa utilizzare le risorse condivise del pool di archiviazione, devi specificare il pool di archiviazione utilizzando il parametro
storage-pools
nel valore StorageClass. StorageClass viene poi utilizzato in un PVC per eseguire il provisioning del volume Hyperdisk bilanciato che verrà utilizzato dal pod. - Crea un PVC per richiedere un PV, ovvero uno spazio di archiviazione Hyperdisk, per un pod dal tuo cluster GKE. In questo modo puoi usufruire delle risorse condivise del pool di archiviazione.
- Crea un deployment che utilizzi un PVC per assicurarti che la tua applicazione abbia accesso allo spazio di archiviazione permanente anche dopo i riavvii e la riprogrammazione dei pod.
Crea un cluster GKE
Prima di iniziare, consulta le considerazioni per il provisioning di un disco collegato.
Autopilot
Per creare un cluster Autopilot utilizzando gcloud CLI, consulta Creare un cluster Autopilot.
Esempio:
gcloud container clusters create-auto CLUSTER_NAME --region=REGION
Sostituisci quanto segue:
CLUSTER_NAME
: fornisci un nome univoco per il cluster che stai creando.REGION
: la regione in cui stai creando il cluster.
Per selezionare un tipo di macchina supportato, specifica cloud.google.com/compute-class: Performance
nodeSelector durante la creazione di un deployment. Per un elenco delle serie di macchine Compute Engine disponibili con la classe di calcolo Performance, consulta Serie di macchine supportate.
Standard
Per creare un cluster zonale standard utilizzando gcloud CLI, consulta Creare un cluster zonale.
Per creare un cluster a livello di area geografica standard utilizzando gcloud CLI, consulta Creare un cluster a livello di area geografica.
Esempio:
gcloud container clusters create CLUSTER_NAME --zone=ZONE --project=PROJECT_ID --machine-type=MACHINE_TYPE --disk-type="DISK_TYPE"
Sostituisci quanto segue:
CLUSTER_NAME
: fornisci un nome univoco per il cluster che stai creando.ZONE
: la zona in cui stai creando il cluster. Utilizza il flag—region
per creare un cluster a livello di area geografica.PROJECT_ID
: l'ID progetto del tuo account Google Cloud.MACHINE_TYPE
: il tipo di macchina supportato che vuoi utilizzare per i tuoi nodi.DISK_TYPE
: impostalo suhyperdisk-balanced.
Se non viene inserito nulla, il tipo di disco predefinito è Hyperdisk bilanciato.
Crea una classe StorageClass
In Kubernetes, per indicare che vuoi che il PV venga creato all'interno di un pool di archiviazione, usa una classe di archiviazione. Per saperne di più, consulta StorageClasses.
Per creare un nuovo StorageClass con il livello di throughput o IOPS desiderato:
- Utilizza
pd.csi.storage.gke.io
nel campo del provisioning. - Specifica il tipo di spazio di archiviazione Hyperdisk bilanciato.
- Specifica il parametro
storage-pools
con il valore come elenco di pool di archiviazione specifici che vuoi utilizzare. Ogni pool di archiviazione nell'elenco deve essere specificato nel formato:projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME.
- (Facoltativo) Specifica i parametri di rendimento
provisioned-throughput-on-create
eprovisioned-iops-on-create.
Ogni tipo di hyperdisk ha valori predefiniti per le prestazioni determinati dalle dimensioni iniziali del disco di cui è stato eseguito il provisioning. Quando crei un StorageClass, puoi specificare facoltativamente i seguenti parametri a seconda del tipo di hyperdisk. Se ometti questi parametri, GKE utilizza i valori predefiniti del tipo di disco in base alla capacità.
Parametro | Tipo di Hyperdisk | Utilizzo |
---|---|---|
provisioned-throughput-on-create |
Hyperdisk bilanciato, Hyperdisk Throughput | Esprimere il valore della velocità effettiva in MiBps utilizzando il qualificatore "Mi". Ad esempio, se la velocità effettiva richiesta è 250 MiBps, specifica "250Mi" quando crei StorageClass. |
provisioned-iops-on-create |
Hyperdisk bilanciato, IOPS Hyperdisk | Il valore IOPS deve essere espresso senza alcun qualificatore. Ad esempio, se hai bisogno di 7000 IOPS, specifica "7000" durante la creazione di StorageClass. |
Per indicazioni sui valori consentiti per il throughput o le IOPS, consulta Pianificare il livello di prestazioni per il volume HyperDisk.
Utilizza il seguente manifest per creare e applicare una classe di archiviazione denominata storage-pools-sc
per eseguire il provisioning dinamico di un PV nel pool di archiviazione
projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
:
kubectl apply -f - <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: storage-pools-sc
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
type: hyperdisk-balanced
provisioned-throughput-on-create: "140Mi"
provisioned-iops-on-create: "3000"
storage-pools: projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
EOF
Se utilizzi volumeBindingMode: WaitForFirstConsumer
in questo StorageClass,
l'associazione e il provisioning di un PVC vengono ritardati fino a quando non viene creato un
pod che utilizza il PVC.
Questo approccio garantisce che il provisioning del PV non venga eseguito prematuramente
e che esista una corrispondenza tra le zone del PV e del pod che lo utilizza. Se le zone non corrispondono, il pod rimane in stato Pending
.
Crea un PersistentVolumeClaim (PVC)
Crea un PVC che fa riferimento alla classe di archiviazione storage-pools-sc
che hai creato.
Utilizza il seguente manifest per creare un PVC denominato my-pvc
con 2048 GiB come
capacità di archiviazione target per il volume Hyperdisk bilanciato:
kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: storage-pools-sc
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2048Gi
EOF
Crea un deployment che utilizza la PVC
Quando utilizzi i pod con i volumi permanenti, utilizza un controller del carico di lavoro come un deployment o un StatefulSet.
Per assicurarti che i pod possano essere pianificati in un pool di nodi con una serie di macchine che supporta Hyperdisk Balanced, configura un deployment con il selettore di nodi cloud.google.com/machine-family
. Per ulteriori informazioni, consulta Supporto dei tipi di macchine per Hyperdisk. Nel seguente deployment di esempio utilizzi la serie di macchine c3
.
Crea e applica il seguente manifest per configurare un pod per il deployment di un server web Postgres utilizzando la PVC creata nella sezione precedente:
Autopilot
Nei cluster Autopilot, specifica cloud.google.com/compute-class: Performance
nodeSelector per eseguire il provisioning di un volume Hyperdisk bilanciato. Per ulteriori informazioni, consulta Richiedere un nodo dedicato per un pod.
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
nodeSelector:
cloud.google.com/machine-family: c3
cloud.google.com/compute-class: Performance
containers:
- name: postgres
image: postgres:14-alpine
args: [ "sleep", "3600" ]
volumeMounts:
- name: sdk-volume
mountPath: /usr/share/data/
volumes:
- name: sdk-volume
persistentVolumeClaim:
claimName: my-pvc
EOF
Standard
Nei cluster standard senza il provisioning automatico dei nodi abilitato, assicurati che un pool di nodi con la serie di macchine specificata sia attivo e in esecuzione prima di creare il deployment. In caso contrario, la pianificazione del pod non va a buon fine.
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
nodeSelector:
cloud.google.com/machine-family: c3
containers:
- name: postgres
image: postgres:14-alpine
args: [ "sleep", "3600" ]
volumeMounts:
- name: sdk-volume
mountPath: /usr/share/data/
volumes:
- name: sdk-volume
persistentVolumeClaim:
claimName: my-pvc
EOF
Verifica che il deployment sia stato creato correttamente:
kubectl get deployment
Potrebbero essere necessari alcuni minuti per il completamento del provisioning delle istanze Hyperdisk e la visualizzazione di uno stato READY
.
Verifica se è stato eseguito il provisioning del disco collegato
Controlla se il PVC denominato
my-pvc
è stato associato correttamente a un PV:kubectl get pvc my-pvc
L'output è simile al seguente:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-pvc Bound pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 2Ti RWO storage-pools-sc 2m24s
Verifica se è stato eseguito il provisioning del volume come specificato in StorageClass e PVC:
gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
L'output è simile al seguente:
NAME STATUS PROVISIONED_IOPS PROVISIONED_THROUGHPUT SIZE_GB pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 READY 3000 140 2048
Creare snapshot e ripristinare i dischi collegati nei pool di archiviazione
Non è consentito spostare i dischi all'interno o all'esterno di un pool di archiviazione. Per spostare un disco in un pool di archiviazione o al di fuori, ricrea il disco da uno snapshot. Per ulteriori informazioni, consulta Modificare il tipo di disco.
In questa sezione:
- Scrivi un file di test sul disco di cui è stato eseguito il provisioning nel pod.
- Crea uno snapshot del volume ed elimina il file di test dal disco.
- Ripristina lo snapshot su un nuovo disco all'interno dello stesso pool di archiviazione, recuperando efficacemente i dati eliminati.
Crea un file di test
Per creare e verificare un file di test:
Recupera il nome del pod del deployment Postgres:
kubectl get pods -l app=postgres
L'output è simile al seguente:
NAME READY STATUS RESTARTS AGE postgres-78fc84c9ff-77vx6 1/1 Running 0 44s
Crea un file di test
hello.txt
nel pod:kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'echo "Hello World!" > /usr/share/data/hello.txt'
Verifica che il file di test sia stato creato:
kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!
Crea uno snapshot del volume ed elimina il file di test
Per creare e verificare uno snapshot:
Crea una classe VolumeSnapshotClass che specifica come deve essere acquisito e gestito lo snapshot dei volumi:
kubectl apply -f - <<EOF apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: my-snapshotclass driver: pd.csi.storage.gke.io deletionPolicy: Delete EOF
Crea un VolumeSnapshot e acquisisci lo snapshot dal volume associato al
my-pvc
PersistentVolumeClaim:kubectl apply -f - <<EOF apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: my-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: persistentVolumeClaimName: my-pvc EOF
Verifica che i contenuti dello snapshot del volume siano stati creati:
kubectl get volumesnapshotcontents
L'output è simile al seguente:
NAME READYTOUSE RESTORESIZE DELETIONPOLICY DRIVER VOLUMESNAPSHOTCLASS VOLUMESNAPSHOT VOLUMESNAPSHOTNAMESPACE AGE snapcontent-e778fde2-5f1c-4a42-a43d-7f9d41d093da false 2199023255552 Delete pd.csi.storage.gke.io my-snapshotclass my-snapshot default 33s
Verifica che lo snapshot sia pronto per l'uso:
kubectl get volumesnapshot \ -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
L'output è simile al seguente:
NAME READY my-snapshot true
Elimina il file di test originale
hello.txt
creato nel podpostgres-78fc84c9ff-77vx6
:kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'rm /usr/share/data/hello.txt'
Ripristinare lo snapshot del volume
Per ripristinare l'istantanea del volume e i dati:
Crea una nuova PVC che ripristina i dati da uno snapshot e assicurati che il nuovo volume sia eseguito nel medesimo pool di archiviazione (
storage-pools-sc
) del volume originale. Applica il seguente manifest:kubectl apply -f - <<EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: dataSource: name: my-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: storage-pools-sc accessModes: - ReadWriteOnce resources: requests: storage: 2048Gi EOF
Aggiorna il deployment esistente denominato
postgres
in modo che utilizzi il PVC appena ripristinato che hai appena creato. Applica il seguente manifest:kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: postgres spec: selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: nodeSelector: cloud.google.com/machine-family: c3 containers: - name: postgres image: google/cloud-sdk:slim args: [ "sleep", "3600" ] volumeMounts: - name: sdk-volume mountPath: /usr/share/data/ volumes: - name: sdk-volume persistentVolumeClaim: claimName: pvc-restore EOF
Ottieni il nome del pod appena creato che fa parte del deployment
postgres
:kubectl get pods -l app=postgres
L'output è simile al seguente:
NAME READY STATUS RESTARTS AGE postgres-59f89cfd8c-42qtj 1/1 Running 0 40s
Verifica che il file
hello.txt
, eliminato in precedenza, esista ora nel nuovo pod (postgres-59f89cfd8c-42qtj
) dopo il ripristino del volume dallo snapshot:kubectl exec postgres-59f89cfd8c-42qtj \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!
Ciò conferma che la procedura di snapshot e ripristino è stata completata correttamente e che i dati dello snapshot sono stati ripristinati nella nuova PV accessibile al pod.
Verifica che il volume creato dallo snapshot si trovi all'interno del pool di archiviazione:
kubectl get pvc pvc-restore
L'output è simile al seguente:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-restore Bound pvc-b287c387-bc51-4100-a00e-b5241d411c82 2Ti RWO storage-pools-sc 2m24s
Verifica se il nuovo volume è stato eseguito come specificato in StorageClass e PVC:
gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
L'output è simile al seguente, dove puoi vedere il nuovo volume
pvc-b287c387-bc51-4100-a00e-b5241d411c82
provisioned nello stesso pool di archiviazione.NAME STATUS PROVISIONED_IOPS PROVISIONED_THROUGHPUT SIZE_GB pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 READY 3000 140 2048 pvc-b287c387-bc51-4100-a00e-b5241d411c82 READY 3000 140 2048
In questo modo, il volume ripristinato beneficia delle risorse e delle funzionalità condivise del pool.
Esegui la migrazione dei volumi esistenti in un pool di archiviazione
Utilizza gli snapshot e il ripristino per eseguire la migrazione dei volumi esistenti al di fuori di un pool di archiviazione in un pool di archiviazione.
Assicurati che siano soddisfatte le seguenti condizioni:
- Il nuovo PVC
pvc-restore
fa riferimento a una classe di archiviazione che specifica il parametrostorage-pools
, che rimanda al pool di archiviazione in cui vuoi spostare il volume. - Il PV di origine di cui viene acquisito lo snapshot deve essere associato a un PVC con una
Classe di archiviazione che non specifica il parametro
storage-pools
.
Dopo aver eseguito il ripristino da uno snapshot in un nuovo volume, puoi eliminare il PVC e il PV di origine.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi, elimina le risorse di archiviazione che hai creato in questa guida. Elimina prima tutti i dischi all'interno del pool di archiviazione, quindi elimina il pool di archiviazione.
Elimina il disco di avvio
Quando elimini un nodo (riducendo il pool di nodi) o un intero pool di nodi, i dischi di avvio associati vengono eliminati automaticamente. Puoi anche eliminare il cluster per eliminare automaticamente i dischi di avvio di tutti i pool di nodi al suo interno.
Per ulteriori informazioni, vedi:
Elimina il disco collegato
Per eliminare il disco collegato sottoposto a provisioning in un pool di archiviazione Hyperdisk:
Elimina il pod che utilizza la PVC:
kubectl delete deployments postgres
Elimina il PVC che utilizza la classe di archiviazione del pool di archiviazione Hyperdisk.
kubectl delete pvc my-pvc
Verifica che la PVC
pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6
sia stata eliminata:gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
Elimina il pool di archiviazione Hyperdisk
Elimina il pool di archiviazione Hyperdisk con il seguente comando:
gcloud compute storage-pools delete pool-us-east4-c --zone=us-east4-c --project=my-project
Passaggi successivi
- Consulta la sezione Risoluzione dei problemi di archiviazione in GKE.
- Scopri di più sul driver CSI per il disco permanente su GitHub.