文档

实例初始化

更新时间:

ECS实例创建过程中默认通过初始化工具自动执行一些预定义的配置任务,例如配置网络、设置主机名、执行自定义脚本等初始化配置,极大地简化了ECS实例的配置和部署过程。如果您希望在实例启动过程中不自动执行某些操作,可以根据需求自定义工具的初始化能力。本文介绍Linux实例和Windows实例的初始化工具以及使用说明。

Linux实例cloud-init工具

Linux实例通过开源工具cloud-init来自动初始化实例。更多信息,请参见cloud-init官方文档

cloud-init说明

  • 在cloud-init中,定义了一系列的模块(Modules)来完成需要执行的任务和配置。每个模块都有名称、运行频率、配置参数这三大要素,其中运行频率表示该模块该在什么时候运行,通常有两种运行频率:once-per-instance表示仅在实例首次启动时运行;always表示实例每次启动都运行。更多信息,请参见Module reference

  • cloud-init通过配置文件/etc/cloud/cloud.cfg控制实例的初始化行为,例如运行哪些模块。cloud-init可以从元数据服务中获取实例的实例ID、主机名等元数据信息。以Set Hostname模块为例,实例启动时,cloud-init会读取元数据的主机名信息,并将其设置为实例的主机名。

    说明

    在创建ECS实例时,您可以设置自定义数据为Cloud Config格式。实例启动时,cloud-init会按照Cloud Config设置的内容运行对应模块并执行配置任务,自动配置和部署ECS实例。更多信息,请参见实例自定义数据

安装cloud-init

  • 公共镜像

    阿里云所有公共镜像以及基于公共镜像创建的自定义镜像已默认安装cloud-init,通过公共镜像创建ECS实例会自动运行cloud-init,无需再手动安装。

  • 自定义镜像

    如果您是通过本地制作的自定义镜像创建ECS实例,且镜像未安装cloud-init,需要手动安装cloud-init,保证运行该镜像的ECS实例能成功完成初始化配置。具体操作,请参见安装cloud-init

自定义cloud-init的初始化功能

实例创建过程中会默认自动执行cloud-init的初始化功能。如果您是通过自定义镜像创建实例,且希望在实例启动过程中不自动执行某些操作,可以在制作镜像过程中自定义配置模块。

在cloud-init配置文件/etc/cloud/cloud.cfg中删除或修改文件中对应的模块及内容,禁用对应模块的初始化功能。例如cloud-init默认会在实例启动时自动设置主机名并更新/etc/hosts文件,如果您不希望修改主机名以及/etc/hosts配置文件,可以将cloud-init的默认配置preserve_hostname: false修改为preserve_hostname: true。更多信息,请参见保留主机名以及/etc/hosts配置文件

Windows实例(Vminit工具)

Windows实例通过Vminit工具来自动初始化。

Vminit说明

Vminit本质上是顺序执行了一系列插件来完成系统初始化配置,有些插件仅在创建实例后首次启动时执行一次,有些插件会在每次实例启动时执行。Vminit当前包含了10个插件,具体说明如下表所示。

插件名称

执行频率

插件功能

说明

Plugin_Main_StartDepend

仅在实例首次启动时执行。

启动Windows操作系统的IP Helper服务、DHCP客户端和Windows时间服务(W32Time) 。

Windows镜像默认开启这些系统服务,但是您可能在自定义镜像中禁用了这些服务,该插件会开启这些服务,避免因禁用系统服务导致网络和NTP设置异常。

Plugin_Main_OpenRDP

允许通过远程桌面连接服务RDP连接实例。

Windows系统默认开启RDP服务,对于禁用RDP服务的镜像,该插件会开启RDP。

Plugin_Main_NetworkClean

初始化网络配置,系统会使用DHCP方式自动获取实例中所有网卡的IP地址和DNS服务器设置。

如果实例中的IP Helper和DHCP服务未正确开启,可能导致该插件执行失败,从而无法通过内网访问实例元数据。

Plugin_Main_ConfigDisk

将随实例创建的数据盘进行初始化,包括创建分区、分配盘符等,且分区格式默认为GPT。

  • 在实例创建过程中,如果同时添加了新的数据盘,数据盘是未初始化的。为提高您的便利,本插件会自动对数据盘进行初始化并置为联机状态。

  • 在实例创建过程中,如果添加的是带有数据的数据盘,Vminit不会对其进行初始化。

Plugin_Main_ExtendVolume

自动检测Windows系统盘的空闲空间,并在空间不足的情况下(<5 GB),利用diskpart命令来扩展系统盘。

无。

Plugin_Main_CloudinitUserData

该插件会从阿里云的元数据中获取您配置的自定义数据,并使用系统的system账户执行自定义数据脚本。

Plugin_Main_ConfigHostname

实例每次启动时都会执行。

