7.9. 使用 Cloud-Init 自动配置虚拟机
Cloud-Init 是自动化虚拟机的初始设置(如配置主机名、网络接口和授权密钥)的工具。在调配基于模板部署的虚拟机时,可以使用它,以避免网络上冲突。
要使用此工具,必须先在虚拟机上安装 cloud-init 软件包。安装后,Cloud-Init 服务将在引导过程中启动,以搜索有关配置对象的指令。然后,您可以使用 Run Once 窗口中的选项仅提供这些指令一次,或者使用 New Virtual Machine、Edit Virtual Machine 和 Edit Template 窗口中的选项在每次虚拟机启动时提供这些指令。
7.9.1. Cloud-Init 用例 复制链接链接已复制到粘贴板!
Cloud-Init 可用于在各种情况下自动执行虚拟机配置。以下是几个常见情况:
基于模板创建的虚拟机
您可以使用 Run Once 窗口的 Initial Run 部分中的 Cloud-Init 选项来初始化基于模板创建的虚拟机。这样,您可以在虚拟机首次启动时自定义虚拟机。
虚拟机模板
您可以使用 Edit Template 窗口的 Initial Run 选项卡中的 Use Cloud-Init/Sysprep 选项来指定用于自定义基于该模板创建的虚拟机的选项。
虚拟机池
您可以使用 新建池 窗口上 Initial Run 选项卡中的 Use Cloud-Init/Sysprep 选项指定自定义从该虚拟机池中获取的虚拟机的选项。这样,您可以指定一组标准设置,每次从该虚拟机池中获取虚拟机时都将应用这些设置。您可以继承或覆盖为虚拟机所基于的模板指定的选项,或者指定虚拟机池本身的选项。
7.9.2. 安装 Cloud-Init 复制链接链接已复制到粘贴板!
这个步骤描述了如何在虚拟机上安装 Cloud-Init。安装了 Cloud-Init 后,您可以基于此虚拟机创建模板。基于此模板创建的虚拟机可以利用 Cloud-Init 功能,如配置主机名、时区、root 密码、授权密钥、网络接口、DNS 服务等。
安装 Cloud-Init
- 登录虚拟机。
启用存储库:
Red Hat Enterprise Linux 6:
subscription-manager repos \ --enable=rhel-6-server-rpms \ --enable=rhel-6-server-rh-common-rpms# subscription-manager repos \ --enable=rhel-6-server-rpms \ --enable=rhel-6-server-rh-common-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Enterprise Linux 7:
subscription-manager repos \ --enable=rhel-7-server-rpms \ --enable=rhel-7-server-rh-common-rpms# subscription-manager repos \ --enable=rhel-7-server-rpms \ --enable=rhel-7-server-rh-common-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
对于 Red Hat Enterprise Linux 8,您通常不需要启用软件仓库来安装 Cloud-Init。Cloud-Init 软件包是 AppStream repo
rhel-8-for-x86_64-appstream-rpms的一部分,该仓库在 Red Hat Enterprise Linux 8 中默认启用。
安装
cloud-init软件包和依赖项:dnf install cloud-init
# dnf install cloud-initCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意对于早于 Red Hat Enterprise Linux 8 的版本,请使用
yum install cloud-init命令,而不是dnf install cloud-init。
7.9.3. 使用 Cloud-Init 准备模板 复制链接链接已复制到粘贴板!
只要在 Linux 虚拟机上安装了 cloud-init 软件包,就可以使用该虚拟机来生成启用了 cloud-init 的模板。指定要包含在模板中的一组标准设置,如以下步骤所述,或者跳过 Cloud-Init 设置步骤,并在基于此模板创建虚拟机时进行配置。
以下流程概述了如何在准备模板时使用 Cloud-Init,但在 New Virtual Machine、Edit Template 和 Run Once 窗口中也提供了相同的设置。
使用 Cloud-Init 准备模板
-
单击
并选择模板。 - 点 。
- 单击
- 单击 Initial Run 选项卡,再选中 Use Cloud-Init/Sysprep 复选框。
- 在 VM Hostname 文本 字段中输入主机名。
- 选择 Configure Time Zone 复选框,然后从 Time Zone 下拉列表中选择一个时区。
展开 Authentication 部分。
- 选中 Use already configure password 复选框以使用现有凭据,或者清除该复选框并在 Password 和 Verify Password 文本字段中输入 root 密码以指定新的 root 密码。
- 在 SSH 授权密钥文本区域中,输入要添加到虚拟机上授权主机文件的任何 SSH 密钥。
- 选中 Regenerate SSH Keys 复选框,为虚拟机重新生成 SSH 密钥。
展开 Networks 部分。
- 在 DNS Servers 文本字段中,输入任何 DNS 服务器。
- 在 DNS Search Domains 文本字段中,输入任何 DNS 搜索域。
选择 In-guest Network Interface 复选框,然后使用 + Add new 和 - Renove selected 按钮向虚拟机中添加或删除网络接口。
重要您必须指定正确的网络接口名称和编号(如
eth0,eno3、enp0s)。否则,虚拟机的接口连接将启动,但不含 cloud-init 网络配置。
- 展开 Custom Script 部分,然后在 Custom Script 文本区域中输入任何自定义脚本。
- 点击 。
您现在可以使用此模板调配新的虚拟机。
7.9.4. 使用 Cloud-Init 初始化虚拟机 复制链接链接已复制到粘贴板!
使用 Cloud-Init 自动执行 Linux 虚拟机的初始配置。您可以使用 Cloud-Init 字段配置虚拟机的主机名、时区、root 密码、授权密钥、网络接口和 DNS 服务。您还可以指定要在启动时运行的自定义脚本(YAML 格式的脚本)。自定义脚本允许 Cloud-Init 支持但 Cloud-Init 字段中不支持的额外 Cloud-Init 配置。有关自定义脚本示例的更多信息,请参阅云配置示例。
使用 Cloud-Init 初始化虚拟机
此流程使用一组 Cloud-Init 设置启动虚拟机。如果模板中包含相关的设置,请检查虚拟机的设置,并根据需要进行修改,然后单击 以启动虚拟机。
-
单击
并选择虚拟机。 - 单击 下拉菜单,再选择 Run Once。
- 展开 Initial Run 部分,再选中 Cloud-Init 复选框。
- 在 VM Hostname 文本 字段中输入主机名。
- 选择 Configure Time Zone 复选框,然后从 Time Zone 下拉菜单中选择一个时区。
- 选中 Use already configure password 复选框以使用现有凭据,或者清除该复选框并在 Password 和 Verify Password 文本字段中输入 root 密码以指定新的 root 密码。
- 在 SSH 授权密钥文本区域中,输入要添加到虚拟机上授权主机文件的任何 SSH 密钥。
- 选中 Regenerate SSH Keys 复选框,为虚拟机重新生成 SSH 密钥。
- 在 DNS Servers 文本字段中,输入任何 DNS 服务器。
- 在 DNS Search Domains 文本字段中,输入任何 DNS 搜索域。
选中 Network 复选框,再使用 + 和 - 按钮向虚拟机中添加或删除网络接口。
重要您必须指定正确的网络接口名称和编号(如
eth0,eno3、enp0s)。否则,虚拟机的接口连接将启动,但不会在其中定义 cloud-init 网络配置。- 在 Custom Script 文本区域中输入自定义脚本。确保脚本中指定的值合适。否则,操作将失败。
- 点击 。
若要检查虚拟机是否安装了 Cloud-Init,请选择虚拟机并单击 Applications 子选项卡。仅在安装了客户机代理时才显示。