Esta página descreve como os seus clusters do Google Kubernetes Engine (GKE) podem agrupar e partilhar a capacidade de armazenamento, o débito e os IOPS entre discos através da utilização de pools de armazenamento do GKE Hyperdisk.
Vista geral
Os conjuntos de armazenamento agrupam logicamente os dispositivos de armazenamento físico, o que lhe permite segmentar os seus recursos. Pode aprovisionar Hyperdisks do Google Cloud nestes conjuntos de armazenamento, criando essencialmente conjuntos de armazenamento de Hyperdisks. Os pools de armazenamento Hyperdisk oferecem capacidade, débito e IOPS pré-aprovisionados que os discos do cluster do GKE podem partilhar.
Pode usar os conjuntos de armazenamento Hyperdisk para gerir os seus recursos de armazenamento de forma mais eficiente e rentável. Isto permite-lhe tirar partido das tecnologias de eficiência, como a eliminação de duplicados e o aprovisionamento reduzido.
Neste guia, usa a zona us-east4-c
para criar o conjunto de armazenamento equilibrado do Hyperdisk e outros recursos.
Considerações de planeamento
Tenha em consideração os seguintes requisitos e limitações antes de aprovisionar e consumir o seu conjunto de armazenamento Hyperdisk.
Criar e gerir pools de armazenamento
Aplicam-se os seguintes requisitos e limitações:
- Aplicam-se todas as limitações dos pools de armazenamento de hiperdiscos do Compute Engine.
- Aplicam-se todas as limitações da criação de discos num conjunto de armazenamento Hyperdisk.
- O tipo de Hyperdisk Storage Pool que criar determina o tipo de discos que pode criar no storage pool. Consulte os tipos de pools de armazenamento Hyperdisk.
Aprovisionamento de discos de arranque em conjuntos de armazenamento
Aplicam-se os seguintes requisitos e limitações:
- O aprovisionamento de discos de arranque em pools de armazenamento não é suportado em pools de nós com o aprovisionamento automático de nós ativado.
- Certifique-se de que as localizações dos nós do cluster e as localizações dos nós do node pool correspondem exatamente às zonas do conjunto de armazenamento.
- Certifique-se de que o tipo de máquina que executa o seu pod suporta a associação do tipo de disco Hyperdisk Balanced. O débito do Hyperdisk não é suportado como disco de arranque. Consulte a documentação de apoio técnico dos tipos de máquinas Hyperdisk.
- Só pode aprovisionar discos de arranque em conjuntos de armazenamento em conjuntos de nós criados ou atualizados manualmente.
Aprovisionamento de disco anexado em conjuntos de armazenamento
Aplicam-se os seguintes requisitos e limitações:
- A versão mínima do GKE necessária para o aprovisionamento de discos anexados em pools de armazenamento é a 1.29.2-gke.1035000 e posterior.
- Certifique-se de que o controlador CSI do Persistent Disk do Compute Engine está ativado. O controlador de disco persistente do Compute Engine está ativado por predefinição em novos clusters do Autopilot e Standard, e não pode ser desativado nem editado em clusters do Autopilot. Para ativar o controlador, consulte o artigo Ativar o controlador CSI do Persistent Disk do Compute Engine num cluster existente.
- Certifique-se de que o conjunto de armazenamento está, pelo menos, numa das localizações dos nós do cluster e nas localizações dos nós do conjunto de nós.
- Só pode aprovisionar discos ligados Hyperdisk Throughput e Hyperdisk Balanced em pools de armazenamento. O tipo do disco anexado tem de corresponder ao tipo do conjunto de armazenamento. Para mais informações, consulte o artigo Tipos de pools de armazenamento Hyperdisk.
- Numa StorageClass, só é permitido 1 conjunto de armazenamento por zona.
- Numa StorageClass, todos os conjuntos de armazenamento têm de ter o tipo de conjunto de armazenamento.
- Certifique-se de que o tipo de máquina que executa o seu pod suporta a associação do tipo de disco que está a usar do conjunto de armazenamento. Para mais informações, consulte o artigo Suporte de tipos de máquinas Hyperdisk.
Quota
Ao criar um conjunto de armazenamento do Hyperdisk, pode configurá-lo com o aprovisionamento padrão ou avançado para capacidade e desempenho. Se quiser aumentar a quota de capacidade, débito ou IOPS, peça uma quota superior para o filtro de quota relevante.
Para mais informações, consulte os artigos Veja as quotas do seu projeto e Peça um ajuste de quota.
Use os seguintes filtros de quota para pools de armazenamento equilibrado Hyperdisk:
HDB-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region
: para aumentar a capacidade com o aprovisionamento avançado de capacidade.HDB-STORAGE-POOL-TOTAL-ADVANCED-IOPS-per-project-region
: para aumentar as IOPS com o aprovisionamento de desempenho avançado.HDB-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region
: para aumentar o débito com o aprovisionamento de desempenho avançado.HDB-TOTAL-GB-per-project-region
: para aumentar a capacidade com o aprovisionamento de capacidade padrão.HDB-TOTAL-IOPS-per-project-region
: para aumentar as IOPS com o aprovisionamento de desempenho padrão.HDB-TOTAL-THROUGHPUT-per-project-region
: para aumentar o débito com o aprovisionamento de desempenho padrão.
Use os seguintes filtros de quota para pools de armazenamento de débito do Hyperdisk:
HDT-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region
: para aumentar a capacidade com o aprovisionamento avançado de capacidade.HDT-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region
: para aumentar o débito com o aprovisionamento de desempenho avançado.HDT-TOTAL-GB-per-project-region
: para aumentar a capacidade com o aprovisionamento de capacidade padrão.HDT-TOTAL-THROUGHPUT-per-project-region
: para aumentar o débito com o aprovisionamento de desempenho padrão.
Por exemplo, se quiser aumentar a capacidade total dos Hyperdisk Balanced Storage Pools com aprovisionamento de capacidade avançado, por projeto e por região, peça uma quota mais elevada para o seguinte filtro:
hdb-storage-pool-total-advanced-capacity-per-project-region
.
Preços
Consulte os preços dos conjuntos de armazenamento Hyperdisk para ver detalhes dos preços.
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ative a API Google Kubernetes Engine
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize-a. Se instalou anteriormente a CLI gcloud, execute
gcloud components update
para obter a versão mais recente.
- Reveja as regiões e zonas suportadas para criar o seu conjunto de armazenamento equilibrado do Hyperdisk.
Crie um conjunto de armazenamento Hyperdisk
Crie um conjunto de armazenamento Hyperdisk antes de aprovisionar discos de arranque ou discos anexados nesse conjunto de armazenamento. Para mais informações, consulte o artigo Crie pools de armazenamento Hyperdisk.
Certifique-se de que cria pools de armazenamento numa das zonas suportadas.
Por exemplo, use o seguinte comando para criar um Hyperdisk Balanced Storage Pool com capacidade avançada e desempenho avançado, e aprovisionar 10 TB de capacidade, 10 000 IOPS/s e 1024 MBps de débito 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 Google Cloud conta.
Inspecione zonas de pool de armazenamento
Para clusters do Autopilot e clusters Standard com o aprovisionamento automático de nós ativado, pode criar um conjunto de armazenamento em qualquer zona na região do cluster. Se não existir nenhum conjunto de nós na zona onde criou o conjunto de armazenamento, os pods permanecem no estado
Pending
até que o GKE Cluster Autoscaler possa aprovisionar um novo conjunto de nós nessa zona.Para clusters padrão sem aprovisionamento automático de nós, crie pools de armazenamento nas zonas de nós predefinidas do cluster, uma vez que as pools de armazenamento são recursos zonais. Pode definir as zonas dos nós do cluster com a flag
--node-locations
.- Para clusters zonais, se não especificar o
--node-locations
, todos os nós são criados na zona principal do cluster. - Para clusters regionais, se não especificar o
--node-locations
, o GKE distribui os nós de trabalho em três zonas escolhidas aleatoriamente na região.
- Para clusters zonais, se não especificar o
Para inspecionar as zonas de nós predefinidas de um cluster, execute o seguinte comando:
gcloud container clusters describe CLUSTER_NAME | yq '.locations'
Substitua CLUSTER_NAME
pelo nome do cluster que
está a criar durante o aprovisionamento de um disco de arranque ou um disco anexado.
Aprovisione um disco de arranque do GKE num conjunto de armazenamento Hyperdisk
Pode aprovisionar um disco de arranque do GKE num conjunto de armazenamento Hyperdisk quando realizar qualquer uma das seguintes ações:
- Quando cria um novo cluster do GKE
- Quando cria um novo node pool
- Quando atualiza um node pool existente
Quando cria um cluster
Para criar um cluster do GKE com discos de arranque aprovisionados num conjunto 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 o seguinte:
CLUSTER_NAME
: indique um nome exclusivo para o cluster que está a criar.DISK_TYPE
: defina este valor comohyperdisk-balanced.
Se deixar em branco, o tipo de disco é predefinido como Hyperdisk Balanced.STORAGE_POOL,[...]
: uma lista separada por vírgulas dos caminhos dos recursos do conjunto de armazenamento (por exemplo,projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
) onde os discos de arranque do cluster vão ser aprovisionados. Certifique-se de que as zonas nos caminhos dos recursos do conjunto de armazenamento correspondem às zonas em--node-locations
.ZONE,[...]
: uma lista separada por vírgulas de zonas onde a área de cobertura do seu nó deve ser replicada. Para clusters regionais, pode especificar regiões. Todas as zonas têm de estar na mesma região que o cluster, especificada pela flag--location
.MACHINE_TYPE
: o tipo de máquina suportado que quer usar para os seus nós.CONTROL_PLANE_LOCATION
: a localização do Compute Engine do plano de controlo do seu cluster. Indique uma região para clusters regionais ou uma zona para clusters zonais.
Quando cria um node pool
Para criar um node pool do GKE com discos de arranque aprovisionados num conjunto 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 o seguinte:
NODE_POOL_NAME
: indique um nome exclusivo para o grupo de nós que está a criar.DISK_TYPE
: defina este valor comohyperdisk-balanced.
Se deixar em branco, o tipo de disco é predefinido como Hyperdisk Balanced.STORAGE_POOL,[...]
: uma lista separada por vírgulas dos caminhos dos recursos do conjunto de armazenamento (por exemplo,projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
) onde os discos de arranque do cluster vão ser aprovisionados. Certifique-se de que as zonas nos caminhos dos recursos do conjunto de armazenamento correspondem aos valores em--node-locations
.ZONE,[...]
: uma lista separada por vírgulas de zonas onde a área de cobertura do seu nó deve ser replicada. Todas as zonas têm de estar na mesma região que o cluster, especificada pela flag-location
.MACHINE_TYPE
: o tipo de máquina suportado que quer usar para os seus nós.CONTROL_PLANE_LOCATION
: a localização do Compute Engine do plano de controlo do seu cluster. Indique uma região para clusters regionais ou uma zona para clusters zonais.CLUSTER_NAME
: um cluster existente onde está a criar o node pool.
Quando atualiza um node pool
Pode usar um comando update
para adicionar ou substituir conjuntos de armazenamento num conjunto de nós.
Não é possível usar este comando para remover pools de armazenamento de um pool de nós.
Para atualizar um node pool do GKE de modo que os respetivos discos de arranque sejam aprovisionados num conjunto de armazenamento, use o seguinte comando.
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 conjunto de nós existente que quer atualizar para usar um conjunto de armazenamento.STORAGE_POOL,[...]
: uma lista separada por vírgulas de caminhos de recursos do conjunto de armazenamento existentes (por exemplo,projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
). Certifique-se de que as zonas nos caminhos de recursos do conjunto de armazenamento correspondem à zona do conjunto de nós que está a atualizar.CONTROL_PLANE_LOCATION
: a localização do Compute Engine do plano de controlo do seu cluster. Indique uma região para clusters regionais ou uma zona para clusters zonais.CLUSTER_NAME
: o nome do cluster do GKE ao qual este conjunto de nós pertence.
Esta alteração requer a recriação dos nós, o que pode causar interrupções nas cargas de trabalho em execução. Para ver detalhes sobre esta alteração específica, procure a linha correspondente na tabela alterações manuais que recriam os nós através de uma estratégia de atualização de nós sem respeitar as políticas de manutenção. Para saber mais sobre as atualizações de nós, consulte o artigo Planeamento de interrupções de atualizações de nós.
Aprovisione um disco anexado do GKE num conjunto de armazenamento do Hyperdisk
Nesta secção:
- Cria um novo cluster do GKE com discos anexados aprovisionados num conjunto de armazenamento.
- Crie uma StorageClass para aprovisionar dinamicamente um PersistentVolume (PV) quando um Pod o pede através de um PersistentVolumeClaim (PVC). Para que um PV consuma os recursos partilhados do conjunto de armazenamento, especifique o conjunto de armazenamento através do parâmetro
storage-pools
na sua StorageClass. A StorageClass é então usada num PVC para aprovisionar o volume Hyperdisk Balanced que vai ser usado pelo pod. - Crie um PVC para pedir um PV, um fragmento de armazenamento do Hyperdisk, para um pod do seu cluster do GKE. Isto permite-lhe beneficiar dos recursos partilhados do conjunto de armazenamento.
- Crie uma implementação que use um PVC para garantir que a sua aplicação tem acesso ao armazenamento persistente, mesmo após reinícios e reagendamentos de pods.
Crie um cluster do GKE
Antes de começar, reveja as considerações para o aprovisionamento de um disco anexado.
Piloto automático
Para criar um cluster do Autopilot através da CLI gcloud, consulte o artigo Crie um cluster do Autopilot.
Exemplo:
gcloud container clusters create-auto CLUSTER_NAME --location=CONTROL_PLANE_LOCATION
Substitua o seguinte:
CLUSTER_NAME
: indique um nome exclusivo para o cluster que está a criar.CONTROL_PLANE_LOCATION
: a região do Compute Engine do plano de controlo do seu cluster.
Para selecionar um tipo de máquina suportado, especifica o cloud.google.com/compute-class: Performance
nodeSelector enquanto cria uma implementação. Para ver uma lista das séries de máquinas do Compute Engine disponíveis com a classe de computação de desempenho,
consulte o artigo Séries de máquinas suportadas.
Standard
Para criar um cluster zonal padrão com a CLI gcloud, consulte o artigo Criar um cluster zonal.
Para criar um cluster regional padrão com a CLI gcloud, consulte o artigo 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 o seguinte:
CLUSTER_NAME
: indique um nome exclusivo para o cluster que está a criar.CONTROL_PLANE_LOCATION
: a localização do Compute Engine do plano de controlo do seu cluster. Indique uma região para clusters regionais ou uma zona para clusters zonais.PROJECT_ID
: o ID do projeto da sua Google Cloud conta.MACHINE_TYPE
: o tipo de máquina suportado que quer usar para os seus nós.DISK_TYPE
: defina este valor comohyperdisk-balanced.
Se deixar em branco, o tipo de disco é predefinido como Hyperdisk Balanced.
Crie uma StorageClass
No Kubernetes, para indicar que quer que o seu PV seja criado num conjunto de armazenamento, use uma StorageClass. Para saber mais, consulte o artigo StorageClasses.
Para criar uma nova StorageClass com o nível de débito ou IOPS pretendido:
- Use
pd.csi.storage.gke.io
no campo de aprovisionamento. - Especifique o tipo de armazenamento Hyperdisk Balanced.
- Especifique o parâmetro
storage-pools
com o valor como uma lista de pools de armazenamento específicos que quer usar. Cada conjunto de armazenamento na lista tem de ser especificado no formato:projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME.
- Opcionalmente, especifique os parâmetros de desempenho
provisioned-throughput-on-create
eprovisioned-iops-on-create.
Cada tipo de Hyperdisk tem valores predefinidos para o desempenho determinado pelo tamanho do disco inicial aprovisionado. Quando cria uma StorageClass, pode especificar opcionalmente os seguintes parâmetros, consoante o tipo de Hyperdisk. Se omitir estes parâmetros, o GKE usa as predefinições do tipo de disco com base na capacidade.
Parâmetro | Tipo de Hyperdisk | Utilização |
---|---|---|
provisioned-throughput-on-create |
Hyperdisk Balanced, Hyperdisk Throughput | Expresse o valor de débito em MiB/s usando o qualificador "Mi"; por exemplo, se o débito necessário for de 250 MiB/s, especifique "250Mi" ao criar a StorageClass. |
provisioned-iops-on-create |
Hyperdisk Balanced, Hyperdisk IOPS | O valor de IOPS deve ser expresso sem qualificadores. Por exemplo, se precisar de 7000 IOPS, especifique "7000" quando criar a StorageClass. |
Para orientações sobre os valores permitidos para a taxa de transferência ou as IOPS, consulte o artigo Planeie o nível de desempenho do seu volume do Hyperdisk.
Use o manifesto seguinte para criar e aplicar uma StorageClass denominada storage-pools-sc
para o aprovisionamento dinâmico de um PV no conjunto 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
nesta StorageClass, a associação e o aprovisionamento de um PVC são atrasados até que seja criado um Pod que use o PVC.
Esta abordagem garante que a PV não é aprovisionada prematuramente e que existe uma correspondência de zonas entre a PV e o agrupamento que a consome. Se as respetivas zonas não corresponderem, o Pod permanece no estado Pending
.
Crie um PersistentVolumeClaim (PVC)
Crie um PVC que faça referência à storage-pools-sc
StorageClass que criou.
Use o seguinte manifesto para criar um PVC denominado my-pvc
, com 2048 GiB como a capacidade de armazenamento de destino para o volume 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
Crie uma implementação que use o PVC
Quando usar pods com volumes persistentes, use um controlador de carga de trabalho, como uma implementação ou um StatefulSet.
Para garantir que os pods podem ser agendados num conjunto de nós com uma série de máquinas que suporta o Hyperdisk Balanced, configure uma implementação com o cloud.google.com/machine-family
seletor de nós. Para mais informações, consulte o suporte de tipos de máquinas para hiperdiscos. Usa a série de máquinas c3
na seguinte implementação de exemplo.
Crie e aplique o seguinte manifesto para configurar um pod para implementar um servidor Web do Postgres com o PVC criado na secção anterior:
Piloto automático
Nos clusters do Autopilot, especifique o cloud.google.com/compute-class: Performance
nodeSelector para aprovisionar um volume do Hyperdisk Balanced. Para mais informações,
consulte o artigo Peça 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
Standard
Em clusters padrão sem o aprovisionamento automático de nós ativado, certifique-se de que um conjunto de nós com a série de máquinas especificada está em funcionamento antes de criar a implementação. Caso contrário, o pod não é agendado.
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 que a implementação foi criada com êxito:
kubectl get deployment
As instâncias do Hyperdisk podem demorar alguns minutos a concluir o aprovisionamento e apresentar o estado READY
.
Confirme se o disco anexado está aprovisionado
Verifique se o seu PVC denominado
my-pvc
foi associado com êxito a um PV:kubectl get pvc my-pvc
O resultado é semelhante ao seguinte:
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 aprovisionado conforme especificado na StorageClass e no PVC:
gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
O resultado é semelhante ao seguinte:
NAME STATUS PROVISIONED_IOPS PROVISIONED_THROUGHPUT SIZE_GB pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 READY 3000 140 2048
Crie instantâneos e restaure discos anexados em conjuntos de armazenamento
Não é permitido mover discos para dentro ou para fora de um conjunto de armazenamento. Para mover um disco para dentro ou para fora de um conjunto de armazenamento, recrie o disco a partir de um instantâneo. Para mais informações, consulte o artigo Altere o tipo de disco.
Nesta secção:
- Escrever um ficheiro de teste no disco aprovisionado no seu pod.
- Criar uma captura instantânea do volume e eliminar o ficheiro de teste desse disco.
- Restaure a imagem instantânea para um novo disco no mesmo conjunto de armazenamento, o que recupera eficazmente os dados eliminados.
Crie um ficheiro de teste
Para criar e validar um ficheiro de teste:
Obtenha o nome do pod da implementação do Postgres:
kubectl get pods -l app=postgres
O resultado é semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE postgres-78fc84c9ff-77vx6 1/1 Running 0 44s
Crie um ficheiro de teste
hello.txt
no pod:kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'echo "Hello World!" > /usr/share/data/hello.txt'
Verifique se o ficheiro de teste foi criado:
kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!
Crie um instantâneo de volume e elimine o ficheiro de teste
Para criar e validar um instantâneo:
Crie uma VolumeSnapshotClass que especifique como o instantâneo dos seus volumes deve ser tirado e gerido:
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 tire o instantâneo do volume associado à
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 da imagem instantânea do volume foi criado:
kubectl get volumesnapshotcontents
O resultado é semelhante ao seguinte:
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 a captura instantânea está pronta a usar:
kubectl get volumesnapshot \ -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
O resultado é semelhante ao seguinte:
NAME READY my-snapshot true
Elimine o ficheiro 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'
Restaure o instantâneo de volume
Para restaurar a imagem instantânea de volume e os dados, siga estes passos:
Crie um novo PVC que restaure os dados a partir de uma captura instantânea e garanta que o novo volume é aprovisionado no mesmo conjunto de armazenamento (
storage-pools-sc
) que o 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 implementação existente denominada
postgres
para que use o PVC recém-restaurado que 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
Obtenha o nome do pod recém-criado que faz parte da
postgres
implementação:kubectl get pods -l app=postgres
O resultado é semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE postgres-59f89cfd8c-42qtj 1/1 Running 0 40s
Verifique se o ficheiro
hello.txt
, que foi eliminado anteriormente, existe agora no novo Pod (postgres-59f89cfd8c-42qtj
) após restaurar o volume a partir da captura de ecrã:kubectl exec postgres-59f89cfd8c-42qtj \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!
Isto valida que o processo de instantâneo e restauro foi concluído com êxito e que os dados do instantâneo foram restaurados para o novo PV acessível ao Pod.
Confirme que o volume criado a partir da imagem instantânea está localizado no seu conjunto de armazenamento:
kubectl get pvc pvc-restore
O resultado é semelhante ao seguinte:
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 é aprovisionado conforme especificado na StorageClass e no PVC:
gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
O resultado é semelhante ao seguinte, onde pode ver o novo volume
pvc-b287c387-bc51-4100-a00e-b5241d411c82
aprovisionado no mesmo conjunto 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
Isto garante que o volume restaurado beneficia dos recursos e das capacidades partilhados do conjunto.
Migre volumes existentes para um conjunto de armazenamento
Use a funcionalidade de instantâneo e restauro para migrar volumes que existam fora de um conjunto de armazenamento para um conjunto de armazenamento.
Certifique-se de que as seguintes condições são cumpridas:
- O seu novo PVC
pvc-restore
faz referência a uma StorageClass que especifica o parâmetrostorage-pools
, que aponta para o conjunto de armazenamento para o qual quer mover o volume. - O PV de origem cuja captura está a ser feita deve estar associado a um PVC com uma StorageClass que não especifica o parâmetro
storage-pools
.
Depois de restaurar a partir de uma captura instantânea para um novo volume, pode eliminar o PVC e o PV de origem.
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud , elimine os recursos de armazenamento que criou neste guia. Primeiro, elimine todos os discos no conjunto de armazenamento e, em seguida, elimine o conjunto de armazenamento.
Elimine o disco de arranque
Quando elimina um nó (reduzindo o número de nós do conjunto de nós) ou um conjunto de nós completo, os discos de arranque associados são eliminados automaticamente. Também pode eliminar o cluster para eliminar automaticamente os discos de arranque de todos os conjuntos de nós no mesmo.
Para mais informações, consulte:
Elimine o disco anexado
Para eliminar o disco anexado aprovisionado num conjunto de armazenamento Hyperdisk:
Elimine o pod que usa o PVC:
kubectl delete deployments postgres
Elimine o PVC que usa a StorageClass do Hyperdisk Storage Pool.
kubectl delete pvc my-pvc
Confirme que o PVC
pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6
foi eliminado:gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
Elimine o pool de armazenamento do Hyperdisk
Elimine o conjunto de armazenamento do Hyperdisk com o seguinte comando:
gcloud compute storage-pools delete pool-us-east4-c --zone=us-east4-c --project=my-project
O que se segue?
- Consulte o artigo Resolução de problemas de armazenamento no GKE.
- Leia mais sobre o controlador CSI de disco persistente no GitHub.