Escalone o desempenho do armazenamento com o Hyperdisk


O driver CSI do Persistent Disk do Compute Engine é a principal maneira de acessar o armazenamento de hiperdisco com clusters do Google Kubernetes Engine (GKE).

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ativar a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando gcloud components update.

Requisitos

Para usar volumes do Hyperdisk no GKE, os clusters precisam atender aos seguintes requisitos:

Criar um volume do Hyperdisk para o GKE

Nesta seção, fornecemos uma visão geral da criação de um volume do Hyperdisk com suporte do driver CSI do Compute Engine no GKE.

Criar um StorageClass

Os campos Type de armazenamento em disco permanente a seguir são fornecidos pelo driver CSI do Persistent Disk do Compute Engine para oferecer suporte ao Hyperdisk:

  • hyperdisk-balanced
  • hyperdisk-throughput
  • hyperdisk-extreme
  • hyperdisk-ml

Para criar um novo StorageClass com o nível de capacidade ou IOPS desejado, use pd.csi.storage.gke.io no campo do provisionador e especifique um dos tipos de armazenamento do Hyperdisk.

Cada tipo de Hyperdisk tem valores padrão para o desempenho determinado pelo tamanho inicial do disco provisionado. Ao criar o 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 Expresse o valor da capacidade de processamento em MiBps usando o qualificador "Mi". Por exemplo, se a capacidade necessária for de 250 MiBps, 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.

Os exemplos a seguir mostram como criar um StorageClass para cada tipo de Hyperdisk:

Hiperdisco equilibrado

  1. Salve o manifesto em um arquivo chamado hdb-example-class.yaml.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: balanced-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-balanced
      provisioned-throughput-on-create: "250Mi"
      provisioned-iops-on-create: "7000"
    
  2. Crie o StorageClass

    kubectl create -f hdb-example-class.yaml
    

Capacidade de processamento do hiperdisco

  1. Salve o manifesto em um arquivo chamado hdt-example-class.yaml.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: throughput-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-throughput
      provisioned-throughput-on-create: "50Mi"
    
  2. Crie o StorageClass

    kubectl create -f hdt-example-class.yaml
    

Hiperdisco extremo

  1. Salve o manifesto em um arquivo chamado hdx-example-class.yaml.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: extreme-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-extreme
      provisioned-iops-on-create: "50000"
    
  2. Crie o StorageClass

    kubectl create -f hdx-example-class.yaml
    

Para encontrar o nome das StorageClasses disponíveis no cluster, execute o seguinte comando:

kubectl get sc

Criar um PersistentVolumeClaim

É possível criar um PersistentVolumeClaim que faz referência ao StorageClass do driver CSI do disco permanente do Compute Engine.

Hiperdisco equilibrado

Neste exemplo, você especifica a capacidade de armazenamento desejada do volume do Hyperdisk Balanced como 20 GiB.

  1. Salve o seguinte manifesto PersistentVolumeClaim em um arquivo chamado pvc-example.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: balanced-storage
      resources:
        requests:
          storage: 20Gi
    
  2. Aplique o PersistentVolumeClaim que faz referência ao StorageClass criado no exemplo anterior:

    kubectl apply -f pvc-example.yaml
    

Capacidade de processamento do hiperdisco

Neste exemplo, você especifica a capacidade de armazenamento segmentada do volume de capacidade do hiperdisco como 2 TiB.

  1. Salve o seguinte manifesto PersistentVolumeClaim em um arquivo chamado pvc-example.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: throughput-storage
      resources:
        requests:
          storage: 2Ti
    
  2. Aplique o PersistentVolumeClaim que faz referência ao StorageClass criado no exemplo anterior:

    kubectl apply -f pvc-example.yaml
    

Hiperdisco extremo

Neste exemplo, você especifica a capacidade de armazenamento mínima do volume extremo do Hyperdisk como 64 GiB.

  1. Salve o seguinte manifesto PersistentVolumeClaim em um arquivo chamado pvc-example.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: extreme-storage
      resources:
        requests:
          storage: 64Gi
    
  2. Aplique o PersistentVolumeClaim que faz referência ao StorageClass criado no exemplo anterior:

    kubectl apply -f pvc-example.yaml
    

Criar uma implantação para consumir o volume do hiperdisco

