DevOps / 20.CD_ArgoCD
프로젝트: astro-sub1
원본 경로: operateguide/DevOps/20.CD_ArgoCD.md
[CD] ArgoCD
1. 개요
AKS 기반에서 ArgoCD 운영 가이드
2. ArgoCD 기본정보
- URL : http://argocd.comm.kubepia.net
- 계정 : Entra ID SSO
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 비활성화로 설정
- sourceRepos
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 내의 경로 확인 필요.
- 지정한 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 선택
- Application Name :
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. 전체 시나리오
- Project 생성
- 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