容器镜像服务ACR为每个仓库提供了触发器的功能,帮助您在镜像构建成功后进行消息的推送。当镜像仓库的镜像版本有更新时,将根据设置的触发条件自动触发使用最新镜像部署应用。本文将演示如何在镜像构建成功后,自动触发容器服务上应用中心拉取新的镜像,并重新部署应用。
               
               
                  步骤一:创建应用
                  
                     - 登录容器服务管理控制台。
- 在控制台左侧导航栏中,选择。
- 在应用中心页面单击创建应用。
- 在应用来源配置向导页面配置参数。
                           - 在安装应用发布组件区域选择集群,然后单击开始安装。
                           
- 在应用来源区域单击YAML模板。
- 单击下一步。
 
- 在应用配置配置向导页面中设置参数。
                           - 设置应用名称和应用描述。
- 单击新建模板页签,然后单击右上角的通过YAML添加。
- 将以下内容复制到文本框中,然后单击确定。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
---
 关于部分配置参数的说明如下所示: 
                                    
                                    
                                       
                                       
                                    
                                    
                                       
                                          | 参数 | 说明 |  
                                          | minReadySeconds | 设置等待时间。集群在设置的等待时间后才进行升级。 |  
                                          | progressDeadlineSeconds | 定义升级过程中的最大时间。如果升级过程被暂停,该时间也会同步暂停,时间不会一直增长。 |  
                                          | revisionHistoryLimit | 定义升级最大记录数。 |  
                                          | rollingUpdate.maxUnavailable | 滚动更新期间最大多少个Pod不可用。 |  
                                          | image | 使用容器镜像仓库中的镜像地址,本文以Blue版本的demo应用镜像为例。 |  
 
- 单击下一步。
 
- 在发布配置配置向导页面中设置参数。
                           - 在发布配置区域选择发布方式,可选全量发布和灰度发布。
                                 
                                    
 说明 第一次发布应用时只能选择全量发布,后续对应用进行更新迭代时,可以选择全量发布或灰度发布。
                                     
 
 
- 在可选集群区域单击集群左侧的添加后,在目标集群区域可以看到选择的集群,然后在目标集群区域选择应用要发布的命名空间。
                                 
                                    
 说明 如果没有开通公网访问的集群,需要为API Server绑定EIP,以开启公网访问能力。
                                     
 
 
- 单击开始发布。
 
- 在发布确认对话框单击确定。
                     
- 在发布日志配置向导页面中单击完成。
步骤二:在应用中心生成触发器
                  
                     - 登录容器服务管理控制台。
- 在控制台左侧导航栏中,选择。
- 在应用中心页面单击步骤一创建的应用名称。
- 在应用详情页面右上角单击触发器。
- 在触发器面板单击创建,然后单击复制,复制触发器URL。
                     
步骤三:在ACR创建触发器
                  
                     - 登录容器镜像服务控制台。
- 在顶部菜单栏,选择所需地域。
- 在左侧导航栏,选择实例列表。
- 在实例列表页面单击目标企业版实例。
- 在企业版实例管理页面选择。
- 在镜像仓库页面单击步骤一创建应用时所使用的镜像仓库的名称。
- 在镜像仓库详情页面单击触发器,然后单击创建。
- 在创建触发器对话框设置触发器名称,输入步骤二复制的触发器URL,设置触发方式为全部触发,单击确定。容器镜像触发器支持 全部触发、 表达式触发和 Tag触发。以下为 3 种触发方式介绍:
                            
                              - 全部触发:只要镜像版本有更新,就会触发触发器。
- 表达式触发:基于正则表达式来进行镜像版本的过滤,只有当符合正则表达式的镜像版本才会触发触发器。
- Tag触发:基于镜像版本列表来进行镜像版本的过滤,只有镜像版本在设置的镜像版本列表中才会触发触发器。
 
                              
 说明 如果触发器执行异常,您可以在触发器页面单击目标触发器操作列的访问记录,在访问记录对话框Response Body中查看异常原因。
                               
 
步骤四:触发应用部署
                  当镜像仓库的镜像版本有更新时,会自动触发使用最新镜像部署应用。
                  
                     - 执行以下命令,登录步骤一创建应用时所使用的镜像仓库。
                           
                              
 说明 如果您企业版实例所在地域为杭州,则命令行中<企业版实例所在地域>为hangzhou。
                               
 docker login --username=<镜像仓库登录名> <企业版实例名称>-registry.cn-<企业版实例所在的地域>.cr.aliyuncs.com
 
 
- 执行以下命令,给镜像设置标签。docker tag registry.cn-hangzhou.aliyuncs.com/acs/rollouts-demo:green liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:green
 
- 执行以下命令,推送Green版本镜像至步骤一创建应用时所使用的镜像仓库。docker push liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:green
 
结果验证
                  
                     - 查看编排模板。镜像更新后,自动触发容器服务上应用中心拉取新的镜像并更新编排模板。 
                           - 登录容器服务管理控制台。
- 在控制台左侧导航栏选择。
- 在模板列表页面单击步骤一创建的模板名称下的详情。在详情页面可以看到模板镜像已更新为最新的镜像。
 
- 获取应用的端点。
                           - 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在路由页面查看demo的端点。
 
- 在hosts文件输入以下内容。<端点> app.demo.example.com 
 
- 在浏览器中访问app.demo.example.com 。
                           浏览器显示以下页面,说明应用已由Blue版本更新为Green版本。 