Limites de anexação de volumes persistentes para nós do GKE

Este documento ajuda a compreender como funcionam os limites de associação de volumes persistentes para Persistent Disks e Hyperdisks do Compute Engine em nós do Google Kubernetes Engine (GKE). Para um agendamento adequado da carga de trabalho e um dimensionamento do conjunto de nós, é fundamental compreender o número máximo de volumes persistentes que podem ser anexados a um nó do GKE. Se quiser um maior controlo sobre o agendamento da carga de trabalho, especialmente quando usa vários tipos de discos com limites de associação variáveis numa única instância, pode usar uma etiqueta de nó para substituir os limites de associação predefinidos.

Este documento destina-se a especialistas de armazenamento que criam e atribuem armazenamento, e a administradores do GKE que gerem o agendamento de cargas de trabalho e o dimensionamento do conjunto de nós. Para saber mais sobre as funções comuns e as tarefas de exemplo referidas no Google Cloud conteúdo, consulte o artigo Funções e tarefas de utilizador comuns do GKE Enterprise.

Vista geral

No GKE, quando pede um PersistentVolume (PV) através do controlador CSI do Persistent Disk do Compute Engine (pd.csi.storage.gke.io), é aprovisionado um volume de armazenamento em blocos a partir do Google Cloud serviço Persistent Disk.

Quando ativa o controlador CSI do Persistent Disk do Compute Engine (PDCSI) em clusters do GKE, o controlador PDCSI calcula e comunica o limite de associação de volume persistente por nó ao kubelet. Com base nestas informações, o programador do Kubernetes toma decisões de agendamento para ajudar a garantir que não agenda demasiados pods que requerem volumes persistentes num nó que atingiu a respetiva capacidade de anexação. Se o controlador PDCSI tiver comunicado limites de associação incorretos, mais especificamente um número superior ao limite real, a programação dos pods falha, ficando estes bloqueados no estado Pending. Isto pode acontecer em tipos de máquinas de terceira geração, como C3, que têm limites de associação diferentes para Hyperdisks e discos persistentes.

Compreenda os limites de anexos de volumes persistentes

Para gerações de máquinas anteriores à quarta, o controlador PDCSI do Compute Engine define um limite de ligação de volume persistente agregado de 128 discos (127 discos de dados mais um disco de arranque) em todos os tipos de máquinas. O limite de associação aplica-se aos volumes de disco persistente e Hyperdisk combinados. Para o Hyperdisk, o limite de associação é determinado pelo tipo de máquina do Compute Engine subjacente, o número de vCPUs que a máquina tem e o tipo de Hyperdisk específico.

Por exemplo:

  • Para os tipos de máquinas de quarta geração, como o C4, o controlador PDCSI comunica com precisão um limite de associação predefinido ao Kubernetes que é calculado com base na contagem de vCPUs do nó. Normalmente, o limite de anexos comunicado situa-se entre 8 e 128 volumes persistentes.
  • Por outro lado, para os tipos de máquinas de terceira geração, como C3, o controlador PDCSI comunica um limite de associação predefinido ao Kubernetes como o limite fixo de 128 discos, o que pode levar a uma falha no agendamento de pods, uma vez que o limite real pode ser inferior a 128 com base na contagem de vCPUs.

Pode substituir o limite de anexos predefinido através de uma etiqueta de nó.

Consulte os seguintes recursos úteis na documentação do Compute Engine:

Substitua o limite de anexação de volume persistente predefinido

Se tiver requisitos específicos ou configurações de nós em que quer anexar um número específico de volumes persistentes aos seus nós, pode substituir o limite de anexação de volume persistente predefinido para um conjunto de nós através da seguinte etiqueta de nó: node-restriction.kubernetes.io/gke-volume-attach-limit-override: VALUE.

Pode usar esta etiqueta de nó nas seguintes versões do GKE:

  • 1.32.4-gke.1698000 e mais tarde.
  • 1.33.1-gke.1386000 e mais tarde.

Novo node pool

Para criar um novo conjunto de nós com um limite de associação de volume persistente específico, execute o seguinte comando:

gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --node-labels=node-restriction.kubernetes.io/gke-volume-attach-limit-override=VALUE

Node pool existente

Para modificar o limite de associação de volumes persistentes atual de um conjunto de nós existente, siga estes passos:

  1. Atualize o limite de associação no node pool:

    gcloud container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --node-labels=node-restriction.kubernetes.io/gke-volume-attach-limit-override=VALUE
    
  2. Reinicie o pdcsi-node DaemonSet:

    kubectl rollout restart ds pdcsi-node -n kube-system
    

    O novo limite de anexos aplica-se depois de os pdcsi-nodepodsRunning estarem no estado pdcsi-nodeRunning.

Substitua o seguinte:

  • NODE_POOL_NAME: o nome do node pool que quer criar ou atualizar.
  • CLUSTER_NAME: o nome do cluster para o node pool que quer criar ou atualizar.
  • VALUE: um número inteiro entre 0 e 127 para especificar o novo número de volumes persistentes que podem ser anexados. Se especificar um valor superior a 127, a etiqueta do nó é ignorada e o controlador PDCSI usa o limite de associação de volume persistente predefinido. O limite predefinido é 128 para máquinas de terceira geração e um valor baseado na contagem de vCPUs para máquinas de quarta geração.

Valide a substituição

Para verificar se a substituição foi aplicada corretamente, verifique as etiquetas dos nós e a capacidade dos nós.

Nos comandos seguintes, substitua NODE_NAME pelo nome de um nó que faça parte do conjunto de nós específico onde aplicou a etiqueta de nó de substituição.

  1. Verifique as etiquetas dos nós:

    kubectl get node NODE_NAME --show-labels
    

    A saída deve incluir a etiqueta node-restriction.kubernetes.io/gke-volume-attach-limit-override.

  2. Verifique a capacidade do nó:

    kubectl describe node NODE_NAME
    

    A saída deve incluir a capacidade attachable-volumes-gce-pd, que deve corresponder ao valor de substituição que definiu para o conjunto de nós. Para mais informações, consulte o artigo Verifique os recursos atribuíveis num nó.

O que se segue?