第 11 章 创建自定义实例
云用户可以指定在启动实例时要使用的附加数据,如实例在引导时运行的 shell 脚本。云用户可以使用以下方法将数据传递给实例:
- 用户数据
-
用于在实例启动命令中包括要执行的
cloud-init
的说明。 - 实例元数据
- 创建或更新实例时可以指定的键值对列表。
您可以使用配置驱动器或元数据服务访问传递给实例的额外数据。
- 配置驱动器
-
您可以在实例引导时将配置驱动器附加到实例。配置驱动器以只读驱动器形式呈现给实例。实例可以挂载此驱动器并从中读取文件。您可以使用配置驱动器作为
cloud-init
信息的源。当与cloud-init
用于服务器引导时,配置驱动器很有用,当您要将大型文件传递给实例时。例如,您可以将cloud-init
配置为自动挂载配置驱动器,并在初始实例引导期间运行设置脚本。配置驱动器使用config-2
的卷标签创建,并在引导时附加到实例。传递给配置驱动器的任何其他文件内容都添加到配置驱动器的openstack/{version}/
目录中的user_data
文件中。cloud-init
从此文件检索用户数据。 - 元数据服务
-
提供 REST API 以检索特定于实例的数据。实例通过
169.254.169.254
或fe80::a9fe:a9fe
访问此服务。
cloud-init
可以使用 config 驱动器和元数据服务来消耗额外的数据来自定义实例。cloud-init
软件包支持多个数据输入格式。shell 脚本和 cloud-config
格式是最常见的输入格式:
-
shell 脚本:数据声明以 192.168.1.0/24! 或
Content-Type: text/x-shellscript
开头。shell 脚本在引导过程中最后一次调用。
-
cloud-config
格式:数据声明以 evincecloud-config
或Content-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.json
或 http://169.254.169.254/openstack/{version}/vendor_data2.json
发出 GET 请求。
11.1. 使用用户数据自定义实例 复制链接链接已复制到粘贴板!
您可以使用用户数据在 instance launch 命令中包含指令。cloud-init
执行这些命令,将实例自定义为引导过程中的最后一个步骤。
流程
使用
cloud-init
指令创建一个文件。例如,创建一个 bash 脚本,用于在实例上安装并启用 Web 服务器:vim /home/scripts/install_httpd
$ vim /home/scripts/install_httpd #!/bin/bash yum -y install httpd python-psycopg2 systemctl enable httpd --now
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--user-data
选项启动实例,以传递 bash 脚本:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当实例状态为 active 时,附加一个浮动 IP 地址:
openstack floating ip create web-server-network openstack server add floating ip web-server-instance 172.25.250.123
$ openstack floating ip create web-server-network $ openstack server add floating ip web-server-instance 172.25.250.123
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 SSH 登录实例:
ssh -i ~/.ssh/web-server-keypair cloud-user@172.25.250.123
$ ssh -i ~/.ssh/web-server-keypair cloud-user@172.25.250.123
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查自定义是否已成功执行。例如,要检查 Web 服务器是否已安装并启用,请输入以下命令:
curl http://localhost | grep Test
$ 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 Copied! Toggle word wrap Toggle overflow 查看
/var/log/cloud-init.log
文件以了解相关消息,如是否执行cloud-init
:sudo less /var/log/cloud-init.log
$ 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 Copied! Toggle word wrap Toggle overflow