SlideShare uma empresa Scribd logo
Do zero ao GitOps
Whoami
Cearense, cabra da peste,
resido em Floripa, trabalho
com tecnologia há 16 anos,
formado em Sistemas de
Informação, sysadmin root,
casado 14 anos, Pai do
Thomas, Skatista poser, Unix-
like addict e Cloud Computing
e Cloud Native Evangelist, SRE
na Pipefy.
Quais são os problemas que
precisamos resolver?
Evoluir a infraestrutura, operações, segurança na mesma velocidade da
aplicação
Os times estarem na mesma página quando se trata de modificações referente
ao ambiente ou que possam causar impacto em determinada aplicação
Quebrar as barreiras entre Squads na Engenharia
Desenvolvedores precisam criar infraestrutura a todo momento
Formas que não evolui na mesma velocidade da aplicação
* Parece piada mas é a vida de Ops hoje em dia
Entendendo a evolução de aplicações
DRY Principle
Ref: http://principles-wiki.net/principles:don_t_repeat_yourself
Como evoluir a infraestrutura da mesma forma que as aplicações ou melhor
em conjunto com a aplicação
GitOps
GITOPS
GitOps = IaC + Pull Requests + CI/CD with Anabolic Steroids
GitOps é uma maneira de fazer o gerenciamento de cluster do Kubernetes e
entrega de aplicativos e infraestrutura. Ele funciona usando Git como uma
única fonte de verdade para infraestrutura declarativa e aplicativos. Com o Git
no centro de seus pipelines de entrega, os desenvolvedores, podem fazer
solicitações pull para acelerar e simplificar as implantações de aplicativos e
tarefas operacionais.
Exemplo de pequena alteração incorreta na infraestrutura
Resolvendo problemas de infraestrutura
Do zero ao GitOps   DevopsDaysSP
Do zero ao GitOps   DevopsDaysSP
Do zero ao GitOps   DevopsDaysSP
k8s-deploy() {
kubectl set image deployment/frontend www=image:v2
}
Não é uma boa prática para GitOps na pipeline
k8s-deploy() {
export RELEASE_TAG=$CI_COMMIT_SHORT_SHA
git config --global user.email "sre@example.com"
git config --global user.name "sre"
git checkout -f $CI_COMMIT_REF_NAME
sed -i -e "s/"$RELEASE_TAG"/"'$RELEASE_TAG'"/g" k8s/$ENVIRONMENT/file.yaml
for yaml in `grep -r -l "$CI_REGISTRY_IMAGE" k8s/$ENVIRONMENT`; do
if grep -q "kind: Deployment" $yaml; then
yq w -i $yaml spec.template.spec.containers[0].image $CI_REGISTRY_IMAGE:$RELEASE_TAG
fi
fi
git add k8s/$ENVIRONMENT
git commit -m “Release update version: $RELEASE_TAG
git push -o ci_skip origin/master
}
Boa prática usando GitOps na pipeline
Do zero ao GitOps   DevopsDaysSP
ArgoCD
ArgoCD
OK Ceará, mas como eu crio recursos de infraestrutura utilizando
este conceito?
Atlantis e Terraform
Criar seu próprio controller para criação
de infraestrutura usando kube builder
https://github.com/kubernetes-sigs/kubebuilder
Crossplane.io e AWS ACK
https://github.com/crossplane/crossplane
apiVersion:
database.aws.crossplane.io/v1beta1
kind: RDSInstance
metadata:
name: rdspostgresql
spec:
forProvider:
dbInstanceClass: db.t2.small
masterUsername: masteruser
allocatedStorage: 20
engine: postgres
engineVersion: "9.6"
skipFinalSnapshotBeforeDeletion:
true
writeConnectionSecretToRef:
namespace: crossplane-system
name: aws-rdspostgresql-conn
providerRef:
name: aws-provider
reclaimPolicy: Delete
$ kubectl get buckets ack-test-
smoke-s3 -o yaml
apiVersion:
s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
name: ack-test-smoke-s3
namespace: default
spec:
name: ack-test-smoke-s3
Crossplane ACK (AWS Controller for Kubernetes)
https://aws.github.io/aws-controllers-k8s/
Do zero ao GitOps   DevopsDaysSP
https://github.com/pulumi/examples
https://github.com/pulumi/examples
import * as eks from "@pulumi/eks";
import * as k8s from "@pulumi/kubernetes";
// Create an EKS cluster.
const cluster = new eks.Cluster("my-cluster");
// Deploy Wordpress into our cluster.
const wordpress = new
k8s.helm.v2.Chart("wordpress", {
repo: "stable",
chart: "wordpress",
values: {
wordpressBlogName: "My Cool Kubernetes
Blog!",
},
}, { providers: { "kubernetes":
cluster.provider } });
// Export the cluster's kubeconfig.
export const kubeconfig =
cluster.kubeconfig;
apiVersion: v1
kind: Secret
metadata:
name: pulumi-api-secret
type: Opaque
stringData:
accessToken: "<REDACTED: PULUMI_ACCESS_TOKEN>"
---
apiVersion: v1
kind: Secret
metadata:
name: pulumi-aws-secrets
type: Opaque
stringData:
AWS_ACCESS_KEY_ID: "<REDACTED: AWS_ACCESS_KEY_ID>"
AWS_SECRET_ACCESS_KEY: "<REDACTED:
AWS_SECRET_ACCESS_KEY>"
---
apiVersion: pulumi.com/v1alpha1
kind: Stack
metadata:
name: s3-bucket-stack
spec:
accessTokenSecret: pulumi-api-secret
envSecrets:
- pulumi-aws-secrets
stack: joeduffy/s3-op-project/dev
projectRepo: https://github.com/joeduffy/test-s3-op-project
commit: cc5442870f1195216d6bc340c14f8ae7d28cf3e2
config:
aws:region: us-east-2
Create a EKS cluster
Create a S3 bucket
Kustomize /Helm / Raw Manifests
Resumo do que precisamos
SCM (Git Repositories)
Git Flow
Codeowners
Kubernetes
Ferramenta de IaC (Terraform / Pulumi / Controller)
Pipelines (Fluxo de CI/CD)
Packaging approach
Reconcilier (ArgoCD / FluxCD)
Melhor prevenir/revisar que remediar
Perguntas?
Yros Aguiar
SRE
yrosaguiar@gmail.com
https://medium.com/@yrosaguiar
https://twitter.com/yrosaguiar
https://github.com/yrosaguiar
Thank you

