容器镜像服务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版本。