容器镜像服务ACR为每个仓库提供了触发器的功能,帮助您在镜像构建成功后进行消息的推送。当镜像仓库的镜像版本有更新时,将根据设置的触发条件自动触发使用最新镜像部署应用。本文将演示如何在镜像构建成功后,自动触发容器服务上应用中心拉取新的镜像,并重新部署应用。

前提条件

已将应用镜像推送至容器镜像仓库。具体操作,请参见使用企业版实例推送拉取镜像

步骤一:创建应用

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,选择多集群 > 应用中心
  3. 应用中心页面单击创建应用
  4. 应用来源配置向导页面配置参数。
    1. 安装应用发布组件区域选择集群,然后单击开始安装
      说明 仅首次安装应用需要执行此步骤。
    2. 应用来源区域单击YAML模板
    3. 单击下一步
  5. 应用配置配置向导页面中设置参数。
    1. 设置应用名称应用描述
    2. 单击新建模板页签,然后单击右上角的通过YAML添加
    3. 将以下内容复制到文本框中,然后单击确定
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        creationTimestamp: null
        labels:
          app: demo
        name: demo
      spec:
        minReadySeconds: 5
        progressDeadlineSeconds: 60
        revisionHistoryLimit: 5
        selector:
          matchLabels:
            app: demo
        strategy:
          rollingUpdate:
            maxUnavailable: 1
          type: RollingUpdate
        template:
          metadata:
            annotations:
              prometheus.io/port: "9797"
              prometheus.io/scrape: "true"
            creationTimestamp: null
            labels:
              app: demo
          spec:
            containers:
            - image: liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:blue
              imagePullPolicy: IfNotPresent
              name: demo
              ports:
              - containerPort: 8080
                name: http
                protocol: TCP
              readinessProbe:
                initialDelaySeconds: 5
                tcpSocket:
                  port: 8080
                timeoutSeconds: 5
              resources:
                limits:
                  cpu: "2"
                  memory: 512Mi
                requests:
                  cpu: 100m
                  memory: 64Mi
      status: {}
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: demo-svc
      spec:
        selector:
          app: demo
        ports:
          - protocol: TCP
            port: 80
            targetPort: 8080
      ---
      apiVersion: extensions/v1beta1
      kind: Ingress
      metadata:
        name: demo
        labels:
          app: demo
      spec:
        rules:
          - host: app.demo.example.com
            http:
              paths:
                - backend:
                    serviceName: demo-svc
                    servicePort: 80
      ---

      image:使用容器镜像仓库中的镜像地址,本文以Blue版本的demo应用镜像为例。

    4. 单击下一步
  6. 发布配置配置向导页面中设置参数。
    1. 发布配置区域选择发布方式,可选全量发布灰度发布
      说明 第一次发布应用时只能选择全量发布,后续对应用进行更新迭代时,可以选择全量发布灰度发布
    2. 可选集群区域单击集群左侧的添加后,在目标集群区域可以看到选择的集群,然后在目标集群区域选择应用要发布的命名空间
      说明 如果没有开通公网访问的集群,需要为API Server绑定EIP,以开启公网访问能力。
    3. 单击开始发布
  7. 发布确认对话框单击确定

    发布日志配置页面中可以看到发布应用的进度。

  8. 发布日志配置向导页面中单击完成

步骤二:在应用中心生成触发器

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,选择多集群 > 应用中心
  3. 应用中心页面单击步骤一创建的应用名称。
  4. 在应用详情页面右上角单击触发器
  5. 触发器面板单击创建,然后单击复制,复制触发器URL。
    说明 请妥善保管触发器URL,以免泄露。

步骤三:在ACR创建触发器

  1. 登录容器镜像服务控制台
  2. 在顶部菜单栏,选择所需地域。
  3. 在左侧导航栏,选择实例列表
  4. 实例列表页面单击目标企业版实例。
  5. 在企业版实例管理页面选择仓库管理 > 镜像仓库
  6. 镜像仓库页面单击步骤一创建应用时所使用的镜像仓库的名称。
  7. 在镜像仓库详情页面单击触发器,然后单击创建
  8. 创建触发器对话框设置触发器名称,输入步骤二复制的触发器URL,设置触发方式全部触发,单击确定
    容器镜像触发器支持全部触发表达式触发Tag触发。以下为3种触发方式介绍:
    • 全部触发:只要镜像版本有更新,就会触发触发器。
    • 表达式触发:基于正则表达式来进行镜像版本的过滤,只有当符合正则表达式的镜像版本才会触发触发器。
    • Tag触发:基于镜像版本列表来进行镜像版本的过滤,只有镜像版本在设置的镜像版本列表中才会触发触发器。
    说明 如果触发器执行异常,您可以在触发器页面单击目标触发器操作列的访问记录,在访问记录对话框Response Body中查看异常原因。

步骤四:触发应用部署

当镜像仓库的镜像版本有更新时,会自动触发使用最新镜像部署应用。

  1. 执行以下命令,登录步骤一创建应用时所使用的镜像仓库。
    说明 如果您企业版实例所在地域为杭州,则命令行中<企业版实例所在地域>为hangzhou。
    docker login --username=<镜像仓库登录名> <企业版实例名称>-registry.cn-<企业版实例所在的地域>.cr.aliyuncs.com
  2. 执行以下命令,给镜像设置标签。
    docker tag registry.cn-hangzhou.aliyuncs.com/acs/rollouts-demo:green liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:green
  3. 执行以下命令,推送Green版本镜像至步骤一创建应用时所使用的镜像仓库。
    docker push liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:green

结果验证

  1. 查看编排模板。
    镜像更新后,自动触发容器服务上应用中心拉取新的镜像并更新编排模板。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏选择市场 > 编排模板
    3. 模板列表页面单击步骤一创建的模板名称下的详情。在详情页面可以看到模板镜像已更新为最新的镜像。
  2. 获取应用的端点。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群管理页左侧导航栏中,选择网络 > 路由
    5. 路由页面查看demo的端点。
  3. hosts文件输入以下内容。
    <端点> app.demo.example.com 
  4. 在浏览器中访问app.demo.example.com

    浏览器显示以下页面,说明应用已由Blue版本更新为Green版本。

    结果验证