本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
在您使用ECI伸缩组时,手动更新ECI实例中的容器镜像可能会成为一个耗时且易出错的任务。为了解决这一问题,您可以借助弹性伸缩服务集成的云效流水线功能,实现一键自动构建镜像、更新镜像和更新伸缩组中的实例。
实现原理
本方案通过集成云效的流水线组件,在您更新业务代码后,可以在伸缩组一键完成镜像的构建、更新和部署,具体实现流程如下:
- 云效流水线会将您配置的代码仓库的代码打包构建成Docker镜像。 
- 在打包构建好镜像后,将镜像发布到容器镜像仓库(ACR)。 
- 在完成镜像发布之后,云效流水线会通过系统运维管理(OOS),将您的镜像更新到您伸缩组实例中,同时您伸缩组实例配置来源中的镜像也会得到更新。 
更多云效的信息,请参见什么是云效。
准备工作
如果您使用RAM账号登录,请您确保您有以下权限。如何为RAM用户授权,请参见为RAM用户授权。
配置环境
为完成一键构建部署镜像到伸缩组,您需要先完成下述配置。
步骤一:创建阿里云容器镜像仓库
如果您已经有阿里云容器镜像仓库,可以跳过该步骤。
创建容器镜像仓库后,您构建好的镜像将会存储在此仓库。
- 登录容器镜像服务控制台。 
- 创建容器镜像实例。 - 在顶部菜单栏选择地域。 说明- 推荐容器镜像仓库的地域与伸缩组的地域保持一致,同地域可直接通过内网VPC域名访问。若不一致,需镜像仓库开通公网访问能力,且伸缩组下实例具备公网访问能力。 
- 在实例列表页面,点击个人实例,等待实例创建完成。  
- 创建完成后会进入如下界面,点击设置Registry登录密码,并按照界面提示完成密码设置。  
 
- 设置完成Registry登录密码之后,在左侧导航栏点击命名空间,点击创建命名空间,按照界面提示完成命名空间的创建。 
- 在左侧导航栏选择镜像仓库,然后点击创建镜像仓库。按照界面提示完成参数配置。主要参数说明如下: - 仓库信息 - 配置项 - 说明 - 示例 - 命名空间 - 选择步骤3创建的命名空间。 - ess_eci_test_namespace - 仓库名称 - 自定义仓库名称。 - ess_eci_test_repo - 仓库类型 - 选择私有。 - 私有 - 摘要 - 简要描述创建镜像仓库的用途。 - test 
- 代码源 - 代码源选择本地仓库,然后单击创建镜像仓库。 
 
- 创建完成后,会进入仓库的基本信息页面,找到公网地址并复制,供后续步骤使用。 
步骤二:创建ECI伸缩组
如果您已经创建好伸缩组,可以跳过该步骤。
您可以通过以下两种方式创建伸缩组:
- 通过YAML创建。 
- 通过表单创建。 
方式一:通过YAML创建
- 登录弹性伸缩控制台。 
- 在顶部菜单栏选择地域,在左侧点击伸缩组管理,点击创建伸缩组。 
- 在通过YAML创建页签下,完成伸缩组配置后点击创建。本示例采用以下配置。更多关于通过YAML创建伸缩组的配置说明,请参见通过Kubernetes YAML文件方式配置ECI类型的伸缩组。 - apiVersion: apps/v1 kind: Deployment metadata: name: nginx-demo annotations: k8s.aliyun.com/ess-scaling-group-name: ess-eci-test k8s.aliyun.com/ess-scaling-group-min-size: 0 k8s.aliyun.com/ess-scaling-group-max-size: 5 spec: selector: matchLabels: app: nginx-demo replicas: 0 template: metadata: labels: app: nginx-demo annotations: k8s.aliyun.com/eci-with-eip: false spec: containers: - name: nginx image: registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:latest ports: - containerPort: 80 name: http - containerPort: 443 name: https resources: requests: memory: 0.05Gi cpu: 50m limits: memory: 1Gi cpu: '1'警告- 如果您已有业务镜像,您可以将镜像修改为您的业务镜像。如果没有,请使用示例里的镜像,后续步骤运行流水线会自动替换该镜像。镜像为空将无法创建伸缩组。 - 参数说明: - 参数名 - 说明 - 示例 - k8s.aliyun.com/ess-scaling-group-name - 伸缩组名称 - ess-eci-test - k8s.aliyun.com/ess-scaling-group-min-size - 组内最小实例数。当伸缩组的当前实例数小于伸缩最小实例数时,弹性伸缩服务会自动添加实例,使得伸缩组的当前实例数等于伸缩最小实例数。 - 0 - k8s.aliyun.com/ess-scaling-group-max-size - 组内最大实例数。当伸缩组的当前实例数大于伸缩最大实例数时,弹性伸缩服务会自动移出实例,使得伸缩组的当前实例数等于伸缩最大实例数。 - 5 - k8s.aliyun.com/eci-with-eip - 是否自动创建并绑定EIP - false 
方式二:通过表单创建
- 登录弹性伸缩控制台。 
- 在顶部菜单栏选择地域。 
- 创建伸缩组。 - 在左侧点击伸缩组管理,点击创建伸缩组。 
- 在通过表单创建页签下,完成伸缩组配置,然后点击创建按钮。本示例采用以下配置,更多关于伸缩组的配置说明,请参见创建伸缩组。 - 配置项 - 说明 - 示例 - 伸缩组名称 - 输入伸缩组名称。 - ess-eci-test - 伸缩组类型 - 选择ECI,表示伸缩组内的实例类型为ECI实例。 - ECI - 组内实例配置信息来源 - 先不指定自动创建实例的模板。伸缩组创建完成后,您需要继续创建伸缩配置。 - 从零开始创建 - 组内最小实例数 - 代表伸缩组最小有1个ECI实例。 - 0 - 组内最大实例数 - 代表伸缩组最大有5个ECI实例。 - 5 - 专有网络 - 该伸缩组下创建的ECS实例会在此专有网络下。 - vpc-test****-001 - 选择交换机 - 您可以配置多个可用区的交换机以提高扩容成功率。 - vsw-test**** 
 
