ECS 镜像(Image)是云服务器ECS运行环境的模版,其重要性不言而喻。为了更好的提升用户云上体验,阿里云在镜像服务能力及生态能力方面做了很多工作,下文将整体上从两个方面介绍ECS镜像:
- 镜像产品能力,可以通过镜像做什么?ECS针对镜像提供了哪些服务能力?
- 镜像产品生态,围绕镜像和ECS衍生了哪些产品?通过这些产品可以对用户产生哪些价值?
带着这些问题,让我们开始ECS镜像之旅。
镜像产品
镜像分类
如上图所示,在新购ECS的选择镜像的时候有四个分类,分别为系统镜像,市场镜像,自定义镜像,共享镜像。那么它们有何区别?我们该如何选择镜像呢?下面我们先对四种镜像类型做一个对比:
镜像类型
|
可用性
|
安全性
|
费用
|
限制
|
系统镜像
|
阿里云官方维护,经过严格的测试及
生产验证,可用性非常高。
|
高
|
免费
|
无
|
市场镜像
|
优质的第三方服务商提供,经过阿里云审核后上架,同时有售后技术支持,可用性通常较高。
|
较高
|
收费/免费
|
无
|
自定义镜像
|
由用户基于快照创建或者通过镜像导入方式上传,质量完全由用户自己把控,可用性稍差。
|
中
|
免费(基于市场镜像做的自定义镜像除外)
|
quota限制
|
共享镜像
|
共享镜像源不会经过阿里云官方审核,稳定性及安全性得不到保证。
|
低
|
免费(基于市场镜像做的自定义镜像除外)
|
quota限制
|
如果从从实践方面考虑,选择镜像建议是:
- 只需要一个纯净的OS环境,选择官方系统镜像。
- 需要一个完整的软件环境,比如PHP架构 LAMP,选择镜像市场。
- 希望基于当前实例配置复制新实例,使用自定义镜像。
- 希望将镜像共享给其它云账号,使用共享镜像。
镜像产品能力
阿里云镜像为了满足用户多种业务场景的需求,从OpenAPI到控制台均提供了完备的产品能力。
创建镜像
用途:通过创建镜像将ECS系统及软件环境打包,从而实现快速复制ECS的能力;实现云上及线下镜像资源的同步。
目前用户制作镜像有两种方式,一种为基于阿里云的ECS实例及快照制作,另外一种是线下制作通过镜像导入上传到阿里云。
在线:通过ECS实例或系统盘快照制作
通过 CreateImage 创建镜像 , 支持三种方式
- 基于ECS实例创建
- 基于系统盘快照创建
- 基于系统盘+数据盘快照创建(全镜像)
离线:线下制作通过镜像导入上传
典型场景
应用扩容,扩容是最常见的运维操作之一,使用ECS做应用扩容的典型方式之一就是通过自定义镜像快速创建弹性ECS,大致过程如下:
- 用户基于一台运行中了其扩容应用的ECS的实例制作自定义镜像,镜像完成后,用户将会得到一份完整的包含了系统+软件的镜像数据。
- 使用自定义镜像创建所需的ECS,ECS启动成功后,引流到扩容ECS,比如挂载到类似slb的负载均衡设备。
混合云部署,典型的混合云场景是单一公有云+私有云,为了实现云上及线下资源同步,这个时候可以借助镜像导入导出能力,以公有云镜像导出到私有云为例,大致过程如下:
- 基于ECS或者系统盘镜像制作自定义镜像
- 将自定义镜像导出到OSS
- OSS下载镜像到私有云环境使用
导入镜像
用途:将线下的镜像导入到阿里云环境用于创建ECS
步骤:
- 建议参考 导入镜像注意事项 ,检测镜像是否满足需求。
- 建议安装cloud-init以保证镜像的hostname,yum源等配置正确,参考cloud-init安装手册。
- 检测镜像格式是否为vhd或者raw(qcow2格式即将支持),如果不是先将格式转换为vhd或者raw, 镜像转换可以参考 使用qemu-img转换镜像格式。
- 将镜像上传至同一地域的OSS,参考镜像导入手册进行导入操作。
- 控制台查看导入进度,进度100%后镜像可用,通常镜像的导入时间取决于镜像大小,请耐心等待。
为了保证导入镜像创建ECS的成功率,导入前需特别关注导入镜像注意事项
典型场景
- 上云,从计算资源从线下迁移到云上,可以借助导入自定义镜像到云上到方式,导入成功后即可通过镜像创建ECS。
导出镜像
用途:将阿里云自定义镜像在线下集群或者私有云环境使用,可以使用镜像导出功能。
步骤:
典型场景
将云上ECS的系统及软件环境复制到线下环境。
复制镜像
用途:跨地域使用相同的自定义镜像创建ECS
步骤:
- 创建自定义镜像 。
通过控制台/API将自定义镜像复制到指定地域
- 只支持复制到本地域外到其它中国大陆地域
- 复制到海外地域需要 提工单申请
- 复制操作成功后需耐心等待复制任务进度完成,耗时通常取决于镜像大小及地域。
镜像复制的本质是快照的复制,所以会占用用户快照容量quota,且快照目前已收费,会产生一定的快照费用。
典型场景
- 应用多地域部署,随之应用高可用及国际化的趋势,部署方式上通常需要多地域+海外节点部署,快速实现跨地域克隆ECS的方式之一就是通过镜像复制将一个镜像复制到多个地域,通过自定义镜像快速创建ECS。
共享镜像
用途:将镜像共享给其它阿里云账号
步骤:
- 镜像owner将镜像授权给指定阿里云账号,最多授权50个用户。
- 授权用户可以查询到共享镜像且使用其创建ECS
共享镜像本质上是自定义镜像,阿里云不保证完整性及安全性,用户使用共享镜像要谨慎!
修改镜像
目前仅支持镜像名称与描述的修改。
镜像生态
上文介绍了镜像的创建,导入,导出,复制等基础能力,下文将重点介绍ECS镜像生态体系。
用户数据与Cloudinit
用户数据
__用户数据即UserData(下文了为了简化统一使用UserData)__,是阿里云 ECS 提供的一种自定义实例启动行为及传入数据的功能,该功能兼容 Windows 实例及 Linux 实例,主要有两种用途:
- 作为实例自定义脚本,在启动实例时执行。
- 作为普通数据,将一定的信息传入实例中,您可以在实例中引用这些数据。
举个例子,使用UserData配置yum源,DNS,NTP,脚本如下。
#!/bin/sh
# Modify DNS
echo "nameserver 8.8.8.8" | tee /etc/resolv.conf
# Modify yum repo and update
rm -rf /etc/yum.repos.d/*
touch myrepo.repo
echo "[base]" | tee /etc/yum.repos.d/myrepo.repo
echo "name=myrepo" | tee -a /etc/yum.repos.d/myrepo.repo
echo "baseurl=http://mirror.centos.org/centos" | tee -a /etc/yum.repos.d/myrepo.repo
echo "gpgcheck=0" | tee -a /etc/yum.repos.d/myrepo.repo
echo "enabled=1" | tee -a /etc/yum.repos.d/myrepo.repo
yum update -y
# Modify NTP Server
echo "server ntp1.aliyun.com" | tee /etc/ntp.conf
systemctl restart ntpd.service
UserData将会在ECS启动时由Cloudinit进行调度配置。
当然我们在vm内部也可以访问到UserData,有以下两种方式:
- 访问 100.100.100.200/latest/user-data 获取
- 查看文件 /var/lib/cloud/instance/user-data.txt
Cloudinit
__Cloudinit组件__,开源项目,本质上是一系列python脚本及组件用来在云主机启动时配置ECS, 阿里云的系统镜像默认都安装了Cloudinit组件,我们也建议用户自定义镜像安装cloudinit。
可以理解为Cloudinit是UserData的执行引擎。
更多可以参考 userdata for ECS使用场景。
实例标识
实例标识提供了一种验证ECS身份的机制,用户可以通过验证ECS身份为阿里云ECS来做一些事情,比如镜像或者软件的license控制,更多可以参考 ECS实例标识介绍及实践。
迁云工具
可以帮助用户完成从线下物理资源或者其它云厂商到阿里云云资源到迁移,即同时支持p2v,v2v。同时迁云工具同时支持windows及linux系统,具体操作可以参考:使用迁云工具将服务器迁移至阿里云。
镜像商品
阿里云2014年5月开始支持第三方ISV上架镜像商品,镜像商品通常由行业内拥有丰富云服务器维护配置到服务商提供且经过阿里云的审核,无论从可用性及安全性均可以得到很好的保障,有以下优势:
- 按需定制软件环境,可以实现一键部署。
- 可用性及安全性高,阿里云审核保障镜像安全性。
- 镜像商品有完善的售后技术支持。
- 计费模式灵活,目前支持:后付费,按量计费;包月;包周
其它
后续我们还会陆续提供镜像检测,修复的能力,来帮助用户提升自定义镜像的成功率及降低制作成本。
下期看点
镜像制作工具Packer实践,我们一起来制作镜像!