새소식

Kubernetes

ArgoCD 란 무엇인가 ?? (핵심 용어, 구성 요소 등)

  • -

 

 

1. ArgoCD

 

ArgoCD 는 Git 을 배포의 원천으로 사용하는 GitOps CD 도구입니다.

GitOps 특성상 애플리케이션 자체의 소스코드와 배포에 해당되는 소스코드를 별개로 관리하는 것이 일반적입니다.


Git 에 작성된 매니페스트 기반 으로 쿠버네티스의 리소스 상태를 일치 시키므로 선언적인 리소스 관리가 가능하고,
배포 시 리소스나 런타임 설정만 변경할 경우 애플리케이션의 빌드 없이 빠르게 배포 및 롤백이 가능하다는 장점이 있습니다.

 

Argo Rollouts 이나 ArgoCD Notifications 등을 추가로 적용해 다양한 배포 전략을 사용하거나 배포 관련 알림을 설정 하는 등 좋은 확장성을 가지고 있습니다.



1.1. ArgoCD 특징

 

배포 자동화 (Automated Deployment)

* 동작 방식

1) Git Commit 또는 CI 파이프라인이 동작
2) 수동 동기화를 트리거
3) ArgoCD 컨트롤러가 자동으로 클러스터를 깃 리포지터리에 의도한 상태로 Push

 

관찰 가능성 (Observability)

ArgoCD 는 애플리케이션 상태가 깃에서 의도한 상태와 동기화되어 있는 지 식별할 수 있는 UICLI 를 제공

ArgoCD Notifications 엔진을 제공하여 알림 처리 가능

 

멀티 테넌시 (Multi-Tenancy)

인증을 위한 RBAC 정책 사용하여, 사용자별 권한 관리가 가능
여러 클러스터를 등록하여 하나의 ArgoCD 에서 여러 클러스터 관리 및 배포가 가능



1.2. ArgoCD 핵심 개념

 

ArgoCD 의 핵심 개념으로는 조정(Reconcilitation)CRD (Custom Resource Definition) 이 있습니다.

 

조정 (Reconciliation)

깃 리포지터리에 담긴 의도한 상태를 현재 상태의 클러스터와 일치하는 것

기본적으로 180초(3분) 마다 조정을 실시합니다.

 

조정 루프

1) ArgoCD 는 Git Repository 의 Helm Chart 를 쿠버네티스 YAML 로 렌더링
2) 현재 클러스터를 의도한 상태 (Desired State) 와 비교

 

동기화 상태 (Sync Status)

ArgoCD 가 운영 중인 쿠버네티스 리소스와 의도한 상태를 비교하여,

다르다고 판단하면 자동 혹은 수동으로 kubectl apply 를 사용해 템플릿화된 파일을 적용

 

ArgoCD CRD (Custom Resource Definition)

ArgoCD 애플리케이션, 프로젝트, 리포지터리, 클러스터 자격 증명 같은 설정 값을 쿠버네티스 매니페스트를 이용해 선언

 

  • Application

쿠버네티스 클러스터에 배포하려는 애플리케이션 인스턴스를 의미

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: sample-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: <GIT_REPO>
    targetRevision: HEAD
    path: <GIT_PATH>
  destination:
    server: https://kubernetes.default.svc
    namespace: default

 

 

  • AppProject

ArgoCD 내에서 애플리케이션을 논리적으로 그룹화할 수 있는 리소스

apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: applications
  namespace: argocd
spec:
  description: Example Project
    # 매니페스트가 모든 깃 리포지터리에 배포되도록 허용
  sourceRepos:
  - '*'
    # 애플리케이션이 동일한 클러스터의 default 네임스페이스에만 배포되도록 허용
  destinations:
  - namespace: default
    server: https://kubernetes.default.svc
    # 네임스페이스를 제외하고 모든 클러스터 범위에서 리소스 생성 거부
  clusterResourceWhitelist:
  - group: ''
    kind: Namespace

 

 

  • Repository Credentials

프라이빗 리포지터리일 경우, ArgoCD 가 해당 리포지터리에 접근하기 위해서는 접근 가능한 자격 증명이 필요
쿠버네티스 시크릿컨피그맵을 사용해 해결

 

