ArgoCD와 Github 연동 및 Webhook까지 설정했다면 이제 남은것을 배포를 위한 Application을 설정하는 것만 남았다!!
배포를 하기 위해서는 먼저 배포할 Cluster를 설정해야 한다. 그리고 이 경우에는 각 환경별로 ArgoCD를 구성하는 방법이 있고, 1대의 ArgoCD에서 모두 관리하는 Multi-Cluster 방법이 있다.
필자는 관리 포인트를 줄이기 위해서 Multi-Cluster로 설정했지만, 이는 각 회사마다 차이점이 있고 각 회사별로 맞춰서 하면 된다.
ArgoCD Multi-Cluster
별도 작업을 하지 않는다면 ArgoCD로 배포할 Cluster는 현재 ArgoCD가 설치되어 있는 Cluster만 설정이 되어 있다.
하지만, Cluster별로 ArgoCD를 설치하는 것은 효율적이지 않고, 관리 포인트도 많아 지기 때문에 필자는 Multi-Cluster 설정을 했다.
Multi-Cluster 설정 방법
먼저 MultiCluster로 배포하기 위해서는 Local PC에서 ArgoCD Cli로 Login을 해야한다.
❯ argocd login {argocd domain}
Username: admin
Password:
'admin:login' logged in successfully
Context '{argocd domain}' updated
그리고 cluster arn을 get-contenxts를 통해서 확인을 하고 Cluster를 추가하면 된다. 어렵지 않다.
> kubectl config get-contexts -o name
> argocd cluster add {cluster arn}
WARNING: This will create a service account `argocd-manager` on the cluster referenced by context `arn:aws:eks:ap-northeast-2:069889557760:cluster/service-dev` with full cluster level privileges. Do you want to continue [y/N]? y
INFO[0002] ServiceAccount "argocd-manager" created in namespace "kube-system"
INFO[0002] ClusterRole "argocd-manager-role" created
INFO[0002] ClusterRoleBinding "argocd-manager-role-binding" created
WARN[0003] Failed to invoke grpc call. Use flag --grpc-web in grpc calls. To avoid this warning message, use flag --grpc-web.
Cluster '{cluster endpoint} added
최종적으로 위 과정을 통해 multi-cluster를 등록하게 되면, 각 Cluster kube-system namespace에 admin 권한을 가진 argocd-manager serviceaccount가 생겨난다. 그리고 ArgoCD는 해당 serviceaccount를 통해서 배포한다.
- 처음 글만 봤을 때는 ArgoCD가 어떻게 다른 Cluster에 접속하고 배포할 수 있을지 궁금했었는데
- 각 Cluster에 참조할 수 있는 serviceaccount를 사용하는 구조로 되어 있다!!
Multi-Cluster 확인 방법
등록이 이상없었다면, 아래와 같이 CLI를 통해서 확인할 수도 있고 GUI에서도 확인할 수 있다.
이처럼 배포하고자 하는 Cluster가 여러개가 있다면 여러 Cluster를 등록하면 된다.
등록하더라도 Application을 생성할 때 destination으로 설정하지 않는다면 문제가 없다.
배포 Application 생성
Multi-Cluster를 생성했다면 이제 Application만 생성하면 ArgoCD로 배포하는것을 모두 끝난다.
Application이란?
보통 ArgoCD에서 명칭하는 Application은 배포하는 하나의 서비스를 뜻한다.
예를들어) A 서비스를 배포한다고 가정하면, ArgoCD에서는 A Application을 생성하는 것으로 말한다.
Application은 GUI에서도 생성할 수 있지만, CLI에서는 Helm 설정 등 일부 선택할 수 없는 메뉴가 많다.
그래서 보통 CLI로 설정을 하는것을 권고하고, 필자도 CLI로 설정을 하였다.
Application 설정 방법
Application을 만드는 예제 코드는 아래와 같다. 여기에서 수정할것은 annotation, spec 부분이다.
- repo URL : ArgoCD Sync를 맞출 Github repo 경로이다.
- targetRevision : Github repo의 Branch를 지정한다.
- path : GIthub repo의 경로를 지정한다.
- 그래서 repo URL + targetRevision + path로 Sync를 맞출 Github 정보를 저장한다.
- helm : ArgoCD로 배포할 정보이다. releaseName, Values 파일을 여러개 설정할 수 있다.
- destination : 배포할 Cluster, Namespace를 지정한다.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
annotations:
notifications.argoproj.io/subscribe.on-sync-succeeded.slack: test # Slack을 보내기 위한 Annotation
notifications.argoproj.io/subscribe.on-sync-failed.slack: test # Slack 발송 조건을 설정
name: dev-test
namespace: argocd
spec:
project: default
source:
repoURL: git@github.com:xxxxxxxxxx # Sync 할 Repo 주소 입력
targetRevision: update-master # Sync 할 Repo Branch 입력
path: helm-chart/chart # Sync할 Path 경로
helm:
releaseName: test
valueFiles:
- values/values.yaml
destination:
server: test cluster
namespace: test
syncPolicy:
automated:
selfHeal: true # 배포된 내용이 Git과 다를 경우, Git 내용으로 즉시 Sync 맞추는 옵션
Application 설정 확인 방법
CLI로 정상적으로 Application을 생성했다면, GUI에서 아래와 같이 확인할 수 있다.
지금은 Status가 Missing이고, OutOfSync로 되어 있다. 이는 ArgoCD를 생성할 때 여러 옵션에 의한 동작이다.
ArgoCD는 대표적으로 아래 옵션을 제공한다.
- AutoSync : Git 변경사항이 확인되면 사용자 동의를 구하지 않고 바로 배포되는 옵션이다.
- ManualSync : Git 변경사항이 확인되면 사용자가 GUI에 들어와서 SYNC 버튼을 눌러줘야 한다.
- Git에서 Merge를 1차로 확인한다면, 굳이 ArgoCD에서 또 확인해야 할 필요는 없지 않을까?
- SelfHeal : ArgoCD는 현재 배포되어 있는 Manifest를 감시하고 있는다. 감시하고 있다가 변경사항이 있을 경우 GIt 내용으로 즉시 복구시켜주는 옵션이다.
- 만약, 해당 옵션을 활성화하지 않는다면 Status에 OufOfSync로 표시가 되고 사용자가 SYNC 버튼을 눌러야한다.
Application Sync 상태
최종적으로 Application이 모두 Sync 되었다면 아래와 같이 Status가 Healthy, Synced로 변경된다.
- 회사 문화에 따라서 AutoSync를 하는곳이 있을것이고, SelfHeal을 하는 곳이 있을것 같다.
- 이는 각 회사 문화에 따라 다른것이기 때문에 각자 맞춰서 하면 되고, 이외에도 다양한 옵션이 존재하므로 선택하면 된다.
지금까지 ArgoCD를 설치하고, Github 연동 및 Webhook 설정을 하고 Application을 설정하였다.
이외에도 배포 또는 Sync가 되지 않을 경우 Slack 알람을 보내는 방법도 존재하고, Application을 생성할 때 여러가지 옵션이 존재한다.
여러 옵션은 각 회사의 문화 및 취향에 맞춰서 설정하면 된다. 필자도 아직 CD Tool 사용에 익숙하지 않아서 어떤 옵션과 문화가 가장 좋은 것인지 잘 모르겠다;;
하지만 PoC를 하고 하나씩 테스트해보면서 조금씩 찾아가는게 Devops만의 문화이고, 회사를 위한 방향이지 않을까 생각을 한다.
ArgoCD 끝!! 이외 Slack 설정등에 궁금하신분은 댓글 남겨주시면 별도로 DM 드리겠습니다!
끝!
'기술 이모저모 > [Ops] Devops' 카테고리의 다른 글
[AWS][Istio] Istio proxy_config 엔드포인트 Priority 확인 방법 (0) | 2023.11.05 |
---|---|
[AWS][istio] istio LocalityLbSetting, CrossAZ 데이터 비용 절감 (0) | 2023.11.05 |
[ArgoCD] Github 연동 및 Webhook Event 설정 방법 (0) | 2023.05.13 |
[ArgoCD] CD Tool 도입개요 및 설치방법 (0) | 2023.05.13 |
[Vault] Vault 서비스 사용 방법[2/2] (0) | 2023.04.30 |