Ir para o conteúdo

Como posso resolver a pressão do disco nos meus nós de processamento do Amazon EKS?

5 minuto de leitura
0

Quero resolver a pressão excessiva do disco nos meus nós de processamento do Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrição

A pressão de disco nos nós de processamento do Kubernetes ocorre quando o espaço em disco disponível cai para níveis baixos. Para reduzir a pressão de disco, aumente o tamanho do volume do EBS ou adicione novos nós de processamento ao grupo de nós para fornecer mais capacidade de disco. Também é possível ajustar os limites de coleta de resíduos de imagens do Kubelet, configurar a alternância do log do runtime do contêiner e limpar manualmente as imagens não utilizadas para gerenciar com eficiência o uso do disco.

É importante monitorar e gerenciar o armazenamento temporário para evitar problemas de pressão de disco e garantir que seus clusters do Kubernetes funcionem corretamente.

Se você tiver pressão excessiva no disco, poderá receber uma mensagem de erro.

Para o nó, você pode receber uma mensagem de erro semelhante à seguinte:

"Warning DiskPressure ... kubelet, worker-node DiskPressure on node"

Para o Kubelet, você pode receber uma mensagem de erro semelhante à seguinte:

"Disk usage on image filesystem is over the high threshold, trying to free bytes down to the low threshold"

Para confirmar o problema, execute o comando df-h para verificar o uso do disco no nó de processamento.

Exemplo de saída:

/dev/nvme0n1p1   20G   18G  2.2G  90% /       
........

Observação: no exemplo anterior, o sistema de arquivos raiz /dev/nvme0n1p1 está com 90% de uso. O alto uso causa problemas de falha na pressão de disco e na coleta de resíduos de imagens.

Resolução

Aumentar o tamanho do volume do EBS

Para aumentar o espaço em disco disponível, aumente o tamanho do volume do EBS que está conectado ao nó de processamento. Para mais informações, consulte Como aumentar ou diminuir o tamanho do volume do EBS?

Observação: em vez de redimensionar seus volumes efêmeros, é uma prática recomendada provisionar novas instâncias com o tamanho de disco desejado. Use as novas instâncias para substituir a antiga. Assim, as novas instâncias têm o tamanho de disco correto e ficam alinhadas com a lógica de infraestrutura imutável.

Adicionar um novo nó de processamento ao grupo de nós

Adicione um novo nó ao grupo de nós ou pool para adicionar mais volume de disco ao cluster e distribuir o workload em vários nós. Isso alivia a pressão do disco em qualquer nó único.

Configure limites personalizados para o coletor de resíduos do Kubelet

Configure o Kubelet para iniciar a coleta de resíduos de imagens em diferentes limites de uso do disco. Para fazer isso, defina os argumentos --image-gc-high-threshold e --image-gc-low-threshold para permitir mais buffer. Por exemplo, defina o limite alto para 70% e o limite baixo para 60% para manter um buffer maior de espaço livre em disco. Essa configuração permite que o Kubelet realize a coleta de resíduos de imagens antes que o disco fique criticamente cheio.

Para mais informações sobre como configurar esses argumentos em seus nós de processamento, consulte Como configuro os nós de processamento do Amazon EKS para limpar o cache de imagem em uma porcentagem específica de uso do disco?

Verificar e ajustar a alternância do log de runtime do contêiner

As aplicações em contêineres gravam logs em stdout e stderr, e os arquivos de log são gerenciados pelo runtime do contêiner. É uma prática recomendada ajustar as configurações de alternância de logs para o runtime do contêiner em seus nós de processamento.

Para configurar sua alternância de logs, em containerd, use as opções containerd.runc.log no arquivo de configuração /etc/cotainerd/config/toml. Defina as opções log_file_max e log_file_max_size para controlar o número máximo de arquivos de log rotacionados e o tamanho máximo de cada arquivo de log.

Limpar imagens de contêiner não utilizadas

Se o Kubelet não conseguir realizar uma coleta de resíduos de imagens automaticamente, limpe de forma manual as imagens de contêiner não utilizadas no nó de processamento. Para remover imagens pendentes ou não utilizadas e liberar espaço em disco, use o comando crictl rmi --prune.

Gerenciar o armazenamento temporário

Para estabilidade a longo prazo e operação intuitiva das aplicações, é uma prática recomendada gerenciar adequadamente o armazenamento temporário. Se você não definir limites para o armazenamento temporário, um pod poderá consumir todo o espaço em disco no nó em que é executado.

Para reduzir esse risco, defina solicitações e limites de armazenamento temporários apropriados para seus pods. Execute as seguintes ações para determinar os limites:

  • Para identificar os requisitos de armazenamento do pod, analise as necessidades de armazenamento da aplicação, os dados temporários e outros arquivos armazenados no armazenamento temporário. Em seguida, é possível estimar os requisitos de armazenamento para cada pod.
  • Para definir solicitações e limites de armazenamento temporário, defina a quantidade mínima de armazenamento temporário necessária para que seu pod funcione corretamente. Em seguida, o agendador do Kubernetes pode alocar nós com recursos de armazenamento suficientes para seus pods.
    Exemplo:
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-app:latest
        resources:
            requests:
                ephemeral-storage: "1Mi"
            limits:
                ephemeral-storage: "2Mi"
AWS OFICIALAtualizada há 8 meses