argocd发布实现预检和后检能力
实现 ArgoCD 发布预检能力
预检(Pre-Hook)用于在应用部署前执行验证或准备工作,例如检查依赖服务是否就绪、资源配额是否充足等。ArgoCD 支持通过 Resource Hooks 实现预检。
使用方式
在 Kubernetes 资源清单中添加注解 argocd.argoproj.io/hook: PreSync。示例为 Job 资源:
apiVersion: batch/v1
kind: Job
metadata:name: pre-check-jobannotations:argocd.argoproj.io/hook: PreSync
spec:template:spec:containers:- name: checkerimage: alpinecommand: ["sh", "-c", "echo 'Running pre-deployment checks...'"]restartPolicy: Never
关键配置
hook-delete-policy: HookSucceeded:任务成功后自动删除资源。- 支持的类型包括
Job、Pod或自定义资源(如 Tekton TaskRun)。
实现 ArgoCD 发布后检能力
后检(Post-Hook)用于部署完成后执行测试或通知,例如运行集成测试、发送 Slack 消息等。通过注解 argocd.argoproj.io/hook: PostSync 实现。
示例:发送通知
创建一个 ConfigMap 作为 PostSync 钩子:
apiVersion: v1
kind: ConfigMap
metadata:name: post-deploy-notificationannotations:argocd.argoproj.io/hook: PostSync
data:message: "Deployment completed at $(date)"
高级用例
结合 Argo Workflows 或 Kubeless 运行复杂后检逻辑:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:annotations:argocd.argoproj.io/hook: PostSync
spec:entrypoint: run-teststemplates:- name: run-testscontainer:image: postman/newmancommand: ["run", "api-tests.json"]
钩子生命周期管理
删除策略
通过 argocd.argoproj.io/hook-delete-policy 控制钩子资源清理时机:
HookSucceeded:仅成功时删除HookFailed:仅失败时删除BeforeHookCreation:执行新钩子前删除旧资源
超时设置
在 Application CRD 中配置钩子超时时间(默认无限制):
spec:syncPolicy:syncOptions:- Validate=falseretry:limit: 2duration: 10s
集成健康检查
结合自定义健康检查(Resource Health)增强验证能力。在 argocd-cm ConfigMap 中定义检查规则:
data:resource.customizations: |cert-manager.io/Certificate:health.lua: |hs = {}if obj.status ~= nil and obj.status.conditions ~= nil thenfor i, condition in ipairs(obj.status.conditions) doif condition.type == "Ready" and condition.status == "False" thenhs.status = "Degraded"hs.message = condition.messagereturn hsendendendhs.status = "Healthy"return hs
调试与日志查看
通过以下命令检查钩子执行状态:
argocd app get <app-name> --refresh
kubectl get pods -n <namespace> --selector=argocd.argoproj.io/hook
日志查看(针对 Job 类钩子):
kubectl logs <pod-name> -n <namespace>
