【GitOps】Argo CD高级操作钩子
Argo CD高级操作钩子摘要 本文介绍了Argo CD中的高级操作钩子(Hooks)功能。钩子允许在Kubernetes应用程序部署的不同阶段执行自定义操作,包括: PreSync(同步前) - 执行准备工作 Sync(同步中) - 执行配置修改 PostSync(同步后) - 执行清理或通知 SyncFailed(同步失败) - 执行回滚 文章详细说明了四种钩子删除策略,并提供了完整的YAML
·
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
资源,使用的是JOb
API -
钩子删除策略可以在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:
.
- Repository URL:
-
DESTINATION
- Cluster URL:
https://192.168.93.145:6443
- Namespace:
argocd-webhooks
- Cluster URL:
2.3、同步(SYNC)
-
post钩子构建完成自动删除
-
构建期间可以仔细观察Argo CD的UI界面,因为我们的策略是pre-sync钩子只会在下次构建时删除旧钩子,post-sync钩子的策略是执行完毕立即删除
更多推荐
所有评论(0)