ArgoCD主要用于监听Git仓库中应用编排的变化,与集群中应用真实运行状态进行对比,自动或手动同步拉取应用编排的变更到部署集群中。当您需要提高Kubernetes环境中服务部署的效率和可追溯性时,可以在ASM集成ArgoCD实现GitOps。通过版本控制系统自动同步和部署应用,简化部署流程,保证配置一致性,使操作历史透明化,增强整个系统的可维护性和稳定性,降低运维成本。
前提条件
已创建ASM实例,且版本为1.12.4.50及以上。具体操作,请参见创建ASM实例。
已添加集群到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仓库中。
创建bookinfo应用示例。
在ArgoCD管理界面,单击NEW APP,进行如下配置。
在GENERAL区域,配置Application为bookinfo,Project为default,选中PRUNE RESOURCES。
在SOURCE区域,配置Repository URL为https://github.com/AliyunContainerService/asm-labs.git,Revision为argocd-asm,Path为argo-cd/bookinfo。
在DESTINATION区域,配置Cluster URL为https://kubernetes.default.svc,Namespace为default。
配置完成,单击页面上方的CREATE。
创建完成后,在ArgoCD管理界面,即可查看bookinfo应用状态。单击bookinfo,即可查看创建的资源状态。
在ASM控制台查看资源状态。
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
在虚拟服务页面,查看创建的bookinfo。
在容器服务控制台查看资源状态。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
查看创建的Deployment。
访问ASM网关。
获取ASM网关地址。
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择
。在入口网关页面,获取目标网关的服务地址。
在浏览器访问http://{您的ASM网关地址}/productpage。
访问效果如下所示,由于Istio bookinfo的Reviews有3个版本,目前未指定版本,因此每次刷新,右侧数据显示不同。
步骤五:部署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
执行以下命令,将Reviews-v1添加到Git仓库。
git add * git commit -m "reviews-v1" git push
同步Git配置到集群。
如果您开启了ArgoCD的自动同步功能,会自动同步Git的配置到集群,如果没有,您可以手动进行同步操作,具体步骤如下:
在ArgoCD管理界面的bookinfo卡片中,单击SYNC。
当文件发生变更时,在bookinfo卡片的Status右侧会出现OutOfSync状态提示。
在弹出的面板上方,单击SYNCHRONIZE。
同步完成后,您可以在ASM控制台查看同步后创建的资源;在ACK控制台查看更新后的资源。具体操作,请参见在ASM控制台查看资源状态和在容器服务控制台查看资源状态。
验证访问效果。
未登录状态下,在浏览器访问http://{您的ASM网关地址}/productpage。
访问效果如下所示,固定为v1版本的Reviews。
使用jason为用户名,任意密码进行登录。
访问效果如下所示,固定为v2版本的Reviews。