Por que os pods exibem erros do tipo “ pull QPS exceeded ” durante o download de imagens?
Ao iniciar os pods, você pode observar erros indicando que as operações de download de imagens estão sendo limitadas, com mensagens como “ pull QPS exceeded ”.
Quando você implanta pods que precisam extrair imagens de contêineres, pode observar os seguintes sintomas:
- Mensagens de erro contendo “
pull QPS exceeded” durante a inicialização do pod - Tempos lentos de extração de imagens, especialmente ao extrair várias imagens grandes
- Os pods estão demorando mais do que o esperado para chegar ao estado
Running - Operações de extração de imagens que parecem estar sendo estranguladas ou com taxa limitada
A causa mais provável para a lentidão no carregamento de imagens, acompanhada de erros do tipo “ pull QPS exceeded ”, é que os nós de trabalho da sua VPC estejam atingindo o limite de largura de banda de E/S de disco.
Os nós de trabalho da VPC têm limites de largura de banda diferentes, dependendo de sua configuração:
- Nós de trabalho padrão (sem armazenamento secundário): Limitado a 393 Mbps (49 MB/s) para operações de E/S de disco
- Nós de trabalho com armazenamento secundário: Limites de largura de banda mais altos, dependendo da camada de armazenamento selecionada
Quando vários pods tentam extrair imagens de contêineres grandes simultaneamente:
- Cada operação de extração de imagem consome largura de banda de E/S do disco
- A demanda combinada de largura de banda pode saturar rapidamente o limite de 49 MB/s
- Quando o limite é atingido, as operações de extração de imagens ficam significativamente mais lentas
- Kubernetes pode relatar erros do tipo “
pull QPS exceeded”, pois limita as operações
Para determinar se você está atingindo o limite de largura de banda do nó de trabalho da VPC, use os recursos de monitoramento do site IBM Cloud.
Verificar a largura de banda de E/S do disco
-
Navegue até Observe → Metrics no console OpenShift do seu cluster.
-
Use a seguinte consulta Prometheus para monitorar as taxas de leitura e gravação de disco:
irate(node_disk_read_bytes_total[2m]) + irate(node_disk_written_bytes_total[2m]) -
Interpretar os resultados:
- Se algum dispositivo mostrar valores próximos ou em 49M (49 MB/s), você está atingindo o limite de largura de banda.
- Valores sustentados nesse limite ou próximos a ele durante as operações de extração de imagens confirmam a saturação da largura de banda.
- Vários picos nesse limite indicam restrições repetidas de largura de banda.
Verificar os tempos de extração de imagens
Você também pode verificar diretamente os tempos de extração da imagem:
oc get events -A | grep -E "Successfully pulled image"
Esse comando mostra o tempo que cada extração de imagem levou, ajudando você a identificar extrações lentas.
Resolva o problema
Solução primária: Usar pools de trabalho com armazenamento secundário
A solução recomendada é usar pools de trabalho com armazenamento secundário anexado. O armazenamento secundário com 10iops-tier fornece largura de banda de E/S dedicada que não compete com o disco de inicialização, resultando
em uma taxa de transferência muito maior para extrações de imagens simultâneas e tempos de inicialização de pods mais rápidos.
-
Crie um novo pool de trabalho com armazenamento secundário.
- Quando você criar um novo pool de trabalho, selecione uma variante com armazenamento secundário.
- Use uma das opções de armazenamento
10iops-tierpara obter o melhor desempenho.
-
Migre suas cargas de trabalho para o novo pool.
-
Drenar e remover o pool de trabalho antigo após a conclusão da migração.
Considerações adicionais
Embora o upgrade para o armazenamento secundário seja a principal solução, você também pode:
- Reduzir o tamanho das imagens
- Use construções em vários estágios e minimize as camadas
- Use o cache de imagens
- Extraia previamente as imagens mais usadas para os nós de trabalho
- Otimizar imagePullPolicy
- Configure as especificações de seu pod para reduzir os pulls desnecessários:
- Use
imagePullPolicy: IfNotPresentpara extrair imagens somente se elas ainda não existirem no nó. - Evite o site
imagePullPolicy: Always, a menos que você precise especificamente obter a versão mais recente todas as vezes. - Para cargas de trabalho de produção, use tags de imagem específicas, não
latest, combinadas comIfNotPresentpara minimizar os pulls.
- Use
- Configure o monitoramento e os alertas
- Configure alertas para altas taxas de E/S de disco sustentadas que se aproximam de 49 MB/s.
- Monitore os tempos de extração de imagens como parte das métricas de implantação.
- Acompanhe os tempos de inicialização do pod para identificar a degradação do desempenho.