通过镜像构建服务(ImageBuilder)导入镜像

当您从其他云平台、虚拟机或物理机迁移上云时,导入的镜像可能因缺少驱动或配置异常而无法正常启动。本文介绍如何使用云服务器ECS的镜像构建服务(ImageBuilder),在导入镜像的同时对其进行自动化检测、修复、定制和分发,以确保镜像在阿里云环境的兼容性和稳定性。

核心优势

相较于常规的镜像导入方式,通过镜像构建服务导入镜像为您提供了一个更强大、自动化的镜像处理流水线,确保最终生成的镜像是高质量且标准化的。其核心优势体现在以下几个方面:

  • 自动化修复:通过原始镜像创建中转实例,再通过实例进行离线修复,安装云上必要的一些组件。避免由于驱动缺失、配置异常带来的实例启动耗时长、初始化失败等问题。

  • 自动安装云助手:通过镜像构建修复镜像时,可自主选择是否安装云助手,帮助您更高效地管理和操作实例。

  • 简化导入流程:支持自动检测源镜像中是否安装NVMe驱动,并设置对应的镜像管控属性,减少创建实例时因NVMe约束导致失败的可能性。

构建流程

镜像构建服务通过一个自动化的多阶段流程来处理镜像。即使流程中的测试或分发阶段失败,在构建阶段生成的目标镜像依然可用。整体构建流程如下,例如错误处理等部分逻辑没有在图中展现。

image.jpeg

流程阶段

行为说明

注意事项

导入

如果源镜像是OSS中的文件,系统会先调用常规的导入镜像功能,生成一个临时的自定义镜像。

构建完成后,导入的原始镜像会默认被删除。如果需要在构建失败时保留,可以指定ImportImageOptions.RetainImportedImage=true

准备

创建构建所需的临时网络资源VPC、交换机、安全组(若无指定使用的安全组时创建)和一台中转实例。

如果需要系统自动创建临时的网络资源,需要确保有足够的配额

