Skip to content

Latest commit

 

History

History
173 lines (124 loc) · 10.1 KB

README.md

File metadata and controls

173 lines (124 loc) · 10.1 KB

Logo KubeKepam

O Kube Kepam é uma solução auto adaptativa que gerencia quaisquer Microservice-Based Applications (MBAs) implantadas em Cluster Kubernetes. O seu objetivo é garantir que quaisquer requisitos específicados pelo desenvolvedores não sejam violados em tempo de execução. Ele é um projeto da disciplina Desenvolvimento de Aplicações com Arquitetura Baseada em Microsserviços. Essa disciplina é ofertada em conjunto para a graduação (IF1007) e pós graduação (IN1108) no Centro de Informática da Universidade Federal de Pernambuco (UFPE).

Tabela de Conteúdo

Equipe

Matheus Oliveira (mbo2) Nailson Barros (nnb) Wellison Santos (wrms)
Desenvolvedor Desenvolvedor Desenvolvedor

Justificativa

O monitoramento automático com o mínimo de intervenção humana de quaisquer aplicações implantadas na nuvem ainda não está estabelecida na indústria. No geral, boa parte das soluções proposta na literatura e na industria focam em métricas comuns da computação como memória, cpu e rede. Porém, poucos trabalhos focam em métricas como tempo de resposta, latência, número de requisições. O Kube Kepam surge como uma alternativa ao propor mecanismos adaptativos que consideram tais métricas

Arquitetura Conceitual

O que é o MAPE-K

O MAPE-K consiste em um modelo de computação autônoma desenvolvido pela IBM. Esse modelo é composto pelas fases de monitoramento, análise, planejamento e execução em conjunto com uma base de conhecimento. Um modelo genérico MAPE-K é apresentado a seguir:

Como funciona o MAPE-K do KubeKepam

O KubeKepam é uma aplicação composta pelos 4 principais compontes do MAPE-K, sendo eles: monitor, analisador, planejador e executor. A Figura abaixo apresenta o KubeKepam.

  • Monitor: Este componente coleta em tempo de execução métricas de desempenho e de negócio dos microsserviços. As métricas são coletadas através de API's disponíveis em bancos de dados como o Prometheus ou InfluxDB. Neste tipo de banco, é possível coletar o último valor da métrica ou agregado passado de valores.
  • Analisador: Este componente avalia as métricas coletadas pelo Monitor e determina se existem possíveis "sintomas" de uma possível queda no comportamento habitual da aplicação. No geral, existem diversas alternativas para analisar o comportamento do elemento monitorado variando conforme o contexto da aplicação. Nesta solução, é examinada a proporção no uso de recursos da aplicação, assim como feita pelo HPA Kubernetes.
  • Planejador: Este componente avalia os "sintomas" observados pelo Analisador e planeja ações que possam redirecionar a aplicação ao seu estado habitual de comportamento. Assim como na análise, diversas alternativas são viáveis para propor ações que tentarão "remover os sintomas presentes". Neste projeto, o Planejador calcula a quantidade de pods necessárias para reajustar o uso dos recursos, assim como feita pelo HPA Kubernetes.
  • Executor: Este componente conhece a quantidade de pods necessárias para cada microsserviço da aplicação disponibilizadas pelo Planejador. Sua função, portanto, é apenas atualizar a quantidade de pods por microsserviços através de requisições no Cluster Kubernetes.

A imagem completa da arquitetura conceitual está resumida abaixo:

Arquitetural Implementável

Para funcionar corretamente o KubeKepam precisa de algumas outras tecnologias/softwares que vão auxiliar na hora de receber métricas e adaptar automaticamente os microsserviços. Logo mais, vamos esclarecer quais são os componentes necessários e o que é utilizado de cada um deles.

Online Boutique

Online Boutique é uma aplicação construída para simular o comércio eletrônico. Ele foi desenvolvido pela Google seguindo os conceitos da arquitetura de microsserviços. A aplicação é composta por 10 microsserviços implementados em diferentes linguagens de programação. Nele os usuários podem navegar pelos itens, adicioná-los ao carrinho e comprá-los.

