ArgoCD主要用于监听Git仓库中应用编排的变化,与集群中应用真实运行状态进行对比,自动或手动同步拉取应用编排的变更到部署集群中。阿里云服务网格ASM中集成ArgoCD,进行应用程序的发布和更新,降低运维成本。本文介绍如何通过ArgoCD实现GitOps。
前提条件
- 已创建Istio版本≥1.12.4.50的ASM实例。具体操作,请参见创建ASM实例。
- 已创建Kubernetes托管版集群。具体操作,请参见创建Kubernetes托管版集群。
- 已添加集群到ASM实例。具体操作,请参见添加集群到ASM实例。
- 已创建Git仓库。
背景信息
GitOps是云原生应用程序实现持续部署的一种方式。阿里云服务网格ASM集成ArgoCD进行应用程序的发布和更新,实现GitOps。开发者提交YAML编写的应用程序定义(Deployment、Service)和流量管理(VirtualService、Gateway、DestinationRule)到Git仓库。ArgoCD监控集群中应用程序当前的Deployment、Service、VirtualService等资源的状态,与Git仓库中的资源期望编排进行比较,以Git仓库中的内容为基准,当Git仓库发生变更时,支持自动或手动同步和部署应用程序。

步骤一:安装ArgoCD
您可以选择手动安装ArgoCD或使用阿里云容器服务ACK应用中心内置的ArgoCD功能。下文以手动安装的ArgoCD与ASM集成为例,实现GitOps。步骤二:启用ASM的数据面KubeAPI访问能力
由于阿里云服务网格ASM是一个托管Istio兼容的控制平面,ArgoCD管理的服务网格ASM控制平面和数据平面(容器服务ACK)不在同一个Kubernetes集群环境中,因此需要在ASM中启用数据平面KubeAPI访问,ArgoCD才能像访问ACK集群的资源一样访问ASM集群中的Istio资源。
- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
- 在基本信息区域的启用数据面KubeAPI访问右侧,单击启用。
- 在弹出框中,单击确认。
步骤三:创建ASM网关
步骤四:通过ArgoCD部署Istio资源
Istio资源可以定义为Kubernetes清单,并推送到用于部署应用程序K8s编排的Git仓库中。
步骤五:部署GitOps
配置流量规则,访问http://{您的ASM网关地址}/productpage,未登录时只显示v1版本的Reviews,使用jason为用户名登录时,显示v2版本的Reviews。
- 修改本地VirtualService和Deployment YAML文件。
- VirtualService YAML修改如下:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - match: - headers: end-user: exact: jason route: - destination: host: reviews subset: v2 - route: - destination: host: reviews subset: v1 ---
- Deployment YAML修改如下:
apiVersion: apps/v1 kind: Deployment metadata: namespace: argocd name: reviews-v1 labels: app: reviews version: v1 spec: replicas: 2
- VirtualService YAML修改如下:
- 执行以下命令,将Reviews-v1添加到Git仓库。
git add * git commit -m "reviews-v1" git push
- 同步Git配置到集群。如果您开启了ArgoCD的自动同步功能,会自动同步Git的配置到集群,如果没有,您可以手动进行同步操作,具体步骤如下:
- 验证访问效果。