Mais conteúdo relacionado

PDF
PT-BR - Lauching a Public PaaS on Open Source Getup & OpenShift Origin - FISL14
PDF
Quer ser um Full-Stack Developer? Essas são algumas "coisinhas" que você prec...
PDF
Controle de versão com Git
PDF
Guia prático de desenvolvimento front-end para django devs
PDF
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
PPT
GSoC tcptest - TCP/IP Regression Test
PPTX
XML Free Programming - Brazil
PDF
Criando Webservice REST com NodeJS, NoSQL & Docker
PT-BR - Lauching a Public PaaS on Open Source Getup & OpenShift Origin - FISL14
Quer ser um Full-Stack Developer? Essas são algumas "coisinhas" que você prec...
Controle de versão com Git
Guia prático de desenvolvimento front-end para django devs
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
GSoC tcptest - TCP/IP Regression Test
XML Free Programming - Brazil
Criando Webservice REST com NodeJS, NoSQL & Docker

Semelhante a Do zero ao GitOps DevopsDaysSP (20)

PDF
Infraestrutura como código Terraform aws openshift Ansible
PPTX
Sailing Delivery
PDF
TDC 2015 - Rails & Javascript: faça isso direito
PDF
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
PDF
Escalando aplicação Python usando Getup OpenShift
PPTX
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
PPT
Tendências do Mercado de Internet
PDF
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
PDF
Nossa experiência com TDD
PDF
Advanced live testing em tempo real
ZIP
Python e Django na Globo.com
PPTX
Ruby on Rails for beginners 2.0
PDF
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresas
PDF
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
PDF
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
ODP
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
PDF
Kotlin no Android: desbravando as oportunidades de ponta a ponta!
PDF
Semana Acadêmica ICET - Feevale - 12/04/2014
ODP
Php 07 Cakephp
PDF
Desenvolvendo aplicacoes mobile_com_html_css_
Infraestrutura como código Terraform aws openshift Ansible
Sailing Delivery
TDC 2015 - Rails & Javascript: faça isso direito
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Escalando aplicação Python usando Getup OpenShift
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Tendências do Mercado de Internet
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
Nossa experiência com TDD
Advanced live testing em tempo real
Python e Django na Globo.com
Ruby on Rails for beginners 2.0
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresas
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
Kotlin no Android: desbravando as oportunidades de ponta a ponta!
Semana Acadêmica ICET - Feevale - 12/04/2014
Php 07 Cakephp
Desenvolvendo aplicacoes mobile_com_html_css_
Anúncio

