Argo CD高级操作钩子

资源列表

操作系统 配置 主机名 IP 所需软件
CentOS 7.9 2C4G master 192.168.93.145 Docker Ce、kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、Etcd、kube-proxy
CentOS 7.9 2C4G node1 192.168.93.146 Docker CE、kubectl、kube-proxy、Flnnel
CentOS 7.9 2C4G node2 192.168.93.147 Docker CE、kubectl、kube-proxy、Flnnel
CentOS 7.9 2C4G gitlab 192.168.93.102 GtiLab

一、Argo CD钩子

  • webhooks(钩子)

1.1、钩子介绍

  • Argo CD是一个用于部署和管理Kubernetes应用程序的工具,它提供了一种声明式的方式来定义和自动化应用程序的部署过程。Argo CD钩子(Hooks)是一种机制,允许在部署过程中执行自定义的操作。
    在这里插入图片描述

1.2、构建的几个执行阶段

  • 1、PreSync钩子:在同步操作之前执行,可以用于在同步应用之前执行一些准备工作,例如创建必要的资源或者检查先决条件(可以在部署应用前,执行数据库迁移或者初始化操作)。
  • 2、Sync钩子:在同步操作期间执行,可以用于同步应用程序期间执行一些操作,例如修改配置、应用变化或者执行其他自定义逻辑。
  • 3、PostSync钩子:在同步操作之后执行,可以用于在同步应用程序之后执行一些清理工作或者触发其他操作(集成监控和健康检查或者消息通知)。
  • 4、SyncFaild钩子:在同步失败执行,可以数据清理、逻辑终极、应用回滚等操作。

1.3、钩子删除策略

  • 在Argo CD中,可以使用钩子(hook)来在应用程序部署的不同阶段执行自定义操作。钩子可以用于在部署之前或者之后运行脚本、命令或者其他操作。当应用程序被删除时,也可以使用钩子来执行清理操作。删除钩子的策略可以通过Argo CD应用程序的配置进行设置。
    • 1、BeforeHookCreation:在创建钩子之前删除旧的钩子。这是默认的删除策略,它会在创建新钩子之前先删除旧的钩子。
    • 2、HookSucceeded:仅当钩子成功执行后才删除旧的钩子。这种策略适用于需要确保钩子成功执行后再删除旧的钩子的情况。
    • 3、HookFailed:仅当钩子执行失败后才删除旧的钩子,这种策略适用于需要在钩子执行失败时保留旧的钩子的情况。
    • 4、HookSuucceededOrFailed:无论钩子成功还是失败,都删除旧钩子。这种策略适用于无论钩子执行结果如何,都希望删除旧钩子的情况。

1.4、示例

  • 钩子其实就是Kubernetes资源,使用的是JObAPI

  • 钩子删除策略可以在Argo CD应用程序的配置文件(例如YAML文件)中设置。例如,以下是一个应用程序配置文件的示例,其中设置了钩子删除策略为HookSucceeded:

apiVersion: batch/v1
kind: Job
metadata:
  name: app-wxwork
  annotations:
    # 指定钩子阶段
    # 想在多个阶段都执行钩子可以这样设置
    # argocd.argoproj.io/hook: PostSync,SyncFaild
    argocd.argoproj.io/hook: PostSync
    # 钩子删除策略
    argocd.argoproj.io/hook-delete-policy: HookSucceeded

二、钩子演示

2.1、创建GitLab公共仓库

  • 你需要准备以下资源
    在这里插入图片描述

  • Namespace

[root@gitlab webhook-argocd]# cat namespace.yaml 
apiVersion: "v1"
kind: Namespace
metadata:
  name: argocd-webhooks
  • Deployment
[root@gitlab webhook-argocd]# cat deploy.yaml 
apiVersion: "apps/v1"
kind: Deployment
metadata:
  name: argocd-webhook
  namespace: argocd-webhooks
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
  • Service
[root@gitlab webhook-argocd]# cat service.yaml 
apiVersion: "v1"
kind: Service
metadata:
  name: nginx
  namespace: argocd-webhooks 
spec:
  selector:  
    app: nginx   
  type: ClusterIP
  ports:
  - port: 80  
    targetPort: 80
  • Ingress
[root@gitlab webhook-argocd]# cat ingress.yaml 
apiVersion: "networking.k8s.io/v1"
kind: Ingress
metadata:
  name: argocd-webhook
  namespace: argocd-webhooks
  labels:
    app: nginx
  annotations: 
    nginx.ingress.kubernetes.io/rewrite-target: "/"  
spec:
  ingressClassName: nginx
  rules:
  - host: gitops.argocd.cn.com   # 访问域名,当用户访问这个域名的时候,Ingress将应用以下规则
    http:
      paths:
      - path: / 
        pathType: Prefix
        backend: 
          service: 
            name: nginx
            port:
              number: 80
  • 同步中钩子
[root@gitlab webhook-argocd]# cat pre-sync.yaml 
apiVersion: "batch/v1"
kind: Job
metadata:
  name: pre-sync
  namespace: argocd-webhooks
  annotations:
    argocd.argoproj.io/hook: PreSync # 钩子执行策略
    argocd.argoproj.io/hook-delete-policy: BeforeHookCreation # 钩子删除策略
spec:
  template:
    spec:
      containers:
      - name: sleep
        image: alpine:3.8
        command: ["sleep", "5"]
      restartPolicy: Never
  backoffLimit: 0
  • 同步后钩子
[root@gitlab webhook-argocd]# cat post.sync.yaml 
apiVersion: "batch/v1"
kind: Job
metadata:
  name: app-wxwork
  namespace: argocd-webhooks
  annotations:
    argocd.argoproj.io/hook: PostSync
    argocd.argoproj.io/hook-delete-policy: HookSucceeded
spec:
  template:
    spec:
      containers:
      - name: wxwork-application
        image: curlimages/curl:latest
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh", "-c"]
        args: # 此钩子构建完成将会给钉钉发送消息
        - "curl 'https://oapi.dingtalk.com/robot/send?access_token=c82ba73f86f5fb9b24c9dc2c8ef6311a26c8ebbaa08e6a413cd8f909fae75f96' -X POST -H 'Content-Type: application/json' -d '{\"msgtype\": \"text\", \"text\": {\"content\": \"Hello Argocd test\"}}'"
      restartPolicy: Never
  backoffLimit: 1

2.2、Argo CD创建Application

在这里插入图片描述

  • Application Name:argocd-hooks

  • Project Name:default

  • SYNC POLICY:Manual (仅进行演示所有使用手动同步)
    在这里插入图片描述

  • SOURCE

    • Repository URL:http://192.168.93.102/root/webhook-argocd.git
    • Revision:HEAD
    • Path:.
  • DESTINATION

    • Cluster URL:https://192.168.93.145:6443
    • Namespace:argocd-webhooks
      在这里插入图片描述

2.3、同步(SYNC)

在这里插入图片描述

在这里插入图片描述

  • post钩子构建完成自动删除
    在这里插入图片描述

  • 构建期间可以仔细观察Argo CD的UI界面,因为我们的策略是pre-sync钩子只会在下次构建时删除旧钩子,post-sync钩子的策略是执行完毕立即删除

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