Práticas recomendadas de monitoramento do Kubernetes
Os microsserviços - agora a escolha de fato para a forma como construímos nossa infraestrutura - abriram naturalmente o caminho para os contêineres. Com ferramentas de orquestração de contêineres como Kubernetes e Docker, as organizações agora podem enviar aplicativos mais rapidamente e em maior escala. Mas, com todo esse poder e automação, surgem desafios, especialmente em torno da manutenção da visibilidade desta infraestrutura efêmera.
Monitorando cargas de trabalho do Kubernetes
Kubernetes é complexo (para descobrir exatamente o que é Kubernetes e como funciona, leia nosso guia completo sobre Kubernetes). Para utilizá-lo com sucesso, é necessário que vários componentes sejam monitorados simultaneamente. Para facilitar sua estratégia de monitoramento, separe as operações de monitoramento em diversas áreas, com cada seção referindo-se a uma camada individual do ambiente Kubernetes. Em seguida, divida o monitoramento da carga de trabalho de cima para baixo: clusters, pods, aplicativos e, por fim, a experiência do usuário final.
Monitorando Clusters Kubernetes
O cluster é o constituinte de mais alto nível do Kubernetes. A maioria das instalações do Kubernetes possui apenas um cluster. É por isso que, ao monitorar o cluster, você obtém uma visão completa de todas as áreas. E pode verificar facilmente a integridade de pods, nós e aplicativos que compõem o cluster.
Ao implementar vários clusters usando federação, cada cluster deve ser monitorado individualmente. As áreas que você monitorará no nível do cluster seriam:
- Pods sem sucesso: pods que falham e são anulados são uma parte normal dos processos do Kubernetes. Quando um pod que deveria estar funcionando em um nível mais eficiente ou está inativo, é fundamental investigar o motivo das anomalias nas falhas do pod.
- Carga do nó: rastrear a carga em cada nó é essencial para monitorar a eficiência. Alguns nós podem ter muito mais uso do que outros. O reequilíbrio da distribuição de carga é fundamental para manter as cargas de trabalho fluidas e eficazes. Isso pode ser feito através do DaemsonSets.
- Uso do cluster: o monitoramento da infraestrutura do cluster permite ajustar o número de nós em uso e dedicar recursos para alimentar cargas de trabalho com eficiência. Você pode ver como os recursos estão sendo distribuídos para poder aumentar ou diminuir a escala e evitar os custos de infraestrutura adicional. Para isso, recomendamos aprender como definir a memória de um contêiner e o limite de uso de CPU.
Monitorando pods do Kubernetes
O monitoramento de cluster oferece uma visão macro do ambiente Kubernetes, mas a coleta de dados de pods individuais também é essencial. Ele revela a integridade de pods individuais e as cargas de trabalho que eles hospedam. Você obtém uma imagem mais clara do desempenho do pod em um nível granular, além do cluster. Aqui você monitoraria:
- Total de instâncias de pod: é necessário haver instâncias suficientes de um pod para garantir alta disponibilidade. Dessa forma, a largura de banda de hospedagem não é desperdiçada e você não executa mais instâncias de pod do que o necessário.
- Implantação de pods: o monitoramento da implantação de pods permite que você veja se alguma configuração incorreta pode estar diminuindo a disponibilidade dos pods. É fundamental ficar de olho em como os recursos são distribuídos aos nós.
- Instâncias reais de pod: monitorar o número de instâncias de cada pod em execução versus o que você esperava que estivesse em execução revelará como redistribuir recursos para atingir o estado desejado em termos de instâncias de pods. Os ReplicaSets podem estar configurados incorretamente se você observar métricas variadas, por isso é importante analisá-las regularmente.
Monitorando aplicativos em execução no Kubernetes
Os aplicativos não fazem parte do Kubernetes, mas querer hospedar um aplicativo é o objetivo do uso do Kubernetes. É por isso que monitorar o aplicativo hospedado no cluster é essencial para o sucesso. Os problemas revelados pelo monitoramento de aplicativos podem ser um problema no ambiente Kubernetes ou no código do aplicativo.
Ao monitorar aplicativos, você pode identificar as falhas e resolvê-las sem demora. Comece monitorando:
- Erros: se ocorrer um erro, você poderá resolvê-lo rapidamente durante o monitoramento e resolvê-lo antes que afete os usuários finais.
- Rastreamentos de transações: os rastreamentos de transações ajudam você na solução de problemas se os aplicativos apresentarem problemas de disponibilidade ou desempenho.
- Responsividade do aplicativo: você pode monitorar quanto tempo leva para um aplicativo responder a uma solicitação. Você pode ver se eles conseguem lidar com as cargas de trabalho atuais ou se estão lutando para manter o desempenho.
- Disponibilidade de aplicativos: monitore se os aplicativos estão ativos e funcionando e respondendo com eficiência.
Monitorando a experiência do usuário final ao executar o Kubernetes
A experiência do usuário final, assim como os aplicativos, tecnicamente não faz parte da plataforma Kubernetes. O objetivo geral de um aplicativo é proporcionar aos usuários finais uma experiência positiva e deve fazer parte de sua estratégia de monitoramento do Kubernetes.
A coleta de dados permitirá que você saiba o desempenho do aplicativo, sua capacidade de resposta e usabilidade. Fazer monitoramento sintético e de usuários reais é essencial para entender como os usuários interagem com as cargas de trabalho do Kubernetes. Ele permite que você saiba se precisa fazer alguma adaptação ou ajuste que melhore a usabilidade e o frontend.
Monitorando Kubernetes em um ambiente de nuvem
Quando o Kubernetes está sendo executado na nuvem, há fatores específicos a serem considerados ao planejar sua estratégia de monitoramento. Na nuvem, você também terá que monitorar:
- Eventos IAM: você terá que monitorar a atividade do IAM. Isso inclui alterações de permissões e logins, o que é uma prática recomendada para segurança em uma instalação ou ambiente baseado em nuvem.
- APIs de nuvem: um provedor de nuvem tem suas próprias APIs e sua instalação do Kubernetes as utiliza para solicitar recursos, por isso precisa ser monitorado.
- Custos: os custos na nuvem podem aumentar rapidamente. O monitoramento de custos auxilia no orçamento e garante que você não gaste demais em serviços Kubernetes baseados em nuvem.
- Desempenho da rede: Em uma instalação baseada em nuvem, a rede pode se tornar o maior obstáculo ao desempenho dos seus aplicativos. Se você monitorar a rede na nuvem regularmente, poderá ter certeza de que os dados estão se movendo tão rapidamente quanto necessário para evitar problemas relacionados à rede.
Monitorando métricas no Kubernetes
Para obter maior visibilidade de uma instalação do Kubernetes além de realizar diferentes tipos de monitoramento para o Kubernetes, também existem várias métricas que fornecerão informações valiosas sobre como seus aplicativos estão sendo executados.
Métricas Comuns
Estas são métricas coletadas do código do Kubernetes (escrito em Golang). Ele permite que você entenda o que está acontecendo no nível celular na plataforma.
Métricas de nó
As métricas dos sistemas operacionais que permitem os nós do Kubernetes podem fornecer informações sobre a integridade geral dos nós individuais. Você pode monitorar o consumo de memória, a atividade do sistema de arquivos, a carga da CPU, o uso e a atividade da rede.
Métricas do Kubelet
Para garantir que o plano de controle esteja se comunicando de forma eficiente com cada nó individual em que um Kubelet é executado, você deve monitorar o agente Kubelet regularmente.
Métricas de estado de Kube
Você pode obter um complemento eletivo do Kubernetes que gera métricas da API do Kubernetes chamada Kube-State-Metrics.
Métricas do Gerenciador de Controladores
Para garantir que as cargas de trabalho sejam orquestradas de forma eficaz, você pode monitorar as solicitações que o Controlador está fazendo para APIs externas. Isso é fundamental em implantações de Kubernetes baseadas em nuvem.
Métricas do Agendador
Se quiser identificar e evitar atrasos, você deve monitorar a latência no Agendador. Dessa forma, você pode garantir que o Kubernetes esteja implantando pods sem problemas e dentro do prazo.
Métricas etc.
O Etcd armazena todos os dados de configuração do Kubernetes. As métricas do Etcd lhe darão visibilidade essencial sobre a condição do seu cluster.
Métricas de contêiner
Analisar especificamente contêineres individuais permitirá monitorar o consumo exato de recursos, em vez de métricas mais gerais do Kubernetes. O CAdvisor permite analisar o uso de recursos que ocorre dentro de contêineres.
Métricas do servidor API
As APIs mantêm o frontend do Kubernetes unido e, portanto, essas métricas são vitais para obter visibilidade do API Server e, portanto, de todo o frontend.
Dados de registro
Os logs são úteis para examinar quando você encontra um problema revelado pelas métricas. Eles fornecem informações exatas e valiosas que fornecem mais detalhes do que métricas. Existem muitas opções para fazer login na maioria dos componentes do Kubernetes. Os aplicativos também geram dados de log.
Desafios, soluções e dicas de monitoramento do Kubernetes
A migração de aplicações de infraestruturas monolíticas para microsserviços gerenciados pelo Kubernetes é um processo longo e intensivo. Pode estar cheio de armadilhas e ser propenso a erros. Mas para alcançar maior disponibilidade, inovação, benefícios de custo, escalabilidade e agilidade, é a única maneira de expandir seus negócios, especialmente na nuvem. A visibilidade é o principal problema quando se trata de ambientes Kubernetes, pois ver as interações em tempo real de cada microsserviço é um desafio, devido à complexidade da plataforma. O monitoramento é uma habilidade especializada que cada empresa precisará praticar e aprimorar para ter sucesso.
Um cluster Kubernetes pode ser considerado complexo devido aos seus múltiplos servidores e serviços integrados de nuvem privada e pública. Quando surge um problema, há muitos registros, dados e outros fatores a serem examinados. Os ambientes monolíticos legados precisam apenas de algumas pesquisas de log para determinar o problema. Os ambientes Kubernetes, por outro lado, possuem um ou vários logs para os vários microsserviços implicados no problema que você está enfrentando.
>Para enfrentar esses desafios, reunimos as seguintes recomendações para monitorar com eficácia a infraestrutura em contêineres.
Uso eficaz do padrão Sidecar para monitoramento aprimorado de aplicativos no Kubernetes
Uma prática recomendada importante é aproveitar o acesso baseado em função no Kubernetes para fornecer controle ponta a ponta por uma única equipe com sua solução de monitoramento e sem ter controle total do cluster. Aproveitar uma solução de monitoramento em um namespace de equipe ajuda os operadores a controlar facilmente o monitoramento de seus aplicativos de contêiner baseados em microsserviços dentro do escopo de sua equipe.
No entanto, eles podem adicionar suporte de monitoramento adicional sem precisar reconstruir o contêiner do aplicativo. Uma abordagem dinâmica de monitoramento melhora a observabilidade e impulsiona o contexto, sem precisar retirar os contêineres caso eles comecem a apresentar problemas.
Observabilidade do namespace
Ao aproveitar um pipeline de eventos de monitoramento de código aberto, como o Sensu Go, as equipes de operações podem obter uma visão dedicada dos contêineres para melhorar a visibilidade de seus aplicativos e aumentar a percepção sobre possíveis anomalias. Esses tipos de soluções oferecem alterações dinâmicas de monitoramento para infraestruturas efêmeras. Como resultado, as operadoras podem ajudar a impulsionar a colaboração com segurança usando o conceito integrado do Kubernetes para controle de acesso baseado em funções.
O Kubernetes fornece escopo de namespace para recursos, possibilitando dar às equipes individuais controle total dos aplicativos em seu namespace. Os operadores também podem criar contêineres e pods em um namespace Kubernetes e mapeá-los diretamente para ferramentas de monitoramento orientadas por código, aproveitando também o mesmo namespace.
Por exemplo, você pode ter um namespace ‘Associado’ no pipeline de eventos de monitoramento de código aberto - semelhante ao Kubernetes - para que uma equipe possa controlar contêineres e monitorar em torno dele usando um repositório de arquivos de configuração YAML declarativos. Com o RBAC (controle de acesso baseado em função), você pode mitigar riscos fornecendo apenas o acesso necessário a um usuário para que ele não tenha mais do que o necessário.
A codificação de fluxos de trabalho de monitoramento em arquivos de configuração declarativos permite monitorar na velocidade da automação. Ele pode ser compartilhado, tratado como código, revisado, editado e versionado, permitindo uma operação eficiente em várias nuvens. Leia mais sobre como instalar o Prometheus no Kubernetes e como usá-lo.
Melhores práticas para registros no Kubernetes
A agregação de logs de aplicativos para cargas de trabalho em contêineres é uma prática recomendada essencial que pode melhorar o desenvolvimento de software. Devido à natureza efémera das cargas de trabalho contentorizadas, o número de entradas de registo geradas num cluster pode ser bastante grande.
Agentes de registro como Fluentd e FluentBit - projetos de software de coleta de dados de código aberto e plataforma cruzada originalmente desenvolvidos na Treasure Data - são normalmente usados como DaemonSets para coletar os logs de todos os pods em execução em um nó, usando uma montagem de volume privilegiada dos arquivos de log armazenado pelo tempo de execução do contêiner. Essas são ferramentas em nível de cluster usadas para agregar logs em um data lake, como o Elasticsearch, ou enviá-los para uma solução de processador de fluxo, como o Kafka. Talvez você queira usar o monitoramento funcional baseado em função para rastrear essas peças adicionais de infraestrutura de agregação de log executadas externamente. do seu cluster Kubernetes.
Use uma solução de monitoramento Kubernetes
A visibilidade é essencial para que as empresas identifiquem problemas de contêiner que impedem o desempenho dos aplicativos. Você pode monitorar aplicativos em contêineres executados em pods do Kubernetes com mais eficiência e aumentar ou diminuir a escala dependendo da necessidade. É por isso que é fundamental ter uma solução abrangente de monitoramento do Kubernetes que lhe dará visibilidade ponta a ponta de cada componente de seus aplicativos. Desde pods, nós, contêineres, infraestrutura, plataforma Kubernetes, até cada microsserviço e dispositivo de usuário final.
Monitore Kubernetes com APM
A implementação de uma solução de monitoramento de desempenho de aplicativos (APM) dá às empresas visibilidade de seus aplicativos e permite que avaliem o desempenho geral. Ele organiza e oferece insights sobre clusters Kubernetes, contêineres Docker e aplicativos em contêineres. Você pode examinar as métricas fundamentais da infraestrutura, aprender sobre possíveis impedimentos e fazer ajustes.
Obtenha visibilidade instantânea de memória, utilização de CPU e rede e estatísticas de uso de recursos ao implantar aplicativos de contêiner monitorados por APM. As métricas de APM identificam rapidamente problemas comuns, como aplicativos que monopolizam a largura de banda, ou reconhecem erros de rede de longo alcance no nível do contêiner.
Com essas dicas e estratégias de monitoramento, as operadoras podem dar grandes avanços para obter maior visibilidade em sua infraestrutura baseada em contêineres. E adote a operação multinuvem com confiança. Quer ajuda para começar? Contate um de nossos especialistas hoje.
Artigo escrito em colaboração com Jef Spaleta, principal desenvolvedor defensor da Sensu.