Mais de Yros (8)

PPTX
CI/CD - Automatizando a entrega da sua aplicação
PPTX
Docker and Infrastructure Evolution
PPTX
Presentation yros | aws solution provider
PDF
OnPremise to Cloud (o2c) - WhitePaper- yros
PDF
On-premise to Cloud (o2c) - WhitePaper | yros
PPTX
OpenAM - Fast SSO
PDF
Dev ninja -> vagrant + virtualbox + chef-solo + git + ec2
PDF
Amazon Aws - Tecnologias e Beneficios
CI/CD - Automatizando a entrega da sua aplicação
Docker and Infrastructure Evolution
Presentation yros | aws solution provider
OnPremise to Cloud (o2c) - WhitePaper- yros
On-premise to Cloud (o2c) - WhitePaper | yros
OpenAM - Fast SSO
Dev ninja -> vagrant + virtualbox + chef-solo + git + ec2
Amazon Aws - Tecnologias e Beneficios
Anúncio

Último (16)

PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Arquitetura de computadores - Memórias Secundárias
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Custos e liquidação no SAP Transportation Management, TM130 Col18
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Processos na gestão de transportes, TM100 Col18
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
COBITxITIL-Entenda as diferença em uso governança TI
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Arquitetura de computadores - Memórias Secundárias
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx

