A primeira coisa que aprendemos na Tecnologia da Informação é que quanto mais estudamos, menos sabemos.
Estou com 56 anos e fiz um curso voltado para DevOps, com vários módulos e muito material para aprender.
Serviços Cloud
Ao contrário do que imaginava, usamos o docker para criar uma aplicação simples, com apoio de três sistemas de uso renomado no ambiente da nuvem:
- Redis, usado principalmente como cache em memória
- Min-IO, um repositório
- RabbitMQ, um gerenciador de filas
O ambiente de nuvem foi simulado pelo LocalStack.
Além do uso do docker atropelar a ordem dos módulos, no decorrer do treinamento senti que faltou explorar melhor pelo menos um dos grandes provedores:
- Amazon - AWS
- Google - GCP
- Microsoft - Azure
Conteinerização
A utilização de containers foi a tecnologia que mais me atraiu depois das máquinas virtuais.
O docker virou sinônimo disso, mas como vi depois, o Kubernetes deixou de usá-lo como ferramenta principal.
O funcionamento do docker é baseado em imagens, normalmente partindo de uma base já preparada, pois não há necessidade de reinventar a roda para uma configuração de sistema operacional padrão.
A partir dai, podemos alterar a imagem, incluindo nosso sistema, configurações personalizadas e os requisitos necessários para execução.
A imagem é armazenada localmente, mas o ideal é usar um Docker Registry que permite compartilhar essa imagem na Internet, o Docker Hub é a ferramenta oficial.
Para padronizar e evitar erros devido aos vários parâmetros necessários para executar a criação da imagem, adaptaram o Makefile para um modelo específico denominado Dockerfile.
O docker então executa um container baseado nessa imagem modificada.
Os containers são uma abstração de uma máquina virtual, na forma de um ambiente apartado da máquina hospedeira, mas usando recursos da mesma.
Cria uma rede separada para abstrair e isolar os serviços internamente.
Usa tecnologia de proxies ou exposição de portas para acesso externo as ferramentas, normalmente web.
Além disso, as alterações realizadas no container, são normalmente volateis, já que uma nova execução buscará a imagem original para criar um novo container.
A forma de manter os dados é usando volumes, que associam uma pasta, arquivo ou compartilhamento locais ao hospedeiro para dentro do container.
O docker evoluiu para o Swarm, buscando redundância e distribuição de carga com a configuração de vários servidores, sendo um o master.
O balanceamento de carga e roteamento é realizado por um serviço, como o Nginx ou Traefik.
Além disso, o compose que era um script, foi incorporado a ferramenta para permitir a configuração usando arquivos no formato de manifestos que podem usar YAML ou JSON para a definição dos comandos.
Orquestração
O Swarm trouxe muitos problemas de administração e controle, assim surgiu a orquestração, usando principalmente o Kubernetes.
Apesar de também usar manifestos YAML ou JSON, há muitas diferenças dos arquivos mais simples do compose, devido a infinidade de recursos extras.
Entre as principais características, temos o controle de réplicas para distribuição da carga automática, baseada em parâmetros pré-definidos que podem ser ajustados de acordo com a avaliação do funcionamento e uso.
Controle de versões, permitindo a implantação em várias metodologias, buscando a continuidade do serviço e a facilidade de retornar a versão anterior rapidamente em casos de problemas graves na nova versão.
A estrutura é mais complexa, temos o control plane e os nós (nodes).
- API server
- c-c-m Cloud controller manager (opcional)
- c-m controller manager
- etcd é a base de dados
- kubelet é o agente que executa em todos os nós
- kube-proxy também executado em cada nó responsável pela rede e comunicação entre os pods e a rede externa
- scheduler define qual nó executará o container
O pod é a menor unidade da estrutura e é onde definimos quantos e quais containers serão executados.
Os NameSpaces permitem separar as aplicações dentro do kubernetes.
Por fim, os controladores definem o tipo da implantação:
- Deployments para aplicações comuns (stateless)
- StateFullSets para manter as informações, como bancos de dados e configurações
- DaemonSets para coleta de logs do cluster e monitoração dos nós
Infraestrutura como código
Terraform...
Pipelines de CI e CD
Comentários
Postar um comentário