- 为伸缩组创建伸缩配置。 - 找到刚刚创建的伸缩组,点击查看详情进入伸缩组详情页。 
- 在实例配置来源页签下,点击伸缩配置,点击创建伸缩配置按钮进入创建伸缩配置页。 
- 本实例采用以下配置,其他配置项均按默认配置,完成配置后点击配置确认,点击确认创建,更多关于创建伸缩配置的说明,请参见创建伸缩配置(ECI实例)。 - 配置项 - 说明 - 示例 - 付费模式 - 根据您的需求,选择付费模式。 - 按量付费 - 安全组 - 根据您的需求,选择安全组。 - sg-****oer - 输入您的容器名称。 - nginx - 选择容器的镜像和版本。 警告- 如果您已有业务镜像,您可以将镜像修改为您的业务镜像。如果没有,请使用示例里的镜像。镜像为空将无法创建伸缩组。 - 镜像名称:registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx 
- 镜像版本:latest 
 
- 在伸缩配置页签下找到刚才创建的伸缩配置,点击启用。 
 
步骤三:在弹性伸缩控制台配置云效流水线
配置云效流水线,使其可以自动完成镜像的打包、发布和部署。
- 在伸缩组管理页面,点击发布管理,点击使用云效发布。  
- 选择云效企业,点击下一页。 重要- 如果尚未创建云效企业,需要先点击创建企业,根据界面提示完成云效企业的创建。创建完成并选择企业后,请按照界面提示完成授权操作。 
- 配置流水线。 - 配置流水线源。在流水线源下,点击添加,选择示例代码源,点击添加。  说明 说明- 如果您已经有自己业务的代码源,您可以根据界面提示,选择您的代码仓库地址。 
- 添加镜像构建任务。 - 在镜像构建任务下,点击添加。 
- 在下,点击创建服务链接,会跳转到云效的服务链接管理界面,点击新建服务连接。  
- 选择容器镜像服务(ACR),点击下一步,选择服务授权(若没有,点击新建会跳转到授权页),点击创建。 
- 回到镜像构建任务页面,在选择服务连接参数下选择之前创建的链接服务,在镜像仓库参数下选择之前创建的镜像仓库,点击添加。  
 
- 添加部署任务。 - 在部署任务下,点击添加,在选择服务连接配置下,点击创建服务链接。  
- 服务连接类型选择弹性伸缩(ESS),点击下一步,点击创建。 
- 在部署镜像配置下,选择镜像构建并推送至阿里云镜像仓库个人版.镜像VPC地址,点击添加。 说明- 如果您伸缩组的Region和镜像服务的Region相同时,推荐优先选择镜像VPC地址,其他情况需要实例能够访问公网才能拉取镜像。 
 
- 点击完成新建。 
 
使用:一键构建镜像并部署到伸缩组
如果其他RAM用户需要使用该功能,请确保该RAM用户在您的云效企业下,同时具有该流水线的权限。且该RAM用户至少需要具有以下权限:
- 管理云效(RDC)的权限。 
- 访问控制(RAM)的只读权限。 
- 管理系统运维管理(OOS)的权限。 
在您更新代码后,点击云效发布的运行按钮,即可将新代码打包并部署到您的伸缩组。
- 准备工作。 - 已经完成环境配置。具体操作,可参见配置环境。 
- 已经更新了您的代码并推送到了代码仓库。 
 
- 一键构建镜像并部署。 - 进入伸缩组,点击发布管理页签,点击使用云效发布页签,点击运行按钮,此时运行记录列表里会新增一条记录。  
- 在运行记录列表,点击详细按钮查看流水线详细信息,等待流水线执行完毕。流水线执行结束后,您的伸缩组中的实例和伸缩配置将会自动更新,相应地,新扩容出的实例也将采用新镜像。  - 在实例配置来源页签下,找到正在生效的伸缩配置,点击修改进行伸缩配置的检查。核实伸缩配置中的是否已更新。 
- 手动触发一次扩容,在实例列表页签下点击新扩容出的ECI实例,确认新加入的ECI实例采用新镜像。 
- 如果伸缩组存在正在运行的ECI实例,您可以在实例列表页签下点击该ECI实例的名称,进入实例详细页面,确认已有ECI实例镜像已更新。