Ao usar pods com PersistentVolumes, recomendamos usar um controlador de carga de trabalho (como uma implantação ou StatefulSet).

  1. O exemplo a seguir cria um manifesto que configura um pod para implantar um servidor da Web Nginx usando o PersistentVolumeClaim criado na seção anterior. Salve o seguinte manifesto de exemplo como hyperdisk-example-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-deployment
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
            - mountPath: /var/lib/www/html
              name: mypvc
          volumes:
          - name: mypvc
            persistentVolumeClaim:
              claimName: podpvc
              readOnly: false
    
  2. Para criar uma implantação com base no arquivo de manifesto hyperdisk-example-deployment.yaml, execute o seguinte comando:

    kubectl apply -f hyperdisk-example-deployment.yaml
    
  3. Confirme se a implantação foi criada com sucesso:

    kubectl get deployment
    

    Pode levar alguns minutos para que as instâncias do Hyperdisk concluam o provisionamento. Quando a implantação conclui o provisionamento, ela informa um status READY.

  4. É possível verificar o progresso monitorando o status do PersistentVolumeClaim. Para isso, execute o comando a seguir:

    kubectl get pvc
    

Provisionar um volume do Hyperdisk com um snapshot

Para criar um novo volume do hiperdisco a partir de um snapshot atual do disco permanente, use o console do Google Cloud, a CLI do Google Cloud ou a API Compute Engine. Para saber como criar um instantâneo de disco permanente, consulte Como criar e usar instantâneos de volume.

Console

  1. Acesse a página Discos no Console do Google Cloud.

    Acessar "Discos"

  2. Clique em Create disk.

  3. Em Tipo de disco, escolha uma das seguintes opções para o tipo de disco:

    • Hiperdisco equilibrado
    • Hiperdisco extremo
    • Capacidade de processamento do hiperdisco
  4. Em Tipo de origem do disco, clique em Snapshot.

  5. Selecione o nome do snapshot que será restaurado.

  6. Selecione o tamanho do novo disco em GiB. Esse número precisa ser igual ou maior que o disco de origem do snapshot.

  7. Defina a Capacidade provisionada ou as IOPS provisionados que você quer para o disco, se forem diferentes dos valores padrão.

  8. Clique em Criar para criar o volume extremo do hiperdisco.

gcloud

Execute o comando gcloud compute disks create para criar o volume do Hyperdisk a partir de um snapshot.

Hiperdisco equilibrado

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-throughput=TRHROUGHPUT_LIMIT \
    --provisioned-iops=IOPS_LIMIT \
    --type=hyperdisk-balanced

Substitua:

  • DISK_NAME: o nome do novo disco.
  • SIZE: o tamanho, em gibibytes (GiB) ou tebibytes (TiB) do novo disco. Consulte a documentação do Compute Engine para conhecer as limitações de capacidade mais recentes.
  • SNAPSHOT_NAME: o nome do snapshot que está sendo restaurado.
  • THROUGHPUT_LIMIT: opcional. Para discos do Hyperdisk Balanced, esse é um número inteiro que representa a capacidade, medida em MiBps, que o disco pode processar. Consulte a documentação do Compute Engine para conhecer as limitações mais recentes.
  • IOPS_LIMIT: opcional. Em discos dp Hyperdisk Balanced, esse é o número de IOPS que o disco pode gerenciar. Consulte a documentação do Compute Engine para conhecer as limitações de desempenho mais recentes.

Capacidade de processamento do hiperdisco

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-throughput=TRHROUGHPUT_LIMIT \
    --type=hyperdisk-throughput

Substitua:

  • DISK_NAME: o nome do novo disco.
  • SIZE: o tamanho, em gibibytes (GiB ou GB) ou tebibytes (TiB ou TB), do novo disco. Consulte a documentação do Compute Engine para conhecer as limitações de capacidade mais recentes.
  • SNAPSHOT_NAME: o nome do snapshot que está sendo restaurado.
  • THROUGHPUT_LIMIT: (opcional) esse é um número inteiro que representa a capacidade de processamento dos discos de capacidade de processamento do Hyperdisk, medida em MB/s. Consulte a documentação do Compute Engine para conhecer as limitações de desempenho mais recentes.

Hiperdisco extremo

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-iops=IOPS_LIMIT \
    --type=hyperdisk-iops

Substitua:

  • DISK_NAME: o nome do novo disco.
  • SIZE: o tamanho, em gibibytes (GiB ou GB) ou tebibytes (TiB ou TB), do novo disco. Consulte a documentação do Compute Engine para conhecer as limitações de capacidade mais recentes.
  • SNAPSHOT_NAME: o nome do snapshot que está sendo restaurado.
  • IOPS_LIMIT: (opcional) esse é o número de operações de E/S por segundo que os discos extremos do Hyperdisk podem processar. Consulte a documentação do Compute Engine para conhecer as limitações de desempenho mais recentes.

Criar um snapshot para um volume do Hyperdisk

Para criar um instantâneo com base em um volume do Hyperdisk, siga as mesmas etapas usadas para criar um snapshot de um volume de disco permanente:

