ASM集成ArgoCD实现GitOps

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

您可以选择手动安装ArgoCD或使用阿里云容器服务ACK应用中心内置的ArgoCD功能。下文以手动安装的ArgoCD与ASM集成为例,实现GitOps。

  • 手动安装ArgoCD,请参见ArgoCD

  • 容器服务ACK应用中心具有内置的ArgoCD,可以避免您手动安装ArgoCD。ACK应用中心允许检查应用程序状态,可以使用Git仓库和Helm Chart将应用程序版本部署到Kubernetes集群,进行回滚和发布应用程序版本。更多信息,请参见应用中心概述

步骤二:启用ASM的数据面KubeAPI访问能力

由于阿里云服务网格ASM是一个托管Istio兼容的控制平面,ArgoCD管理的服务网格ASM控制平面和数据平面(容器服务ACK)不在同一个Kubernetes集群环境中,因此需要在ASM中启用数据平面KubeAPI访问,ArgoCD才能像访问ACK集群的资源一样访问ASM集群中的Istio资源。

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

  2. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理

  3. 基本信息区域的启用数据面KubeAPI访问右侧,单击启用启用数据面KubeAPI访问

  4. 在弹出框中,单击确认

步骤三:创建ASM网关

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

  2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 入口网关

  3. 入口网关页面,单击创建。设置网关的基本信息,然后单击创建

    部分配置项说明如下,关于配置项的更多信息,请参见创建入口网关

    配置项

    说明

    名称

    本文以ingressgateway为例。

    网关类型

    选择南北向-入口网关类型。

    端口映射

    单击添加端口,配置如下协议和端口。

    • 配置协议HTTP服务端口80

    • 配置协议HTTPS服务端口443

步骤四:通过ArgoCD部署Istio资源

Istio资源可以定义为Kubernetes清单,并推送到用于部署应用程序K8s编排的Git仓库中。

  1. 创建bookinfo应用示例。

    1. 在ArgoCD管理界面,单击NEW APP,进行如下配置。

      • GENERAL区域,配置ApplicationbookinfoProjectdefault,选中PRUNE RESOURCESGENERAL

      • SOURCE区域,配置Repository URLhttps://github.com/AliyunContainerService/asm-labs.gitRevisionargocd-asmPathargo-cd/bookinfoSOURCE

      • DESTINATION区域,配置Cluster URLhttps://kubernetes.default.svcNamespacedefaultDESTINATION

    2. 配置完成,单击页面上方的CREATE

      创建完成后,在ArgoCD管理界面,即可查看bookinfo应用状态。查看应用状态单击bookinfo,即可查看创建的资源状态。查看创建的资源状态

  2. 在ASM控制台查看资源状态。

    1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

    2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择流量管理中心 > 虚拟服务

    3. 虚拟服务页面,查看创建的bookinfo。

  3. 在容器服务控制台查看资源状态。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

    3. 查看创建的Deployment。Deployment

  4. 访问ASM网关。

    1. 获取ASM网关地址。

      1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

      2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 入口网关

      3. 入口网关页面,获取目标网关的服务地址

    2. 在浏览器访问http://{您的ASM网关地址}/productpage

      访问效果如下所示,由于Istio bookinfo的Reviews有3个版本,目前未指定版本,因此每次刷新,右侧数据显示不同。访问ASM网关

步骤五:部署GitOps

配置流量规则,访问http://{您的ASM网关地址}/productpage,未登录时只显示v1版本的Reviews,使用jason为用户名登录时,显示v2版本的Reviews。

  1. 修改本地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
  2. 执行以下命令,将Reviews-v1添加到Git仓库。

    git add *
    git commit -m "reviews-v1"
    git push
  3. 同步Git配置到集群。

    如果您开启了ArgoCD的自动同步功能,会自动同步Git的配置到集群,如果没有,您可以手动进行同步操作,具体步骤如下:

    1. 在ArgoCD管理界面的bookinfo卡片中,单击SYNC

      当文件发生变更时,在bookinfo卡片的Status右侧会出现OutOfSync状态提示。文件变更

    2. 在弹出的面板上方,单击SYNCHRONIZE

      同步完成后,您可以在ASM控制台查看同步后创建的资源;在ACK控制台查看更新后的资源。具体操作,请参见在ASM控制台查看资源状态在容器服务控制台查看资源状态

  4. 验证访问效果。

    1. 未登录状态下,在浏览器访问http://{您的ASM网关地址}/productpage

      访问效果如下所示,固定为v1版本的Reviews。未登录状态

    2. 使用jason为用户名,任意密码进行登录。

      访问效果如下所示,固定为v2版本的Reviews。使用jason为用户名进行登录