Limitação da CPU do Kubernetes: o agressor silencioso do tempo de resposta

Agente de atendimento ao cliente trabalhando até tarde

Atualmente, a maioria das organizações empresariais que executam aplicações de missão crítica no Kubernetes o faz em ambientes multilocatários. Esses ambientes multilocatários dependem da definição de limites para regular o consumo das cargas de trabalho de locatários ou para usar limites para estornos. Alguns desenvolvedores optarão por definir limites de CPU ou GPU para benchmark de suas aplicações.

A limitação da CPU (por meio da qual a taxa de agendamento de tarefas nos núcleos físicos da CPU é inadvertidamente diminuída, muitas vezes resultando em um aumento indesejado no tempo de resposta das aplicações) é a consequência não intencional desse projeto. Veja este exemplo:

Na figura acima, o uso da CPU de um contêiner é de apenas 25%, o que o torna um candidato natural a ser redimensionado:

Porém, depois que redimensionamos o contêiner (o uso da CPU do contêiner agora é de 50%, ainda não é alto), o tempo de resposta quadruplicou.

As mais recentes notícias de tecnologia, corroboradas por insights de especialistas.

Mantenha-se atualizado sobre as tendências mais importantes (e intrigantes) do setor em IA, automação, dados e muito mais com o boletim informativo Think. Consulte a Declaração de privacidade da IBM.

Agradecemos sua inscrição!

Sua assinatura será entregue em inglês. Você pode encontrar um link para cancelar a assinatura em todos os boletins informativos. Você pode gerenciar suas inscrições ou cancelar a inscrição aqui. Consulte nossa Declaração de privacidade da IBM para obter mais informações.

O que é limitação da CPU?

O que acontece? A limitação da CPU ocorre quando você configura um limite de CPU em um contêiner, o que pode retardar inversamente o tempo de resposta da sua aplicação e causar um problema de limitação. Mesmo que você tenha recursos mais do que suficientes em seu nó subjacente, sua carga de trabalho de contêiner ainda será limitada porque não foi configurada corretamente. Além disso, o impacto da limitação no desempenho pode variar dependendo do processador físico subjacente (Intel versus AMD versus NVIDIA). Os altos tempos de resposta estão diretamente correlacionados aos períodos de alta limitação da CPU, e é exatamente assim que o Kubernetes foi projetado para funcionar.

Para trazer um pouco de cor, imagine que você defina um limite de CPU de 200 ms e esse limite seja traduzido para uma cota de grupo no sistema Linux subjacente. O contêiner só pode usar 20 ms da CPU de cada vez (chamado de fatia de tempo da CPU) porque o período de aplicação padrão é de apenas 100 ms. Se a tarefa durar mais de 20 ms, você será limitado e levará quatro vezes mais tempo para concluir a tarefa.

Com base nesse comportamento, o desempenho da aplicação sofrerá devido ao aumento no tempo de resposta causado pela limitação, e você iniciará a solução de problemas para tentar encontrar o problema.

OpenShift 

Veja como os contêineres são executados na nuvem com o OpenShift

Os contêineres facilitam a construção, a execução e a migração de aplicações entre diferentes ambientes. Este vídeo mostra como o OpenShift on IBM Cloud ajuda as equipes a gerenciar aplicações conteinerizadas de forma eficiente, tornando o desenvolvimento em nuvem mais rápido e confiável.

Solução de problemas de limitação da CPU no Kubernetes

Se você estiver executando uma implementação pequena, poderá solucionar problemas manualmente de limitação.

Primeiro, você identificaria o pod afetado usando ferramentas como kubectl. Em seguida, avalie os recursos do pod e os limites para garantir que estejam definidos corretamente. Verifique se há processos consumindo muitos recursos em execução dentro do contêiner que possam estar causando a limitação e analise a utilização e os limites da CPU.

Se a limitação da CPU persistir, considere o escalonamento automático horizontal do pod para distribuir a carga de trabalho em mais pods ou ajuste os recursos do nó do cluster para atender às demandas. Monitore e realize o ajuste fino de forma contínua dos recursos para otimizar o desempenho e evitar novos problemas de limitação.

