Modelagem do Uso de Recursos no Kubernetes para Aplicações Nativas da Nuvem
Uma estrutura pra prever as necessidades de recursos em implantações do Kubernetes.
― 8 min ler
Índice
A computação em nuvem mudou como as organizações rodavam seus softwares. Agora, elas conseguem manter seus serviços disponíveis com um custo menor. Uma tecnologia chave que possibilita essa mudança são os Microserviços containerizados. Sistemas avançados como o Kubernetes ajudam a gerenciar esses serviços. Porém, muitas vezes, gerenciar serviços ainda é uma tarefa manual, mesmo com várias ferramentas de monitoramento disponíveis.
Modelar sistemas em nuvem é crucial para a gestão automática. Mas, a complexidade desses sistemas torna a modelagem difícil e ainda não totalmente resolvida. Este artigo foca em como criar modelos de recursos para sistemas em nuvem com base em dados do mundo real. Esses modelos ajudam a comparar os resultados de diferentes cenários de implantação.
Vamos dar uma olhada em uma aplicação de microserviços específica no Kubernetes, usando Real-Time ABS como nossa linguagem de modelagem. Vamos descrever como coletar dados de pequenas implantações para simular implantações maiores. O artigo também abordará os desafios e limites dessa abordagem, além das condições para conseguir uma boa precisão.
Aplicações Nativas da Nuvem
Aplicações nativas da nuvem são compostas por muitos serviços pequenos e independentes. Esses serviços são chamados de microserviços. Implantar essas aplicações pode ser complicado e propenso a erros. Tecnologias de contêiner como o Docker ajudam a gerenciar dependências e isolar serviços em um ambiente seguro. Sistemas de orquestração como o Kubernetes implantam e gerenciam esses serviços containerizados.
A Cloud Native Computing Foundation (CNCF) relata que o uso de contêineres aumentou significativamente de 2016 a 2021. A pesquisa deles mostra que 96% das organizações estão usando ou investigando o Kubernetes em seus ambientes de produção.
O Kubernetes é o sistema de terceira geração do Google para gerenciar contêineres, e foi tornado open-source em 2014. Ele serve como uma ponte entre operadores de cluster e aplicações em execução. As aplicações são montadas como grupos de serviços, cada um gerenciado separadamente. O Kubernetes usa a containerização para gerenciar escalabilidade e recuperação de falhas.
Os contêineres são agrupados em "PODS", que definem como eles rodam juntos. O Kubernetes também tem ferramentas para escalar aplicações, redistribuir cargas de trabalho e gerenciar atualizações.
Apesar da disponibilidade de ferramentas e documentação, implantar uma aplicação de microserviços no Kubernetes ainda pode ser um desafio técnico. Muitos fatores impactam o desempenho, incluindo como os recursos são alocados e como as cargas de trabalho são equilibradas. As decisões de implantação desempenham um papel significativo no desempenho, tornando difícil automatizar completamente a implantação.
A Importância da Modelagem de Recursos
Modelar recursos é crucial para melhorar a gestão de aplicações em nuvem. Isso envolve acompanhar como os recursos de CPU e memória são usados dentro de um ambiente Kubernetes. Ao modelar o consumo de recursos, os administradores de sistema podem encontrar as melhores configurações para que as aplicações atendam às necessidades de desempenho.
O principal objetivo deste artigo é apresentar uma estrutura de modelagem que prevê o uso de recursos em ambientes Kubernetes. A estrutura ajuda a identificar como diferentes configurações impactam o consumo de recursos, permitindo uma melhor tomada de decisão na implantação de aplicações de microserviços.
Focamos em dois tipos de recursos: aqueles que estão temporariamente disponíveis e são reabastecidos periodicamente (como a CPU), e aqueles que são consumidos e liberados (como a memória). Esta exploração visa ajudar nas comparações de usabilidade e desempenho através de um modelo flexível e executável.
Visão Geral da Estrutura
Estrutura de Modelagem de Recursos
A estrutura de modelagem que apresentamos é destinada a ajudar a gerenciar o uso de recursos no Kubernetes. Ela fornece um ambiente de simulação para prever como serviços e recursos interagem sob diferentes cargas. Com essa estrutura, os administradores de sistema podem experimentar várias configurações antes da implantação real.
Coleta de Dados
Para construir modelos precisos, dados do mundo real são cruciais. Isso envolve coletar dados de implantações existentes para alimentar o modelo. A estrutura permite simulações baseadas nesses dados, ajudando a entender como as mudanças afetarão o uso de recursos.
Modelos de Carga de Trabalho e Serviço
A estrutura abstrai as cargas de trabalho de serviço em requisições em lote. O custo de processamento de cada requisição depende dos recursos do nó que hospeda. Ao dividir as requisições em lotes menores, o modelo permite previsões de consumo de recursos mais precisas.
Integração de Informações de Custo
As tabelas de custo são uma parte chave da nossa estrutura. Essas tabelas fornecem informações sobre o consumo de recursos entre diferentes serviços, fluxos de trabalho e taxas esperadas de requisições. Elas são construídas a partir de dados reais coletados durante os experimentos, ajudando a criar um modelo mais preciso e informativo.
Noções Básicas do Kubernetes
Pods e Serviços
No Kubernetes, um pod é a menor unidade que abriga um ou mais contêineres. Os pods compartilham recursos, como CPU e memória, enquanto fornecem uma camada de abstração que simplifica o gerenciamento de múltiplos contêineres. Os serviços são usados para expor certas funções dos pods, permitindo que os clientes interajam facilmente com eles.
Nós
Os nós são as máquinas que rodam os vários pods. Cada nó tem capacidades de recurso específicas, como limites definidos de CPU e memória. Quando um pod é implantado, ele deve atender aos requisitos de recurso estabelecidos para ele. O agendador do Kubernetes desempenha um papel importante em decidir quais nós podem hospedar os pods com base na disponibilidade de recursos.
Balanceamento de Carga
O Kubernetes busca equilibrar cargas entre vários pods para melhorar o desempenho. No entanto, isso pode ser desafiador com microserviços. Alguns serviços podem receber mais requisições que outros, levando a um uso desigual dos recursos. Implementar balanceadores de carga adicionais pode ajudar a resolver esses problemas, melhorando a eficiência geral do sistema.
Metodologia para Modelar Implantações no Kubernetes
Instrumentos e Fluxos de Trabalho
Para usar nossa estrutura de modelagem, preciso configurar primeiro o ambiente do Kubernetes. O foco deve ser em fluxos de trabalho que impactam significativamente o uso de recursos. Fluxos de trabalho chave podem ser identificados com base nas demandas da aplicação ou em interações que levam a um consumo de recursos mensurável.
Estratégia de Amostragem
Uma estratégia de amostragem definida é crucial para criar tabelas de custo precisas. Experimentos devem ser conduzidos para rastrear como os recursos são utilizados em diferentes cargas de trabalho de serviço. Isso ajuda a criar uma imagem clara de como diferentes requisições impactam o sistema como um todo.
Previsões Baseadas em Modelo
Assim que a estrutura estiver configurada e as tabelas de custo forem geradas a partir dos dados coletados, previsões podem ser feitas sobre o consumo de recursos. Isso permite que os administradores explorem vários cenários de implantação e determinem as melhores configurações para suas aplicações.
Avaliação da Metodologia
A metodologia proposta é testada com uma aplicação real nativa da nuvem. Os experimentos focam em fluxos de trabalho mistos, considerando clusters homogêneos e heterogêneos.
Resultados e Discussão
Nossas descobertas mostram que a estrutura de modelagem fornece previsões precisas de consumo de recursos sob várias cargas. A estrutura mostra-se eficaz na identificação de gargalos e problemas de desempenho, ao mesmo tempo que simplifica o processo de gerenciamento de recursos no Kubernetes.
Tempos de Resposta
Ao avaliar os tempos de resposta em diferentes configurações, aprendemos quais setups oferecem um melhor desempenho. Os resultados sugerem que implantações bem equilibradas produzem tempos de resposta e uso de recursos favoráveis.
Conclusão e Trabalhos Futuros
Prever configurações de cluster que economizam recursos pode ser desafiador. A estrutura de modelagem e a metodologia propostas oferecem uma maneira eficaz de lidar com essa questão. Ao permitir a análise sistemática do uso de recursos, essa abordagem ajuda a melhorar as decisões de implantação para aplicações nativas da nuvem no Kubernetes.
Trabalhos futuros vão se concentrar em aprimorar a usabilidade da estrutura de modelagem, automatizando o processo de amostragem e examinando como diferentes cargas de serviço afetam as previsões de desempenho. Mais pesquisas são necessárias para explorar a aplicabilidade dessa estrutura em diferentes ambientes e plataformas em nuvem além do Kubernetes.
Título: Predicting Resource Consumption of Kubernetes Container Systems using Resource Models
Resumo: Cloud computing has radically changed the way organisations operate their software by allowing them to achieve high availability of services at affordable cost. Containerized microservices is an enabling technology for this change, and advanced container orchestration platforms such as Kubernetes are used for service management. Despite the flourishing ecosystem of monitoring tools for such orchestration platforms, service management is still mainly a manual effort. The modeling of cloud computing systems is an essential step towards automatic management, but the modeling of cloud systems of such complexity remains challenging and, as yet, unaddressed. In fact modeling resource consumption will be a key to comparing the outcome of possible deployment scenarios. This paper considers how to derive resource models for cloud systems empirically. We do so based on models of deployed services in a formal modeling language with explicit CPU and memory resources; once the adherence to the real system is good enough, formal properties can be verified in the model. Targeting a likely microservices application, we present a model of Kubernetes developed in Real-Time ABS. We report on leveraging data collected empirically from small deployments to simulate the execution of higher intensity scenarios on larger deployments. We discuss the challenges and limitations that arise from this approach, and identify constraints under which we obtain satisfactory accuracy.
Autores: Gianluca Turin, Andrea Borgarelli, Simone Donetti, Ferruccio Damiani, Einar Broch Johnsen, Silvia Lizeth Tapia Tarifa
Última atualização: 2023-05-12 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2305.07651
Fonte PDF: https://arxiv.org/pdf/2305.07651
Licença: https://creativecommons.org/licenses/by/4.0/
Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.
Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.
Ligações de referência
- https://github.com/GoogleCloudPlatform/microservices-demo
- https://github.com/giaku/abs-k8s-model/tree/ld-fixed-nodes
- https://github.com/giaku/abs-k8s-experiments
- https://www.mn.uio.no/ifi/english/research/projects/adapt/
- https://www.nrec.no
- https://dx.doi.org/#1
- https://www.abs-models.org
- https://github.com/abstools/abstools
- https://istio.io/
- https://github.com/kubernetes/kubernetes/
- https://kubernetes.io/docs/concepts/
- https://linkerd.io/
- https://www.cncf.io/wp-content/uploads/2020/12/CNCF_Survey_Report_2020.pdf
- https://www.cncf.io/wp-content/uploads/2022/02/CNCF-AR_FINAL-edits-15.2.21.pdf
- https://kubernetes.io/blog/2018/11/07/grpc-load-balancing-on-kubernetes-without-tears/
- https://www.worldcat.org/oclc/904463848
- https://158.39.77.170:32366/namespaces
- https://158.39.77.170:30684/
- https://www.nrec.no/
- https://prometheus.io/
- https://grafana.com/
- https://helm.sh/
- https://github.com/tsenart/vegeta