Agosto de 2024
Vou tentar organizar um post mensal com algumas coisinhas que me ocorreram. Então, “sem mais delongas”…
Harbor
Recentemente instalei o Harbor em um servidor que estava meio ocioso, onde caberia um servicinho a mais. O Harbor é um registro de containers (container registry) que é uma peça bem importante no fluxo de desenvolvimento com containers, é lá que ficam guardadas as imagens de container. Estas servem para o uso final da aplicação, mas também para cache ou criação de imagens intermediárias que não precisam ser construídas a cada build do projeto.
Por exemplo, algumas vezes é necessario partir de uma imagem como o Debian e instalar alguns pacotes genéricos, para em seguida montar o projeto propriamente. Seria desnecessário rodar o apt install ... a cada build. Nesse caso é interessante isolar a imagem com o pacote já instalado e apenas reutilizar a imagem. No exemplo abaixo um projeto que utiliza o Poetry e o instala antes de rodar os comandos do próprio Poetry:
ARG POETRY_VERSION=latest
FROM python:3.11-slim as poetry-base
ENV DEBIAN_FRONTEND noninteractive
ENV POETRY_HOME=/opt/poetry
ENV PATH=${PATH}:$POETRY_HOME/bin
ENV POETRY_VERSION=$POETRY_VERSION
RUN apt-get update && \
apt-get install -y curl gcc libc-dev libffi-dev && \
rm -rf /var/lib/apt/lists/* && \
curl -sSL https://install.python-poetry.org | python3 -
Usando no próximo estágio a referência ao primeiro em: FROM poetry-base as base.
Essa instalação do Poetry pode ser evitada se produzirmos a imagem em separado e guardarmos a mesma em um registro. O bloco acima pode ser removido para um Dockerfile à parte e a referência do segundo estágio agora é à imagem remota, no registry: FROM balaio.radioaconchego.org/python/poetry:latest AS poetry-base.
No caso do projeto Baobáxia conseguimos economizar o custo de dois passos que utilizavam apt install ... gerando duas imagens intermediárias para serem baixadas do registry: a do próprio Poetry e a bbx-base que encapsula a dependência ao git-annex e outras configurações básicas como criação de usuário e utilização do Tini como processo inicial. Os Dockerfiles destas imagens vão ficar no repositório Images Builder.
Open Tofu / Terraform
Comecei a estudar mais deliberadamente o Open Tofu (Terraform). Percebi recentemente que o Terraform é realmente uma linha base no mercado DevOps (para surpresa de zero pessoas!), não ter experiência com ele é um ponto fraco para quem quer estar no mercado de DevOps (o/). Já tinha algumas noções basicas e peguei uma tarefa no trabalho que vi a possibilidade de utilizar o Terraform sem necessariamente precisar de grandes mudanças nos processos internos de sustentação.
A tarefa: equiparar uma série de bases de dados do ambiente de homologação (QAS) às configurações de produção (PRD) para poder realizar testes de carga e na sequência retorna-las ao seu estado inicial.
A solução: Usar o import do Terraform para “adotar” recursos alvo (bases RDS, Aurora e Redis). Configurar dois arquivos com variáveis representando o ambiente QAS e o de PRD. Após o import ser concluído, acionando as variáveis de PRD, as configurações (principalmente o tipo das instâncias) sobem para o patamar igual a PRD. Ao fim executamos o Terraform com as variáveis de QAS e tudo deve retornar às configurações iniciais.
Mientras tanto… usei a tarefa como forma de ter um grau de exposição inicial ao Terraform. Em paralelo estou finalizando a leitura do livro Terraform Up & Running e tenho pensado muito em como gerênciar módulos e ambientes. No mais criei uma página na secção Almanaque para o Open Tofu.
Home Lab
Comprei recente um computador de um brother que estava se desfazendo de alguns equipamentos devido a uma viagem, quiça agora emplaco o Home Lab. Queria muito retirar o Sonora da Digital Ocean, mas acho que seria bem cabuloso de mexer nisso para uma infra sem muitas garantias de estabilidade. Mas alguns sistemas podem vir pra cá em breve: Woodpecker (CI), Prometheu, Grafana, e talvez um K8s por baixo. Comecei a brincar com o Proxmox, agora é ler a documentação e ir progressivamente escovando bits.
Extras
- Teste de Carga (K6): Mexi bastante nas últimas semanas no K6 modelando os testes de carga no trampo. Sempre gostei muito dessa parte de configurar e rodar ambientes de testes.
- GoLang: Dei uns tapas lá no Gym Timer CLI. Quero agora implementar o uso de YAML como entrada das configurações. Usar áudios a cada fase também seria bem legal =).