Você está na página 1de 44

Implementando um sistema de

conteinerização com Kubernetes


usando GitOps

Pedro Gonçalves Rossi Rodrigues


Orientador: Vinicius Cardoso Garcia

Recife, 2022
Motivação

● Reciclagem de hardware
● Serviços open source self hosted
○ Gerenciador de senhas
○ Bots
● Medo empresarial do Baremetal
Introdução
Kubernetes

● Orquestração de containers
○ Praticidade
○ Resiliência
○ Organização
● Provedores na nuvem
○ AWS
○ Azure
○ Digital Ocean
● Provedores locais
○ K3s
○ Minikube
○ Kops
GitOps

● Automação de processos do Kubernetes


● DevOps?
● Consistência de estados
Objetivos

● Melhorar o uso/gestão de uma infraestrutura local de Kubernetes


○ Permitir a colaboração remota de forma segura
○ Melhorar a experiência de deploy de uma aplicação para o desenvolvedor
○ Melhorar a experiência de manutenções programadas para o administrador
Fundamentação Teórica
Containers e orquestração
Containers e orquestração
DevOps

● Development + Operations = DevOps


● Site Reliability Engineering
○ Regras consolidadas de DevOps
○ Função
Princípios DevOps

● Iterações
● Incrementos
● Continuidade
● Automação
● Self-Service
● Colaboração
● Holismo
Infraestrutura como Código

● Automação do DevOps
● Self-Service
● Imperativa ou Declarativa
○ Ansible e ArgoCD
GitOps

● Git + DevOps
● Foco no desenvolvedor
● Abordagens Push ou Pull
GitOps Push
GitOps Pull
Metodologia
GQM

● Objetivos (Goals)
● Perguntas (Questions)
● Métricas (Metrics)
Objetivos

● Permitir a colaboração remota de forma segura


● Melhorar a experiência de deploy de uma aplicação para o desenvolvedor
● Melhorar a experiência de manutenções programadas para o
administrador
GQM

Objetivo Perguntas Métricas

Permitir a colaboração remota de forma Quais acessos é preciso ter? Número total de acessos/credenciais necessárias
segura sensíveis

Quais os problemas de segurança? Lista de vulnerabilidades que podem ser


exploradas

Melhorar a experiência de deploy de Qual o número de passos necessários Número de passos manuais para um usuário subir
uma aplicação para o desenvolvedor para subir uma aplicação? uma aplicação

Melhorar a experiência de manutenções Com qual frequência devo realizar Frequência mínima de manutenções
programadas para o administrador manutenções programadas?
Implementação
Instalação do Linux

● Mac Mini 2010


● SSD 120GB + HDD 320GB
● 8GB RAM
● Debian + drivers terceiros
Configuração do Linux

● Ansible
○ Automação
○ Imperative GitOps
● IP estático
● Dependências
Configuração do Kubernetes

● Ansible
● K3s (Kubernetes para IoT)
○ Leve
○ Fácil de instalar e atualizar
● ArgoCD
○ Instalar
○ Cluster Bootstraping
Cluster Bootstraping
Experimentos e Análise
Arquitetura sem Gitops
Arquitetura com Gitops
Permitir a colaboração remota de forma segura

● Problemas
○ Acesso a rede local
○ Compartilhamento de credenciais
● Perguntas
○ Quais acessos precisamos?
○ Quais os problemas de segurança?
● Métricas
○ Número total de acessos/credenciais sensíveis
○ Lista de vulnerabilidades que podem ser exploradas
Quais acessos precisamos?

● Sem Gitops
○ Acesso a rede local
○ Acesso a senha do servidor
● Com GitOps
○ Nada sensível
Quais os problemas de segurança?

● Sem Gitops
○ Man in the middle attack
○ Spywares
○ DDoS
● Com GitOps
○ DDoS*
Resultados

Métrica Sem Com


GitOps GitOps

Número total de acessos/credenciais 2 0


sensíveis

Lista de vulnerabilidades que podem 2 1


ser exploradas
Melhorar a experiência de deploy de uma
aplicação para o desenvolvedor

● Problema
○ Número de passos para o deploy
● Sem GitOps
○ Acessar o servidor
○ Baixar artefato/imagem
○ Instalar dependências
○ Instalar aplicação
● Com GitOps
○ Abrir um Pull Request
Resultados

Métrica Sem Com


GitOps GitOps

Número de passos para um usuário 4 1


subir uma aplicação
Melhorar a experiência de manutenções
programadas

● Manutenção programada == atualização preventiva


● Cálculo de frequência de atualizações
● Atualizações do tipo patch (1.0.x)
● API do GitHub usando Tags
Versões das ferramentas usadas

Ferramenta Versão major e minor

Ansible v2.10

K3s v1.24

ArgoCD v2.4

Debian v11.5
Frequência de lançamento de versões
novas em dias

Ferramenta Frequência de atualizações em dias

Ansible 29

K3s 16

ArgoCD 7

Debian 78
Resultados

Métrica Sem Com


GitOps GitOps

Frequência mínima de manutenções 78 7*


em dias
Conclusão
GQM

Objetivo Perguntas Métricas Sem GitOps Com GitOps

Permitir a colaboração Quais acessos é preciso Número total de acessos/credenciais 2 0


remota de forma segura ter? necessárias sensíveis

Quais os problemas de Lista de vulnerabilidades que podem ser 2 1


segurança? exploradas

Melhorar a experiência de Qual o número de Número de passos manuais para um usuário 4 1


deploy de uma aplicação passos necessários para subir uma aplicação
para o desenvolvedor subir uma aplicação?

Melhorar a experiência de Com qual frequência Frequência mínima de manutenções 78 7*


manutenções programadas devo realizar
para o administrador manutenções
programadas?
Observações

● Maturidade do ArgoCD vs Ansible


● Kubernetes com e sem GitOps
○ Métricas
○ Usabilidade
● https://github.com/PedroRossi/tg-2022-1
Trabalhos correlatos

● Reciclagem de lixo eletrônico


● Processamento distribuído
○ OpenMPI
○ OpenMosix
○ LTSP
● Estudo e investigação sobre a implementação de GitOps com ArgoCD
○ Medium open source “Conduit”
Trabalhos futuros

● Cluster local GitOps vs Cluster provisionado na nuvem


○ Custo
○ Performance
○ Usabilidade do administrador
● Pontos não resolvidos do Kubernetes local
○ Gerenciamento e compartilhamento de segredos
○ Acesso externo a serviços hospedados no cluster
Implementando um sistema de
conteinerização com Kubernetes
usando GitOps

Pedro Gonçalves Rossi Rodrigues


Orientador: Vinicius Cardoso Garcia

Recife, 2022

Você também pode gostar