Canonical GitOps - David Flanagan

"Learn how Canonical GitOps enables efficient collaboration between development and platform teams, with a focus on shared contracts, repository structures, and automation tools such as Pulumi and Kyverno."

Key takeaways
  • Canonical GitOps: David Flanagan’s approach to GitOps, a method of managing software infrastructure through Git, emphasizes the importance of a shared contract between development and platform teams.
  • Repository structure: Flanagan suggests separating application code from infrastructure code, with a single repository for the application and a separate repository for the platform.
  • Platform team: The platform team is responsible for providing the infrastructure and tools for application teams to deploy their code. They must define and maintain the contract between the application and platform teams.
  • Contract: The contract is a set of rules and expectations for how the application team should interact with the platform team, ensuring consistency and reduce conflicts.
  • Multi-environment GitOps: Flanagan discusses the challenges of managing multiple environments, such as development, staging, and production, and how a shared contract can help simplify this process.
  • Pulumi: Flanagan uses Pulumi, an infrastructure as code platform, to demonstrate how to define and deploy a Kubernetes cluster and create a scalable application.
  • GitOps tools: Flanagan discusses the importance of using GitOps tools such as Kyverno, Helm, and Flux CD to automate the deployment process and ensure consistency across environments.
  • Avoid overlays: Flanagan emphasizes the importance of avoiding overlays and instead using a single, shared contract to define the infrastructure and application code.
  • 12-factor app: Flanagan references the 12-factor app manifesto, which provides guidelines for building scalable and maintainable software applications.
  • Local environments: Flanagan emphasizes the importance of using local environments for development and testing, and providing a way for developers to easily switch between local and production environments.