Astro Hub

DevOps / 20.CD_ArgoCD

프로젝트: astro-test1

원본 경로: operateguide/DevOps/20.CD_ArgoCD.md


[CD] ArgoCD

1. 개요

AKS 기반에서 ArgoCD 운영 가이드

2. ArgoCD 기본정보

3. Project 생성

1) Project 생성

ArgoCD 에서는 Application은 Project 별로 관리된다.

  • Project 명
    • atportal
    • bizforce
    • cloudwiz
    • ...
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: [단위서비스]-[prd/dev] # (예시 : atportal-prd / atportal-dev)
  namespace: argocd-system
spec:
  description: "[단위서비스]-[prd/dev]-project" # (예시 : "atportal-prd-project")
  sourceRepos:
    - "https://ktds.ghe.com/[ORG]/*" # (git 주소 예시 : https://ktds.ghe.com/atportal/*)
  destinations:
    - namespace: "*"
      server: [aks api 주소] # (예시 : https://aks-az01-p-rg-az01-prd-comm-9f3e19-1o8yjos4.hcp.koreacentral.azmk8s.io:443)
  clusterResourceWhitelist:
    - group: "*" 
      kind: "*"
  • 참고
    • sourceRepos
      • ORG 하위의 repository 를 설정한다.
    • destinations
      • 프로젝트가 배포될 Server (AKS) 와 Namespace 를 지정한다.
    • syncPolicy
      • auto-sync 비활성화로 설정

2) Repository 등록

프로젝트별로 참고할 Repository 를 사전에 인증해 놓아야 한다.

$ argocd login argocd.comm.kubepia.net \
  --insecure --grpc-web
* Username : admin
* Paasword : admin_Password

$ argocd repo add https://ktds.ghe.com/[ORG]/[Repo].git \
  --project [Project] \ # 사전 생성된 Project 명
  --type git \
  --username 8사번@ktds.co.kr

Password:    # <-- PAT 입력


* 확인
$ argocd repo list
TYPE  NAME  REPO       INSECURE  OCI    LFS    CREDS  STATUS    MESSAGE  PROJECT
git        [Repo URL]  false     false  false  true   Successful         [Project]

3) Cluster 등록

배포 대상 AKS Cluster 등록. (수정중)

$ argocd login argocd.comm.kubepia.net \
  --insecure --grpc-web
* Username : admin
* Paasword : admin_Password

$ argocd cluster add https://ktds.ghe.com/[ORG]/[Repo].git \
  --project [Project] \ # 사전 생성된 Project 명
  --type git \
  --username 8사번@ktds.co.kr

Password:    # <-- PAT 입력


* 확인
$ argocd repo list
TYPE  NAME  REPO       INSECURE  OCI    LFS    CREDS  STATUS    MESSAGE  PROJECT
git        [Repo URL]  false     false  false  true   Successful         [Project]

4) Application 등록

ArgoCD Application을 등록하려면 선언적 구성 파일을 작성하고 이를 적용한다.

(1) Application 등록 (CLI)

기 생성된 Project에 애플리케이션을 처음으로 구성한다.

첫 배포 이후 부터는 Sync 로 Version up 을 수행한다.

yaml 배포

$ cat <<EOF | kubectl -n argocd-system apply -f -
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: [Repo]-[dev/prd] # (예시 : atportal-auth-dev)
  namespace: argocd-system
spec:
  project: [프로젝트 명]
  source:
    repoURL: https://ktds.ghe.com/[ORG]/[REPO].git
    targetRevision: 
    path: manifests/overlays/[dev/prd] # kustomization.yaml 파일의 경로
  destination:
    name: AKS명 # (ArgoCD Cluster 등록 명 : aks-az01-prd-atportal-01)
    namespace: [Namespace]
  syncPolicy:
EOF
  • source
    • 지정한 repo에 manifests/overlays/dev 라는 path 에는 dev 환경에 배포되어야 할 yaml 들이 선언되어 있다.
    • 서비스마다 경로가 상이할 수 있으므로, 반드시 Repo 내의 경로 확인 필요.
  • destination
    • 대상 AKS의 Namespace 에 application을 배포한다.

