华为云镜像服务IMS对接使用完全指南:从入门到自动化运维
1. 华为云镜像服务IMS概述
镜像服务(Image Management Service,简称IMS)是华为云提供的镜像生命周期管理工具。IMS不仅仅是镜像的存储仓库,更是连接计算资源与部署运维的关键桥梁。通过IMS,用户可以灵活便捷地使用公共镜像、私有镜像或共享镜像快速创建弹性云服务器,同时还能通过弹性云服务器或外部镜像文件创建私有镜像,实现业务环境的标准化交付与快速复制。
IMS的核心价值体现在以下四个维度:第一,标准化交付能力——将预装好应用软件和系统配置的云服务器制作为私有镜像,可以实现多台云服务器的一致化部署,避免重复安装配置带来的差异与错误。第二,数据迁移与灾备支撑——无论是将线下物理服务器或虚拟机迁移到华为云,还是在不同区域之间进行数据备份,IMS都提供了可靠的镜像制作与复制能力。第三,跨团队协作支持——通过镜像共享功能,不同账号或同一账号下的不同项目团队可以复用彼此构建好的镜像资源。第四,全流程自动化能力——IMS提供完整的RESTful API接口,配合官方提供的多种语言SDK,可以将镜像管理无缝集成到CI/CD流水线中。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
2. IMS核心概念与基本操作
2.1 镜像类型
IMS支持四种镜像类型:系统盘镜像包含操作系统和预装软件,用于创建云服务器的系统盘,是最常用的镜像类型。数据盘镜像仅包含业务数据,用于创建云硬盘,适合数据迁移和备份场景。整机镜像同时包含系统盘和数据盘,适合整体环境备份与迁移,可通过弹性云服务器、云服务器备份或云备份创建。ISO镜像则用于从光盘镜像文件安装操作系统,但ISO镜像在创建云服务器后仅能用于装机,功能受限。
2.2 支持的镜像格式
华为云IMS对外部镜像文件的格式有明确要求。支持的格式包括:vmdk、vhd、qcow2、raw、vhdx、qed、vdi、qcow、zvhd2和zvhd,覆盖了主流虚拟化平台和云平台的镜像格式。其中,zvhd2是华为云推荐的格式,在导入效率和兼容性方面表现最佳。如果现有镜像文件是其他格式,需要使用转换工具进行格式转换后再上传。
2.3 区域与项目概念
镜像是区域性资源,私有镜像归属于其被创建时的区域。区域(Region)从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、镜像等公共服务。可用区(AZ)是一个或多个物理数据中心的集合,一个Region中的多个AZ间通过高速光纤相连。项目用于隔离物理区域间的资源,企业项目则是项目的升级版,针对企业不同项目间的资源进行分组和管理。在调用API时,需要明确指定终端节点(Endpoint),不同服务不同区域的终端节点不同。
3. 创建私有镜像的四种方式
3.1 通过云服务器创建镜像
这是最常用的镜像创建方式,适用于将已配置好的云服务器环境固化为镜像模板。操作步骤如下:登录IMS控制台,单击右上角的创建私有镜像,进入创建私有镜像页面。在镜像类型和来源区域,选择镜像的创建方式,镜像源选择云服务器,从列表中选择相应的云服务器。使用云服务器创建私有镜像时,请确保云服务器处于关机状态。镜像创建过程涉及KVM虚拟化平台原生驱动的安装、OS内核的加载以及grub引导配置等环节,处理时间可能会比较长。
通过API方式使用云服务器创建镜像的请求示例如下:
POST https://IMS的Endpoint/v2/cloudimages/action
Content-Type: application/json
X-Auth-Token: ${token}
{
"name": "ims_test",
"description": "从云服务器制作的镜像",
"instance_id": "877a2cda-ba63-4e1e-b95f-e67e48b6129a",
"tags": ["production", "web-server", "v1.0"]
}请求响应成功后返回job_id,需要通过异步任务查询接口查询任务执行状态,当状态为SUCCESS时表示镜像创建成功。
3.2 通过外部镜像文件导入
将本地或第三方云平台上的镜像迁移到华为云,是IMS最常用的场景之一。整个过程分为三个步骤:准备镜像文件、上传到OBS、导入IMS生成私有镜像。
第一步:准备镜像文件。确认镜像文件格式符合IMS要求(vhd、vmdk、qcow2、raw等)。对于Windows镜像,建议安装Cloudbase-Init工具以便在云服务器创建时进行初始化配置,安装virtio驱动以保证磁盘和网络的性能。对于Linux镜像,需要设置网卡属性为DHCP、清理网络规则文件、安装并配置Cloud-Init工具、修改grub文件磁盘标识方式为UUID。
第二步:上传到OBS。将准备好的镜像文件上传至华为云OBS个人桶中。如果使用快速导入功能,对于raw格式需要生成位表文件并与镜像文件一同上传。
第三步:导入IMS。登录IMS控制台,单击创建私有镜像,创建方式选择导入私有镜像。从列表中选择保存镜像文件的OBS桶,再选择对应的镜像文件。镜像类型可选择系统盘镜像或数据盘镜像。常规导入最大支持128GB,快速导入最大支持1TB。导入过程中系统会在后台进行驱动注入等优化操作,因此相比快速导入耗时会长一些。
3.3 通过云备份创建整机镜像
使用弹性云服务器、云服务器备份或云备份可以创建带数据盘的整机镜像。这种方式适合需要对整个服务器环境(包括系统盘和数据盘)进行完整备份和迁移的场景。通过云服务器备份创建的整机镜像,仅支持对当前区域生成的备份执行跨区域复制操作。
3.4 通过ISO文件创建系统盘镜像
将ISO文件注册为ISO镜像后,无法直接用于创建云服务器,必须完成操作系统及驱动安装做成系统盘镜像后才能使用。ISO镜像在镜像服务页面所创建的云服务器只建议用来装机,部分功能受限。ISO创建镜像必须包含os_version信息。
4. 镜像管理全流程操作
4.1 镜像共享
镜像共享功能允许用户将私有镜像共享给其他华为云账号使用。共享镜像不会生成新的镜像,接受者所看到的镜像和源镜像拥有相同的ID,镜像所有者仍为共享者。
操作步骤如下:用户A登录IMS控制台,单击私有镜像页签进入镜像列表页面,勾选需要共享的私有镜像,单击镜像列表上方的共享。在共享镜像窗口中,输入用户B的项目ID。用户B登录IMS控制台后,在共享镜像页签查看被共享的镜像。用户B可以使用共享镜像创建云服务器,在选择镜像时选择共享镜像即可。
共享镜像的约束与限制:当前仅支持数据盘镜像和系统盘镜像复制,仅支持区域内复制,复制的镜像大小不超过128GB,暂不支持复制为加密镜像。
4.2 跨区域复制镜像
镜像是一种区域性资源,如果需要在其他区域使用某一私有镜像,可以通过跨区域复制镜像功能实现。跨区域复制适用于跨区域部署服务器或者跨区域备份数据,常和共享镜像结合使用以达到跨区域跨账号复制镜像的目的。
操作约束与限制:跨区域复制镜像的目的区域不能与镜像源区域相同,加密镜像不支持跨区域复制。跨区域复制镜像单租户并发复制不能超过5个私有镜像。部分区域用于跨区域复制的镜像不能超过300GB,其他区域不能超过128GB。
跨区域复制需要提供IAM委托,该委托必须具备目的镜像区域的跨区域复制镜像权限。例如用户想从Region A复制镜像到Region B,则添加的委托必须具备Region B的IMS CrossCopyAgencyPolicy权限。跨区域复制镜像不保证时效性,所需时间与网络速度、镜像大小、并发任务数等因素有关。
对于整机镜像,各区域支持的跨区域复制范围存在差异。对于不支持跨区域复制的情况,可以使用整机镜像创建云服务器,再分别创建系统盘镜像和数据盘镜像,然后跨区域复制到目标区域。
4.3 导出镜像到OBS
导出功能可以将控制台上的私有镜像导出到OBS个人桶,下载到本地后可供其他云平台使用。导出镜像的流程适用于将云上的服务器系统及软件环境复制到线下集群或私有云环境使用。
操作步骤:登录IMS控制台,在私有镜像列表中,在需要导出的镜像所在行,单击操作列的更多 > 导出。在导出镜像对话框中填写参数。镜像文件必须小于等于128GB,大于128GB时请使用快速导出功能。在导出时可以指定导出的镜像格式,目前支持qcow2、vmdk、vhd和zvhd。快速导出不可指定导出格式,但可以在导出后使用镜像转换工具将镜像转换为需要的格式。
以下镜像不支持导出功能:公共镜像、整机镜像、ISO镜像、Windows/SUSE公共镜像所创建的私有镜像、由市场镜像创建的云服务器所生成的私有镜像。
4.4 修改镜像属性与标签管理
为了方便管理私有镜像,可以根据需要修改镜像的名称、描述信息、最小内存、最大内存,以及是否支持网卡多队列、SRIOV驱动等高级功能。可以为私有镜像贴上标签,便于管理和搜索。可以在创建私有镜像时添加标签,也可以在镜像创建完成后在镜像详情页添加标签,最多可以给镜像添加10个标签。
5. IMS API对接与SDK开发
5.1 RESTful API概述
镜像服务提供了REST风格API,支持通过HTTPS请求调用。在调用镜像服务API之前,需要确保已经充分了解镜像服务相关概念。镜像服务还提供多种编程语言的SDK供使用。
5.2 API认证鉴权
调用IMS API首先需要获取Token进行认证鉴权。通过IAM服务获取到的Token有效期为24小时,需要使用同一个Token鉴权时可以先将Token缓存,避免频繁调用。
获取Token的API调用示例:
POST https://iam.${region}.myhuaweicloud.com/v3/auth/tokens
Content-Type: application/json
{
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"name": "${username}",
"password": "${password}",
"domain": {
"name": "${domain_name}"
}
}
}
},
"scope": {
"project": {
"name": "${region}"
}
}
}
}获取Token后,在调用IMS API时需要在Request Header中增加X-Auth-Token。
5.3 创建镜像API调用
创建镜像的API为POST /v2/cloudimages/action。请求Body参数包括镜像名称(必填)、描述信息(非必填)、云服务器ID(使用云服务器创建时必填)、镜像标签列表(非必填)。
完整的创建镜像API调用流程:
# Step 1: 获取Token(参考上述认证示例)
# Step 2: 调用创建镜像API
POST https://ims.${region}.myhuaweicloud.com/v2/cloudimages/action
X-Auth-Token: ${token}
Content-Type: application/json
{
"name": "my-production-image",
"description": "生产环境Web服务器镜像",
"instance_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"tags": ["env:production", "role:web", "version:2.1.0"]
}
# Step 3: 响应返回job_id
{
"job_id": "job-1234567890abcdef"
}
# Step 4: 查询任务状态
GET https://ims.${region}.myhuaweicloud.com/v1/${project_id}/jobs/${job_id}
X-Auth-Token: ${token}查询job详情返回状态status为SUCCESS时表示私有镜像创建成功,body中可以获取到image_id。根据获取到的镜像ID可对镜像进行查询、删除、导出等操作。
5.4 查询镜像列表API
GET https://ims.${region}.myhuaweicloud.com/v2/cloudimages
X-Auth-Token: ${token}
# 支持分页参数
# ?limit=10&marker=image_id5.5 删除镜像API
DELETE https://ims.${region}.myhuaweicloud.com/v2/cloudimages/${image_id}
X-Auth-Token: ${token}5.6 Python SDK对接示例
华为云Python SDK支持Python 3.3以上版本。使用SDK前需要获取华为云租户账号的Access Key(AK)和Secret Access Key(SK),在华为云控制台我的凭证 > 访问密钥页面上创建和查看。
安装华为云Python SDK:
pip install huaweicloudsdkcore
pip install huaweicloudsdkimsPython SDK调用示例:
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkims.v1.region.ims_region import ImsRegion
from huaweicloudsdkims.v1 import *
# 配置认证信息
credentials = BasicCredentials(ak='${your_ak}', sk='${your_sk}', project_id='${your_project_id}')
# 创建IMS客户端
client = ImsClient.new_builder() \
.with_credentials(credentials) \
.with_region(ImsRegion.value_of('cn-north-4')) \
.build()
# 创建镜像请求
request = CreateImageRequest()
body = CreateImageRequestBody(
name='my-sdk-image',
description='通过Python SDK创建的镜像',
instance_id='a1b2c3d4-e5f6-7890-abcd-ef1234567890'
)
request.body = body
# 发送请求
response = client.create_image(request)
print(response.job_id)
# 查询任务状态
job_request = ShowJobRequest()
job_request.job_id = response.job_id
job_response = client.show_job(job_request)
print(job_response.status)SDK的请求参数、响应参数与对应的API一致。API Explorer可以自动生成SDK代码示例并提供调试功能。
6. IMS安全最佳实践
安全性是华为云与用户的共同责任。华为云负责云服务自身的安全,用户需要合理使用云服务提供的安全能力对数据进行保护。
6.1 加密镜像
可以创建加密镜像来提升数据安全性,加密方式为KMS的信封加密。通过外部镜像文件创建加密镜像时,将外部镜像文件上传至OBS个人桶,在导入私有镜像功能界面勾选KMS加密。通过加密弹性云服务器创建加密镜像时,如果弹性云服务器的系统盘已加密,那么使用该弹性云服务器创建的私有镜像也是加密的。未加密的镜像也可以通过复制功能创建出一个新的加密镜像。共享加密镜像时,需确保接收方有加密镜像使用的密钥权限。
6.2 IAM权限管理
使用统一身份认证服务(IAM)可以对IMS资源进行精细的权限管理。可以根据企业的业务组织创建IAM用户,让员工拥有唯一安全凭证并使用IMS资源。根据企业用户的职能设置不同的访问权限,达到用户之间的权限隔离。建议不要直接使用账号进行日常管理工作,而是创建用户并使用用户进行日常管理工作。
6.3 镜像安全配置注意事项
通过镜像文件注册私有镜像时,如果填写的系统磁盘容量小于镜像文件内部的系统盘容量,会导致创建镜像失败。使用镜像创建云服务器时,系统盘大小必须大于等于镜像的系统盘大小。ZVHD2格式镜像具备延迟加载特性,如果当前环境不支持延迟加载特性,则创建ZVHD2格式镜像不成功。
7. 常见问题解答
问题1:通过云服务器创建镜像时,云服务器需要关机吗?
是的,使用云服务器创建私有镜像时,请确保云服务器处于关机状态。这样可以保证镜像数据的完整性和一致性。
问题2:IMS支持导入哪些格式的外部镜像文件?
IMS支持导入的格式包括:vmdk、vhd、qcow2、raw、vhdx、qed、vdi、qcow、zvhd2和zvhd。其中zvhd2是华为云推荐的格式,在导入效率和兼容性方面表现最佳。
问题3:如何将镜像共享给其他华为云账号?
登录IMS控制台,在私有镜像列表勾选需要共享的镜像,单击共享按钮,输入接收方的项目ID即可。接收方需要在共享镜像页签查看并接受共享镜像。
问题4:跨区域复制镜像有哪些限制?
跨区域复制镜像的目的区域不能与源区域相同,加密镜像不支持跨区域复制,单租户并发复制不能超过5个私有镜像。部分区域镜像大小限制为300GB,其他区域限制为128GB。
问题5:Token的有效期是多久?调用IMS API时需要注意什么?
通过IAM服务获取到的Token有效期为24小时。需要使用同一个Token鉴权时可以先将Token缓存,避免频繁调用。调用API时需要在Request Header中增加X-Auth-Token。
问题6:哪些类型的镜像不支持导出功能?
公共镜像、整机镜像、ISO镜像、Windows和SUSE公共镜像所创建的私有镜像、由市场镜像创建的云服务器所生成的私有镜像,均不支持导出功能。