Do zero ao GitOps DevopsDaysSP

  • 1. Do zero ao GitOps
  • 2. Whoami Cearense, cabra da peste, resido em Floripa, trabalho com tecnologia há 16 anos, formado em Sistemas de Informação, sysadmin root, casado 14 anos, Pai do Thomas, Skatista poser, Unix- like addict e Cloud Computing e Cloud Native Evangelist, SRE na Pipefy.
  • 3. Quais são os problemas que precisamos resolver?
  • 4. Evoluir a infraestrutura, operações, segurança na mesma velocidade da aplicação Os times estarem na mesma página quando se trata de modificações referente ao ambiente ou que possam causar impacto em determinada aplicação Quebrar as barreiras entre Squads na Engenharia Desenvolvedores precisam criar infraestrutura a todo momento
  • 5. Formas que não evolui na mesma velocidade da aplicação
  • 6. * Parece piada mas é a vida de Ops hoje em dia
  • 7. Entendendo a evolução de aplicações
  • 9. Como evoluir a infraestrutura da mesma forma que as aplicações ou melhor em conjunto com a aplicação
  • 11. GITOPS GitOps = IaC + Pull Requests + CI/CD with Anabolic Steroids GitOps é uma maneira de fazer o gerenciamento de cluster do Kubernetes e entrega de aplicativos e infraestrutura. Ele funciona usando Git como uma única fonte de verdade para infraestrutura declarativa e aplicativos. Com o Git no centro de seus pipelines de entrega, os desenvolvedores, podem fazer solicitações pull para acelerar e simplificar as implantações de aplicativos e tarefas operacionais.
  • 12. Exemplo de pequena alteração incorreta na infraestrutura
  • 13. Resolvendo problemas de infraestrutura
  • 17. k8s-deploy() { kubectl set image deployment/frontend www=image:v2 } Não é uma boa prática para GitOps na pipeline
  • 18. k8s-deploy() { export RELEASE_TAG=$CI_COMMIT_SHORT_SHA git config --global user.email "sre@example.com" git config --global user.name "sre" git checkout -f $CI_COMMIT_REF_NAME sed -i -e "s/"$RELEASE_TAG"/"'$RELEASE_TAG'"/g" k8s/$ENVIRONMENT/file.yaml for yaml in `grep -r -l "$CI_REGISTRY_IMAGE" k8s/$ENVIRONMENT`; do if grep -q "kind: Deployment" $yaml; then yq w -i $yaml spec.template.spec.containers[0].image $CI_REGISTRY_IMAGE:$RELEASE_TAG fi fi git add k8s/$ENVIRONMENT git commit -m “Release update version: $RELEASE_TAG git push -o ci_skip origin/master } Boa prática usando GitOps na pipeline
  • 22. OK Ceará, mas como eu crio recursos de infraestrutura utilizando este conceito?
  • 24. Criar seu próprio controller para criação de infraestrutura usando kube builder https://github.com/kubernetes-sigs/kubebuilder
  • 25. Crossplane.io e AWS ACK https://github.com/crossplane/crossplane apiVersion: database.aws.crossplane.io/v1beta1 kind: RDSInstance metadata: name: rdspostgresql spec: forProvider: dbInstanceClass: db.t2.small masterUsername: masteruser allocatedStorage: 20 engine: postgres engineVersion: "9.6" skipFinalSnapshotBeforeDeletion: true writeConnectionSecretToRef: namespace: crossplane-system name: aws-rdspostgresql-conn providerRef: name: aws-provider reclaimPolicy: Delete $ kubectl get buckets ack-test- smoke-s3 -o yaml apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: ack-test-smoke-s3 namespace: default spec: name: ack-test-smoke-s3 Crossplane ACK (AWS Controller for Kubernetes) https://aws.github.io/aws-controllers-k8s/
  • 28. https://github.com/pulumi/examples import * as eks from "@pulumi/eks"; import * as k8s from "@pulumi/kubernetes"; // Create an EKS cluster. const cluster = new eks.Cluster("my-cluster"); // Deploy Wordpress into our cluster. const wordpress = new k8s.helm.v2.Chart("wordpress", { repo: "stable", chart: "wordpress", values: { wordpressBlogName: "My Cool Kubernetes Blog!", }, }, { providers: { "kubernetes": cluster.provider } }); // Export the cluster's kubeconfig. export const kubeconfig = cluster.kubeconfig; apiVersion: v1 kind: Secret metadata: name: pulumi-api-secret type: Opaque stringData: accessToken: "<REDACTED: PULUMI_ACCESS_TOKEN>" --- apiVersion: v1 kind: Secret metadata: name: pulumi-aws-secrets type: Opaque stringData: AWS_ACCESS_KEY_ID: "<REDACTED: AWS_ACCESS_KEY_ID>" AWS_SECRET_ACCESS_KEY: "<REDACTED: AWS_SECRET_ACCESS_KEY>" --- apiVersion: pulumi.com/v1alpha1 kind: Stack metadata: name: s3-bucket-stack spec: accessTokenSecret: pulumi-api-secret envSecrets: - pulumi-aws-secrets stack: joeduffy/s3-op-project/dev projectRepo: https://github.com/joeduffy/test-s3-op-project commit: cc5442870f1195216d6bc340c14f8ae7d28cf3e2 config: aws:region: us-east-2 Create a EKS cluster Create a S3 bucket
  • 29. Kustomize /Helm / Raw Manifests
  • 30. Resumo do que precisamos SCM (Git Repositories) Git Flow Codeowners Kubernetes Ferramenta de IaC (Terraform / Pulumi / Controller) Pipelines (Fluxo de CI/CD) Packaging approach Reconcilier (ArgoCD / FluxCD)

