Red Hat Training

A Red Hat training course is available for Red Hat Virtualization

7.8. 使用 Cloud-Init 自动配置虚拟机

Cloud-Init 是一个用来自动配置虚拟机的初始设置(如主机名,网卡和密钥)的工具。它可以在使用模板部署虚拟机时使用,从而达到避免网络冲突的目的。
在使用这个工具前,cloud-init 软件包必须在虚拟机上安装。安装后,Cloud-Init 服务会在系统启动时搜索如何配置系统的信息。您可以使用只运行一次窗口来提供只需要配置一次的设置信息;或在 新建虚拟机编辑虚拟机编辑模板窗口中输入虚拟机每次启动都需要的配置信息。

7.8.1. Cloud-Init 使用实例

Cloud-Init 可以在不同的环境中被用来自动化虚拟机的配置过程。以下介绍了一些常见的实例:
基于模板创建的虚拟机
当您使用一个模板创建虚拟机时,可以在只运行一次窗口中的初始运行项中使用 Cloud-Init 选择。它会在虚拟机第一次运行时对虚拟机进行自定义配置。
虚拟机模板
新建模板编辑模板窗口中的初始运行页中选择使用 Cloud-Init/Sysprep 选项,来定制基于模板所创建的虚拟机。
虚拟机池
您可以使用新建池窗口中的初始运行中的使用 Cloud-Init/Sysprep 选项来为基于虚拟机池的虚拟机自定义配置。这允许您设定一组标准的设置,每一次一台虚拟机池中的虚拟机被使用时,这组配置都会应用到那个虚拟机上。您可以继承或覆盖虚拟机所基于的模板中的设置;或为虚拟机池本身指定设置。

7.8.2. 安装 Cloud-Init

以下介绍了如何在虚拟机上安装 Cloud-Init。当 Cloud-Init 被安装后,您就可以基于这个虚拟机创建模板。使用这个模板创建的虚拟机可以使用 Cloud-Init 的功能,如在系统引导时配置主机名、时区、root 密码、验证密钥、网络接口、DNS 服务等。

过程 7.12. 安装 Cloud-Init

  1. 登录到虚拟机。
  2. 启用所需的仓库:
    • Red Hat Enterprise Linux 6:
      # subscription-manager repos --enable=rhel-6-server-rpms
      # subscription-manager repos --enable=rhel-6-server-rh-common-rpms
    • Red Hat Enterprise Linux 7:
      # subscription-manager repos --enable=rhel-7-server-rpms
      # subscription-manager repos --enable=rhel-7-server-rh-common-rpms
  3. 安装 cloud-init 软件包:
    # yum install cloud-init

7.8.3. 使用 Cloud-Init 准备一个模板

如果在 Linux 虚拟机上安装了 cloud-init 软件包,就可以使用这个虚拟机创建启用了cloud-init 的模板。可以在模板中包括以下介绍的标准设置,或跳过 Cloud-Init 设置这一步,并在创建基于这个模板的虚拟机时配置它们。

注意

以下介绍了在准备模板时如何使用 Cloud-Init 的方法。其中的设置也出现在新建虚拟机编辑模板只运行一次窗口中。

过程 7.13. 使用 Cloud-Init 准备一个模板

  1. 虚拟机标签页并选择一个虚拟机。
  2. 编辑
  3. 初始运行标签页,选择使用 Cloud-Init/Sysprep 选项。
  4. 虚拟机主机名项中输入主机名。
  5. 配置时区并从时区下拉列表中选择所需的时区。
  6. 展开验证项,您可以选中使用已经配置的密码选项来使用已经存在的密码来进行验证;也可以不选择它而在密码验证密码项中设置一个新的 root 密码。
  7. SSH 授权密钥项中输入 SSH 密钥,这个密钥会被添加到虚拟机的授权主机文件中。
  8. 选中重新产生 SSH 密钥选项来为虚拟机重新产生 SSH 密钥。
  9. 展开网络项,在 DNS 服务器项中输入 DNS 服务器。
  10. DNS 搜索域中输入 DNS 搜索域。
  11. 选中网络,并使用 +- 键来为虚拟机添加网络接口或从虚拟机上删除网络接口。
  12. 展开自定义脚本,在自定义脚本项中输入自定脚本。
  13. 确定
  14. 创建模板并输入所需的项。
  15. 确定
您现在就可以使用这个模板部署新的虚拟机。

7.8.4. 使用 Cloud-Init 初始化一台虚拟机

使用 Cloud-Init 可以对 Linux 虚拟机自动进行一些初始配置,如配置虚拟机的主机名、时区、root 密码、验证密钥、网络接口和 DNS 服务。您也可以指定一个自定义脚本( YAML 格式)来在引导时运行。这个自定义脚本可以进行 Cloud-Init 支持的、但是没有出现在 Cloud-Init 项中的设置。如需了解更多相关信息,请参阅 Cloud config examples

过程 7.14. 使用 Cloud-Init 初始化一台虚拟机

这个过程会在启动虚拟机时使用一组 Cloud-Init 设置,如果相关的设置包括在虚拟机所基于的模板中,请检查这些设置,并根据需要对它们进行修改。点确定启动虚拟机。
  1. 虚拟机标签页并选择一个虚拟机。
  2. 只运行一次
  3. 展开初始运行项并选择使用 Cloud-Init
  4. 虚拟机主机名项中输入主机名。
  5. 配置时区并从时区下拉菜单中选择所需的时区。
  6. 您可以选中使用已经配置的密码选项来使用已经存在的密码来进行验证;也可以不选择它而在密码验证密码项中输入 root 密码。
  7. SSH 授权密钥项中输入 SSH 密钥,这个密钥会被添加到虚拟机的授权主机文件中。
  8. 选中重新产生 SSH 密钥选项来为虚拟机重新产生 SSH 密钥。
  9. DNS 服务器项中输入 DNS 服务器。
  10. DNS 搜索域中输入 DNS 搜索域。
  11. 网络,并使用 +- 键来为虚拟机添加网络接口或从虚拟机上删除网络接口。
  12. 自定义脚本项中输入自定义脚本。请确定脚本中的值是正确的,否则会导致操作失败。
  13. 确定

注意

要检查一个虚拟机是否安装了 Cloud-Init,选择这个虚拟机,点应用子标签页。它只会在已安装了 guest 代理后才会显示。