GitOps, ArgoCD Overview
Ref: https://argo-cd.readthedocs.io/en/stable/#overview
What Is Argo CD?
Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.
ArgoCD simplifies the management of Kubernetes applications by adopting a GitOps approach, ensuring that your cluster's state always aligns with your desired configuration stored in Git repositories.
What Is GitOps?
GitOps was first used by a company called Weaveworks and is a concept that was created with a special focus on delivery in the CI/CD pipeline.
GitOps is a modern approach to managing and automating the deployment and operation of applications. It leverages the principles of version control systems, particularly Git, to declaratively define and manage the entire state of your applications.
Ref: https://www.weave.works/technologies/gitops/#what-is-gitops
Key benefits of GitOps
- Declarative Configuration:
- In GitOps, you express the desired state of your infrastructure and applications in a declarative manner using YAML or JSON files.
- The configuration files are typically stored in a Git repository, making them versioned, auditable, and easy to collaborate on with team members.
- Git as the Single Source of Truth:
- The Git repository containing your configuration files serves as the single source of truth for your infrastructure and application deployments. Any changes to the system must be made through Git commits.
- Continuous Synchronization:
- GitOps tools and processes continuously monitor the Git repository for changes. When changes are detected, these tools automatically synchronize the actual state of the system with the declared state in the Git repository.
- Rollbacks and History:
- GitOps maintains a history of changes in the Git repository, allowing for easy rollbacks to previous configurations if issues or failures occur during deployments.
- This history provides an audit trail of changes, which is invaluable for troubleshooting and compliance.
- Kubernetes Integration:
- GitOps is commonly used in conjunction with Kubernetes for managing containerized applications. Kubernetes resources (e.g., Pods, Services, ConfigMaps) are defined declaratively in Git repositories and applied to clusters using GitOps tools.
- 선언적 구성:
- GitOps에서는 YAML 또는 JSON 파일을 사용하여 선언적 방식으로 인프라 및 애플리케이션의 원하는 상태를 표현합니다.
- 구성 파일은 일반적으로 Git 저장소에 저장되므로 버전이 지정되고 감사가 가능하며 팀 구성원과 쉽게 공동 작업할 수 있습니다.
- 단일 정보 소스로서의 Git:
- 구성 파일이 포함된 Git 저장소는 인프라 및 애플리케이션 배포를 위한 단일 정보 소스 역할을 합니다. 시스템에 대한 모든 변경 사항은 Git 커밋을 통해 이루어져야 합니다.
- 지속적인 동기화:
- GitOps 도구 및 프로세스는 Git 저장소의 변경 사항을 지속적으로 모니터링합니다. 변경 사항이 감지되면 이러한 도구는 시스템의 실제 상태를 Git 저장소에 선언된 상태와 자동으로 동기화합니다.
- 롤백 및 기록:
- GitOps는 Git 리포지토리의 변경 내역을 유지하므로 배포 중에 문제나 오류가 발생하는 경우 이전 구성으로 쉽게 롤백할 수 있습니다.
- 이 기록은 변경 사항에 대한 감사 추적을 제공하며 이는 문제 해결 및 규정 준수에 매우 중요합니다.
- Kubernetes 통합:
- GitOps는 컨테이너화된 애플리케이션을 관리하기 위해 Kubernetes와 함께 일반적으로 사용됩니다. Kubernetes 리소스(예: Pod, 서비스, ConfigMap)는 Git 리포지토리에서 선언적으로 정의되고 GitOps 도구를 사용하여 클러스터에 적용됩니다.
Argo CD Architecture
Argo CD is implemented as a kubernetes controller which continuously monitors running applications and compares the current, live state against the desired target state (as specified in the Git repo). A deployed application whose live state deviates from the target state is considered OutOfSync. Argo CD reports & visualizes the differences, while providing facilities to automatically or manually sync the live state back to the desired target state. Any modifications made to the desired target state in the Git repo can be automatically applied and reflected in the specified target environments.
Argo CD는 실행 중인 어플리케이션을 지속적으로 모니터링하여 현재 라이브 상태를 원하는 타겟 상태(Git repo에 명시된 대로)와 비교하는 kubernetes 컨트롤러로 구현됩니다. 라이브 상태가 타겟 상태를 벗어나는 전개된 어플리케이션은 OutOfSync로 간주됩니다. Argo CD는 라이브 상태를 원하는 타겟 상태로 자동 또는 수동으로 동기화할 수 있는 기능을 제공하면서 차이점을 보고하고 시각화합니다. Git repo에서 원하는 타겟 상태를 수정하면 자동으로 적용되고 지정된 타겟 환경에 반영될 수 있습니다.
Features
- Automated deployment of applications to specified target environments
- Support for multiple config management/templating tools (Kustomize, Helm, Jsonnet, plain-YAML)
- Ability to manage and deploy to multiple clusters
- SSO Integration (OIDC, OAuth2, LDAP, SAML 2.0, GitHub, GitLab, Microsoft, LinkedIn)
- Multi-tenancy and RBAC policies for authorization
- Rollback/Roll-anywhere to any application configuration committed in Git repository
- Health status analysis of application resources
- Automated configuration drift detection and visualization
- Automated or manual syncing of applications to its desired state
- Web UI which provides real-time view of application activity
- CLI for automation and CI integration
- Webhook integration (GitHub, BitBucket, GitLab)
특징
- 지정된 대상 환경에 애플리케이션 자동 배포
- 여러 구성 관리/템플릿 도구 지원(Kustomize, Helm, Jsonnet, plain-YAML)
- 여러 클러스터를 관리하고 배포하는 기능
- SSO 통합(OIDC, OAuth2, LDAP, SAML 2.0, GitHub, GitLab, Microsoft, LinkedIn)
- 승인을 위한 다중 테넌트 및 RBAC 정책
- Git 저장소에 커밋된 모든 애플리케이션 구성으로 롤백/어디서나 롤백
- 애플리케이션 자원의 상태 분석
- 자동화된 구성 드리프트 감지 및 시각화
- 애플리케이션을 원하는 상태로 자동 또는 수동 동기화
- 애플리케이션 활동을 실시간으로 볼 수 있는 웹 UI
- 자동화 및 CI 통합을 위한 CLI
- 웹훅 통합(GitHub, BitBucket, GitLab)