Em uma implementação maior, é improvável que essa abordagem escale ou persista à medida que você adiciona mais pods.

Uso do IBM Turbonomic para evitar a limitação da CPU no Kubernetes

A limitação da CPU é uma métrica essencial de desempenho da aplicação devido à correlação direta entre o tempo de resposta e a limitação da CPU. Esta é uma ótima notícia para você, pois você pode obter essa métrica diretamente do Kubernetes e do OpenShift.

Para garantir que os tempos de resposta da sua aplicação permaneçam baixos, a CPU não seja limitada e você continue a ter uma aplicação de alto desempenho, é necessário entender primeiro que, quando a limitação da CPU está ocorrendo, você não pode confiar apenas na utilização do núcleo da CPU. Você precisa levar em conta todas as análises e dependências de recursos que afetam o desempenho da aplicação. O IBM Turbonomic incorporou essas considerações em sua plataforma de análise de dados.

Ao determinar as ações de adequação de contêineres, o Turbonomic analisa continuamente quatro dimensões:

  1. Limites de CPU
  2. Solicitações de CPU
  3. Limites de memória
  4. Solicitações de memória

O Turbonomic pode determinar os limites de CPU que mitigarão o risco de limitação e permitirão que suas aplicações funcionem sem impedimentos. Isso tudo por meio do poder de adicionar a limitação da CPU como uma dimensão para a plataforma analisar e gerenciar as compensações que aparecem. Adicionar a dimensão de limitação da CPU garantirá tempos de resposta baixos da aplicação.

Além disso, o Turbonomic está gerando ações para migrar seus pods e dimensionar seus clusters, como todos sabemos, é um desafio full stack. Os clientes têm a capacidade de ver os KPIs e perguntar "Qual dos meus serviços está sendo limitado?" Também permite que eles entendam o histórico de limitação da CPU para cada serviço e lembrem que cada serviço está diretamente correlacionado ao tempo de resposta da aplicação, fornecendo aos usuários janelas valiosas para o desempenho do sistema.

No contexto do Kubernetes, um dos principais benefícios do Turbonomic é a capacidade de identificar e corrigir rapidamente consequências não intencionais de uma estratégia de plataforma, em vez de ter que o cliente redesenhar sua estratégia de plataforma multilocatária. O Turbonomic não só monitora as métricas de limitação da CPU, como a plataforma também pode dimensionar automaticamente o limite de CPU e reduzir a limitação para um nível gerenciável.

Saiba mais sobre o IBM Turbonomic

O IBM Turbonomic pode ajudar a otimizar simultaneamente seus gastos e o desempenho da nuvem. Automatize ações de otimização de forma contínua e em tempo real, sem intervenção humana, que oferecem de forma proativa o uso mais eficiente dos recursos de computação, memória, armazenamento e rede para seus aplicativos em todas as camadas da stack.

 

Autora

Cheuk Lam

Software Engineer

IBM Blog

Soluções relacionadas
IBM Red Hat OpenShift

O Red Hat OpenShift on IBM Cloud é uma plataforma de contêineres OpenShift (OCP) totalmente gerenciada.

Explore o Red Hat OpenShift
Soluções de contêiner

As soluções de contêineres executam e escalam cargas de trabalho conteinerizadas com segurança, inovação de código aberto e implementação rápida.

Explore contêineres
Serviços de consultoria em nuvem 

Libere novos recursos e aumente a agilidade dos negócios com os serviços de consultoria em nuvem da IBM. Descubra como cocriar soluções, acelerar a transformação digital e otimizar o desempenho por meio de estratégias de nuvem híbrida e parcerias especializadas.

Serviço de nuvem
Dê o próximo passo

Modernize sua infraestrutura com as soluções de contêineres da IBM. Execute, escale e gerencie cargas de trabalho conteinerizadas em todos os ambientes com flexibilidade, segurança e eficiência usando a abrangente plataforma de contêineres da IBM.

Explore soluções de contêineres Crie sua conta gratuita na IBM Cloud