创建和管理实例
前言
您无法在实例创建过程中将基于角色的访问控制 (RBAC) 共享安全组直接应用到实例。要将 RBAC 共享安全组应用到实例,您必须首先创建端口,将共享安全组应用到该端口,然后将该端口分配给实例。
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
对红帽文档提供反馈
我们感谢您对文档提供反馈信息。与我们分享您的成功秘诀。
使用直接文档反馈(DDF)功能
使用 添加反馈 DDF 功能,用于特定句子、段落或代码块上的直接注释。
- 以 Multi-page HTML 格式查看文档。
- 请确定您看到文档右上角的 反馈 按钮。
- 用鼠标指针高亮显示您想评论的文本部分。
- 点 添加反馈。
- 在添加反馈项中输入您的意见。
- 可选:添加您的电子邮件地址,以便文档团队可以联系您以讨论您的问题。
- 点 Submit。
第 1 章
计算服务是按需提供实例的中央组件。
第 2 章
您可以从同一基础镜像启动任意数量的实例。
第 3 章
- 临时存储
3.1.
3.2.
3.3.
3.4.
3.5.
您可以在启动时将配置驱动器附加到实例。
第 4 章
第 5 章
5.1. 先决条件
5.2.
流程
$ openstack flavor list
注意$ openstack image list
注意-
hw_scsi_model=virtio-scsi
-
hw_disk_bus=scsi
-
$ openstack network list
$ openstack server create --flavor <flavor> \ --image <image> --network <network> \ --wait myInstanceFromImage
5.3.
流程
$ openstack image list
注意-
hw_scsi_model=virtio-scsi
-
hw_disk_bus=scsi
-
$ openstack volume create --image <image> \ --size <size_gb> --bootable myBootableVolume
-
将
<size_gb>
替换为卷的大小(以 GB 为单位)。
$ openstack flavor list
$ openstack network list
$ openstack server create --flavor <flavor> \ --volume myBootableVolume --network <network> \ --wait myInstanceFromVolume
5.4.
流程
$ openstack flavor list
注意提示$ openstack image list
提示$ openstack network list
$ openstack port create --network <network> \ --vnic-type <vnic_type> mySriovPort
$ openstack server create --flavor <flavor> \ --image <image> --port <port> \ --wait mySriovInstance
5.5. 在端口上创建带有 NUMA 关联性的实例
先决条件
流程
$ openstack port create --network <network> \ [--numa-policy-required | --numa-policy-preferred | --numa-policy-legacy] \ myNUMAAffinityPort
$ openstack server create --flavor <flavor> \ --image <image> --port <port> \ --wait myNUMAAffinityInstance
5.6. 其他资源
第 6 章
$ openstack port show <port_name/port_id>
先决条件
流程
(overcloud)$ openstack network qos policy list
--------------------------------------
-----------------
---------+ | ID | Name | Shared | Default | Project |--------------------------------------
-----------------
---------+ | 6d771447-3cf4-4ef1-b613-945e990fa59f | policy2 | True | False | ba4de51bf7694228a350dd22b7a3dc24 | | 78a24462-e3c1-4e66-a042-71131a7daed5 | policy1 | True | False | ba4de51bf7694228a350dd22b7a3dc24 | | b80acc64-4fc2-41f2-a346-520d7cfe0e2b | policy0 | True | False | ba4de51bf7694228a350dd22b7a3dc24 |--------------------------------------
-----------------
---------+(overcloud)$ openstack network qos policy show policy0
-------------
---------------------------------------------------------------------------------------+ | Field | Value |-------------
---------------------------------------------------------------------------------------+ | description | | | id | b80acc64-4fc2-41f2-a346-520d7cfe0e2b | | is_default | False | | location | cloud=', project.domain_id=, project.domain_name='Default, project.id=ba4de51bf7694228a350dd22b7a3dc24, project.name=admin, region_name=regionOne, zone= | | name | policy0 | | project_id | ba4de51bf7694228a350dd22b7a3dc24 | | rules | [{min_kbps: 100000, direction: egress, id: d46218fe-9218-4e96-952b-9f45a5cb3b3c, qos_policy_id: b80acc64-4fc2-41f2-a346-520d7cfe0e2b, type: minimum_bandwidth}, {min_kbps: 100000, direction: ingress, id: 1202c4e3-a03a-464c-80d5-0bf90bb74c9d, qos_policy_id: b80acc64-4fc2-41f2-a346-520d7cfe0e2b, type: minimum_bandwidth}] | | shared | True | | tags | [] |-------------
---------------------------------------------------------------------------------------+(overcloud)$ openstack port create port-normal-qos --network net0 --qos-policy policy0
$ openstack server create --flavor cirros256 --image cirros-0.3.5-x86_64-disk --nic port-id=port-normal-qos --wait qos_instance
6.1.
流程
$ openstack server remove port <vm_name|vm_id> <port_name|port_id>
第 7 章
该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。
限制
流程
$ openstack network create vdpa_network \ --provider-physical-network tenant \ --provider-network-type vlan \ --provider-segment 1337
$ openstack subnet create vdpa_subnet \ --network vdpa_net1 \ --subnet-range 192.0.2.0/24 \ --dhcp
$ openstack port create vdpa_direct_port \ --network vdpa_network \ --vnic-type vdpa \
$ openstack server create vdpa_instance \ --flavor cirros256 --image cirros-0.3.5-x86_64-disk \ --nic port-id=vdpa_direct_port --wait
第 8 章
8.1.
流程
(overcloud)$ openstack network list
(overcloud)$ openstack network create <network>
$ openstack server add network <instance> <network>
其他资源
8.2.
流程
(overcloud)$ openstack server show <instance>
$ openstack server remove network <instance> <network>
8.3.
先决条件
流程
$ openstack port create --network <network> [--vnic-type <vnic-type>] <port>
$ openstack server add port <instance> <port>
$ openstack port list --device-id <instance_UUID>
其他资源
8.4.
流程
(overcloud)$ openstack server show <instance>
$ openstack server remove port <instance> <port>
8.5.
先决条件
-
hw_scsi_model=virtio-scsi
-
hw_disk_bus=scsi
-
流程
(overcloud)$ openstack volume list
$ openstack server add volume <instance> <volume>
- 注意
Multiattach volumes are only supported starting with compute API version 2.60. (HTTP 400) (Request-ID: req-3a969c31-e360-4c79-a403-75cc6053c9e5)
$ openstack --os-compute-api-version 2.72 server add volume <instance> <volume>
提示$ openstack volume show <volume>
输出示例:
+-----------------------------------------------------+----------------------+---------+-----+-----------------------------------------------------------------------------------------------+ | ID | Name | Status | Size| Attached to +-----------------------------------------------------+---------------------+---------+------+---------------------------------------------------------------------------------------------+ | f3fb92f6-c77b-429f-871d-65b1e3afa750 | volMultiattach | in-use | 50 | Attached to instance1 on /dev/vdb Attached to instance2 on /dev/vdb | +-----------------------------------------------------+----------------------+---------+-----+-----------------------------------------------------------------------------------------------+
8.6.
先决条件
流程
$ openstack server volume list <instance> +---------------------+----------+---------------------+-----------------------+ | ID | Device | Server ID | Volume ID | +---------------------+----------+---------------------+-----------------------+ | 1f9dcb02-9a20-4a4b- | /dev/vda | ab96b635-1e63-4487- | 1f9dcb02-9a20-4a4b-9f | | 9f25-c7846a1ce9e8 | | a85c-854197cd537b | 25-c7846a1ce9e8 | +---------------------+----------+---------------------+-----------------------+
8.7.
先决条件
流程
(overcloud)$ openstack server show <instance>
$ openstack server remove volume <instance> <volume>
- 注意
第 9 章
9.1. 先决条件
9.2.
安全组规则应用到项目中的所有实例。
您无法在实例创建过程中将基于角色的访问控制 (RBAC) 共享安全组直接应用到实例。要将 RBAC 共享安全组应用到实例,您必须首先创建端口,将共享安全组应用到该端口,然后将该端口分配给实例。
9.2.1.
流程
$ openstack security group list $ openstack security group rule list <sec_group>
$ openstack security group create mySecGroup
$ openstack security group rule create --protocol <protocol> \ [--dst-port <port-range>] \ [--remote-ip <ip-address> | --remote-group <group>] \ [--ingress | --egress] mySecGroup
$ openstack security group rule create --protocol tcp \ --dst-port 22 mySecGroup
9.2.2.
流程
$ openstack security group list
$ openstack security group rule create --protocol <protocol> \ [--dst-port <port-range>] \ [--remote-ip <ip-address> | --remote-group <group>] \ [--ingress | --egress] <group_name>
$ openstack security group rule create --protocol tcp \ --dst-port 22 mySecGroup
9.2.3.
流程
$ openstack security group list
$ openstack security group show <sec-group>
$ openstack security group rule delete <rule> [<rule> ...]
9.2.4.
流程
$ openstack port list --server myInstancewithSSH
$ openstack port set --security-group <sec_group> <port>
9.2.5.
流程
$ openstack port show <port>
$ openstack port set --no-security-group <port>
$ openstack port set --security-group <sec_group> <port>
9.2.6.
流程
$ openstack security group list
$ openstack port list
$ openstack port show <port-uuid> -c security_group_ids
$ openstack security group delete <group> [<group> ...]
9.2.7.
流程
$ openstack keypair create <keypair> > ~/.ssh/<keypair>.pem
$ chmod 600 ~/.ssh/<keypair>.pem
9.2.8.
流程
$ openstack keypair create --public-key ~/.ssh/<public_key>.pub \ <keypair> > ~/.ssh/<keypair>.pem
$ openstack keypair create --private-key ~/.ssh/<private_key> \ <keypair> > ~/.ssh/<keypair>.pem
$ chmod 600 ~/.ssh/<keypair>.pem
9.2.9. 其他资源
9.3.
先决条件
流程
$ openstack floating ip list
$ openstack floating ip create <provider-network>
提示$ openstack server add floating ip [--fixed-ip-address <ip_address>] \ <instance> <floating_ip>
$ openstack server show <instance>
其他资源
9.4.
流程
$ openstack server remove floating ip <instance> <ip_address>
$ openstack floating ip delete <ip_address>
$ openstack floating ip list
9.5.
您无法在实例创建过程中将基于角色的访问控制 (RBAC) 共享安全组直接应用到实例。要将 RBAC 共享安全组应用到实例,您必须首先创建端口,将共享安全组应用到该端口,然后将该端口分配给实例。
先决条件
- 您可以使用一个密钥对来通过 SSH 连接到您的实例。如需更多信息,请参阅生成新 SSH 密钥对。
- 您计划在其中创建实例的网络必须是外部网络,或者连接到将外部网络配置为网关的路由器连接的项目网络。如需更多信息,请参阅网络指南中的 添加路由器。
- 实例连接到的外部网络必须具有子网来提供浮动 IP 地址。
- 安全组允许 SSH 访问实例。如需更多信息,请参阅使用安全组和密钥对保护实例访问。
-
实例基于的镜像包含
cloud-init
软件包,用于将 SSH 公钥注入到实例中。 - 可分配给您的实例的浮动 IP 地址。有关更多信息,请参阅将浮动 IP 地址分配给实例。
流程
检索具有实例所需硬件配置集的类别的名称或 ID:
$ openstack flavor list
注意选择足够大小以便镜像成功引导的类别,否则实例将无法启动。
检索具有实例所需软件配置文件的镜像的名称或 ID:
$ openstack image list
如果不需要的镜像不可用,您可以下载或创建新镜像。有关创建或下载云镜像的详情,请参考 创建镜像。
检索您要将实例连接到的网络的名称或 ID:
$ openstack network list
检索您要用于远程访问实例的密钥对名称:
$ openstack keypair list
创建具有 SSH 访问的实例:
$ openstack server create --flavor <flavor> \ --image <image> --network <network> \ [--security-group <secgroup>] \ --key-name <keypair> --wait myInstancewithSSH
-
将
<flavor
> 替换为在第 1 步中获得的类别的名称或 ID。 -
将
<image
> 替换为在第 2 步中获得的镜像的名称或 ID。 -
将
<network
> 替换为在第 3 步中获得的网络的名称或 ID。您可以根据需要,使用--network
选项将实例连接到多个网络。 -
可选:
默认安全组
应用到没有指定替代安全组的实例。您可以在实例创建过程中直接将替代安全组应用到实例,或应用到正在运行的实例上的端口。使用--security-group
选项指定创建实例时的替代安全组。有关将安全组添加到正在运行的实例上的端口的详情,请参考 将安全组添加到端口。 -
将
<keypair
> 替换为在第 4 步中获取的密钥对的名称或 ID。
-
将
为实例分配一个浮动 IP 地址:
$ openstack server add floating ip myInstancewithSSH <floating_ip>
将
<floating_ip
> 替换为您要分配给实例的浮动 IP 地址。使用自动创建的
cloud-user
帐户来验证您可以使用 SSH 登录到您的实例:$ ssh -i ~/.ssh/<keypair>.pem cloud-user@<floatingIP> [cloud-user@demo-server1 ~]$
9.6. 其他资源
- 网络指南中的 创建网络 .
- 网络指南中的添加路由器.
第 10 章 连接到实例
当您允许实例安全组规则中的协议时,您可以使用 SSH 或 WinRM 等远程 shell 从云外部访问实例。您还可以直接连接到实例的控制台,以便在网络连接失败时也可以调试。
如果您没有向实例提供密钥对,或者为实例分配安全组,则只能使用 VNC 从云内部访问实例。您无法 ping 实例。
10.1. 访问实例控制台
您可以通过在浏览器中输入 VNC 控制台 URL 来直接连接到实例的 VNC 控制台。
流程
要显示实例的 VNC 控制台 URL,请输入以下命令:
$ openstack console url show <vm_name> +-------+------------------------------------------------------+ | Field | Value | +-------+------------------------------------------------------+ | type | novnc | | url | http://172.25.250.50:6080/vnc_auto.html?token= | | | 962dfd71-f047-43d3-89a5-13cb88261eb9 | +-------+-------------------------------------------------------+
- 要直接连接到 VNC 控制台,请在浏览器中输入显示的 URL。
10.2. 登录实例
您可以远程登录到公共实例。
先决条件
- 您有实例的密钥对证书。创建密钥对时下载证书。如果您没有自行创建密钥对,请询问您的管理员。
- 实例配置为公共实例。有关公共实例要求的更多信息,请参阅 提供实例的公共访问。
- 您有云用户帐户。
流程
检索您要登录的实例的浮动 IP 地址:
$ openstack server show <instance>
将 &
lt;instance
> 替换为您要连接的实例的名称或 ID。使用自动创建的
cloud-user
帐户登录到您的实例:$ ssh -i ~/.ssh/<keypair>.pem cloud-user@<floatingIP> [cloud-user@demo-server1 ~]$
-
将
<keypair
> 替换为密钥对的名称。 将
<floating_ip
> 替换为实例的浮动 IP 地址。提示您可以使用以下命令在没有浮动 IP 地址的情况下登录实例:
$ openstack server ssh --login cloud-user \ --identity ~/.ssh/<keypair>.pem --private <instance>
-
将
<keypair
> 替换为密钥对的名称。 -
将 &
lt;instance
> 替换为您要连接的实例的名称或 ID。
-
将
-
将
第 11 章 管理实例
您可以在实例上执行管理操作,如重新定义实例大小或清空实例。有关管理操作的完整列表,请参阅 实例管理操作。
11.1. 调整实例大小
如果需要增加或减少实例的内存或 CPU 计数,您可以调整实例大小。若要调整实例大小,请为具有所需容量的实例选择一个新类别。重新调整实例重建并重启实例的大小。
流程
检索您要调整大小的实例的名称或 ID:
$ openstack server list
检索您要用来调整实例大小的类别的名称或 ID:
$ openstack flavor list
调整实例大小:
$ openstack server resize --flavor <flavor> \ --wait <instance>
-
将
<flavor
> 替换为在第 2 步中获得的类别的名称或 ID。 -
将
<instance
> 替换为您要调整大小的实例的名称或 ID。
注意调整大小可能需要时间。实例上的操作系统在实例关闭前执行受控的关闭,实例会调整大小。在此期间,实例状态为
RESIZE
:$ openstack server list +----------------------+----------------+--------+----------------------------+ | ID | Name | Status | Networks | +----------------------+----------------+--------+----------------------------+ | 67bc9a9a-5928-47c... | myCirrosServer | RESIZE | admin_internal_net=192.168.111.139 | +----------------------+----------------+--------+----------------------------+
-
将
完成调整大小后,实例状态将变为
VERIFY_RESIZE
。现在,您必须确认或恢复调整大小:要确认调整大小,请输入以下命令:
$ openstack server resize confirm <instance>
要恢复调整大小,请输入以下命令:
$ openstack server resize revert <instance>
实例恢复为原始类别,状态更改为
ACTIVE
。
如果您没有在配置的时间范围内确认或恢复,云可能会配置为自动确认实例大小。
11.2. 创建实例快照
快照是一个镜像,用于捕获实例的运行磁盘状态。您可以对实例执行快照,以创建可用作模板的镜像来创建新实例。通过快照,您可以从另一个实例创建新实例,并恢复实例的状态。如果删除了基于快照的实例,您可以使用快照镜像创建新实例到与快照相同的状态。
流程
检索您要创建快照的实例的名称或 ID:
$ openstack server list
创建快照:
$ openstack server image create --name <image_name> <instance>
-
将
<image_name
> 替换为新快照镜像的名称。 -
将 &
lt;instance
> 替换为您要从中创建快照的实例的名称或 ID。
-
将
可选: 要在使用实例快照作为模板创建新实例时,要确保磁盘状态一致,请启用 QEMU 客户机代理,并通过向快照镜像中添加以下元数据来指定在快照处理过程中必须静止文件系统:
$ openstack image set --property hw_qemu_guest_agent=yes \ --property os_require_quiesce=yes <image_name>
QEMU 客户机代理是一个后台进程,可帮助管理应用程序执行实例操作系统级别命令。启用此代理向实例添加另一个设备,它使用 PCI 插槽,并限制您可以分配给实例的其他设备数量。它还会导致 Windows 实例显示有关未知硬件设备的警告信息。
11.3. 停用实例
在紧急情况下,如系统故障或访问失败,您可以将实例置于救援模式。这会关闭实例,使用新实例磁盘重启它,并将原始实例磁盘和配置驱动器挂载为重启实例中的卷。您可以连接到重启的实例,以查看原始实例磁盘,以修复系统并恢复您的数据。
流程
执行实例救援:
$ openstack server rescue [--image <image>] <instance>
-
可选: 默认情况下,实例从云管理员提供的救援镜像引导,或者原始实例镜像的新副本。使用
--image
选项指定在救援模式中重启实例时要使用的替代镜像。 -
将 &
lt;instance
> 替换为您要救援的实例的名称或 ID。
-
可选: 默认情况下,实例从云管理员提供的救援镜像引导,或者原始实例镜像的新副本。使用
- 连接到 rescued 实例,以修复问题。
从正常引导磁盘重启实例:
$ openstack server unrescue <instance>
11.4. 填充实例
如果您有一个不使用的实例,但您不想删除的实例,则 shelving 非常有用。当您粘贴一个实例时,您需要保留实例数据和资源分配,但清除实例内存。根据云配置,她的实例会立即或经过时间延迟移到 SHELVED_OFFLOADED
状态。当 SHELVED_OFFLOADED
时,实例数据和资源分配会被删除。
当您填充实例时,计算服务会生成快照镜像来捕获实例的状态,并以以下格式为镜像分配一个名称: < instance>-shelved
。当实例被删除时,会删除此快照镜像。
如果您不再需要一个 shelved 实例,您可以将其删除。您可以一次检查多个实例。
流程
检索您要 shelve 的实例的名称或 ID:
$ openstack server list
填充实例或实例:
$ openstack server shelve <instance> [<instance> ...]
将 &
lt;instance
> 替换为您要 shelve 的实例的名称或 ID。您可以根据需要指定多个实例来 shelve。验证实例是否已 shelved:
$ openstack server list
shelved 实例的状态为
SHELVED_OFFLOADED
。
11.5. 实例管理操作
创建实例后,您可以执行以下管理操作。
表 11.1. 管理操作
操作 | 描述 | 命令 |
---|---|---|
停止实例 | 停止实例。 | |
启动一个实例 | 启动已停止的实例。 | |
暂停正在运行的实例 | 立即暂停正在运行的实例。实例的状态存储在内存中(RAM)。已暂停的实例继续以冻结状态运行。您不会被提示您确认暂停操作。 | |
恢复运行暂停的实例 | 立即恢复暂停的实例。您不会被提示确认恢复操作。 | |
挂起正在运行的实例 | 立即暂停正在运行的实例。实例的状态存储在实例磁盘上。您不会被提示确认 suspend 操作。 | |
恢复运行挂起的实例 | 立即恢复暂停的实例。实例的状态存储在实例磁盘上。您不会被提示确认恢复操作。 | |
删除实例 | 永久销毁实例。您不会被提示您确认 destroy 操作。除非云已配置为启用软删除,否则删除的实例将无法恢复。 注意 删除实例不会删除其附加的卷。您必须单独删除附加的卷。如需更多信息,请参阅存储指南中的删除块存储服务卷。 | |
编辑实例元数据 | 您可以使用实例元数据来指定实例的属性。如需更多信息,请参阅 创建自定义实例。 |
|
添加安全组 | 将指定的安全组添加到实例。 | |
删除安全组 | 从实例移除指定的安全组。 | |
在紧急情况下,如系统故障或访问失败,您可以将实例置于救援模式。这会关闭实例,并将根磁盘挂载到临时服务器。您可以连接到临时服务器来修复系统并恢复您的数据。 也可以将正在运行的实例重新引导到救援模式。例如,如果实例的文件系统损坏,可能需要此操作。 | ||
恢复救援实例 | 重启救援实例。 | |
查看实例日志 | 查看实例控制台日志的最新部分。 | |
当您填充一个实例时,您要保留实例数据和资源分配,但清除实例内存。根据云配置,她的实例会立即或经过时间延迟移到 | ||
取消缩小实例 | 使用 shelved 实例的磁盘镜像恢复实例。 | |
锁定实例 | 锁定实例,以防止非管理员用户对实例执行操作。 | |
软重启实例 | 正常停止并重新启动实例。软重启会在重启实例前安全地关闭所有进程。默认情况下,当您重启实例时,它是软重启。 | |
硬重启实例 | 停止并重启实例。硬重启会关闭实例电源,然后将其重新打开。 | |
重建实例 | 使用新镜像和 disk-partition 选项重建实例,这涉及实例关闭、重新镜像和重启。如果您遇到操作系统问题,而不是终止实例并启动,则使用此选项。 |
第 12 章 创建自定义实例
云用户可以指定在启动实例时要使用的额外数据,如实例在引导时运行的 shell 脚本。云用户可以使用以下方法将数据传递给实例:
- 用户数据
-
使用 在实例启动命令中包含要执行的
cloud-init
的说明。 - 实例元数据
- 创建或更新实例时可以指定的键值对列表。
您可以使用配置驱动器或元数据服务访问传递给实例的额外数据。
- 配置驱动器
-
您可以在启动时将配置驱动器附加到实例。将配置驱动器作为只读驱动器提供给实例。实例可以挂载此驱动器并从中读取文件。您可以使用 config 驱动器作为
cloud-init
信息的来源。当与cloud-init
结合使用以进行服务器 bootstrap 时,配置驱动器很有用,以及您想要将大型文件传递给您的实例时非常有用。例如,您可以将cloud-init
配置为自动挂载配置驱动器,并在初始实例引导期间运行设置脚本。使用config-2
的卷标签创建配置驱动器,并在引导时附加到实例。传递给配置驱动器的任何额外文件的内容都添加到配置驱动器的openstack/{version}/
目录中的user_data
文件中。cloud-init
从此文件检索用户数据。 - 元数据服务
-
提供 REST API 来检索特定于实例的数据。实例通过
169.254.169.254
或fe80::a9fe:a9fe
访问此服务。
cloud-init
可以使用配置驱动器和元数据服务来消耗额外的数据来自定义实例。cloud-init
软件包支持多种数据输入格式。Shell 脚本和 cloud-config
格式是最常见的输入格式:
-
Shell 脚本:数据声明以
#!
或Content-Type: text/x-shellscript
开头。在引导过程中会调用 shell 脚本。 -
cloud-config
格式:数据声明以#cloud-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 请求。
12.1. 使用用户数据自定义实例
您可以使用用户数据在 instance launch 命令中包含指令。cloud-init
执行这些命令,以作为引导过程中的最后一步自定义实例。
流程
创建包含
cloud-init
指令的文件。例如,创建一个 bash 脚本,用于在实例上安装并启用 Web 服务器:$ vim /home/scripts/install_httpd #!/bin/bash yum -y install httpd python-psycopg2 systemctl enable httpd --now
使用
--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
当实例状态为 active 时,附加一个浮动 IP 地址:
$ openstack floating ip create web-server-network $ openstack server add floating ip web-server-instance 172.25.250.123
使用 SSH 登录实例:
$ ssh -i ~/.ssh/web-server-keypair cloud-user@172.25.250.123
检查自定义是否已成功执行。例如,要检查 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>
查看
/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
12.2. 使用元数据自定义实例
您可以使用实例元数据在 instance launch 命令中指定实例的属性。
流程
使用
--property <key=value
> 选项启动实例。例如,要将实例标记为 webserver,请设置以下属性:$ openstack server create \ --image rhel8 \ --flavor default \ --property role=webservers \ --wait web-server-instance
可选:在创建实例后为实例添加一个额外的属性,例如:
$ openstack server set \ --property region=emea \ --wait web-server-instance
12.3. 使用配置驱动器自定义实例
您可以为实例引导过程中附加的实例创建配置驱动器。您可以将内容传递给配置驱动器提供给实例使用。
流程
启用 config 驱动器,并指定包含要在 config 驱动器中提供的内容的文件。例如,以下命令会创建一个名为
config-drive-instance
的新实例,并附加包含文件my-user-data.txt
内容的 config 驱动器:(overcloud)$ openstack server create --flavor m1.tiny \ --config-drive true \ --user-data ./my-user-data.txt \ --image cirros config-drive-instance
此命令使用
config-2
的卷标签创建配置驱动器,它在启动时附加到实例,并将my-user-data.txt
的内容添加到配置驱动器的openstack/{version}/
目录中的user_data
文件中。- 登录实例。
挂载配置驱动器:
如果实例操作系统使用
udev
:# mkdir -p /mnt/config # mount /dev/disk/by-label/config-2 /mnt/config
如果实例操作系统没有使用
udev
,您需要首先识别与配置驱动器对应的块设备:# blkid -t LABEL="config-2" -odevice /dev/vdb # mkdir -p /mnt/config # mount /dev/vdb /mnt/config