알림 개요

알림 개요 (Notifications Overview)

Argo CD 알림(Notifications)은 Argo CD 애플리케이션을 지속적으로 모니터링하며 애플리케이션 상태의 중요한 변화를 사용자에게 알릴 수 있는 유연한 방법을 제공해요. 트리거(triggers)템플릿(templates)이라는 유연한 메커니즘으로 언제 알림을 보낼지, 그리고 알림 내용을 함께 구성할 수 있어요.

출처: 문서

본문

Argo CD 알림은 Argo CD 애플리케이션을 지속적으로 모니터링하며 애플리케이션 상태의 중요한 변화를 사용자에게 알릴 수 있는 유연한 방법을 제공해요. 트리거템플릿이라는 유연한 메커니즘을 사용해 언제 알림을 보낼지, 그리고 알림 내용을 구성할 수 있어요. Argo CD 알림에는 유용한 트리거와 템플릿의 카탈로그(catalog)가 포함되어 있어요. 그래서 새로 만들지 않고 그대로 사용할 수 있어요.

시작하기 (Getting Started)

  • 카탈로그에서 트리거와 템플릿 설치

    kubectl apply -n argocd --server-side --force-conflicts -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/notifications_catalog/install.yaml
    
  • argocd-notifications-secret secret에 이메일 사용자 이름과 비밀번호 토큰 추가

    EMAIL_USER=<your-username>
    PASSWORD=<your-password>
    
    kubectl apply -n argocd -f - << EOF
    apiVersion: v1
    kind: Secret
    metadata:
      name: argocd-notifications-secret
    stringData:
      email-username: $EMAIL_USER
      email-password: $PASSWORD
    type: Opaque
    EOF
    
  • 이메일 알림 서비스 등록

    kubectl patch cm argocd-notifications-cm -n argocd --type merge -p '{"data": {"service.email.gmail": "{ username: $email-username, password: $email-password, host: smtp.gmail.com, port: 465, from: $email-username }" }}'
    
  • Argo CD 애플리케이션 또는 프로젝트에 notifications.argoproj.io/subscribe.on-sync-succeeded.slack 어노테이션을 추가해 알림을 구독:

    kubectl patch app <my-app> -n argocd -p '{"metadata": {"annotations": {"notifications.argoproj.io/subscribe.on-sync-succeeded.slack":"<my-channel>"}}}' --type merge
    

애플리케이션 하나를 동기화해 보고, 동기화가 완료되면 알림을 받는지 확인해 보세요.

네임스페이스 기반 구성 (Namespace based configuration)

Argo CD 알림을 설치하는 일반적인 방법 중 하나는 전체 클러스터를 관리하기 위해 전용 네임스페이스에 설치하는 거예요. 이 경우 관리자만 일반적으로 해당 네임스페이스에서 알림을 구성할 수 있어요. 하지만 어떤 경우에는 최종 사용자가 자신의 Argo CD 애플리케이션에 대한 알림을 구성할 수 있게 하는 것이 필요해요. 예를 들어 최종 사용자가 접근 권한이 있고 자신의 Argo CD 애플리케이션이 실행 중인 네임스페이스에서 알림을 구성할 수 있게 하는 거예요.

이 기능은 any 네임스페이스의 애플리케이션(applications in any namespace)을 기반으로 해요. 자세한 내용은 applications in any namespace 페이지를 참고하세요.

이 기능을 활성화하려면 Argo CD 관리자가 argocd-notification-controller 워크로드를 재구성해 컨테이너 시작 명령에 --application-namespaces--self-service-notification-enabled 파라미터를 추가해야 해요. --application-namespaces는 Argo CD 애플리케이션이 있는 네임스페이스 목록을 제어해요. --self-service-notification-enabled는 이 기능을 켜요.

두 시작 파라미터 모두 각 워크로드의 매니페스트를 변경하는 대신 argocd-cmd-params-cm ConfigMap에서 application.namespacesnotificationscontroller.selfservice.enabled를 지정해 편리하게 설정하고 동기화 상태를 유지할 수 있어요. 예를 들어:

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cmd-params-cm
data:
  application.namespaces: app-team-one, app-team-two
  notificationscontroller.selfservice.enabled: "true"

다른 알림 컨트롤러 시작 설정도 같은 방식으로 관리할 수 있어요. 알림이 많은 설치 환경에서는 notificationscontroller.processors.count가 워커 동시성을 구성하며 --processors-count 시작 플래그에 매핑돼요. 예를 들어:

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cmd-params-cm
data:
  notificationscontroller.processors.count: "4"

이 기능을 사용하려면 Argo CD 애플리케이션이 있는 네임스페이스에 argocd-notifications-cm이라는 configmap과 필요한 경우 argocd-notifications-secret secret을 배포할 수 있어요.

이렇게 구성하면 컨트롤러가 컨트롤러 수준 구성(컨트롤러와 같은 네임스페이스에 있는 configmap)과 Argo CD 애플리케이션이 있는 동일한 네임스페이스에 있는 구성을 모두 사용해 알림을 보내요.

예: 컨트롤러 수준 구성이 Slack만 지원할 때 애플리케이션 팀이 PagerDutyV2를 사용해 알림을 받으려고 해요.

Argo CD 애플리케이션이 있는 네임스페이스에 다음 두 리소스가 배포돼요.

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-notifications-cm
data:
  service.pagerdutyv2: |
    serviceKeys:
      my-service: $pagerduty-key-my-service
...
apiVersion: v1
kind: Secret
metadata:
  name: argocd-notifications-secret
type: Opaque
data:
  pagerduty-key-my-service: <pd-integration-key>

Argo CD 애플리케이션에 다음 구독이 있으면 사용자는 PagerDuty에서 애플리케이션 동기화 실패 메시지를 받아요.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  annotations:
    notifications.argoproj.io/subscribe.on-sync-failed.pagerdutyv2: "<serviceID for Pagerduty>"

참고

동일한 알림 서비스와 트리거가 컨트롤러 수준 구성과 애플리케이션 수준 구성에 모두 정의되어 있으면, 각자의 구성에 따라 두 알림이 모두 전송돼요.

--self-service-notification-enable 플래그가 켜져 있으면 알림 템플릿 내에서 secret 정의 및 사용 기능은 사용할 수 없어요.

더 알아보기 (Learn more)