Keywords: GitOps, Cloud Migration, Kubernetes, Polyrepo, ArgoCD, Rapid Deployment, Permission Control, IasC
Auryc did a cloud migration from AWS to GCP in 2020. During which time, we finished containerization, and migrated our application deployment from AWS Sevices to Kubernetes. With a brand new system to deploy applications, we certainly meet the challenge on how to manage our application deployments process.
In this blog, we delve into how we revolutionized our deployment workflow using ArgoCD, a tool synonymous with GitOps in Kubernetes environments. We'll explore our polyrepo + dedicated repository approach, which not only simplified our deployment processes but also provided a robust framework for managing both our applications and infrastructure.
This shift was instrumental in achieving rapid deployment, clear permission control, and effective disaster recovery, all while maintaining the agility required for cloud migration and infrastructure as code (IaC) practices.
During my tenure at Auryc, our development teams were generally small, often comprising fewer than five core developers. As the primary infrastructure engineer, one of my responsibilities is for establishing and managing our Git flow.
Small, Multi-Tasking Development Teams: Auryc's development teams are compact, typically comprising less than five members. These teams handle a range of responsibilities from coding to deployment
Demand for Quick Iteration and Feedback: Auryc prioritizes rapid deployment and an online testing environment, underscoring the need for fast development cycles and immediate feedback mechanisms.
Challenges with Polyrepo Management: Using a Polyrepo pattern, we encountered obstacles in managing multiple repositories, leading to issues in cross-project coordination and unified CI/CD practices.
Balancing Rapid Deployment with Control: We seeks a balance between the need for swift deployments for development/testing and stringent control for production environments.
During a development cycle, it can become difficult to manage application code and infrastructure configurations, especially as the team and codebase get bigger. This is when our dedicated Git repository becomes important. It serves as the foundation of our GitOps framework, providing a cohesive, reliable, and automated mechanism.
In our quest for efficiency and reliability, we found that separating our infrastructure and application deployment code from the application code itself provided several benefits: