Otimize a performance e o custo do armazenamento com os pools de armazenamento do Hyperdisk


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:

Como provisionar discos de inicialização em pools de armazenamento

Os seguintes requisitos e limitações se aplicam:

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.

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 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 como hyperdisk-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 como hyperdisk-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: PerformancenodeSelector 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 como hyperdisk-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 e provisioned-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

Prática recomendada:

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

  1. 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
    
  2. 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:

Criar um arquivo de teste

Para criar e verificar um arquivo de teste:

  1. 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
    
  2. Crie um arquivo de teste hello.txt no pod:

    kubectl exec postgres-78fc84c9ff-77vx6 \
      -- sh -c 'echo "Hello World!" > /usr/share/data/hello.txt'
    
  3. 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:

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. Exclua o arquivo de teste original hello.txt que foi criado no pod postgres-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:

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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.

  5. 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
    
  6. 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âmetro storage-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:

  1. Exclua o pod que usa o PVC:

    kubectl delete deployments postgres
    
  2. 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