Em nosso contexto, o Online Boutique faz parte da camada de aplicação, utilizamos ele como um simulador de aplicação real destinando diferentes cargas de trabalho modificando o consumo de recursos. Isso permite a equipe realizar testes e avaliar a qualidade do KubeKepam e o comportamento dos demais componentes.

Istio

Istio é uma plataforma de service mesh Open Source que permite controlar a maneira como os microsserviços compartilham dados entre si. O Istio inclui APIs para que ele possa se integrar a qualquer plataforma de geração de registros, sistema de telemetria ou sistema de políticas.

Em nosso contexto, o Istio é utilizado para capturar diferentes metricas de negócio, relacionadas as propriedades dos microsserviços.
Como por exemplo:

  • Tempo de resposta dos microsserviços;
  • Tráfego dos microsserviços.

As metricas coletadas e expostas pelo Istio são, posteriormente, armazenadas no Prometheus;

Kube-Prometheus

É um pacote/biblioteca que inclui uma série de componentes como:

  • The Prometheus Operator;
  • Highly available Prometheus;
  • Highly available Alertmanager;
  • Prometheus node-exporter;
  • Prometheus Adapter for Kubernetes Metrics APIs;
  • Kube-state-metrics;
  • Grafana.

A ferramenta possui uma pré-configuração que permite coletar métricas de todos os componentes Kubernetes. Além disso, permite acesso ao conjunto de painéis do software Grafana contendo a visualização dessas métricas em tempo de execução.

O Kube é responsavel pela coleta de metricas relacionadas a infraestrutura. Como por exemplo:

  • CPU;
  • Memoria;
  • Rede;
  • Numero de Pods.

Essas métricas são coletadas e expostas pelo Kube-state-metrics e, posteriormente, armazenadas no Prometheus.

Kubernetes

Segundo o próprio site: "Kubernetes é um produto Open Source utilizado para automatizar a implantação, o dimensionamento e o gerenciamento de aplicativos em contêiner." Na nossa arquitetura, utilizamos o Kubernetes como Container Application Manager, sua função é facilitar a implanatação da MBA (Online Boutique) e as demais ferramentas de monitoramento (Istio e Kube-Prometheus). Na sua relação com o KubeKepam, ele recebe comandos do KubeKepam e automatiza e gerencia os deployments.

Python

Python é uma linguagem de programação de alto nível, amplamente utilizada no mercado. A tecnologia está presente nos códigos do Instagram, Netflix, Spotify, Reddit, Facebook, Google e muitos outros. Python foi a linguagem de programação escolhida para a implementação do KubeKepam devido a sua versatilidade e facilidade quando o assunto é microsserviços. Python também foi escolhida devida a utilização da API Python do Kubernetes que é utilizada em nosso projeto para realizar as adaptações dos microsserviços.

A arquitetura implementável está resumida abaixo:

Link das Tecnologias

Guia de Instalações e Scipts

Softwares adcionais

A instalação do Kube-Kepam exige alguns softwares pré-requisitos. Para aprender como instalar cada software acesse os tutoriais e os seus scripts de automatização a seguir:

Como instalar o KubeKepam?

Para instalar o KubeKepam, siga os seguintes passos:

  1. Faça clone do repositorio:
    $ git clone https://gitcin.cin.ufpe.br/wrms/kubekepam.git
  2. Entre no diretorio e execute:
    $ pip3 install -r requirements.txt
  3. Configure as variaveis de ambeinte:
    Monitor: Métricas, Prometheus API URL ISTIO, Prometheus API URL KubeKepam;
    Analisador: Valor desejado para cada métrica coletada no Monitor;
    Planejador: Tempo de espera após uma adaptação;
    Executor: Mover o arquivo .config da $HOME/.kube/config do Cluster Kubernetes para $HOME/.kube/config da máquina executando o KubeKepam;
    Mape: Configurar tempo entre ciclos de execução;
  4. Execute:
    $ python3 mape-k.py