Questa pagina descrive come i cluster Google Kubernetes Engine (GKE) possono eseguire il pool e condividere capacità di archiviazione, velocità effettiva e IOPS su più dischi utilizzando i pool di archiviazione GKE Hyperdisk.
Panoramica
I pool di archiviazione raggruppano logicamente i dispositivi di archiviazione fisici, consentendoti di segmentare le risorse. Puoi eseguire il provisioning di Google Cloud Hyperdisk all'interno di questi pool di archiviazione, che creano sostanzialmente pool di archiviazione Hyperdisk. I pool di archiviazione Hyperdisk offeriscono 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 a costi contenuti. Ciò ti consente di sfruttare tecnologie per l'efficienza come la deduplicazione 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 tutti i limiti della creazione di dischi in un pool di archiviazione Hyperdisk.
- Il tipo di pool di archiviazione Hyperdisk creato determina e il tipo di dischi che puoi creare nel pool di archiviazione. Consulta la sezione Tipi di pool di archiviazione Hyperdisk.
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 restrizione non si applica se disponi del provisioning automatico dei nodi in un bucket in cui è abilitato il controllo delle versioni. Se necessario, il provisioning automatico dei nodi può creare automaticamente pool di nodi nelle zone corrette.
- Assicurati che il tipo di macchina che esegue il pod supporti il collegamento di Hyperdisk Tipo di disco bilanciato. La velocità effettiva Hyperdisk non è supportata come disco di avvio. Consulta la documentazione di assistenza per i tipi di macchine Hyperdisk.
- Puoi eseguire il provisioning dei dischi di avvio nei pool di archiviazione solo nelle istanze create manualmente o pool di nodi aggiornato.
- Quando i nodi vengono creati automaticamente utilizzando il provisioning automatico dei nodi, i dischi di avvio per 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:
- Versione GKE minima richiesta per il provisioning dei dischi collegati nei pool di archiviazione è 1.29.2-gke.1035000 e successivi.
- 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 località dei nodi del delle località del cluster e dei nodi del pool di nodi.
- Puoi eseguire il provisioning solo della velocità effettiva Hyperdisk e Dischi collegati bilanciati nei pool di archiviazione. Il tipo di disco collegato deve che corrispondano al tipo di pool di archiviazione. Per saperne di più, 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 Hyperdisk Balanced:
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 il numero di IOPS con il provisioning delle prestazioni avanzato.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 con velocità effettiva Hyperdisk:
HDT-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region
: per aumentare la capacità con il provisioning avanzato della capacità.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 per i 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 attività:
- 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, scarica la versione più recente
eseguendo
gcloud components update
.
- Esamina le regioni e le zone supportate per creare il pool di archiviazione Hyperdisk Balanced.
Crea un pool di archiviazione Hyperdisk
Crea un pool di archiviazione Hyperdisk prima di eseguire il provisioning dei dischi di avvio o del collegamento i dischi permanenti in quel pool di archiviazione. Per maggiori informazioni, vedi Creare pool di archiviazione Hyperdisk.
Assicurati di creare pool di archiviazione in una delle zone supportate.
Ad esempio, utilizza il comando seguente per creare un pool di archiviazione bilanciato Hyperdisk con
Capacità avanzata e prestazioni avanzate ed provisioning di 10 TB di capacità, 10.000 IOPS/s
e una velocità effettiva di 1024 Mbps 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 Standard con provisioning automatico dei nodi attivata, 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 vuoi creare 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 di archiviazione Hyperdisk
Puoi eseguire il provisioning di un disco di avvio GKE in un pool di archiviazione Hyperdisk durante una qualsiasi delle le seguenti:
- Quando crei un nuovo cluster GKE
- Durante la creazione di un nuovo pool di nodi
- Quando si aggiorna un pool di nodi esistente
Durante la creazione di un cluster
Per creare un cluster GKE con dischi di avvio di cui è stato eseguito il provisioning in un pool di archiviazione, utilizza questo 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 dei percorsi delle risorse del pool di archiviazione (esempio,projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
) in cui 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 nel tuo cluster. Usa il flag—region
per creare un cluster a livello di regione.
Durante la creazione di 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 questo 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 dei 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 nel pool di archiviazione percorsi delle risorse corrispondano ai valori in--node-locations
.ZONE,[...]
: un elenco separato da virgole di zone in cui l'impronta del tuo nodo deve essere replicata. 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 crei il pool di nodi.
Durante l'aggiornamento di 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 elemento 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.
GKE aggiorna il pool di nodi in base alla strategia di upgrade del pool di nodi.
Esegui il provisioning di un disco collegato a GKE in un pool di archiviazione Hyperdisk
In questa sezione:
- Crei 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 utilizzi
risorse condivise del pool di archiviazione, specifica il pool di archiviazione utilizzando l'
storage-pools
nel tuo oggetto StorageClass. StorageClass viene quindi utilizzato in una PVC per il provisioning il volume bilanciato Hyperdisk che verrà utilizzato dal pod. - Crea una PVC per richiedere un volume permanente, ovvero una porzione di Hyperdisk per un pod del 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, esamina 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 di zona standard utilizzando gcloud CLI, consulta Creazione di un cluster di zona.
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. Usa il flag—region
per creare un cluster a livello di regione.PROJECT_ID
: il tuo account Google Cloud dell'ID progetto.MACHINE_TYPE
: il tipo di macchina supportato che vuoi utilizzare per i 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 il volume permanente deve essere creato all'interno di un pool di archiviazione, un oggetto StorageClass. Per saperne di più, vedi 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 archiviazione Hyperdisk Balanced.
- 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 | Esprimi il valore della velocità effettiva in MiBps usando il valore "Mi" qualificatore; ad esempio, se la velocità effettiva richiesta è 250 MiBps, specifica "250Mi" durante la creazione dell'oggetto StorageClass. |
provisioned-iops-on-create |
Hyperdisk bilanciato, Hyperdisk IOPS | Il valore IOPS deve essere espresso senza qualificatori. ad esempio, se hai bisogno di 7000 IOPS, specifica "7000" quando crei l'oggetto StorageClass. |
Per indicazioni sui valori consentiti per la velocità effettiva o il numero di IOPS, vedi Pianificare il livello delle 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
Utilizzando l'volumeBindingMode: WaitForFirstConsumer
in questo oggetto StorageClass,
l'associazione e il provisioning di una PVC
vengono ritardati fino a quando
Viene creato il pod che utilizza la PVC.
Questo approccio garantisce che il provisioning dell'oggetto PV non venga eseguito prematuramente,
e esiste una corrispondenza tra le zone tra il volume permanente e il pod che lo utilizza. Se le rispettive zone
non corrispondono, il pod rimane nello stato Pending
.
Crea un PersistentVolumeClaim (PVC)
Crea una PVC che faccia riferimento al valore StorageClass 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 pod con oggetti PersistentVolume, usa un controller dei carichi di lavoro ad esempio un deployment Deployment o uno StatefulSet.
garantire che i pod possano essere pianificati su un pool di nodi con una serie di macchine che supporti
Hyperdisk Bilanciato, configura un deployment con cloud.google.com/machine-family
selettore di nodi. Per ulteriori informazioni, consulta la sezione sul supporto del tipo di macchina per gli Hyperdisk. Nel seguente deployment di esempio utilizzi la serie di macchine c3
.
Crea e applica il manifest seguente per configurare un pod per il deployment di un Postgres server web 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
Controlla 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 di un pool di archiviazione, ricrea il disco da uno snapshot. Per ulteriori informazioni, consulta Cambiare 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:
Ottieni 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 un oggetto VolumeSnapshotClass che specifichi come viene creato lo snapshot dei tuoi volumi devono essere presi e gestiti:
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 oggetto VolumeSnapshot e acquisisci lo snapshot dal volume associato il PersistentVolumeClaim di
my-pvc
: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 lo snapshot e i dati del volume:
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
di cui è stato eseguito il provisioning 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
Ciò garantisce che il volume ripristinato tragga vantaggio dalle risorse e dalle 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:
- La nuova PVC
pvc-restore
fa riferimento a un oggetto StorageClass che specifica Il parametrostorage-pools
, che rimanda al pool di archiviazione su cui vuoi spostare il volume in cui viene eseguito il deployment. - Il volume permanente di origine di cui viene eseguito lo snapshot deve essere associato a un PVC con un
StorageClass 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 ed eliminare 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 di cui è stato eseguito il provisioning in un pool di archiviazione Hyperdisk:
Elimina il pod che utilizza la PVC:
kubectl delete deployments postgres
Elimina la PVC che utilizza il pool di archiviazione Hyperdisk StorageClass.
kubectl delete pvc my-pvc
Verifica che l'oggetto PVC
pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6
sia stato eliminato: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 Risoluzione dei problemi di archiviazione in GKE.
- Scopri di più sul driver CSI del disco permanente su GitHub.