1. 배경
프로젝트를 진행하는 도중 Argo CD의 결과를 모니터링할 수 있도록 SNS로 보낼 수 있도록 만들어야 했는데, 직장에서 사용하는 해당 프로젝트 특성상 Slack으로 알람을 주기로 했다.
2. 도입 순서
1. Argo CD 파드 만들기
argocd의 공식 문서를 참고 하여 만들게 된다면 자동으로 리소스들이 생성되는 것을 볼 수 있다.
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
그리고 외부에서 접속할 수 있도록 설정을 해주어야 하는데, 이 경우 AWS 로드 밸런서를 사용하기로 했다.
argocd를 설치하면 기본적으로 argocd-server
서비스는 ClusterIP
로 설정되어 있다. 이를 LoadBalancer
로 변경하면 자동으로 AWS에서 로드밸런서가 생성되며 웹에서 볼 수 있게 된다.
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
2. Argo CD 알림 설정하기
argocd에는 공식 확장 기능으로 컨트롤러를 사용할 수 있도록 argocd-notifications
라는 플러그인을 제공하고 있다.
자세한 내용은 공식 문서를 참고 하세요.
순서
slack api
에서 토큰 생성하기argocd-notifications
컨트롤러 생성하기- 토큰 값 저장할
secret
생성 - 슬랙으로 보낼 데이터(
Config Map
) 생성 - 슬랙으로 보낼 곳 정해주기
argocd-notification
컨트롤러 생성하기
argocd-notifications 공식 문서의 도움을 받아 생성하면 된다
kubectl apply -f https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/release-1.0/manifests/install.yaml -n argocd
kubectl apply -f https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/release-1.0/catalog/install.yaml -n argocd
secret
생성하기
argocd-notifications-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: argocd-notifications-secret
stringData:
slack-token: #[SLACK_TOCKEN]
Config Map
생성하기
이미 ConfigMap이 존재하지만, 우리가 필요한 알람 시스템에 맞게 변경이 필요하다.
argocd-notifications-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-notifications-cm
data:
service.slack: |
token: $slack-token
username: Argo CD # optional
icon: https://argocd-notifications.readthedocs.io/en/stable/assets/logo.png # optional
subscriptions: |
- recipients:
- slack:alert
triggers:
- on-sync-status-unknown
- on-sync-failed
- on-health-degraded
- on-deployed
- on-sync-succeeded
# CM 적용하기
kubectl -n argocd patch cm argocd-notifications-cm --patch-file argocd-notifications-cm.yaml
configmap/argocd-notifications-cm patched
- Slack으로 보낼 장소 지정하기
현재 알림 컨트롤러가 갖고 있는 값은 토큰 값 뿐이다. 그렇기 때문에 슬랙에서 사용할 채널 등의 정보를 주입해주고, 어떤 애플리케이션을 구독할 것인지 정해준다.
export APP_NAME=test-app
export NAMESPACE=argocd
export SLACK_CHANNEL_NAME=your-channel
# Sync 성공시 알림
kubectl patch app $APP_NAME -n $NAMESPACE -p '{"metadata": {"annotations": {"notifications.argoproj.io/subscribe.on-sync-succeeded.slack":"$SLACK_CHANNEL_NAME"}}}' --type merge
# Sync 실패시 알림
kubectl patch app $APP_NAME -n $NAMESPACE -p '{"metadata": {"annotations": {"notifications.argoproj.io/subscribe.on-sync-failed.slack":"$SLACK_CHANNEL_NAME"}}}' --type merge
# Sync 진행중 알림
kubectl patch app $APP_NAME -n $NAMESPACE -p '{"metadata": {"annotations": {"notifications.argoproj.io/subscribe.on-sync-running.slack":"$SLACK_CHANNEL_NAME"}}}' --type merge
# Sync 상태가 Unknown일 때
kubectl patch app $APP_NAME -n $NAMESPACE -p '{"metadata": {"annotations": {"notifications.argoproj.io/subscribe.on-sync-status-unknown.slack":"$SLACK_CHANNEL_NAME"}}}' --type merge
# Health가 degrade 되었을 때
kubectl patch app $APP_NAME -n $NAMESPACE -p '{"metadata": {"annotations": {"notifications.argoproj.io/subscribe.on-health-degraded.slack":"$SLACK_CHANNEL_NAME"}}}' --type merge
# deploy 되었을 때
kubectl patch app $APP_NAME -n $NAMESPACE -p '{"metadata": {"annotations": {"notifications.argoproj.io/subscribe.on-deployed.slack":"$SLACK_CHANNEL_NAME"}}}' --type merge
이렇게 완료가 되면 sync
버튼을 눌렀을 때 결과가 슬랙으로 나타나는 것을 확인할 수 있다.
주의사항
- 알람 받을 '채널'에 봇이 추가되어 있어야 한다.
- 명령어로 채널을 등록할 때 슬랙 채널을
#---
으로 작성하는 것이 아닌---
으로 작성해야 한다.
현재는 기본 템플릿을 사용하여 영어로 알람이 오지만, 다음에는 한글화 해서 읽기 쉽도록 작업도 해봐야겠다.
참고
'CloudWave 3기' 카테고리의 다른 글
[Cloud Wave 3기] 프로젝트 시작 전, 올리브영 테크 블로그에서 프로젝트 방향성 찾기 (2) | 2024.11.03 |
---|---|
[CJ올리브네트웍스] Cloud Wave 3기 후기 (5) | 2024.10.02 |