Notas do Editor

  • #4: Good question! What was really or issue? Where was the pain? What are we aiming to solve? Let’s keep going
  • #6: Estamos falando de cultura self service, separar a infra estrutura da aplicação da aplicação não é um caminho que ajuda na evolução Muitas alterações principalmente em ambientes cloud native precisam ser ontime, a aplicação precisa daquele recurso de infra no momento do deploy Precisa de solicitação pro time de ops quando necessita de algo de infra, muitas vezes o time não tem muito tempo ou não consegue atender a demanda no momento que o Desenvolvedor precisa Podemos colocar um chapter de SRE/Devops que atenda essa demanda pra cada time,nem sempre é possivel ter uma quantidade de Ops que atenda o time de Dev A ideía é o time de Ops criar um framework (modulos, codigos reutilizaveis) que os devs consigam utilizar e desenvolver infraestrutura sem ter um conhecimento muito avançado e o mais importante sem a necessidade de ter acesso Administrativo a tudo Alterações manuis além de ser um problema para a empresa, não escala, não evolui e não tem muito valor, pois codigo é ativo da empresa, mais dificil de escalar, será preciso aumentar o time de ops que permissoes para aletração para criar multiplos ambientes, o risco de erro é maior, não automatiza e não permite criar testes automatizados
  • #7: Repetir codigo, repetir manifestos
  • #8: As aplicações chegaram a esse nivel de evolução porque conseguimos usar projetos, modulos, codigos de terceiros e de outros times abstraindo assim algum problema ou resolvendo rapidamente um problema especifico sem precisarmos entender muito sobre o problema em si, a lib ou dependencia se encarrega de abstrair para nós o problema, o opensource é baseado nisso, as linguagens de programação são baseadas nisso, dificilmente iremos criar codigo do zero pra tudo, até porque se pensasemos em fazer isso quando nosso projeto estivesse pronto ele já seria um legado.
  • #11: What is this concept of GitOps? What does it means and what it stand for? Let’s see in the next slides
  • #12: READ THE DEFINITION ON THE SLIDE
  • #13: Alterações eram manuais Secrets e criação de infra estrutura era sempre feita antes ou depois da aplicação mas não ao mesmo tempo Alto risco de erros e problemas Rollback e visibilidade era mais complicada Uma simples alteração poderia causar um incidente e era mais dificil de identificar o que foi alterado e quando foi alterado
  • #14: GUYS, this is not true!!! (JOKE) We use to use way more tape than hi is using on the GIF Look: Just a small peace of tape What a noobie!
  • #15: The same code of the repositories is reflected into the cluster, all the changes is tracked
  • #16: The same code of the repositories is reflected into the cluster, all the changes is tracked
  • #17: O mesmo código dos repositórios é refletido no cluster, todas as mudanças são rastreadas
  • #19: READ THE DEFINITION ON THE SLIDE
  • #20: O reconciliador verifica as diferenças entre o código e os objetos e mostra as diferenças e sincroniza. Diferencia desired state do current state
  • #21: The ArgoCD is our reconcilier controller, the argo verify the differences between the code and the objects and show the differences and apply the syncronization.
  • #22: The ArgoCD is our reconcilier controller, the argo verify the differences between the code and the objects and show the differences and apply the syncronization.
  • #25: Helm , se você distribuir seus manifestos de implantação externamente , ou seja, fora de sua equipe ou mesmo de sua organização, e se contiver um alto nível de complexidade, vale a pena esconder. O Helm é sua ferramenta preferida para empacotamento e configuração de aplicativos e está muito tempo no mercado . é utilizado para entregar aplicativos prontos mas é necessario criação de templates e mais dificil de lhe dar com dependencias de terceiros Kustomize , se os manifestos são usados ​​principalmente dentro de sua própria equipe ou são simples o suficiente (de uma forma positiva) para evitar uma camada de abstração que esconde um monte de magia, use kustomize, é simples voce nao precisa repetir codigo e pode usar os manifestos de terceiros e fazer o override com suas configurações.
  • #30: Helm , se você distribuir seus manifestos de implantação externamente , ou seja, fora de sua equipe ou mesmo de sua organização, e se contiver um alto nível de complexidade, vale a pena esconder. O Helm é sua ferramenta preferida para empacotamento e configuração de aplicativos e está muito tempo no mercado . é utilizado para entregar aplicativos prontos mas é necessario criação de templates e mais dificil de lhe dar com dependencias de terceiros Kustomize , se os manifestos são usados ​​principalmente dentro de sua própria equipe ou são simples o suficiente (de uma forma positiva) para evitar uma camada de abstração que esconde um monte de magia, use kustomize, é simples voce nao precisa repetir codigo e pode usar os manifestos de terceiros e fazer o override com suas configurações.
  • #31: Helm , se você distribuir seus manifestos de implantação externamente , ou seja, fora de sua equipe ou mesmo de sua organização, e se contiver um alto nível de complexidade, vale a pena esconder. O Helm é sua ferramenta preferida para empacotamento e configuração de aplicativos e está muito tempo no mercado . é utilizado para entregar aplicativos prontos mas é necessario criação de templates e mais dificil de lhe dar com dependencias de terceiros Kustomize , se os manifestos são usados ​​principalmente dentro de sua própria equipe ou são simples o suficiente (de uma forma positiva) para evitar uma camada de abstração que esconde um monte de magia, use kustomize, é simples voce nao precisa repetir codigo e pode usar os manifestos de terceiros e fazer o override com suas configurações.