O Kubernetes, o software de orquestração de contêineres de código aberto, está dominando o mundo dos aplicativos em contêineres, detendo de longe a maior parte de sua participação no mercado. E há muitas razões para isso. O Kubernetes estende drasticamente os recursos do software para ambientes habilitados para contêineres, como o Docker. Ele simplifica o gerenciamento de implantação, roteamento de rede, utilização de recursos, balanceamento de carga, resiliência de aplicativos em execução e muito mais.
No entanto, essa solução não funcionará efetivamente por si só sem preparação adequada e configuração adicional, pois cada cluster recém-criado não tem um desempenho ideal por padrão. Sempre há dificuldades e nuances sutis na implementação e operação do Kubernetes, bem como o problema do uso subótimo de suas vantagens, o que acaba levando à perda de dinheiro. Nesse caso, os representantes das equipes de TI devem possuir experiência, métodos e instrumentos suficientes para definir configurações incorretas e gargalos, mas, ao mesmo tempo, há uma escassez global de expertise em Kubernetes no mercado, porque neste momento a popularidade do K8s está ultrapassando o nível de conhecimento sobre ele entre especialistas técnicos.
Principais problemas de desempenho do Kubernetes
Com base no pesquisar conduzido pela Circonus, os quatro principais problemas de desempenho do Kubernetes são:
- contenção de recursos para clusters/nós/pods,
- problemas de implantação,
- desafios de dimensionamento automático,
- loops de travamento e falhas de trabalho.
Não foi nenhuma surpresa, pois esses problemas decorrem, em grande parte, das peculiaridades da tecnologia e da falta de conhecimento e experiência ao trabalhar com essa plataforma.
No coração do Kubernetes, há um planejador que coloca contêineres em nós. Simplificando, é como embalar caixas de tamanhos diferentes com itens de tamanhos e formatos diferentes. Desse ponto de vista, o planejador precisa saber a capacidade exata dos nós, bem como o tamanho de cada contêiner que está sendo colocado nesses nós. A falha em fazer isso resulta em superprovisionamento dos nós e sérios problemas de desempenho.
Como resolver problemas de desempenho do Kubernetes
Monitoramento de métricas do Kubernetes
A maneira mais eficiente — e, ao mesmo tempo, mais desafiadora — de lidar com problemas de desempenho do K8s é definitivamente aumentar a observabilidade da plataforma para ajudar você a entender quais das métricas coletadas você precisa ficar de olho para identificar a causa raiz de certos problemas. Na verdade, o Kubernetes fornece várias métricas, e a maioria delas é uma fonte importante de insights sobre como usar a plataforma, independentemente de como você realmente a executa.
Sistemas de monitoramento de código aberto como Prometeu pode ser uma grande ajuda em visualizando seus custos do Kubernetes. E com a ajuda de um programa autônomo exportador é possível traduzir métricas de nó para o formato apropriado e enviá-las para o servidor Prometheus. Ao instalá-lo em cada nó do seu cluster, você poderá ter acesso a dezenas de categorias de métricas, as mais importantes das quais estão relacionadas ao uso de CPU, disco, memória e rede.
Apesar de termos reduzido o alcance das métricas estudadas para quatro categorias, neste estágio ainda será difícil para nós entender quais indicadores são primordiais para nós. Como o Kubernetes é um exemplo de um sistema complexo, devemos seguir o caminho de simplificar abstrações em torno das categorias de interesse para nós. Posteriormente, isso nos ajudará a analisar não apenas as métricas de nó, mas em geral todas as métricas do Kubernetes.
Os métodos mais comuns para simplificar abstrações são:
- O Método USE, introduzido em 2012 por Brendan Gregg; direcionado aos recursos do seu sistema:
Utilização – o tempo médio em que o recurso esteve ocupado realizando serviços de manutenção.
Saturação – o grau em que o recurso tem trabalho extra que não pode atender, geralmente enfileirado.
Erros – a contagem de eventos de erro.
- O Método RED (2015), que define as três principais métricas que você deve medir para cada microsserviço em sua arquitetura:
(Taxa de solicitação) – o número de solicitações atendidas.
(Solicitação) Erros – o número de solicitações com falha.
(Solicitação) Duração – distribuições da quantidade de tempo que cada solicitação leva.
- Os Quatro Sinais de Ouro (descritos no livro Engenharia de Confiabilidade do Site do Google) são, até certo ponto, uma fusão dos métodos acima:
Latência – o tempo que leva para atender uma solicitação.
Tráfego – uma medida de quanta demanda é colocada em seu sistema, medida em uma métrica específica do sistema de alto nível.
Erros – a taxa de solicitações que falham, explicitamente, implicitamente ou pela política.
Saturação – quão “cheio” está o seu serviço.
Acontece que não basta ter informações extensas sobre os recursos nos nós do cluster Kubernetes, também é importante poder analisá-los. Por exemplo, analisar recursos (como CPU, disco, memória e rede) pela lente de uso, saturação e erros (método USE) pode nos dar uma compreensão de como os recursos estão sendo gastos e nos permitir otimizar e dimensionar ainda mais seu uso.
Depois que sua equipe de TI descobrir quais recursos estão subutilizados e superutilizados, eles poderão definir os limites de armazenamento ideais, o tamanho ideal de CPU e memória para nós de cluster e os pools de nós ideais para cada nó, o que, por sua vez, permitirá que eles analisar os custos do Kubernetes e analisar seu desempenho.
Seguindo as melhores práticas
Independentemente do nível de sucesso com que você monitora e analisa o uso de recursos do Kubernetes, há uma série de práticas recomendadas a serem seguidas para ajudar você a aproveitar ao máximo a plataforma.
- Otimize seu ambiente para o Kubernetes.
Tenha em mente que ferramentas conteinerizadas foram originalmente projetadas para uma arquitetura fracamente acoplada consistindo em aplicativos Stateless que processam dados, mas não armazenam nada. Portanto, é um erro não fazer nada antes de implantar aplicativos Stateful de armazenamento de dados e não adaptar a arquitetura de aplicativos monolíticos permitindo que eles rodem no Kubernetes. - Use o Kubernetes somente quando for necessário.
Ao migrar para o Kubernetes, lembre-se de que faz sentido executar bancos de dados e alguns aplicativos em uma máquina virtual, e uma possível mudança por si só pode afetar seriamente o desempenho. - Tenha especialistas que saibam trabalhar com Kubernetes.
Trabalhar com o Kubernetes requer administradores de sistema com experiência prática com a plataforma, pois manter com sucesso esse ecossistema de componentes exige um alto nível de especialização. - Adapte os processos de TI para implementação do Kubernetes.
O Kubernetes está mudando fundamentalmente a distribuição de papéis e responsabilidades dentro de uma equipe de TI. Agora, a implementação adequada requer uma mudança para processos DevOps, e os desenvolvedores devem aceitar essa metodologia e suas ferramentas.Por meio do DevOps, os administradores de sistema mantêm a infraestrutura, enquanto os desenvolvedores dão suporte ao aplicativo desde o planejamento e codificação até o lançamento, implementação, monitoramento e produção. Os desenvolvedores agora não podem deixar de conhecer a infraestrutura; eles também devem entender como seu código funciona no contexto de todos esses novos processos.
- Aproveite ferramentas adicionais que estendem a funcionalidade do Kubernetes sem depender apenas de funcionalidades prontas para uso.
Nosso produto, OptScale, pode ajudar a definir corretamente um conjunto de recursos e configurações, como redimensionamento de VM, tipos de máquina, seleção de região, reformulação de recursos de trabalho de CI/CD ou grupos de afinidade de pod para obter melhor desempenho.
Para experimentar, você pode fazer um teste gratuito; não precisa de cartão de crédito → https://my.optscale.com/register