(2) Application 등록 (UI)

  • DEV/PRD Cluster 별 Application 을 등록한다.
  • 메뉴 : ArgoCD UI > Applications > New APP
    • Application Name :
      • Cluster : AKS 클러스터 선택
      • Namespace : 배포 대상 Namespace 입력
      • Repo URL : Repository URL 입력
      • PATH : kustomization.yaml 파일 경로
      • Sync Policy : Disable Auto-sync
    • Type : Kustomize 선택

4. ArgoCD RBAC 설정

1) RBAC

  • ArgoCD 는 project 로 영역을 구분 할 수 있다.
  • 서비스 - project 를 맵핑하고 Azure의 Group 으로 연결 해준다.
    • 사전에 Entra ID 에 그룹 생성 및 사용자 추가 후, 그룹 ID값으로 매핑한다.
$ kubectl get configmap argocd-rbac-cm -n argocd-system -o yaml

apiVersion: v1
data:
  policy.csv: |2
    # common - 그룹 Role 할당
    g, 507ee1f3-65f8-4458-ab5c-629fad95cb10, role:common-admin

    # common - Role에 권한 할당
    p, role:common-admin, applications, *, *, allow
    p, role:common-admin, projects, get, *, allow
    p, role:common-admin, repositories, *, *, allow
    p, role:common-admin, clusters, *, *, allow

    # bizforce - 그룹 Role 할당
    g, 3c502c0a-080d-4efb-8ce5-a03d5806144b, role:bizforce-admin

    # bizforce - Role에 권한 할당
    p, role:bizforce-admin, applications, *, bizforce-prd/*, allow
    p, role:bizforce-admin, applications, *, bizforce-dev/*, allow
    p, role:bizforce-admin, projects, get, bizforce-prd, allow
    p, role:bizforce-admin, projects, get, bizforce-dev, allow
    p, role:bizforce-admin, repositories, *, *ktds.ghe.com/bizforce/*, allow
    p, role:bizforce-admin, clusters, *, https://aks-az01-p-rg-az01-prd-b2bc-6aac5a-xx1vcqvf.hcp.koreacentral.azmk8s.io:443, allow
    p, role:bizforce-admin, clusters, *, https://aks-az01-d-rg-az01-dev-b2bc-6aac5a-q2cl6bm5.hcp.koreacentral.azmk8s.io:443, allow
    ...
  • 그룹 권한
    • application: project 범위 , *권한
    • project: project 범위 , get권한
    • repositorites: https://ktds.ghe.com/[ORG]/*, *권한
    • clusters: aks-cluster-서비스, *권한

5. CI / CD 수행 (Application Version Up)

CI 작업을 수행한 후, CD 작업을 수행한다.

1) CI 작업 수행

Github Repository의 Actions를 수행한다.

2) CD 작업 수행

  • CI Workflow 작업이 완료되면 마지막 단계에서 tag 버젼을 update 한다.
  • 이로 인해 ArgoCD Application 은 원본소스와 내용이 달라지므로 Out of sync 형태로 변한다.
  • sync 버튼을 클릭함으로서 신규 버젼이 K8s 에 반영된다.

6. 전체 시나리오

  1. Project 생성
  2. RBAC 설정

1) AKS 클러스터 등록

ArgoCD CLI

$ argocd cluster add [AKS명]
# 예시 : argocd cluster add aks-az01-prd-atportal-01

* 확인
$ argocd cluster list

2) Project 생성

위의 Project 생성 참고

3) RBAC 설정

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-rbac-cm
  namespace: argocd-system
data:
  policy.default: role:deny
  policy.csv: |
    # common
    g, 507ee1f3-65f8-4458-ab5c-629fad95cb10, role:common-admin

    # 역할 → 권한 부여
    p, role:common-admin, applications, *, prj-common/*, allow
    p, role:common-admin, projects, get, prj-common, allow
    p, role:common-admin, repositories, *, *ktds.ghe.com/[ORG]*, allow
    p, role:common-admin, clusters, *, [AKS Cluster API], allow

프로젝트 홈으로 돌아가기