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 CLI do Google Cloud para essa tarefa, instale e inicialize a gcloud CLI. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando o comando gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.

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
  • hyperdisk-balanced-high-availability

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. Para orientações sobre os valores permitidos para capacidade ou IOPS, consulte Planejar o nível de desempenho do volume do Hyperdisk.

Parâmetro Tipo de Hyperdisk Uso
provisioned-throughput-on-create Hyperdisk equilibrado*, Hyperdisk equilibrado de alta disponibilidade, 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 Balanced, Hyperdisk Balanced High Availability, Hyperdisk Extreme O valor de IOPS precisa ser expresso sem qualificadores. Por exemplo, se você precisar de 7.000 IOPS, especifique "7000" ao criar o StorageClass.
* Se você precisar de segurança aprimorada e planeja usar nós confidenciais do Google Kubernetes Engine, considere criar o modo confidencial para o Hyperdisk equilibrado, analise outras limitações do modo confidencial para o Hyperdisk equilibrado e saiba mais sobre os nós confidenciais do Google Kubernetes Engine.

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
    

Hyperdisk Balanced HA

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

    • Para clusters zonais, defina as zonas de disponibilidade em que você quer criar os PersistentVolumes.

    • Para clusters regionais, é possível não definir o campo allowedTopologies para criar os PersistentVolumes em duas zonas de disponibilidade selecionadas aleatoriamente no momento do agendamento do pod.

    Para mais informações sobre as zonas compatíveis, consulte Disponibilidade regional do hiperdisco.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: balanced-ha-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-balanced-high-availability
      provisioned-throughput-on-create: "250Mi"
      provisioned-iops-on-create: "7000"
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.gke.io/zone
        values:
        - ZONE1
        - ZONE2
    
  2. Crie o StorageClass

    kubectl create -f hdb-ha-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
    

Hyperdisk Balanced HA

Neste exemplo, você especifica a capacidade de armazenamento mínima do volume do Hyperdisk Balanced High Availability como 20 GiB e o modo de acesso como ReadWriteOnce. O Hyperdisk Balanced High Availability também oferece suporte aos modos de acesso ReadWriteMany e ReadWriteOncePod. Para conferir as diferenças e os casos de uso de cada modo de acesso, consulte Modos de acesso de volume permanente.

  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-ha-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
    

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:
              # Reference the PVC created earlier.
              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 Hyperdisk com base em um snapshot atual do Persistent Disk, use o console Google Cloud , a Google Cloud CLI ou a API Compute Engine. Para saber como criar um snapshot Persistent Disk, consulte Como criar e usar snapshots 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
    • Alta disponibilidade do Hyperdisk
  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. Para mais informações sobre limitações de capacidade, consulte Limites de tamanho e desempenho.
  • 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 MiB/s, que o disco pode alcançar. Para mais informações sobre limitações de capacidade, consulte Limites de tamanho e desempenho.
  • IOPS_LIMIT: opcional. Para discos do Hyperdisk Balanced, esse é o número máximo de IOPS que o disco pode alcançar. Para mais informações sobre limitações de capacidade, consulte Limites de tamanho e desempenho.

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. Para mais informações sobre limitações de capacidade, consulte Limites de tamanho e desempenho.
  • SNAPSHOT_NAME: o nome do snapshot que está sendo restaurado.
  • THROUGHPUT_LIMIT: opcional: para discos de capacidade de processamento do hiperdisco, esse é um número inteiro que representa a capacidade, medida em MiB/s, que o disco pode alcançar. Para mais informações sobre limitações de capacidade, consulte Limites de tamanho e desempenho.

Hiperdisco extremo

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

Substitua:

  • DISK_NAME: o nome do novo disco.
  • SIZE: o tamanho, em gibibytes (GiB ou GB) ou tebibytes (TiB ou TB), do novo disco. Para mais informações sobre limitações de capacidade, consulte Limites de tamanho e desempenho.
  • SNAPSHOT_NAME: o nome do snapshot que está sendo restaurado.
  • IOPS_LIMIT: opcional: para discos extremos do Hyperdisk, esse é o número máximo de operações de E/S por segundo que o disco pode alcançar. Para mais informações sobre limitações de capacidade, consulte Limites de tamanho e desempenho.

Hyperdisk Balanced HA

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --region=REGION \
    --replica-zones=('ZONE1', 'ZONE2') \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-throughput=TRHROUGHPUT_LIMIT \
    --provisioned-iops=IOPS_LIMIT \
    --type=hyperdisk-balanced-high-availability

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.
  • REGION: a região do novo disco. Consulte a documentação do Compute Engine para saber a disponibilidade regional mais recente.
  • ZONE1, ZONE2: as zonas dentro da região onde as réplicas estarão localizadas.
  • SNAPSHOT_NAME: o nome do snapshot que está sendo restaurado.
  • THROUGHPUT_LIMIT: opcional. Para discos de alta disponibilidade equilibrados do Hyperdisk, esse é um número inteiro que representa a capacidade, medida em MiB/s, que o disco pode alcançar. Para mais informações sobre limitações de capacidade, consulte Limites de tamanho e desempenho
  • IOPS_LIMIT: opcional. Em discos do Hyperdisk Balanced High Availability, esse é o número máximo de IOPS que o disco pode alcançar. Para mais informações sobre limitações de capacidade, consulte Limites de tamanho e desempenho.

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, do Hyperdisk Balanced High Availability e da capacidade de processamento de Hyperdisk.

Para atualizar o nível de capacidade provisionado do volume do Hyperdisk, siga as instruções do console Google Cloud , da CLI gcloud ou da API Compute Engine em Como mudar o desempenho provisionado de 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 Balanced, Hyperdisk Throughput e Hyperdisk Balanced High Availability, respectivamente.

Para atualizar o nível de capacidade provisionada de um volume do Hyperdisk, é necessário identificar o nome do Persistent Disk 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.

IOPS

A atualização das IOPS provisionadas é compatível apenas com volumes do Hyperdisk Balanced, do Hyperdisk Balanced High Availability e do Hyperdisk Extreme.

Para atualizar o nível de IOPS provisionado do volume Hyperdisk, siga as instruções do console Google Cloud , da CLI gcloud ou da API Compute Engine em Como mudar o desempenho provisionado de 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 Equilibrado ou do Hyperdisk Extremo, respectivamente.

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 MiB/s por TiB de capacidade e no máximo 90 MiB/s por TiB de capacidade.
  • No máximo 600 MiB/s 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