* 아래와 같은 특정 쿠버네티스 레이블을 포함해 시크릿 생성

argocd.argoproj.io/secret-type: repository

apiVersion: v1
kind: Secret
metadata:
  name: private-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  url: git@github.com:argoproj/my-private-repository
  sshPrivateKey: |
  -----BEGIN OPENSSH PRIVATE KEY-----
  ...
  -----END OPENSSH PRIVATE KEY-----

 

 

  • Cluster Credentials

ArgoCD 가 여러 클러스터를 관리하고 ArgoCD 가 이미 실행 중인 클러스터에 포함되지 않은 경우 다른 쿠버네티스 클러스터에 대한 액세스 권한 필요
리포지터리 자격 증명과 다른 시크릿 유형


* 아래와 같은 특정 쿠버네티스 레이블을 포함해 시크릿 생성

argocd.argoproj.io/secret-type: cluster

apiVersion: v1
kind: Secret
metadata:
  name: mycluster-secret
  labels:
    argocd.argoproj.io/secret-type: cluster
type: Opaque
stringData:
  name: mycluster.com
  server: https://mycluster.com
  config: |
    {
      "bearerToken": "<인증 토큰>",
      "tlsClientConfig": {
        "insecure": false,
        "caData": "<base64 로 인코딩된 인증서>"
      }
    }



 

1.3. ArgoCD 용어

 

애플리케이션 (Application)

ArgoCD 에서 CRD 로 규정하는 리소스 그룹

 

애플리케이션 소스 타입 (Application Source Type)

Helm, Kustomize 과 같은 애플리케이션을 구축하는 데 사용하는 도구

 

타깃 상태 (Target State)

애플리케이션의 의도한 상태 (Git Repo 에 있는 상태)

 

현재 상태 (Live State)

애플리케이션의 현재 상태 (클러스터에 배포된 상태)

 

동기화 상태

현재 상태와 타깃 상태가 일치하는 지 확인

 

동기화 (Sync)

쿠버네티스 클러스터에 변화를 적용해 애플리케이션을 타깃 상태로 변경

 

동기화 동작 상태 (Sync Operation Status)

동기화 단계에서 작업의 성공 실패 여부

 

새로고침 (Refresh)

깃 리포지터리와 현재 상태의 차이점 비교

 

서비스 상태 (Health Status)

애플리케이션이 요청을 받을 수 있고 운영 중인 상태인 지 여부




2. ArgoCD 아키텍처

 

ArgoCD 핵심 구성 요소는 쿠버네티스 컨트롤러로 구성

컨트롤러는 ArgoCD 의 현재 상태를 의도한 상태와 비슷하게 유지하려고 주기적으로 체크

 

쿠버네티스 컨트롤러 작동 방식

 

1) 클러스터 상태 관찰

2) 필요한 경우 변경 사항을 적용하거나 요청



2.1. ArgoCD 핵심 구성 요소

 

API Server

웹 UI, CLI, Argo Events, CI/CD 시스템과 같이 다른 시스템과도 API 를 통해 상호 작용

 

* 역할
- 애플리케이션 관리 및 상태 보고
- 애플리케이션 트리거 작업
- 깃 리포지터리와 쿠버네티스 클러스터 관리
- 인증과 SSO 지원
- RBAC 정책 강화

 

Repository Server

애플리케이션 매니페스트를 보관하는 깃 리포지터리의 로컬 캐시 유지
다른 Argo 컴포넌트는 쿠버네티스 매니페스트를 가져오기 위해 Repository Server 에 요청

 

* 요청에 필요한 매개 변수

- 리포지터리 URL
- 깃 버전
- 애플리케이션 경로
- 템플릿 세부 설정 : Helm 의 values.yaml 등

 

Application Controller

지속적으로 애플리케이션의 현재 상태 확인깃 리포지터리의 의도한 상태와 비교

리소스를 수정 했는 데 동기화 되지 않은 경우, 컨트롤러가 상태 동기화 시도
사용자가 생성한 훅(hook) 을 생명 주기 동안 실행

Contents

포스팅 주소를 복사했습니다