簡介:
notification服務(wù)讓你通過媒介快速的獲得APP 同步的狀態(tài),第一時(shí)間去處理告警問題。想象下當(dāng)團(tuán)隊(duì)中多人協(xié)作的時(shí)候,某一位同事通過argocd部署了一個(gè)服務(wù),口頭的傳達(dá)可能略顯效率低下,和其他傳統(tǒng)CD工具如runner、jenkins.argocd這邊也有個(gè)很多的告警支持。這次我們關(guān)注于如何啟用argocd notification服務(wù)并通過郵件將告警內(nèi)容發(fā)出去:
系列文章同步更新中:
argocd的secret管理之SealedSecret:在git里面加密敏感配置
argocd告警管理之notification服務(wù):讓你第一時(shí)間得到argocd app的狀態(tài)信息
argocd藍(lán)綠/金絲雀發(fā)布之rollout: 快速方便的啟用基于gitops的藍(lán)綠/金絲雀發(fā)布
gitops之a(chǎn)rgocd
一,安裝Argocd:
1,安裝
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/stable/manifests/install.yaml
安裝就如其他operator 一樣只需要一個(gè)命令就可以一間安裝,主要是啟動了一個(gè)argocd-notification-controller去檢測argocd的同步狀態(tài),并通過配置的媒介將同步消息送給指定的收件人。
二,配置郵件服務(wù)
apiVersion: v1
kind: Secret
metadata:
name: argocd-notifications-secret ##必須為這個(gè)名字,不然argocd-notification服務(wù)不能使用
namespace: argocd
stringData:
notifiers.yaml: |
email:
host: smtp.163.com
port: 465
from: <user>@163.com
username: <user>@163.com
password: <pass>
type: Opaque
三,配置告警模板
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-notifications-cm
namespace: argocd
data:
config.yaml: |
subscriptions:
- recipients:
- email:<user>@163.com ##所以告警這個(gè)郵件都會收到,運(yùn)維人員
trigger: on-sync-status-unknown
trigger: on-sync-status-sync
trigger: on-sync-status-syncfailed
trigger: app-sync-running
trigger: app-health-degraded
triggers:
- name: on-sync-status-unknown
enabled: true
condition: app.status.sync.status == 'Unknown'
template: app-sync-status-unknown
oncePer: app.status.sync.revision
- name: on-sync-status-sync
enabled: true
condition: app.status.sync.status == 'Synced' and app.status.operationState.phase in ['Succeeded']
template: app-sync-succeeded
- name: on-sync-status-syncfailed
enabled: true
condition: app.status.operationState.phase in ['Error', 'Failed']
template: app-sync-failed
- name: app-sync-running
enabled: true
condition: app.status.operationState.phase in ['Running']
template: app-sync-running
- name: app-health-degraded
enabled: true
condition: app.status.health.status == 'Degraded'
template: app-health-degraded
templates:
- name: app-sync-succeeded
title: Application {{.app.metadata.name}} has been successfully synced.
body: |
{{if eq .context.notificationType "slack"}}:white_check_mark:{{end}} Application {{.app.metadata.name}} has been successfully synced at {{.app.status.operationState.finishedAt}}.
Sync operation details are available at: https://<ArgoCD_IP>/applications/{{.app.metadata.name}}.
ClusterName: {{.context.clusterName}}.
- name: app-sync-status-unknown
title: Application {{.app.metadata.name}} sync status is {{.app.status.sync.status}}
body: |
{{if eq .context.notificationType "slack"}}:exclamation:{{end}} Application {{.app.metadata.name}} sync is 'Unknown'.
{{if ne .context.notificationType "slack"}}
{{range $c := .app.status.conditions}}
* {{$c.message}}
{{end}}
{{end}}
Sync operation details are available at: https://<ArgoCD_IP>/applications/{{.app.metadata.name}}.
ClusterName: {{.context.clusterName}}.
- name: app-sync-failed
title: Failed to sync application {{.app.metadata.name}}.
body: |
{{if eq .context.notificationType "slack"}}:exclamation:{{end}} The sync operation of application {{.app.metadata.name}} has failed at {{.app.status.operationState.finishedAt}} with the following error: {{.app.status.operationState.message}}
Sync operation details are available at: https://<ArgoCD_IP>/applications/{{.app.metadata.name}}?operation=true .
ClusterName: {{.context.clusterName}}.
- name: app-sync-running
title: Start syncing application {{.app.metadata.name}}.
body: |
The sync operation of application {{.app.metadata.name}} has started at {{.app.status.operationState.startedAt}}.
Sync operation details are available at: https://<ArgoCD_IP>/applications/{{.app.metadata.name}}?operation=true .
ClusterName: {{.context.clusterName}}.
App Version: {{.app.status.resources.summary.images | join ", " }}
- name: app-health-degraded
title: Application {{.app.metadata.name}} has degraded.
body: |
{{if eq .context.notificationType "slack"}}:exclamation:{{end}} Application {{.app.metadata.name}} has degraded.
Application details: https://<ArgoCD_IP>/applications/{{.app.metadata.name}}.
ClusterName: {{.context.clusterName}}.
四,為單獨(dú)的APP定制收件人
在APP的注冊yaml中添加相應(yīng)的annotations
如上圖所示不光可以添加所以狀態(tài)都發(fā)送,還可以定制:
on-sync-failed.recipients.argocd-notifications.argoproj.io: email:<sample-email>
五,收到告警郵件
The sync operation of application <app-name>has started at 2020-06-22T06:12:31Z.
Sync operation details are available at: []https://<ip addr>/applications/cfappsmonitoring?operation=true .
ClusterName: <no value>.