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。
创建完成后,Argo CD 应用列表中显示 bookinfo 应用,其状态为 Healthy(绿色心形图标)且 Synced(绿色对勾图标),表示应用已成功同步部署至目标集群。单击bookinfo进入应用详情页面,APP HEALTH 显示 Healthy,CURRENT SYNC STATUS 显示 Synced。资源树中包含 Deployment(details-v1、productpage-v1、ratings-v1、reviews-v1、reviews-v2、reviews-v3)及其关联的 ReplicaSet 和 Pod(状态为 running 2/2),以及 DestinationRule(details、productpage、reviews)、Gateway(bookinfo-gateway)和 VirtualService(bookinfo)资源,均处于同步和健康状态。
-
-
在ASM控制台查看资源状态。
-
登录ASM控制台,在左侧导航栏,选择。
-
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。
-
在虚拟服务页面,查看创建的bookinfo。
-
-
在容器服务控制台查看资源状态。
-
登录容器服务管理控制台,在左侧导航栏选择集群列表。
-
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
-
查看创建的Deployment。页面显示6个Deployment均已创建成功,容器组数量均为1/1,分别为details-v1、productpage-v1、ratings-v1、reviews-v1、reviews-v2和reviews-v3。
-
-
访问ASM网关。
-
获取ASM网关地址。
-
登录ASM控制台,在左侧导航栏,选择。
-
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。
-
在入口网关页面,获取目标网关的服务地址。
-
-
在浏览器访问http://{您的ASM网关地址}/productpage。
访问效果如下,由于Istio bookinfo的Reviews有3个版本,目前未指定版本,因此每次刷新,右侧数据显示不同。页面成功展示 Bookinfo 示例应用,包含书籍 The Comedy of Errors 的详情信息(类型、页数、出版商、语言、ISBN 等)及两条书评(含星级评分),页面底部显示 Reviews served by: reviews-v3-xxx,表明 Reviews 服务由 v3 版本提供,说明通过 ASM 网关访问应用及 Istio 资源部署均已成功。
-
步骤五:部署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状态提示。此时 bookinfo 应用状态显示为 OutOfSync。
-
在弹出的面板上方,单击SYNCHRONIZE。
同步完成后,您可以在ASM控制台查看同步后创建的资源;在ACK控制台查看更新后的资源。具体操作,请参见在ASM控制台查看资源状态和在容器服务控制台查看资源状态。
-
-
验证访问效果。
-
未登录状态下,在浏览器访问http://{您的ASM网关地址}/productpage。
访问效果如下:固定为v1版本的Reviews。页面正常显示 BookInfo Sample 应用的产品详情页,包含书籍 The Comedy of Errors 的摘要、Book Details(Type: paperback、Pages: 200、Publisher: PublisherA、Language: English、ISBN-10: 1234567890、ISBN-13: 123-1234567890)以及 Book Reviews(两条评论),底部显示提供评论的微服务 Pod 实例名称(如
reviews-v1-55b668fc65-s48wm),表明应用已成功部署并可正常访问。 -
使用jason为用户名,任意密码进行登录。
访问效果:固定为v2版本的Reviews。登录成功后,页面右上角显示用户名 jason 及 sign out 链接,表明已成功以 jason 身份登录 BookInfo Sample 应用,页面展示书籍详情及带星级的用户评论。
-