Atualizar a capacidade provisionada ou as IOPS de um volume do Hyperdisk

Esta seção aborda como modificar o desempenho provisionado para volumes do Hyperdisk.

Capacidade

A atualização da capacidade de processamento provisionada é compatível apenas com volumes do Hyperdisk Balanced e a capacidade de processamento de Hyperdisk.

Para atualizar o nível de capacidade provisionado do volume de processamento do Hyperdisk, siga as instruções do Console do Google Cloud, da CLI gcloud ou da API Compute Engine em Como alterar o desempenho provisionado para um volume do Hyperdisk.

É possível alterar o nível de capacidade provisionada (até uma vez a cada quatro horas) para um volume do Hyperdisk após a criação do volume. Os novos níveis de capacidade podem levar até 15 minutos para entrar em vigor. Durante a mudança de desempenho, qualquer SLA e SLO de desempenho não estão em vigor. É possível alterar o nível de capacidade de um volume atual a qualquer momento, independentemente de o disco estar anexado a uma instância em execução ou não.

O novo nível de capacidade especificado precisa aderir aos valores compatíveis com volumes do Hyperdisk.

IOPS

A atualização das IOPS provisionadas é compatível apenas com volumes extremos e balanceados do Hyperdisk.

Para atualizar o nível de IOPS provisionado do volume Hyperdisk, siga as instruções do Console do Google Cloud, da CLI gcloud ou da API Compute Engine em Como alterar o desempenho provisionado em um volume do Hyperdisk.

É possível alterar o nível de IOPS provisionado (até uma vez a cada quatro horas) para um volume de IOPS do hiperdisco após a criação do volume. Os novos níveis de IOPS podem levar até 15 minutos para entrar em vigor. Durante a mudança de desempenho, todos os SLAs e SLOs de desempenho não estão em vigor. É possível alterar o nível de IOPS de um volume existente a qualquer momento, independentemente de o disco estar anexado a uma instância em execução ou não.

O novo nível de IOPS especificado precisa aderir aos valores compatíveis com volumes do Hyperdisk.

Para atualizar o nível de IOPS provisionado para um volume do Hyperdisk, é necessário identificar o nome do disco permanente que apoia os recursos PersistentVolumeClaim e PersistentVolume:

  1. Acesse o navegador de objetos no Console do Google Cloud.

    Acessar o navegador de objetos

  2. Encontre a entrada do seu objeto PersistentVolumeClaim.

  3. Clique no link Volume.

  4. Abra a guia YAML do PersistentVolume associado. Localize o valor CSI volumeHandle nessa guia.

  5. Observe o último elemento desse identificador (ele precisa ter um valor como "pvc-XXXXX"). Este é o nome do PersistentVolumeClaim. Anote também o projeto e a zona.

Monitorar a capacidade ou IOPS em um volume do Hyperdisk

Para monitorar o desempenho provisionado do volume do Hyperdisk, consulte Analisar IOPS e capacidade provisionadas na documentação do Compute Engine.

Solução de problemas

Nesta seção, fornecemos orientações para resolver problemas com volumes do Hyperdisk no GKE.

Não é possível alterar o desempenho ou a capacidade: proporção fora do intervalo

O seguinte erro ocorre quando você tenta alterar o nível ou a capacidade de desempenho provisionada, mas o nível de desempenho ou a capacidade que você escolheu está fora do intervalo aceitável para o volume:

  • Requested provisioned throughput cannot be higher than <value>.
  • Requested provisioned throughput cannot be lower than <value>.
  • Requested provisioned throughput is too high for the requested disk size.
  • Requested provisioned throughput is too low for the requested disk size.
  • Requested disk size is too high for current provisioned throughput.

A capacidade provisionada para volumes de capacidade do Hyperdisk precisa atender aos seguintes requisitos:

  • Pelo menos 10 MiBps por TiB de capacidade e no máximo 90 MiBps por TiB de capacidade.
  • No máximo 600 MiBps por volume.

Para resolver esse problema, corrija a capacidade ou capacidade solicitada para estar dentro do intervalo permitido e emita novamente o comando.

Não é possível alterar o desempenho: taxa limitada

O erro a seguir ocorre quando você tenta alterar o nível de desempenho provisionado, mas o nível de desempenho já foi alterado nas últimas quatro horas:

Cannot update provisioned throughput due to being rate limited.
Cannot update provisioned iops due to being rate limited.

Os volumes de capacidade e de IOPS do hiperdisco podem ter o desempenho provisionado atualizado a cada quatro horas. Para resolver esse problema, aguarde o tempo de espera do volume expirar e emita novamente o comando.

A seguir