elasticity-controller-docker
Controlador de elasticidade para o TCC do 4 ano de Ciência da Computação na Unioeste
Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (3.5%) to scientific vocabulary
Repository
Controlador de elasticidade para o TCC do 4 ano de Ciência da Computação na Unioeste
Basic Info
- Host: GitHub
- Owner: marcoodamo
- License: unlicense
- Language: Go
- Default Branch: main
- Size: 496 KB
Statistics
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
Controlador de Elasticidade de Contêineres Docker 🐳
Objetivo
Esse projeto teve como objetivo o desenvolvimento de um controlador de elasticidade vertical reativo para o Container Runtime Docker.
Funcionamento
- O controlador monitora os recursos em utilização utilizando o cAdvisor que é uma ferramenta desenvolvida pelo Google especificamente para coletar, processar e expor métricas relacionadas ao desempenho de contêineres,
- A partir das métricas expostas pelo cAdvisor (que podem ser analisadas em localhost:8080/metrics) o Pormetheus utiliza seu Service Discovery para scrapear tais métricas,
- Com as métricas armazenadas no TSDB (Time-series Database) do Prometheus, tanto o
main.goquanto o Grafana consultam as métricas utilizando as queries do PromQL (que é a linguagem de Query do Prometheus), - Essas métricas coletadas então são utilizadas para fazer a análise de utilização de CPU e memória do container, para que o controlador decida se será ou não necessário a alocação ou liberação de recursos.
- O Grafana é utilizado para facilitar a criação de visualizações dinâmicas sobre a saúde do sistema.

Instalação
Os pré-requisitos são o Docker, Docker Compose e Golang. Clone o repositório logo em seguida:
``` sudo apt update && sudo apt install docker.io
wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc source ~/.bashrc
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
git clone https://github.com/marcoodamo/elasticity-controller-Docker.git ```
Inicialize o módulo Go e compile o controlador:
go mod init elasticity-controller
go mod tidy
Como utilizar?
Com o intuito de deixar tudo o mais automatizado possível, o projeto foi desenvolvido para que o deploy do ambiente seja feito em contêineres utilizando o docker-compose. Para fazer o deploy dos serviços, é necessário executar o comando:
docker-compose up
As integrações necessárias para o funcionamento básico já estão configuradas nos manifestos do compose e prometheus. É importante ressaltar que, caso o container_name seja modificado, é necessário fazer a alteração no código main.go, já que a relação de endpoint é feita através dessa variável. Você pode achar estranho no meu código o container_name ser nginx-monitored porém na verdade é um container com Python e alguns códigos, isso se dá pelo fato de que um site está em desenvolvimento para melhorar a realização dos testes de estresse! Porém, caso deseje utilizar sua própria imagem de benchmark, apenas modifique a imagem do container.
Após ter feito o deploy dos serviços, você pode rodar o controlador de elasticidade que ele irá começar a fazer a análise de utilização de recursos:
go run main.go
Você pode realizar os teste acessando o container e rodando os comandos desejados, lembrando que todos são em python (dê um "ls" para ver as opções):
docker exec -it nginx-monitored bash
Observabilidade
Para validar as métricas de consumo de recursos em tmepo real, você tem três opções:
1. Acessar o cAdvisor em localhost:8080/docker e selecionar o container que deseja,
2. Acessar o Prometheus em localhost:9090/query, selecionar "Graph" e inserir a query que deseja,
3. Ou, a que eu aconselho, acessar o Grafana em localhost:3000, configure o Data Source como o Prometheus (colocando a URL http://prometheus:9090). Depois vá em Dashboards > New Dashboard > Add visualization e crie suas visualizações. Recomendo utilizar as seguintes queries:
3.1. Memória (para ajustar a visualizaçào, no meu lateral esquerdo, vá em Standard options > Unit > Data > bytes(IEC)), ajsute também as informações de Query options para reduzir o tempo que o gráfico deve considerar (Relative time), aconselho Min interval e Time shift sendo 1s. Adicione duas queries na mesma visualização:
container_memory_usage_bytes{name="nginx-monitored"}
container_spec_memory_limit_bytes{name="nginx-monitored"}
3.2 CPU, ajsute também as informações de Query options para reduzir o tempo que o gráfico deve considerar (Relative time), aconselho Min interval e Time shift sendo 1s. Adicione duas queries na mesma visualização:
irate(container_cpu_usage_seconds_total{name="nginx-monitored"}[15s])
container_spec_cpu_quota{name="nginx-monitored"} / 100000
A primeira query (linha verde) significa o recurso demandado em tempo real, enquanto a segunda (linha amarela) representa a quantidade de recursos alocados no container.
E pronto! Agora você consegue analisar a elasticidade nos conteineres Docker. Abaixo mostro o comportamento do controlador em casos de picos periódicos que ultrapassariam a memória limite do container (e o OOM Killer iria encerrar o processo)!

Você consegue citar esse repositório apenas clicando em "Cite this repository" abaixo da Licença no menu lateral direito 🥳
Tecnologias
Owner
- Login: marcoodamo
- Kind: user
- Repositories: 1
- Profile: https://github.com/marcoodamo
Citation (CITATION.cff)
# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!
cff-version: 1.2.0
title: Controlador de Elasticidade
message: >-
If you use this software, please cite it using the
metadata from this file.
type: software
authors:
- given-names: Marco Antonio
family-names: Damo
email: marco_damo@hotmail.com
affiliation: Student
orcid: 'https://orcid.org/0000-0002-1629-9532'
repository-code: 'https://github.com/marcoodamo/elasticity-controller.git'
abstract: >-
O projeto é relacionado à um controlador de elasticidade
para contêineres Docker, utilizando a linguagem de
programação Go e as ferramentas Prometheus e Grafana
keywords:
- Docker
- Go
- Prometheus
- Grafana
license: Unlicense
GitHub Events
Total
- Push event: 24
Last Year
- Push event: 24