检测修复(当模板显式指定了RepairMode 或者源镜像不是公共镜像时执行

若指定了RepairMode,则进入修复模式,按照修复项进行修复,并安装云助手,否则进入检测模式,仅安装云助手。

如果发现镜像为无效镜像或者无法使用时,则会终止构建。

该阶段会创建一台临时实例,系统会将中转实例的磁盘挂载到临时实例,进行检测和修复,会产生对应的实例费用。

构建

在中转实例上,依次执行您在镜像模板中定义的各个镜像组件命令。所有命令执行完毕后,系统会基于当前中转实例的状态创建一个新的自定义镜像,即最终的目标镜像。

如果有构建命令失败,则会终止构建。

如果源镜像不携带云助手,默认会在创建镜像前卸载检测修复阶段安装的云助手,以保证镜像一致性。若需要保留镜像中的云助手,可在镜像模板中指定AdvancedOptions.RetainCloudAssistanttrue。

测试 (当镜像模板中设置了测试模板时执行

验证构建出的镜像是否符合预期。如果模板中定义了测试流程,系统会使用上一步生成的目标镜像创建一台新的测试实例,并使用云助手执行测试组件中的命令。

如果有测试命令失败,则会终止构建,并且状态为测试失败。
  • 安装云助手时会使用另一台临时实例进行离线安装,因此在测试阶段最多会创建两台实例,会产生实例费用。

  • 即使测试失败,构建阶段产生的目标镜像也不会被删除,您仍然可以使用,若不再使用需手动进行删除。

分发(当镜像模板中指定了需要共享的其它阿里云账号或者需要复制的其他地域时执行

将构建的镜像复制到指定的地域,并在每个地域都共享给指定的阿里云账号。

如果因为一些未知原因共享或者复制失败,状态会变为部分成功,这意味着您构建的镜像是可用的,但需要手动进行复制和共享。

无。

回收

释放并删除在整个构建过程中创建的所有临时资源,包括实例、磁盘、网络资源和临时源镜像等。

重要

请勿手工使用临时的网络资源创建新的实例,可能会导致资源清理失败,或者影响您的业务。

如果清理失败了,构建状态会变为部分成功,建议根据构建日志确认是否有残留的资源。

使用须知

  • 费用:镜像构建服务(ImageBuilder)本身免费。但构建流程会先导入一个镜像,再基于该镜像进行修复,创建一个新的镜像,因此整个过程中会产生2个镜像,但导入的原始镜像会被删除。流程中会自动创建和使用一些按量付费的临时资源(如ECS实例、VPC、快照等),这些资源会产生费用。任务结束后,临时资源会自动释放。详情请参考云服务器ECS定价页

  • 权限

    • 首次使用:系统会引导您创建名为AliyunServiceRoleForECSImageBuilder的服务关联角色(SLR),以授予镜像构建服务访问您其他云资源的权限。您可以参考管理镜像构建服务关联角色添加权限。

    • RAM用户:如果使用RAM用户操作,需要为其授予CreateImagePipelineStartImagePipelineExecutionDescribeImagePipelineExecutions权限。

  • 配额:镜像构建过程会临时占用您账户下的资源配额(如VPC、自定义镜像、安全组、构建模板等)。请在执行任务前,前往云服务器ECS配额列表检查并确保相关配额充足。

操作步骤

步骤一:准备并上传镜像文件至OSS

为确保镜像能被ECS服务访问和处理,您需要先将镜像文件上传到对象存储OSS。

  1. 请务必参考导入镜像必读文档,检查并确保您的镜像文件满足所有格式和配置要求,否则可能导致导入失败或实例无法启动。

  2. 将准备好的本地镜像文件上传到OSS Bucket中,并获取该文件的访问URL。具体操作请参见控制台上传文件

步骤二:在ECS控制台导入自定义镜像

  1. 访问ECS控制台-镜像。在页面左侧顶部,选择目标资源所在的资源组和地域。

  2. 镜像页面右上角,选择导入镜像。

  3. 导入前准备配置向导页面,确认导入镜像的准备工作已完成,单击下一步,然后单击继续导入

  4. 导入镜像文件配置向导页面,勾选检测后执行修复,勾选后会新增以下选项。

    • 修复后镜像名称:为最终生成的新镜像设置一个易于识别的名称,表明它是一个经过修复的、可用的镜像。

      • 长度:2~128个字符。

      • 开头:不能以特殊字符或数字开头。

      • 允许字符:可包含小写字母、数字以及特殊字符“.”、“_”、“-”。

    • 安装云助手:建议勾选。云助手是实现ECS实例自动化运维和管理的关键组件。

    • 删除源镜像:建议勾选。系统会先将您的OSS文件导入为一个临时的源镜像,然后基于它构建出修复后的新镜像。勾选此项可在任务成功后自动删除该临时源镜像,节约镜像配额和存储成本。

    image.png

  5. 信息确认无误后,单击确定导入

步骤三:查看构建任务与最终镜像

单击确定导入后,系统将自动创建一个镜像构建任务。整个过程比常规导入耗时更长,请耐心等待。

  1. 过程解读

    • 首先,在自定义镜像列表中,您会看到一个状态为创建中的镜像,这是从OSS文件直接导入的临时源镜像。

    • 随后,系统基于该源镜像开始执行修复和构建流程。完成后,您会在列表中看到第二个镜像,其名称是您在修复后镜像名称字段中填写的这个镜像是您应该使用的最终产物。image.png

    • 如果勾选了删除源镜像,任务成功后临时源镜像将被自动删除。

  2. 查看任务

    • 您可以导航至实例与镜像 > 镜像构建 > 模板任务页面。

    • 找到最新创建的任务,单击任务ID可以查看详细的构建阶段、日志和执行状态。

  3. 取消任务

    • 如果需要终止任务需按以下步骤操作

      1. 在左侧导航栏,选择实例与镜像 > 镜像构建 > 镜像模板。image.png

      2. 找到对应的模板,点击模板ID/模板名称,在模板构建历史中查看对应的构建任务,点击取消。

        image.png

        image.png

相关概念

  • 镜像模板 (ImagePipeline)

    定义了整个镜像构建的流程。它包括使用哪个源镜像、执行哪些构建和测试步骤(通过镜像组件定义)、以及如何分发(复制或共享)最终生成的镜像。一个模板可以被重复执行。

  • 镜像组件 (ImageComponent)

    定义了一系列在构建过程中需要在实例中执行的命令。一个组件通常对应一个独立的功能单元,例如“安装Nginx环境”或“执行安全基线检查”等。镜像组件中通过Action来定义具体的执行细节,可以参考镜像构建服务命令