设置实例的主机名。在实例创建阶段,阿里云会为每个实例分配一个主机名。如果您在创建实例时指定了主机名,系统将根据您设定的主机名进行配置。否则,阿里云将自动分配一个随机的主机名。

  • 设置主机名会强制重启系统,重启系统会在该插件执行完毕后立即执行。

  • 如果实例的主机名与您配置的主机名一致,则不会重复设置主机名。

  • 如果您本身不依赖阿里云修改主机名,而是由您自定义设置实例的主机名,可以禁用该插件。例如,您在自定义镜像中增加了开机启动修改主机名的逻辑,这就可能与Vminit这个插件的逻辑冲突,这种情况建议在创建自定义镜像时,禁用该插件。具体操作,请参见自定义Vminit的初始化功能

Plugin_Main_ConfigWsus

该插件会从阿里云的元数据中获取WSUS地址,并配置到实例中。如果实例的WSUS地址已经配置成阿里云的WSUS地址,则不会重复配置。

该插件依赖内网访问能力。

Plugin_Main_ConfigKms

该插件会从阿里云的元数据中获取KMS地址,配置到实例后会进行KMS激活。如果实例KMS已经激活且KMS相同,则不会重复配置。

该插件依赖内网访问能力。

Plugin_Main_ConfigNtp

配置NTP时钟源,用于时间同步。该插件会从阿里云的元数据中获取NTP服务器地址,并配置到实例中。如果实例已经配置了相同的NTP地址,则不会重复配置。

  • 该插件依赖内网访问能力。

  • 该插件依赖W32Time服务。

安装Vminit

  • 公共镜像

    2023年09月份及之后的Windows公共镜像以及基于公共镜像创建的自定义镜像已默认安装Vminit,通过公共镜像创建ECS实例会自动运行Vminit,无需再手动安装。

  • 自定义镜像

    如果您是通过本地制作的自定义镜像创建ECS实例,且镜像未安装Vminit,需要手动安装Vminit,保证运行该镜像的ECS实例能成功完成初始化配置。具体操作,请参见安装Vminit

Vminit版本信息如下,安装Vminit时默认安装Vminit的最新版本。

Vminit版本

发布内容

发布日期

2.0.1.2

  • 清除Windows事件管理器中的报错告警。

  • Userdata的Bat脚本支持延迟变量。

2024年01月

2.0.1.0

首次发布,支持插件化可配置。

2023年09月

说明

您可以通过C:\ProgramData\aliyun\vminit\vminit.exe文件查看Vminit版本信息。

自定义Vminit的初始化功能

实例创建过程中会默认自动执行Vminit所有插件的初始化功能。如果您是通过自定义镜像创建实例,且希望在实例启动过程中不自动执行某些操作,可以在制作镜像过程中禁用对应的插件。

  1. C:\ProgramData\aliyun\vminit目录下新建一个文件。该文件有如下要求:

    • 文件名称必须为customized_config

    • 文件不能添加任何后缀

    • 给文件添加内容时,必须是JSON格式。

    说明

    ProgramData通常是隐藏目录,请确保启用了显示隐藏的文件、文件夹和驱动器选项,以便您能看到并正确操作隐藏项目。

  2. 在该文件中进行配置,禁用插件。例如:

    • 如果您不需要阿里云自动配置实例主机名,希望自定义主机名,您可以禁用Plugin_Main_ConfigHostname插件。在customized_config文件中复制如下信息(JSON格式)并保存文件。

      {
       "disabledPlugins": ["Plugin_Main_ConfigHostname"]
      }
    • 如果您不需要阿里云自动配置实例主机名以及初始化数据盘,您可以同时禁用Plugin_Main_ConfigHostname和Plugin_Main_ConfigDisk插件。在customized_config文件中复制如下信息(JSON格式)并保存文件。

      {
       "disabledPlugins": ["Plugin_Main_ConfigHostname", "Plugin_Main_ConfigDisk"]
      }
      说明

      如果您后续需要重新启用某个插件,可以在customized_config文件中删除对应插件的配置内容。

常见问题

  • 创建Windows实例时为什么会有一次重启动作?

    • 原因:在创建ECS实例过程中,即使您没有指定主机名,系统也会默认分配一个主机名。而Windows实例的主机名需要系统重启才能生效,因此在创建阶段,系统会有一个重启过程。

    • 解决方案:如果您本身不依赖阿里云修改主机名,而是由您自定义设置实例的主机名,可以通过禁用Plugin_Main_ConfigHostname插件来解决。禁用后,系统不会为实例自动分配主机名。

      说明

      Linux实例设置主机名后无需重启直接生效。

  • 如果自定义镜像中包含了开机启动修改主机名的内容,通过镜像创建Windows实例时为什么会无限重启?

    • 原因:阿里云创建实例时通过Vminit插件默认为实例分配一个主机名,如果自定义镜像中包含开机启动修改主机名,会与Vminit插件的逻辑冲突,导致实例无限重启。

    • 解决方案:Windows实例可以通过禁用Plugin_Main_ConfigHostname插件来解决。