第 11 章 创建自定义实例


云用户可以指定在启动实例时要使用的附加数据,如实例在引导时运行的 shell 脚本。云用户可以使用以下方法将数据传递给实例:

用户数据
用于在实例启动命令中包括要执行的 cloud-init 的说明。
实例元数据
创建或更新实例时可以指定的键值对列表。

您可以使用配置驱动器或元数据服务访问传递给实例的额外数据。

配置驱动器
您可以在实例引导时将配置驱动器附加到实例。配置驱动器以只读驱动器形式呈现给实例。实例可以挂载此驱动器并从中读取文件。您可以使用配置驱动器作为 cloud-init 信息的源。当与 cloud-init 用于服务器引导时,配置驱动器很有用,当您要将大型文件传递给实例时。例如,您可以将 cloud-init 配置为自动挂载配置驱动器,并在初始实例引导期间运行设置脚本。配置驱动器使用 config-2 的卷标签创建,并在引导时附加到实例。传递给配置驱动器的任何其他文件内容都添加到配置驱动器的 openstack/{version}/ 目录中的 user_data 文件中。cloud-init 从此文件检索用户数据。
元数据服务
提供 REST API 以检索特定于实例的数据。实例通过 169.254.169.254fe80::a9fe:a9fe 访问此服务。

cloud-init 可以使用 config 驱动器和元数据服务来消耗额外的数据来自定义实例。cloud-init 软件包支持多个数据输入格式。shell 脚本和 cloud-config 格式是最常见的输入格式:

  • shell 脚本:数据声明以 192.168.1.0/24! 或 Content-Type: text/x-shellscript 开头。shell 脚本在引导过程中最后一次调用。
  • cloud-config 格式:数据声明以 evince cloud-configContent-Type: text/cloud-config 开头。cloud-config 文件必须是有效的 YAML,才能由 cloud-init 解析并执行。
注意

对于传递给实例的数据,cloud-init 的最大用户数据大小为 16384 字节。您无法更改大小限制,因此当您需要超过大小限制时,使用 gzip 压缩。

特定于供应商的数据

RHOSP 管理员也可以在创建数据时将数据传递给实例。此数据可能无法以云用户身份看到,例如,将实例注册到 Active Directory 的加密令牌。

RHOSP 管理员使用 vendordata 功能将数据传递给实例。vendordata 配置是只读的,位于以下文件中:

  • /openstack/{version}/vendor_data.json
  • /openstack/{version}/vendor_data2.json

您可以使用元数据服务或实例中的配置驱动器查看这些文件。要使用元数据服务访问文件,请对 http://169.254.169.254/openstack/{version}/vendor_data.jsonhttp://169.254.169.254/openstack/{version}/vendor_data2.json 发出 GET 请求。

11.1. 使用用户数据自定义实例

您可以使用用户数据在 instance launch 命令中包含指令。cloud-init 执行这些命令,将实例自定义为引导过程中的最后一个步骤。

流程

  1. 使用 cloud-init 指令创建一个文件。例如,创建一个 bash 脚本,用于在实例上安装并启用 Web 服务器:

    $ vim /home/scripts/install_httpd
    #!/bin/bash
    
    yum -y install httpd python-psycopg2
    systemctl enable httpd --now
    Copy to Clipboard Toggle word wrap
  2. 使用 --user-data 选项启动实例,以传递 bash 脚本:

    $ openstack server create \
    --image rhel8 \
    --flavor default \
    --nic net-id=web-server-network \
    --security-group default \
    --key-name web-server-keypair \
    --user-data /home/scripts/install_httpd \
    --wait web-server-instance
    Copy to Clipboard Toggle word wrap
  3. 当实例状态为 active 时,附加一个浮动 IP 地址:

    $ openstack floating ip create web-server-network
    $ openstack server add floating ip web-server-instance 172.25.250.123
    Copy to Clipboard Toggle word wrap
  4. 使用 SSH 登录实例:

    $ ssh -i ~/.ssh/web-server-keypair cloud-user@172.25.250.123
    Copy to Clipboard Toggle word wrap
  5. 检查自定义是否已成功执行。例如,要检查 Web 服务器是否已安装并启用,请输入以下命令:

    $ curl http://localhost | grep Test
    <title>Test Page for the Apache HTTP Server on Red Hat Enterprise Linux</title>
    <h1>Red Hat Enterprise Linux <strong>Test Page</strong></h1>
    Copy to Clipboard Toggle word wrap
  6. 查看 /var/log/cloud-init.log 文件以了解相关消息,如是否执行 cloud-init

    $ sudo less /var/log/cloud-init.log
    ...output omitted...
    ...util.py[DEBUG]: Cloud-init v. 0.7.9 finished at Sat, 23 Jun 2018 02:26:02 +0000. Datasource DataSourceOpenStack [net,ver=2].  Up 21.25 seconds
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat