Keywords: GitOps, Cloud Migration, Kubernetes, Polyrepo, ArgoCD, Rapid Deployment, Permission Control, IasC

Introduction

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.

Background

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.

Our Solution: Dedicated Repo for GitOps

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.

Why a Dedicated Repository?

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:

  1. Single Source of Truth: The repository acts as the single source of truth for everything that is deployed into our Kubernetes clusters. This makes it easier to track changes, rollback updates, and troubleshoot issues.
  2. Clarity and Organization: With all configurations stored in one repo one branch, developers can easily find what they need. This centralization eliminates the confusion that often arises from having configurations scattered across multiple repos or even within the same repo but in different branches or folders.
  3. Ease of Collaboration: Since the repository is the ultimate authority for deployments, collaboration becomes more straightforward as Git Operations. Whether it's developers working on new features or Ops engineers updating infrastructure, everyone refers to the same set of configurations, ensuring consistency.