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.
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
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
• 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
+ 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
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
Visualization • Ver el impacto en el sistema temprano para tomar acciones rápidamente • E2E testing & canary deployments • Dashboards unificados (metrics.iunigo.com)
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>)
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
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.
“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
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)