Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GitOps

Arqconf
November 14, 2018

 GitOps

NoOps, DevOps, XOps y ahora GitOps!! Marcos nos introduce en los principios de esta práctica y su experiencia utilizandola en una plataforma de rápido crecimiento.

Arqconf

November 14, 2018
Tweet

More Decks by Arqconf

Other Decks in Technology

Transcript

  1. 2 … @me Marcos Nils Lilljedahl (@marcosnils) Head of Infra

    @ iúnigo, OS Developer, consultant & trainer - Ing. en sistemas / MoIT - OSS & Golang - Docker Captain - Container junkie - Active projects: Jedis, Vault, Goblin, dynamodb-filters, play-with-docker (and probably more) - crossfit, asado, mate, sailing, drinks & food.
  2. 4

  3. 5 … Qué y por qué? “GitOps - Operations by

    Pull Request” Git is the source of truth. And it also means you get code reviews, comments in the configuration files, and links to any issues in commit messages and PRs. All of this makes the system (and the reasons behind it!) discoverable and easier to operate, recover, and observe. • Infrastructure as code • Mecanismo de convergencia • Uso de CI como fuente de verdad • Pull vs Push • Developers y operaciones (git) • Atomic updates
  4. 6 … Manual Provisioning • Proceso manual, con downtime y

    muy propenso a errores • Se esperaba tener una cantidad de features X para poder deployar • El estado del servicio y producción eran desconocidos • Configuración manual y desconocimiento del entorno
  5. 7 … Generating impact • Poder desplegar features nuevos rápido

    • Reducir el tiempo para arreglar bugs • Generar el sentimiento de control y empoderamiento. Confidencia y control • 20 deploys por día • 80% en ahorro del tiempo para arreglar errores en producción
  6. 8 … Entering GitOps GitOps promueve la práctica de DevOps

    + git como una única fuente de verdad Objetivos: • Todo debe encontrarse versionado en una única fuente de verdad de la cual sea posible recuperarse • Monitoreo y observabilidad son necesarios • Tener un pipeline completamente automatizado
  7. 10 … Declarative { "cpu": 1000, "memory": 128, "env": {

    "DB_TIMEOUT": "2000" }, "replicas": 2 } { "swagger": "2.0", "host": "*.iunigo.com", "paths": { "/gizmo/delay": { "get": { "tags": [ "Sample" ], "summary": "Generates a delay in the response", "parameters": [ { "in": "query", "name": "duration", "description": "Golang duration of the delay (1s|1m|1h)", "type": "string" } ], "responses": { "200": { "description": "" } } } } } }
  8. 11 … GitOps @ iúnigo • Utilizamos herramientas para infraestructura

    declarativa como Nomad + Consul, Docker, Terraform • Todo nuestro sistema incluyendo código, configuraciones, reglas de monitoreo, y dashboards se encuentra versionado en GitHub • Tenemos herramientas que disparan alertas si el estado de producción difiere del estado en Git. (Kubediff, Terradiff, Nomadiff, Whaleprint?) • Los cambios en ops deben viajar por Pull Request
  9. 13 … Outcome • Todos los devs usan Github •

    Cualquier dev pueden unirse al team y ser productivo rápidamente • Todos los cambios pueden ser ejecutados, guardados y validados en Git
  10. 14 … Secrets • Private key en el cluster y

    public key hacia los developers para encriptar los secretos en GIT
  11. 17 … Observability • Monitoring • Logging • Tracing &

    Visualization • Ver el impacto en el sistema temprano para tomar acciones rápidamente • E2E testing & canary deployments • Dashboards unificados (metrics.iunigo.com)
  12. 18 … Control • Control == Convergencia • CD Operators

    • Usar tools de diff & sync • Hacer cambios via Git y no tooling (kubectl, nomad-cli, docker service, etc)
  13. 19 … Repo structure • Usar el mismo repo o

    un repo distinto por aplicación / servicio (deployment) • Usar un branch por entorno (se puede mapear a un namespace o cluster en k8s / nomad / swarm) • Subir los cambios como los nombre de imagen, health checks a branches primero • Hacer un deploy a producción implica sólo un merge. (git merge -s ours <branch>)
  14. 21 … Env structure I'm more and more convinced that

    staging environments are like mocks - at best a pale imitation of the genuine article and the worst form of confirmation bias. It's still better than having nothing - but "works in staging" is only one step better than "works on my machine".  — @copyconstruct
  15. 22 … Env structure • Cluster size • Config options

    • Networking optimizations • Monitoring in staging • Env parity
  16. 23 … Env structure I’d argue that being able to

    successfully and safely test in production requires a significant amount of automation, a firm understanding of the best-practices as well as designing the systems from the ground up to lend themselves well toward this form of testing.
  17. 26 … Deploying code Feature Merge commit P P A

    A A Feature A + B P Release P P Canary Canary
  18. 27 … Deploying code Auth + Audit + RL {

    “domain”: “api.iunigo.com”} *.iunigo.com/policies *.iunigo.com/accounts api.iunigo.com policies accounts api.iunigo.com/ accounts/1234
  19. 28 … Deploying code Auth + Audit + RL {

    “domain”: “edge.iunigo.com”} edge.iunigo.com/policies edge.iunigo.com/accounts *.iunigo.com/policies *.iunigo.com/accounts traffic % || edge.iunigo.com policies accounts E E api.iunigo.com/ accounts/1234 E E
  20. 30 … Wrap up • GitOps se centra en la

    idea de que debemos manejar nuestro cluster comparando el estado deseado a través de herramientas declarativas con el estado observado del sistema • Nunca podemos saber realmente el estado actual. A través de monitoreo. Existe un estado actual, lo que creemos y el estado deseado versionado en git. • GitOps es una iteración simple de DevOps e infra as code, orquestación y observabilidad • Evitar darle al CI la incorrecta responsabilidad de administrar el cluster. (GitOPs != CIOps)
  21. 33 … Future: Declarative apps? Lo que importa: - Nuevos

    features - Releases rápidos - Uptime perfecto El enfoque: - Aprender - Construir - Explicar - Monitorear - Repetir Solución: Herramientas - Compiladores - Depuradores - Unit testing - IDE
  22. 34 … Future: Declarative apps? DS Tools: - Helm (helm.sh)

    - Draft (draft.sh) - Telepresence (telepresence.io) - Jenkins X - Spinnaker Language Features: - synchronized - async/await - GC - Single thread - Channels