Nesta página, descrevemos como os clusters do Google Kubernetes Engine (GKE) podem agrupar e compartilhar capacidade de armazenamento, capacidade de transferência e IOPS em discos usando pools de armazenamento do Hyperdisk do GKE.
Visão geral
Os pools de armazenamento agrupam logicamente dispositivos de armazenamento físico, permitindo segmentar seus recursos. É possível provisionar hiperdiscos do Google Cloud nesses pools de armazenamento, criando essencialmente pools de armazenamento de hiperdisco. Os pools de armazenamento de hiperdisco oferecem capacidade, capacidade de processamento e IOPS pré-provisionadas que os discos do cluster do GKE podem compartilhar.
É possível usar pools de armazenamento de hiperdisco para gerenciar seus recursos de armazenamento de maneira mais eficiente e econômica. Isso permite aproveitar tecnologias de eficiência, como desduplicação e provisionamento thin.
Neste guia, você usa a zona us-east4-c
para criar o pool de armazenamento balanceado por hiperdisco e outros recursos.
Considerações sobre planejamento
Considere os requisitos e limitações a seguir antes de provisionar e consumir seu pool de armazenamento de hiperdisco.
Como criar e gerenciar pools de armazenamento
Os seguintes requisitos e limitações se aplicam:
- Todas as limitações dos pools de armazenamento de hiperdisco do Compute Engine são aplicáveis.
- Todas as limitações de criação de discos em um pool de armazenamento de hiperdisco se aplicam.
- O tipo de pool de armazenamento de hiperdisco criado determina o tipo de discos que é possível criar no pool de armazenamento. Consulte Tipos de pools de armazenamento de hiperdisco.
Como provisionar discos de inicialização em pools de armazenamento
Os seguintes requisitos e limitações se aplicam:
- O provisionamento de discos de inicialização em pools de armazenamento não é compatível com pools de nós que têm o provisionamento automático de nós ativado.
- Verifique se os locais dos nós do cluster e os locais dos nós do pool de nós correspondem exatamente às zonas do pool de armazenamento.
- Verifique se o tipo de máquina que executa seu pod é compatível com a anexação do tipo de disco Hyperdisk Balanced. O Hyperdisk Throughput não é compatível como disco de inicialização. Consulte a documentação de suporte a tipos de máquinas do Hyperdisk.
- Só é possível provisionar discos de inicialização em pools de armazenamento em pools de nós criados ou atualizados manualmente.
Como provisionar discos anexados em pools de armazenamento
Os seguintes requisitos e limitações se aplicam:
- A versão mínima necessária do GKE para provisionar discos conectados em pools de armazenamento é 1.29.2-gke.1035000 e mais recente.
- Verifique se o driver CSI do disco permanente do Compute Engine está ativado. O driver de disco permanente do Compute Engine é ativado por padrão em novos clusters do Autopilot e Standard e não pode ser desativado ou editado em clusters do Autopilot. Para ativar o driver, consulte Como ativar o driver CSI do Persistent Disk do Compute Engine em um cluster atual.
- Verifique se o pool de armazenamento está em pelo menos um dos locais de nó do cluster e do pool de nós.
- Só é possível provisionar discos conectados de capacidade de processamento de hiperdisco e hiperdisco equilibrado em pools de armazenamento. O tipo do disco anexado precisa corresponder ao tipo do pool de armazenamento. Para mais informações, consulte Tipos de pools de armazenamento de hiperdisco.
- Em uma StorageClass, só é permitido um pool de armazenamento por zona.
- Em uma StorageClass, todos os pools de armazenamento precisam ter o tipo de pool de armazenamento.
- Verifique se o tipo de máquina que executa seu pod permite anexar o tipo de disco que você está usando do pool de armazenamento. Para mais informações, consulte Suporte a tipos de máquinas do Hyperdisk.
Cota
Ao criar um pool de armazenamento de hiperdisco, é possível configurá-lo com o provisionamento padrão ou avançado para capacidade e desempenho. Se quiser aumentar a cota de capacidade, capacidade de processamento ou IOPS, solicite uma cota maior para o filtro relevante.
Para mais informações, consulte Ver as cotas do seu projeto e Solicitar um ajuste de cota.
Use os seguintes filtros de cota para pools de armazenamento equilibrados do hiperdisco:
HDB-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region
: para aumentar a capacidade com o provisionamento de capacidade avançada.HDB-STORAGE-POOL-TOTAL-ADVANCED-IOPS-per-project-region
: para aumentar as IOPS com o provisionamento de desempenho avançado.HDB-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region
: para aumentar a capacidade de processamento com o provisionamento de desempenho avançado.HDB-TOTAL-GB-per-project-region
: para aumentar a capacidade com o provisionamento de capacidade padrão.HDB-TOTAL-IOPS-per-project-region
: para aumentar as IOPS com o provisionamento de desempenho padrão.HDB-TOTAL-THROUGHPUT-per-project-region
: para aumentar a capacidade de processamento com o provisionamento de desempenho padrão.
Use os seguintes filtros de cota para pools de armazenamento de capacidade de processamento de hiperdisco:
HDT-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region
: para aumentar a capacidade com o provisionamento de capacidade avançada.HDT-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region
: para aumentar a capacidade de processamento com o provisionamento de desempenho avançado.HDT-TOTAL-GB-per-project-region
: para aumentar a capacidade com o provisionamento de capacidade padrão.HDT-TOTAL-THROUGHPUT-per-project-region
: para aumentar a capacidade de processamento com o provisionamento de desempenho padrão.
Por exemplo, se você quiser aumentar a capacidade total dos pools de armazenamento equilibrados do Hyperdisk com provisionamento de capacidade avançado, por projeto e por região, solicite uma cota maior para o seguinte filtro:
hdb-storage-pool-total-advanced-capacity-per-project-region
Preços
Consulte os preços dos pools de armazenamento do Hyperdisk para mais detalhes.
Antes de começar
Antes de começar, veja se você realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a CLI do Google Cloud para essa tarefa,
instale e, em seguida,
inicialize a
CLI gcloud. Se você instalou a gcloud CLI anteriormente, instale a versão
mais recente executando
gcloud components update
.
- Confira as regiões e zonas compatíveis para criar seu pool de armazenamento balanceado de hiperdisco.
Criar um pool de armazenamento de hiperdisco
Crie um pool de armazenamento de hiperdisco antes de provisionar discos de inicialização ou discos anexados nesse pool de armazenamento. Para mais informações, consulte Criar pools de armazenamento do Hyperdisk.
Crie pools de armazenamento em uma das zonas compatíveis.
Por exemplo, use o comando a seguir para criar um pool de armazenamento equilibrado de hiperdisco com
capacidade avançada e desempenho avançado, além de provisionar 10 TB de capacidade, 10.000 IOPS/s
e 1.024 MBps de capacidade de processamento na 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
Substitua PROJECT_ID
pelo ID do projeto da sua Trusted Cloud by S3NS conta.
Inspecionar zonas de pool de armazenamento
Para clusters do Autopilot e clusters padrão com o provisionamento automático de nós ativado, é possível criar um pool de armazenamento em qualquer zona da região do cluster. Se não houver um pool de nós na zona em que você criou o pool de armazenamento, os pods vão permanecer no estado
Pending
até que o escalonador automático de cluster do GKE possa provisionar um novo pool de nós nessa zona.Para clusters padrão sem provisionamento automático de nós, crie pools de armazenamento nas zonas de nós padrão do cluster, já que os pools de armazenamento são recursos zonais. É possível definir as zonas de nó do cluster usando a flag
--node-locations
.- Para clusters zonais, se você não especificar o
--node-locations
, todos os nós serão criados na zona principal do cluster. - Para clusters regionais, se você não especificar o
--node-locations
, o GKE vai distribuir os nós de worker em três zonas escolhidas aleatoriamente na região.
- Para clusters zonais, se você não especificar o
Para inspecionar as zonas de nós padrão de um cluster, execute o seguinte comando:
gcloud container clusters describe CLUSTER_NAME | yq '.locations'
Substitua CLUSTER_NAME
pelo nome do cluster
que você criaria ao provisionar um disco de inicialização ou anexado.
Provisionar um disco de inicialização do GKE em um pool de armazenamento de hiperdisco
É possível provisionar um disco de inicialização do GKE em um pool de armazenamento de hiperdisco ao fazer qualquer uma das seguintes ações:
- Ao criar um cluster do GKE
- Ao criar um pool de nós
- Ao atualizar um pool de nós
Ao criar um cluster
Para criar um cluster do GKE com discos de inicialização provisionados em um pool de armazenamento, use o seguinte comando:
gcloud container clusters create CLUSTER_NAME \
--disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
--node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
--location=CONTROL_PLANE_LOCATION
Substitua:
CLUSTER_NAME
: forneça um nome exclusivo para o cluster que você está criando.DISK_TYPE
: defina comohyperdisk-balanced.
Se ficar em branco, o tipo de disco será Hyperdisk Balanced por padrão.STORAGE_POOL,[...]
: uma lista separada por vírgulas dos caminhos de recursos do pool de armazenamento (por exemplo,projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
) em que os discos de inicialização do cluster serão provisionados. Verifique se as zonas nos caminhos de recursos do pool de armazenamento correspondem às zonas em--node-locations
.ZONE,[...]
: uma lista separada por vírgulas de zonas em que a pegada do nó será replicada. Para clusters regionais, é possível especificar regiões. Todas as zonas precisam estar na mesma região que o cluster, especificada pela flag--location
.MACHINE_TYPE
: o tipo de máquina compatível que você quer usar para os nós.CONTROL_PLANE_LOCATION
: o local do Compute Engine do plano de controle do cluster. Forneça uma região para clusters regionais ou uma zona para clusters zonais.
Ao criar um pool de nós
Para criar um pool de nós do GKE com discos de inicialização provisionados em um pool de armazenamento, use o seguinte comando:
gcloud container node-pools create NODE_POOL_NAME \
--disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
--node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
--location=CONTROL_PLANE_LOCATION --cluster=CLUSTER_NAME
Substitua:
NODE_POOL_NAME
: forneça um nome exclusivo para o pool de nós que você está criando.DISK_TYPE
: defina comohyperdisk-balanced.
Se ficar em branco, o tipo de disco será Hyperdisk Balanced por padrão.STORAGE_POOL,[...]
: uma lista separada por vírgulas dos caminhos de recursos do pool de armazenamento (por exemplo,projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
) em que os discos de inicialização do cluster serão provisionados. Verifique se as zonas nos caminhos de recursos do pool de armazenamento correspondem aos valores em--node-locations
.ZONE,[...]
: uma lista separada por vírgulas de zonas em que a pegada do nó será replicada. Todas as zonas precisam estar na mesma região que o cluster, especificado pela flag-location
.MACHINE_TYPE
: o tipo de máquina compatível que você quer usar para os nós.CONTROL_PLANE_LOCATION
: o local do Compute Engine do plano de controle do cluster. Forneça uma região para clusters regionais ou uma zona para clusters zonais.CLUSTER_NAME
: um cluster em que você está criando o pool de nós.
Ao atualizar um pool de nós
É possível usar um comando update
para adicionar ou substituir pools de armazenamento em um pool de nós.
Esse comando não pode ser usado para remover pools de armazenamento de um pool de nós.
Para atualizar um pool de nós do GKE para que os discos de inicialização sejam provisionados em um pool de armazenamento, use o comando a seguir.
gcloud container node-pools update NODE_POOL_NAME \
--storage-pools=STORAGE_POOL,[...] \
--location=CONTROL_PLANE_LOCATION --cluster=CLUSTER_NAME
NODE_POOL_NAME
: o nome de um pool de nós que você quer atualizar para usar um pool de armazenamento.STORAGE_POOL,[...]
: uma lista separada por vírgulas de caminhos de recursos de pool de armazenamento atuais (por exemplo,projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
). Verifique se as zonas nos caminhos de recursos do pool de armazenamento correspondem à zona do pool de nós que você está atualizando.CONTROL_PLANE_LOCATION
: o local do Compute Engine do plano de controle do cluster. Forneça uma região para clusters regionais ou uma zona para clusters zonais.CLUSTER_NAME
: o nome do cluster do GKE a que este pool de nós pertence.
Essa mudança exige a recriação dos nós, o que pode causar interrupções nas cargas de trabalho em execução. Para mais detalhes sobre essa mudança específica, encontre a linha correspondente na tabela Alterações manuais que recriam os nós usando uma estratégia de upgrade de nós sem respeitar as políticas de manutenção. Para saber mais sobre atualizações de nós, consulte Planejar interrupções de atualização de nós.
Provisionar um disco anexado do GKE em um pool de armazenamento de hiperdisco
Nesta seção, você aprenderá a fazer o seguinte:
- Crie um cluster do GKE com discos anexados provisionados em um pool de armazenamento.
- Crie uma StorageClass para provisionar dinamicamente um
PersistentVolume
(PV) quando um pod o solicita por um PersistentVolumeClaim (PVC). Para que um PV consuma os recursos compartilhados do pool de armazenamento, especifique o pool usando o parâmetro
storage-pools
na StorageClass. A StorageClass é usada em um PVC para provisionar o volume do Hyperdisk Balanced que será usado pelo pod. - Crie um PVC para solicitar um PV, uma parte do armazenamento do hiperdisco, para um pod do cluster do GKE. Assim, você aproveita os recursos compartilhados do pool de armazenamento.
- Crie uma implantação que use um PVC para garantir que o aplicativo tenha acesso ao armazenamento permanente mesmo após reinicializações e reagendamentos de pods.
Criar um cluster do GKE
Antes de começar, leia as considerações sobre o provisionamento de um disco conectado.
Piloto automático
Para criar um cluster do Autopilot usando a CLI gcloud, consulte Criar um cluster do Autopilot.
Exemplo:
gcloud container clusters create-auto CLUSTER_NAME --location=CONTROL_PLANE_LOCATION
Substitua:
CLUSTER_NAME
: forneça um nome exclusivo para o cluster que você está criando.CONTROL_PLANE_LOCATION
: a região do Compute Engine do plano de controle do cluster.
Para selecionar um tipo de máquina compatível, especifique o cloud.google.com/compute-class: Performance
nodeSelector ao criar uma implantação. Para uma lista das séries de máquinas do Compute Engine disponíveis com a classe de computação de desempenho, consulte Séries de máquinas compatíveis.
Padrão
Para criar um cluster zonal padrão usando a CLI gcloud, consulte Como criar um cluster zonal.
Para criar um cluster regional padrão usando a CLI gcloud, consulte Como criar um cluster regional.
Exemplo:
gcloud container clusters create CLUSTER_NAME --location=CONTROL_PLANE_LOCATION --project=PROJECT_ID --machine-type=MACHINE_TYPE --disk-type="DISK_TYPE"
Substitua:
CLUSTER_NAME
: forneça um nome exclusivo para o cluster que você está criando.CONTROL_PLANE_LOCATION
: o local do Compute Engine do plano de controle do cluster. Forneça uma região para clusters regionais ou uma zona para clusters zonais.PROJECT_ID
: o ID do projeto da sua conta do Trusted Cloud by S3NS .MACHINE_TYPE
: o tipo de máquina compatível que você quer usar para os nós.DISK_TYPE
: defina comohyperdisk-balanced.
Se deixado em branco, o tipo de disco será Hyperdisk Balanced por padrão.
Criar um StorageClass
No Kubernetes, para indicar que você quer que seu PV seja criado em um pool de armazenamento, use um StorageClass. Para saber mais, consulte StorageClasses.
Para criar uma StorageClass com o nível de capacidade ou IOPS desejado:
- Use
pd.csi.storage.gke.io
no campo "provisionador". - Especifique o tipo de armazenamento de hiperdisco balanceado.
- Especifique o parâmetro
storage-pools
com o valor como uma lista de pools de armazenamento específicos que você quer usar. Cada pool de armazenamento na lista precisa ser especificado no formato:projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME.
- Se quiser, especifique os parâmetros de performance
provisioned-throughput-on-create
eprovisioned-iops-on-create.
.
Cada tipo de Hyperdisk tem valores padrão para o desempenho determinado pelo tamanho inicial do disco provisionado. Ao criar uma StorageClass, é possível especificar os parâmetros a seguir, dependendo do tipo de Hyperdisk. Se você omitir esses parâmetros, o GKE usará os padrões do tipo de disco com base em capacidade.
Parâmetro | Tipo de Hyperdisk | Uso |
---|---|---|
provisioned-throughput-on-create |
Hyperdisk equilibrado, capacidade de processamento do Hyperdisk | Exprime o valor da capacidade de processamento em MiB/s usando o qualificador "Mi". Por exemplo, se a capacidade necessária for de 250 MiB/s, especifique "250Mi" ao criar o StorageClass. |
provisioned-iops-on-create |
Hyperdisk balanceado, IOPS do Hyperdisk | O valor de IOPS precisa ser expresso sem qualificadores. Por exemplo, se você precisar de 7.000 IOPS, especifique "7000" ao criar o StorageClass. |
Para orientações sobre os valores permitidos para capacidade ou IOPS, consulte Planejar o nível de desempenho do volume do Hyperdisk.
Use o manifesto a seguir para criar e aplicar um StorageClass chamado storage-pools-sc
para provisionar dinamicamente um PV no pool de armazenamento
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
Ao usar o volumeBindingMode: WaitForFirstConsumer
nessa StorageClass,
a vinculação e o provisionamento de um PVC são adiados até que um
pod usando o PVC seja criado.
Essa abordagem garante que o PV não seja provisionado prematuramente e que haja correspondência de zona entre o PV e o pod que o consome. Se as zonas não corresponderem, o pod vai permanecer no estado Pending
.
Criar um PersistentVolumeClaim (PVC)
Crie um PVC que faça referência à StorageClass storage-pools-sc
criada.
Use o manifesto a seguir para criar um PVC chamado my-pvc
, com 2.048 GiB como a
capacidade de armazenamento desejada para o volume do Hyperdisk Balanced:
kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: storage-pools-sc
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2048Gi
EOF
Criar uma implantação que use o PVC
Ao usar pods com PersistentVolumes, use um controlador de carga de trabalho como uma implantação ou um StatefulSet.
Para garantir que os pods possam ser programados em um pool de nós com uma série de máquinas compatível com
o Hyperdisk Balanceado, configure uma implantação com o seletor de nós cloud.google.com/machine-family
. Para mais informações, consulte Suporte a tipos de máquinas para hiperdiscos. Você usa a série de máquinas c3
na seguinte
implantação de exemplo.
Crie e aplique o manifesto a seguir para configurar um pod para implantar um servidor da Web Postgres usando o PVC criado na seção anterior:
Piloto automático
Em clusters do Autopilot, especifique o cloud.google.com/compute-class: Performance
nodeSelector para provisionar um volume do Hyperdisk Balanceado. Para mais informações,
consulte Solicitar um nó dedicado para um 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
Padrão
Em clusters padrão sem o provisionamento automático de nós ativado, verifique se um pool de nós com a série de máquinas especificada está funcionando antes de criar a implantação. Caso contrário, o pod não será programado.
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
Confirme se a implantação foi criada:
kubectl get deployment
Pode levar alguns minutos para que as instâncias do Hyperdisk concluam o provisionamento e mostrem um status READY
.
Confirme se o disco anexado foi provisionado
Verifique se o PVC chamado
my-pvc
foi vinculado a um PV:kubectl get pvc my-pvc
O resultado será assim:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-pvc Bound pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 2Ti RWO storage-pools-sc 2m24s
Verifique se o volume foi provisionado conforme especificado na StorageClass e no PVC:
gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
O resultado será assim:
NAME STATUS PROVISIONED_IOPS PROVISIONED_THROUGHPUT SIZE_GB pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 READY 3000 140 2048
Criar snapshots e restaurar discos anexados em pools de armazenamento
Não é permitido mover discos para dentro ou fora de um pool de armazenamento. Para mover um disco para dentro ou fora de um pool de armazenamento, recrie o disco com base em um snapshot. Para mais informações, consulte Alterar o tipo de disco.
Nesta seção, você aprenderá a fazer o seguinte:
- Você grava um arquivo de teste no disco provisionado no seu pod.
- Crie um snapshot de volume e exclua o arquivo de teste desse disco.
- Restaure o snapshot para um novo disco no mesmo pool de armazenamento, recuperando os dados excluídos.
Criar um arquivo de teste
Para criar e verificar um arquivo de teste:
Consiga o nome do pod da implantação do Postgres:
kubectl get pods -l app=postgres
O resultado será assim:
NAME READY STATUS RESTARTS AGE postgres-78fc84c9ff-77vx6 1/1 Running 0 44s
Crie um arquivo de teste
hello.txt
no pod:kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'echo "Hello World!" > /usr/share/data/hello.txt'
Verifique se o arquivo de teste foi criado:
kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!
Criar um snapshot de volume e excluir o arquivo de teste
Para criar e verificar um snapshot:
Crie um VolumeSnapshotClass que especifique como o snapshot dos seus volumes deve ser feito e gerenciado:
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
Crie um VolumeSnapshot e faça o snapshot do volume vinculado ao
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
Verifique se o conteúdo do snapshot de volume foi criado:
kubectl get volumesnapshotcontents
O resultado será assim:
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
Confirme se o snapshot está pronto para uso:
kubectl get volumesnapshot \ -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
O resultado será assim:
NAME READY my-snapshot true
Exclua o arquivo de teste original
hello.txt
que foi criado no podpostgres-78fc84c9ff-77vx6
:kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'rm /usr/share/data/hello.txt'
Restaurar o snapshot do volume
Para restaurar o snapshot e os dados do volume, siga estas etapas:
Crie um novo PVC que restaure dados de um snapshot e garanta que o novo volume seja provisionado no mesmo pool de armazenamento (
storage-pools-sc
) do volume original. Aplique o seguinte manifesto: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
Atualize a implantação chamada
postgres
para que ela use o PVC restaurado que você acabou de criar. Aplique o seguinte manifesto: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
Consiga o nome do pod recém-criado que faz parte da implantação
postgres
:kubectl get pods -l app=postgres
O resultado será assim:
NAME READY STATUS RESTARTS AGE postgres-59f89cfd8c-42qtj 1/1 Running 0 40s
Verifique se o arquivo
hello.txt
, que foi excluído anteriormente, agora existe no novo pod (postgres-59f89cfd8c-42qtj
) após a restauração do volume do snapshot:kubectl exec postgres-59f89cfd8c-42qtj \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!
Isso valida se o processo de snapshot e restauração foi concluído com sucesso e se os dados do snapshot foram restaurados para o novo PV acessível ao pod.
Confirme se o volume criado com base no snapshot está localizado no seu pool de armazenamento:
kubectl get pvc pvc-restore
O resultado será assim:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-restore Bound pvc-b287c387-bc51-4100-a00e-b5241d411c82 2Ti RWO storage-pools-sc 2m24s
Verifique se o novo volume foi provisionado conforme especificado na StorageClass e no PVC:
gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
A saída é semelhante à seguinte, em que é possível ver o novo volume
pvc-b287c387-bc51-4100-a00e-b5241d411c82
provisionado no mesmo pool de armazenamento.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
Isso garante que o volume restaurado se beneficie dos recursos e das capacidades compartilhados do pool.
Migrar volumes atuais para um pool de armazenamento
Use o snapshot e a restauração para migrar volumes que existem fora de um pool de armazenamento para um pool de armazenamento.
Verifique se as seguintes condições são atendidas:
- O novo PVC
pvc-restore
faz referência a um StorageClass que especifica o parâmetrostorage-pools
, apontando para o pool de armazenamento em que você quer mover o volume. - O PV de origem que está sendo instantâneo precisa estar associado a um PVC com uma
StorageClass que não especifica o parâmetro
storage-pools
.
Depois de restaurar de um snapshot para um novo volume, você pode excluir o PVC e o PV de origem.
Limpar
Para evitar cobranças na sua conta do Trusted Cloud by S3NS , exclua os recursos de armazenamento criados neste guia. Primeiro, exclua todos os discos do pool de armazenamento e, depois, o pool.
Excluir o disco de inicialização
Quando você exclui um nó (reduzindo o escalonamento do pool de nós) ou um pool de nós inteiro, os discos de inicialização associados são excluídos automaticamente. Também é possível excluir o cluster para excluir automaticamente os discos de inicialização de todos os pools de nós nele.
Veja mais informações em:
Excluir o disco anexado
Para excluir o disco anexado provisionado em um pool de armazenamento de hiperdisco:
Exclua o pod que usa o PVC:
kubectl delete deployments postgres
Exclua o PVC que usa a StorageClass do pool de armazenamento de hiperdisco.
kubectl delete pvc my-pvc
Confirme se o PVC
pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6
foi excluído:gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
Excluir o pool de armazenamento de hiperdisco
Exclua o pool de armazenamento de hiperdisco com o seguinte comando:
gcloud compute storage-pools delete pool-us-east4-c --zone=us-east4-c --project=my-project
A seguir
- Consulte Solução de problemas de armazenamento no GKE.
- Leia mais sobre o driver CSI do Persistent Disk no GitHub.