本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
在您使用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实例镜像已更新。