创建和管理实例
前言 复制链接链接已复制到粘贴板!
您无法在实例创建过程中将基于角色的访问控制 (RBAC) 共享安全组直接应用到实例。要将 RBAC 共享安全组应用到实例,您必须首先创建端口,将共享安全组应用到该端口,然后将该端口分配给实例。请参阅 添加安全组到端口。
第 1 章 关于实例 复制链接链接已复制到粘贴板!
实例是在云中物理 Compute 节点上运行的独立虚拟机。要启动实例,您需要类别,以及镜像或可引导卷。当您使用镜像启动实例时,提供的镜像会成为包含使用可引导操作系统安装的虚拟磁盘的基础镜像。每个实例都需要一个根磁盘,我们将其指代为实例磁盘。计算服务(nova)调整实例磁盘大小,以匹配您为实例指定的类别规格。
镜像由 Image Service (glance)管理。镜像服务镜像存储包含多个预定义的镜像。Compute 节点为实例提供可用的 vCPU、内存和本地磁盘资源。Block Storage 服务(cinder)提供预定义的卷。实例磁盘数据存储在临时存储中,在删除实例时删除,或者存储在块存储服务提供的持久性卷中。
计算服务是按需提供实例的中央组件。计算服务创建、调度和管理实例,并与用于身份验证的身份服务、用于启动实例的镜像服务、用于用户和管理界面的 Dashboard 服务(horizon)交互。作为云用户,您可以在创建和管理实例时与 Compute 服务交互。您可以使用 OpenStack CLI 或控制面板创建和管理实例。
第 2 章 实例引导源 复制链接链接已复制到粘贴板!
实例的引导源可以是镜像或可引导卷。从镜像引导的实例实例磁盘由 Compute 服务控制,并在实例被删除时删除。从卷引导的实例实例磁盘由块存储服务控制,并远程存储。
镜像包含可引导的操作系统。Image Service (glance)控制镜像存储和管理。您可以从同一基础镜像启动任意数量的实例。每个实例从基础镜像的副本运行。对实例所做的任何更改都不会影响基础镜像。
可引导卷是从包含可引导操作系统的镜像创建的块存储卷。实例可以在实例被删除时,使用可引导卷来持久保留实例数据。您可以在启动实例时使用现有的持久性卷。您也可以在从镜像启动实例时创建持久性存储,以便在实例被删除时保存实例数据。从卷快照创建实例时,会自动创建新的持久性存储卷。
下图显示了您可以在启动实例时创建的实例磁盘和存储。创建的实际实例磁盘和存储取决于使用的引导源和类别。
第 3 章 实例存储类型 复制链接链接已复制到粘贴板!
实例可用的虚拟存储由用于启动实例的类别定义。以下虚拟存储资源可以关联到实例:
- 实例磁盘
- 临时存储
- 交换存储
- 持久性块存储卷
- 配置驱动器
3.1. 实例磁盘 复制链接链接已复制到粘贴板!
为存储实例数据创建的实例磁盘取决于您用于创建实例的引导源。从镜像引导的实例实例磁盘由 Compute 服务控制,并在实例被删除时删除。从卷引导的实例实例磁盘是由块存储服务提供的持久性卷。
3.2. 实例临时存储 复制链接链接已复制到粘贴板!
您可以通过选择配置临时磁盘的类别来指定为实例创建临时磁盘。此临时存储是一个空的额外磁盘,可供实例使用。此存储值由实例类别定义。默认值为 0,表示没有创建二级临时存储。
临时磁盘的出现方式与插入硬盘或缩略驱动器相同。它可作为块设备提供,您可以使用 lsblk 命令进行检查。您可以挂载并使用它,但通常使用块设备。您不能在它所连接的实例之外保留或引用该磁盘。
临时存储数据不包含在实例快照中,在被移除的实例上不可用,然后取消垃圾箱。
3.3. 实例交换存储 复制链接链接已复制到粘贴板!
您可以通过选择配置交换磁盘的类别来指定为实例创建交换磁盘。此交换存储是可供实例使用的额外磁盘,用作运行操作系统的交换空间。
3.4. 实例块存储 复制链接链接已复制到粘贴板!
块存储卷是可供实例使用的持久性存储,无论正在运行的实例的状态如何。您可以将多个块设备附加到实例,其中一个可以是可引导卷。
当您将块存储卷用于实例磁盘数据时,块存储卷仍会保留任何实例重建,即使实例被重新构建了请求了新卷的新镜像。
3.5. 配置驱动器 复制链接链接已复制到粘贴板!
您可以在启动时将配置驱动器附加到实例。配置驱动器以只读驱动器的形式呈现给实例。实例可以挂载此驱动器并从中读取文件。您可以使用配置驱动器作为 cloud-init 信息的来源。配置驱动器在与用于服务器引导的 cloud-init 结合使用时,以及您要将大型文件传递给您的实例时很有用。例如,您可以将 cloud-init 配置为自动挂载配置驱动器,并在初始实例引导过程中运行设置脚本。创建配置驱动器时带有 config-2 的卷标签,并在引导时附加到实例。传递给配置驱动器的任何其他文件的内容添加到 config 驱动器的 openstack/{version}/ 目录中的 user_data 文件中。cloud-init 从此文件检索用户数据。
第 4 章 实例的类别 复制链接链接已复制到粘贴板!
实例类别是一个资源模板,用于指定实例的虚拟硬件配置文件。您可以在启动实例时选择一个类别,以指定要分配给实例的虚拟资源。类别定义虚拟 CPU 的数量、RAM 大小、根磁盘大小以及虚拟存储的大小,包括辅助临时存储和交换内存,以创建该实例。您可以从为云内项目定义的一组可用类别中选择类别。
第 5 章 创建实例 复制链接链接已复制到粘贴板!
在创建实例之前,必须有其他 Red Hat OpenStack Platform (RHOSP)组件可用,如类别、引导源、网络、密钥对和安全组。这些组件用于创建实例,默认不可用。
当您创建实例时,您可以选择具有实例所需的可引导操作系统的引导源、具有实例所需硬件配置文件的类别、您要连接实例的网络以及您需要的任何其他存储,如数据卷和临时存储。
5.1. 先决条件 复制链接链接已复制到粘贴板!
所需的镜像或卷作为引导源提供:
- 有关如何创建镜像的更多信息,请参阅创建和管理镜像 中的 创建镜像。
- 有关如何创建卷的更多信息,请参阅存储指南中的创建块存储卷。
- 有关可用于实例引导源的选项的更多信息,请参阅 实例引导源。
- 类别可用,用于指定所需 CPU、内存和存储容量的数量。类别设置必须满足您选择的镜像指定的磁盘和内存大小的最低要求,否则实例将无法启动。
- 所需的网络可用。有关如何创建网络的更多信息,请参阅网络指南中的创建网络。
5.2. 从镜像创建实例 复制链接链接已复制到粘贴板!
您可以使用镜像作为引导源创建实例。
流程
检索具有实例所需硬件配置文件的类别的名称或 ID:
openstack flavor list
$ openstack flavor listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意选择足够大小的类别,以便镜像成功引导,否则实例将无法启动。
检索具有实例所需软件配置集的镜像名称或 ID:
openstack image list
$ openstack image listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您所需的镜像不可用,您可以下载或创建新镜像。有关如何创建或下载云镜像的详情,请参考 创建镜像。
注意如果需要将超过 26 个卷附加到实例,您用来创建实例的镜像必须具有以下属性:
-
hw_scsi_model=virtio-scsi -
hw_disk_bus=scsi
-
检索您要连接实例的网络的名称或 ID:
openstack network list
$ openstack network listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建实例:
openstack server create --flavor <flavor> \ --image <image> --network <network> \ --wait myInstanceFromImage
$ openstack server create --flavor <flavor> \ --image <image> --network <network> \ --wait myInstanceFromImageCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<flavor> 替换为在第 1 步中检索的类别的名称或 ID。 -
将
<image> 替换为在第 2 步中检索的镜像的名称或 ID。 -
将
<network> 替换为在第 3 步中检索的网络的名称或 ID。您可以根据需要多次使用--network选项将实例连接到多个网络。
-
将
5.3. 从可引导卷创建实例 复制链接链接已复制到粘贴板!
您可以使用可引导卷作为引导源来创建实例。当您需要改进实例数据时,从卷引导您的实例数据。
当您将块存储卷用于实例磁盘数据时,块存储卷仍会保留任何实例重建,即使实例被重新构建了请求了新卷的新镜像。
流程
检索具有实例所需软件配置集的镜像名称或 ID:
openstack image list
$ openstack image listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您所需的镜像不可用,您可以下载或创建新镜像。有关如何创建或下载云镜像的详情,请参考 创建镜像。
注意如果需要将超过 26 个卷附加到实例,您用来创建实例的镜像必须具有以下属性:
-
hw_scsi_model=virtio-scsi -
hw_disk_bus=scsi
-
从镜像创建可引导卷:
openstack volume create --image <image> \ --size <size_gb> --bootable myBootableVolume
$ openstack volume create --image <image> \ --size <size_gb> --bootable myBootableVolumeCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<image> 替换为要写入卷的镜像名称或 ID,在第 1 步中检索。 -
将
<size_gb>替换为卷的大小(以 GB 为单位)。
-
将
检索具有实例所需硬件配置文件的类别的名称或 ID:
openstack flavor list
$ openstack flavor listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检索您要连接实例的网络的名称或 ID:
openstack network list
$ openstack network listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用可引导卷创建实例:
openstack server create --flavor <flavor> \ --volume myBootableVolume --network <network> \ --wait myInstanceFromVolume
$ openstack server create --flavor <flavor> \ --volume myBootableVolume --network <network> \ --wait myInstanceFromVolumeCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<flavor> 替换为在第 3 步中检索的类别的名称或 ID。 -
将
<network> 替换为在第 4 步中检索的网络的名称或 ID。您可以根据需要多次使用--network选项将实例连接到多个网络。
-
将
5.4. 使用 SR-IOV 网络接口创建实例 复制链接链接已复制到粘贴板!
要创建具有单一根 I/O 虚拟化(SR-IOV)网络接口的实例,您需要创建所需的 SR-IOV 端口。
流程
检索具有实例所需硬件配置文件的类别的名称或 ID:
openstack flavor list
$ openstack flavor listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意选择足够大小的类别,以便镜像成功引导,否则实例将无法启动。
提示您可以通过选择具有您需要的策略的类别文件来指定应用到 PCI 透传设备和 SR-IOV 接口的 NUMA 关联性策略。如需有关可用策略的更多信息,请参阅配置实例创建指南中的 类别元数据中的 实例 PCI NUMA 关联性策略。如果您选择了带有 NUMA 关联性策略的类别,您使用的镜像必须具有相同的 NUMA 关联性策略或没有 NUMA 关联性策略。
检索具有实例所需软件配置集的镜像名称或 ID:
openstack image list
$ openstack image listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您所需的镜像不可用,您可以下载或创建新镜像。有关如何创建或下载云镜像的详情,请参考 创建镜像。
提示您可以通过选择具有您需要的策略的镜像来指定应用到您的实例的 NUMA 关联性策略,用于 PCI 透传设备和 SR-IOV 接口。如需有关可用策略的更多信息,请参阅配置实例创建指南中的 类别元数据中的 实例 PCI NUMA 关联性策略。如果选择具有 NUMA 关联性策略的镜像,则您使用的类别必须具有相同的 NUMA 关联性策略或没有 NUMA 关联性策略。
检索您要连接实例的网络的名称或 ID:
openstack network list
$ openstack network listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 SR-IOV 接口所需的端口类型:
openstack port create --network <network> \ --vnic-type <vnic_type> mySriovPort
$ openstack port create --network <network> \ --vnic-type <vnic_type> mySriovPortCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<network> 替换为在第 3 步中检索的网络的名称或 ID。 将
<vnic_type> 替换为以下值之一:-
直接:创建直接模式 SR-IOV 虚拟功能(VF)端口。 -
direct-physical:创建一个直接模式 SR-IOV 物理功能(PF)端口。 -
macvtap:创建一个使用 macvtap 的间接模式 SR-IOV VF 端口向实例公开 virtio 接口。
-
-
将
创建实例:
openstack server create --flavor <flavor> \ --image <image> --port <port> \ --wait mySriovInstance
$ openstack server create --flavor <flavor> \ --image <image> --port <port> \ --wait mySriovInstanceCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<flavor> 替换为在第 1 步中检索的类别的名称或 ID。 -
将
<image> 替换为在第 2 步中检索的镜像的名称或 ID。 -
将
<port> 替换为在第 4 步中创建的端口的名称或 ID。
-
将
5.5. 在端口上创建带有 NUMA 关联性的实例 复制链接链接已复制到粘贴板!
要在使用所需 NUMA 关联性策略创建端口上的带有 NUMA 关联性端口的实例,请在创建实例时指定端口。
端口 NUMA 关联性策略的优先级高于类别、镜像和 PCI NUMA 关联性策略。云操作员可以为每个 PCI 透传设备设置默认 NUMA 关联性策略。您可以使用实例类别、镜像或端口覆盖应用到实例的默认 NUMA 关联性策略。
先决条件
-
在云平台中必须启用
port-numa-affinity-policy扩展。 - service 插件必须在 Networking 服务(neutron)中配置。
流程
使用您需要的 NUMA 关联性策略创建端口:
openstack port create --network <network> \ [--numa-policy-required | --numa-policy-preferred | --numa-policy-legacy] \ myNUMAAffinityPort
$ openstack port create --network <network> \ [--numa-policy-required | --numa-policy-preferred | --numa-policy-legacy] \ myNUMAAffinityPortCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 <
network> 替换为您要连接实例的租户网络的名称或 ID。 使用以下选项之一指定要应用到端口的 NUMA 关联性策略:
-
调度此端口
所需的 --NUMA-policy-required- NUMA 关联性策略。 -
--NUMA-policy-preferred- NUMA 关联性策略首选调度此端口。 -
使用旧模式调度此端口的 --NUMA-policy-legacy- NUMA 关联性策略。
-
调度此端口
-
将 <
创建实例:
openstack server create --flavor <flavor> \ --image <image> --port <port> \ --wait myNUMAAffinityInstance
$ openstack server create --flavor <flavor> \ --image <image> --port <port> \ --wait myNUMAAffinityInstanceCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 &
lt;flavor> 替换为具有实例所需硬件配置集的类别名称或 ID。 -
将 &
lt;image> 替换为具有实例所需软件配置集的镜像名称或 ID。 -
将
<port> 替换为在第 1 步中创建的端口的名称或 ID。
-
将 &
第 6 章 创建具有保证最小带宽 QoS 的实例 复制链接链接已复制到粘贴板!
您可以使用服务质量(QoS)策略创建请求保证最小带宽的实例。
具有保证最小带宽规则的 QoS 策略被分配给特定物理网络上的端口。当您创建使用配置的端口的实例时,计算调度服务为满足此请求的实例选择主机。计算调度服务在选择要部署实例的主机之前,检查放置服务是否有其他实例在各个物理接口预留的带宽量。
限制/限制
- 您只能在创建新实例时分配保证的最小带宽 QoS 策略。您无法为已在运行的实例分配保证的最小带宽 QoS 策略,因为计算服务仅在创建或移动操作期间更新实例的资源使用情况,这意味着无法保证实例可用的最小带宽。
您无法实时迁移使用具有资源请求的端口的实例,如保证的最小带宽 QoS 策略。运行以下命令检查端口是否有资源请求:
openstack port show <port_name/port_id>
$ openstack port show <port_name/port_id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
先决条件
- 提供了具有最小带宽规则的 QoS 策略。如需更多信息,请参阅网络指南中的配置服务质量(QoS)策略。
流程
列出可用的 QoS 策略:
openstack network qos policy list
(overcloud)$ openstack network qos policy listCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查每个可用策略的规则,以确定哪些具有所需的最小带宽:
openstack network qos policy show policy0
(overcloud)$ openstack network qos policy show policy0Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从适当的策略创建端口:
openstack port create port-normal-qos --network net0 --qos-policy policy0
(overcloud)$ openstack port create port-normal-qos --network net0 --qos-policy policy0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建实例,指定要使用的 NIC 端口:
openstack server create --flavor cirros256 --image cirros-0.3.5-x86_64-disk --nic port-id=port-normal-qos --wait qos_instance
$ openstack server create --flavor cirros256 --image cirros-0.3.5-x86_64-disk --nic port-id=port-normal-qos --wait qos_instanceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出中的"ACTIVE"状态表示您已在主机上成功创建了实例,可提供请求的保证最小带宽。
6.1. 从实例中删除保证的最小带宽 QoS 复制链接链接已复制到粘贴板!
如果要从实例丢弃保证的最小带宽 QoS 策略限制,您可以分离接口。
流程
要分离接口,请输入以下命令:
openstack server remove port <vm_name|vm_id> <port_name|port_id>
$ openstack server remove port <vm_name|vm_id> <port_name|port_id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 7 章 使用 VDPA 接口创建实例 复制链接链接已复制到粘贴板!
该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。
您可以通过为具有 vNIC 类型 VDPA 的实例的实例请求端口,创建带有 VDPA 接口的实例。
限制:
- 您无法挂起、实时迁移、她半或撤离具有 VDPA 接口的实例。
- 您无法从实例分离 VDPA 接口,然后将其重新关联到实例。
流程
创建映射到物理网络的网络:
openstack network create vdpa_network \ --provider-physical-network tenant \ --provider-network-type vlan \ --provider-segment 1337
$ openstack network create vdpa_network \ --provider-physical-network tenant \ --provider-network-type vlan \ --provider-segment 1337Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为网络创建一个子网:
openstack subnet create vdpa_subnet \ --network vdpa_net1 \ --subnet-range 192.0.2.0/24 \ --dhcp
$ openstack subnet create vdpa_subnet \ --network vdpa_net1 \ --subnet-range 192.0.2.0/24 \ --dhcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从启用了 VDPA 的 NIC 创建端口:
openstack port create vdpa_direct_port \ --network vdpa_network \ --vnic-type vdpa \
$ openstack port create vdpa_direct_port \ --network vdpa_network \ --vnic-type vdpa \Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建实例,指定要使用的 NIC 端口:
openstack server create vdpa_instance \ --flavor cirros256 --image cirros-0.3.5-x86_64-disk \ --nic port-id=vdpa_direct_port --wait
$ openstack server create vdpa_instance \ --flavor cirros256 --image cirros-0.3.5-x86_64-disk \ --nic port-id=vdpa_direct_port --waitCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出中的"ACTIVE"状态表示您在提供请求的 VDPA 接口的主机上成功创建了实例。
第 8 章 更新实例 复制链接链接已复制到粘贴板!
您可以从正在运行的实例(如持久性卷存储、网络接口或公共 IP 地址)添加和删除其他资源。您还可以更新实例元数据和实例所属的安全组。
8.1. 将网络附加到实例 复制链接链接已复制到粘贴板!
您可以将网络附加到正在运行的实例。将网络连接到实例时,计算服务在网络上为实例创建端口。当您要使用默认安全组且网络上只有一个子网时,使用网络将网络接口附加到实例。
流程
确定可用的网络,并记录您要附加到实例的网络的名称或 ID:
openstack network list
(overcloud)$ openstack network listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您所需的网络不可用,请创建一个新网络:
openstack network create <network>
(overcloud)$ openstack network create <network>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将网络附加到您的实例:
openstack server add network <instance> <network>
$ openstack server add network <instance> <network>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<instance> 替换为您要附加网络的实例的名称或 ID。 -
将
<network> 替换为您要附加到实例的网络的名称或 ID。
-
将
其他资源
- 命令行界面参考中的 OpenStack network create 命令.
- 在 网络指南 中创建 网络.
8.2. 从实例分离网络 复制链接链接已复制到粘贴板!
您可以将网络从实例分离。
分离网络分离所有网络端口。如果实例在一个网络上有多个端口,并且只想分离其中一个端口,请按照 从实例分离端口 来分离端口。
流程
识别附加到实例的网络:
openstack server show <instance>
(overcloud)$ openstack server show <instance>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将网络从实例分离:
openstack server remove network <instance> <network>
$ openstack server remove network <instance> <network>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<instance> 替换为您要从中删除网络的实例的名称或 ID。 -
将 &
lt;network> 替换为您要从实例中删除的网络的名称或 ID。
-
将
8.3. 将端口附加到实例 复制链接链接已复制到粘贴板!
您可以使用端口将网络接口附加到正在运行的实例。您可以一次将端口附加到一个实例。当您要使用自定义安全组或网络上有多个子网时,使用端口将网络接口附加到实例。
如果使用网络附加网络接口,则会自动创建端口。如需更多信息 ,请参阅将网络附加到实例。
Red Hat OpenStack Platform (RHOSP)为每个实例提供最多 24 个接口。默认情况下,您可以在实例中添加最多 16 个 PCIe 设备,然后才能重启实例来添加更多。RHOSP 管理员可以使用 NovaLibvirtNumPciePorts 参数来配置可添加到实例的 PCIe 设备数量,然后再重启实例来添加更多设备。
先决条件
- 如果将带有 SR-IOV vNIC 的端口附加到实例,则适当的物理网络主机上必须有一个可用的 SR-IOV 设备,实例必须具有空闲的 PCIe 插槽。
流程
创建您要附加到实例的端口:
openstack port create --network <network> [--vnic-type <vnic-type>] <port>
$ openstack port create --network <network> [--vnic-type <vnic-type>] <port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 &
lt;network> 替换为要创建端口的网络的名称或 ID。 可选: 要创建 SR-IOV 端口,将 &
lt;vnic-type> 替换为以下值之一:-
直接:创建直接模式 SR-IOV 虚拟功能(VF)端口。 -
direct-physical:创建一个直接模式 SR-IOV 物理功能(PF)端口。 -
macvtap:创建一个通过 macvtap 设备连接到实例的 SR-IOV 端口。
-
-
将
<port> 替换为您要附加到实例的端口的名称或 ID。
-
将 &
将端口附加到您的实例:
openstack server add port <instance> <port>
$ openstack server add port <instance> <port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<instance> 替换为您要附加端口的实例的名称或 ID。 -
将
<port> 替换为您要附加到实例的端口的名称或 ID。
-
将
验证端口是否已附加到您的实例:
openstack port list --device-id <instance_UUID>
$ openstack port list --device-id <instance_UUID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 <
instance_UUID> 替换为您附加了端口的实例 UUID。
其他资源
- 命令行界面参考中的 OpenStack port create 命令.
8.4. 从实例分离端口 复制链接链接已复制到粘贴板!
您可以从实例分离端口。
流程
识别附加到实例的端口:
openstack server show <instance>
(overcloud)$ openstack server show <instance>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从实例分离端口:
openstack server remove port <instance> <port>
$ openstack server remove port <instance> <port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<instance> 替换为您要从中删除端口的实例的名称或 ID。 -
将 &
lt;port> 替换为您要从实例中删除的端口的名称或 ID。
-
将
8.5. 将卷附加到实例 复制链接链接已复制到粘贴板!
您可以将卷附加到实例以获取持久性存储。您可以一次将卷附加到一个实例,除非卷已配置为多附加卷。有关创建多重附加卷的更多信息,请参阅 可附加到多个实例 的卷。
先决条件
-
要附加一个多附件卷,环境变量
OS_COMPUTE_API_VERSION设置为 2.60 或更高版本。 - 实例已完全运行,或者完全停止。当实例处于启动或关闭时,您无法将卷附加到实例。
要将超过 26 个卷附加到实例,用于创建实例的镜像必须具有以下属性:
-
hw_scsi_model=virtio-scsi -
hw_disk_bus=scsi
-
流程
确定可用的卷,并记录您要附加到您的实例的卷的名称或 ID:
openstack volume list
(overcloud)$ openstack volume listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将卷附加到您的实例:
openstack server add volume <instance> <volume>
$ openstack server add volume <instance> <volume>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<instance> 替换为您要将卷附加到的实例的名称或 ID。 将
<volume> 替换为您要附加到实例的卷的名称或 ID。注意如果命令返回以下错误,则您选择附加到实例的卷是一个多重附加卷,因此您必须使用 Compute API 版本 2.60 或更高版本:
Multiattach volumes are only supported starting with compute API version 2.60. (HTTP 400) (Request-ID: req-3a969c31-e360-4c79-a403-75cc6053c9e5)
Multiattach volumes are only supported starting with compute API version 2.60. (HTTP 400) (Request-ID: req-3a969c31-e360-4c79-a403-75cc6053c9e5)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以设置环境变量
OS_COMPUTE_API_VERSION=2.72,或者在将卷添加到实例时包含--os-compute-api-version参数:openstack --os-compute-api-version 2.72 server add volume <instance> <volume>
$ openstack --os-compute-api-version 2.72 server add volume <instance> <volume>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
提示specify
--os-compute-api-version 2.20或更高版本,将卷添加到状态为SHELVED或 SHELVED_OFFLOADED 的实例。-
将
确认卷已附加到实例或实例:
openstack volume show <volume>
$ openstack volume show <volume>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<volume> 替换为要显示的卷的名称或 ID。输出示例:
+-----------------------------------------------------+----------------------+---------+-----+-----------------------------------------------------------------------------------------------+ | 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 | +-----------------------------------------------------+----------------------+---------+-----+-----------------------------------------------------------------------------------------------+
+-----------------------------------------------------+----------------------+---------+-----+-----------------------------------------------------------------------------------------------+ | 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 | +-----------------------------------------------------+----------------------+---------+-----+-----------------------------------------------------------------------------------------------+Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.6. 查看附加到实例的卷 复制链接链接已复制到粘贴板!
您可以查看附加到特定实例的卷。
先决条件
-
您使用
python-openstackclient 5.5.0。
流程
列出附加到实例的卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.7. 将卷从实例分离 复制链接链接已复制到粘贴板!
您可以将卷从实例分离。
分离网络分离所有网络端口。如果实例在一个网络上有多个端口,并且只想分离其中一个端口,请按照 从实例分离端口 来分离端口。
先决条件
- 实例已完全运行,或者完全停止。当实例处于引导或关闭时,您无法从实例分离卷。
流程
识别附加到实例的卷:
openstack server show <instance>
(overcloud)$ openstack server show <instance>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将卷从实例分离:
openstack server remove volume <instance> <volume>
$ openstack server remove volume <instance> <volume>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<instance> 替换为您要从中删除卷的实例的名称或 ID。 将 &
lt;volume> 替换为您要从实例中删除的卷的名称或 ID。注意specify
--os-compute-api-version 2.20或更高版本,从状态为SHELVED或SHELVED_OFFLOADED的实例中删除卷。
-
将
第 9 章 提供实例的公共访问权限 复制链接链接已复制到粘贴板!
新实例在实例分配到的网络上自动接收具有固定 IP 地址的端口。此 IP 地址是私有的,并永久与实例关联,直到实例被删除为止。固定 IP 地址用于实例之间的通信。
您可以将公共实例直接连接到共享外部网络,其中将公共 IP 地址直接分配给实例。这在使用私有云时非常有用。
您还可以通过具有路由到外部提供商网络的项目网络提供实例的公共访问。如果您在公共云或公共 IP 地址有限时,这是首选的方法。若要通过项目网络提供公共访问权限,项目网络必须连接到将网关设置为外部网络的路由器。若要让外部流量访问实例,云用户必须将浮动 IP 地址与该实例关联。
要提供对实例的访问权限,无论是连接到共享外部网络还是路由的提供商网络,您必须为所需的协议(如 SSH、ICMP 或 HTTP)配置安全组规则。您还必须在创建过程中将密钥对传递给实例,以便您可以远程访问实例。
9.1. 先决条件 复制链接链接已复制到粘贴板!
- 外部网络必须具有子网来提供浮动 IP 地址。
- 项目网络必须连接到将外部网络配置为网关的路由器。
9.2. 使用安全组和密钥对保护实例访问 复制链接链接已复制到粘贴板!
安全组是一组 IP 过滤规则,它们控制网络和协议对实例的访问,如 ICMP,允许您 ping 实例,以及 SSH 允许您连接实例。安全组规则应用到项目中的所有实例。
所有项目都有一个名为 default 的默认安全组,当您没有为实例指定安全组时使用。默认情况下,默认安全组允许所有传出流量,并拒绝来自同一安全组中实例以外的任何来源的所有传入流量。您可以将规则添加到 default 安全组,也可以为项目创建新的安全组。您可以在实例创建过程中将一个或多个安全组应用到实例。要将安全组应用到正在运行的实例,请将该安全组应用到与实例连接的端口。
您无法在实例创建过程中将基于角色的访问控制 (RBAC) 共享安全组直接应用到实例。要将 RBAC 共享安全组应用到实例,您必须首先创建端口,将共享安全组应用到该端口,然后将该端口分配给实例。请参阅 添加安全组到端口。
密钥对是 SSH 或 x509 凭据,在实例启动时注入到实例中,以启用对实例的远程访问。您可以在 RHOSP 中创建新密钥对,或导入现有的密钥对。每个用户应至少有一个密钥对。密钥对可用于多个实例。
您无法在项目中的用户间共享密钥对,因为每个密钥对属于创建或导入密钥对的单独用户,而不是项目。
9.2.1. 创建安全组 复制链接链接已复制到粘贴板!
您可以创建新的安全组,以应用到项目中的实例和端口。
流程
可选: 要确保您所需的安全组尚不存在,请查看可用的安全组及其规则:
openstack security group list openstack security group rule list <sec_group>
$ openstack security group list $ openstack security group rule list <sec_group>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 <
sec_group> 替换为您从可用安全组列表中检索的安全组的名称或 ID。
-
将 <
创建安全组:
openstack security group create mySecGroup
$ openstack security group create mySecGroupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在您的安全组中添加规则:
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 <protocol> \ [--dst-port <port-range>] \ [--remote-ip <ip-address> | --remote-group <group>] \ [--ingress | --egress] mySecGroupCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<protocol> 替换为您要允许与您的实例通信的协议名称。 -
可选:将
<port-range> 替换为为协议打开的目标端口或端口范围。IP 协议 TCP、UDP 和 SCTP 是必需的。设置为-1以允许指定协议的所有端口。 -
可选: 您可以使用
--remote-ip指定远程 IP 地址块( or--remote-group) 来只允许从指定的 IP 地址访问,以指定该规则只适用于来自远程组的成员的接口的数据包。如果使用--remote-ip,请将 <ip-address> 替换为远程 IP 地址块。您可以使用 CIDR 表示法。如果使用--remote-group,请将 替换为现有安全组的名称或 ID。如果未指定选项,则允许访问所有地址,因为远程 IP 访问范围默认为 (IPv4 默认:0.0.0.0/0;IPv6 默认:::/0)。 -
指定协议规则应用到的网络流量的方向,可以是传入(
入口)或传出(egress)。如果没有指定,则默认为ingress。
-
将
重复步骤 3,直到您已经为要允许访问实例的所有协议创建了规则。以下示例创建了允许 SSH 连接到安全组
mySecGroup中的实例的规则:openstack security group rule create --protocol tcp \ --dst-port 22 mySecGroup
$ openstack security group rule create --protocol tcp \ --dst-port 22 mySecGroupCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.2.2. 更新安全组规则 复制链接链接已复制到粘贴板!
您可以更新您有权访问的任何安全组的规则。
流程
检索您要为其更新规则的安全组的名称或 ID:
openstack security group list
$ openstack security group listCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 确定您需要应用到安全组的规则。
在您的安全组中添加规则:
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 <protocol> \ [--dst-port <port-range>] \ [--remote-ip <ip-address> | --remote-group <group>] \ [--ingress | --egress] <group_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<protocol> 替换为您要允许与您的实例通信的协议名称。 -
可选:将
<port-range> 替换为为协议打开的目标端口或端口范围。IP 协议 TCP、UDP 和 SCTP 是必需的。设置为-1以允许指定协议的所有端口。 -
可选: 您可以使用
--remote-ip指定远程 IP 地址块( or--remote-group) 来只允许从指定的 IP 地址访问,以指定该规则只适用于来自远程组的成员的接口的数据包。如果使用--remote-ip,请将 <ip-address> 替换为远程 IP 地址块。您可以使用 CIDR 表示法。如果使用--remote-group,请将 替换为现有安全组的名称或 ID。如果未指定选项,则允许访问所有地址,因为远程 IP 访问范围默认为 (IPv4 默认:0.0.0.0/0;IPv6 默认:::/0)。 -
指定协议规则应用到的网络流量的方向,可以是传入(
入口)或传出(egress)。如果没有指定,则默认为ingress。 -
使用您要将规则应用到的安全组的名称或 ID 替换
。
-
将
重复步骤 3,直到您已经为要允许访问实例的所有协议创建了规则。以下示例创建了允许 SSH 连接到安全组
mySecGroup中的实例的规则:openstack security group rule create --protocol tcp \ --dst-port 22 mySecGroup
$ openstack security group rule create --protocol tcp \ --dst-port 22 mySecGroupCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.2.3. 删除安全组规则 复制链接链接已复制到粘贴板!
您可以从安全组中删除规则。
流程
识别规则应用到的安全组:
openstack security group list
$ openstack security group listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检索与安全组关联的规则 ID:
openstack security group show <sec-group>
$ openstack security group show <sec-group>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除规则或规则:
openstack security group rule delete <rule> [<rule> ...]
$ openstack security group rule delete <rule> [<rule> ...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<rule> 替换为要删除的规则的 ID。您可以通过指定一个以空格分隔的规则 ID 列表来删除多个规则。
9.2.4. 将安全组添加到端口 复制链接链接已复制到粘贴板!
default 安全组应用于没有指定替代安全组的实例。您可以将替代安全组应用到正在运行的实例上的端口。
流程
确定您要将安全组应用到的实例上的端口:
openstack port list --server myInstancewithSSH
$ openstack port list --server myInstancewithSSHCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将安全组应用到端口:
openstack port set --security-group <sec_group> <port>
$ openstack port set --security-group <sec_group> <port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 <
;sec_group> 替换为您要应用到正在运行的实例端口的安全组的名称或 ID。您可以根据需要多次使用--security-group选项应用多个安全组。
9.2.5. 从端口中删除安全组 复制链接链接已复制到粘贴板!
要从端口中删除安全组,首先需要删除所有安全组,然后重新添加您要分配给端口的安全组。
流程
列出与端口关联的所有安全组,并记录您要与端口关联的安全组 ID:
openstack port show <port>
$ openstack port show <port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除与端口关联的所有安全组:
openstack port set --no-security-group <port>
$ openstack port set --no-security-group <port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将安全组重新应用到端口:
openstack port set --security-group <sec_group> <port>
$ openstack port set --security-group <sec_group> <port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 <
sec_group> 替换为您要重新应用到运行的实例的安全组的 ID。您可以根据需要多次使用--security-group选项应用多个安全组。
9.2.6. 删除安全组 复制链接链接已复制到粘贴板!
您可以删除没有与任何端口关联的安全组。
流程
检索您要删除的安全组的名称或 ID:
openstack security group list
$ openstack security group listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检索可用端口的列表:
openstack port list
$ openstack port listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查每个端口是否有关联的安全组:
openstack port show <port-uuid> -c security_group_ids
$ openstack port show <port-uuid> -c security_group_idsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您要删除的安全组与任何端口关联,您必须首先从端口中删除该安全组。如需更多信息 ,请参阅从端口中删除安全组。
删除安全组:
openstack security group delete <group> [<group> ...]
$ openstack security group delete <group> [<group> ...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要删除的组的 ID 替换
。您可以通过指定一个以空格分隔的组的 ID 列表来删除多个组。
9.2.7. 生成一个新的 SSH 密钥对 复制链接链接已复制到粘贴板!
您可以创建一个新的 SSH 密钥对,以便在项目内使用。
使用 x509 证书为 Windows 实例创建密钥对。
流程
创建密钥对,并将私钥保存在您的本地
.ssh目录中:openstack keypair create <keypair> > ~/.ssh/<keypair>.pem
$ openstack keypair create <keypair> > ~/.ssh/<keypair>.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<keypair> 替换为新密钥对的名称。保护私钥:
chmod 600 ~/.ssh/<keypair>.pem
$ chmod 600 ~/.ssh/<keypair>.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.2.8. 导入现有的 SSH 密钥对 复制链接链接已复制到粘贴板!
您可以在 Red Hat OpenStack Platform (RHOSP)外部创建的项目中导入 SSH 密钥,方法是在创建新密钥对时提供公钥文件。
流程
从现有密钥文件创建密钥对,并将私钥保存在本地
.ssh目录中:要从现有公钥文件导入密钥对,请输入以下命令:
openstack keypair create --public-key ~/.ssh/<public_key>.pub \ <keypair> > ~/.ssh/<keypair>.pem
$ openstack keypair create --public-key ~/.ssh/<public_key>.pub \ <keypair> > ~/.ssh/<keypair>.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 <
public_key> 替换为您要用来创建密钥对的公钥文件的名称。 -
将
<keypair> 替换为新密钥对的名称。
-
将 <
要从现有私钥文件导入密钥对,请输入以下命令:
openstack keypair create --private-key ~/.ssh/<private_key> \ <keypair> > ~/.ssh/<keypair>.pem
$ openstack keypair create --private-key ~/.ssh/<private_key> \ <keypair> > ~/.ssh/<keypair>.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 <
private_key> 替换为您要用来创建密钥对的公钥文件的名称。 -
将
<keypair> 替换为新密钥对的名称。
-
将 <
保护私钥:
chmod 600 ~/.ssh/<keypair>.pem
$ chmod 600 ~/.ssh/<keypair>.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3. 为实例分配浮动 IP 地址 复制链接链接已复制到粘贴板!
您可以为实例分配公共浮动 IP 地址,以启用与云外的网络的通信,包括互联网。云管理员为外部网络配置可用的浮动 IP 地址池。您可以将这个池中的浮动 IP 地址分配给您的项目,然后将浮动 IP 地址与您的实例关联。
项目具有有限的浮动 IP 地址配额,可供项目中的实例使用,默认为 50。因此,当您不再需要时,释放 IP 地址以便重复使用。
先决条件
- 实例必须位于外部网络上,或位于连接到外部网络的路由器上的项目网络作为网关的项目网络。
- 实例要连接的外部网络必须具有提供浮动 IP 地址的子网。
流程
检查分配给当前项目的浮动 IP 地址:
openstack floating ip list
$ openstack floating ip listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有要使用的浮动 IP 地址,请从外部网络分配池中分配一个浮动 IP 地址到当前项目:
openstack floating ip create <provider-network>
$ openstack floating ip create <provider-network>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 <
;provider-network> 替换为您要用来提供外部访问的外部网络的名称或 ID。提示默认情况下,浮动 IP 地址从外部网络池中随机分配。云管理员可使用 --floating-ip-address 选项从外部网络分配特定的浮动 IP 地址。
将浮动 IP 地址分配给实例:
openstack server add floating ip [--fixed-ip-address <ip_address>] \ <instance> <floating_ip>
$ openstack server add floating ip [--fixed-ip-address <ip_address>] \ <instance> <floating_ip>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 &
lt;instance> 替换为您要提供公共访问权限的实例的名称或 ID。 -
将
<floating_ip> 替换为您要分配给实例的浮动 IP 地址。 -
可选:将 <
ip_address> 替换为您要将浮动 IP 附加到的接口的 IP 地址。默认情况下,这会将浮动 IP 地址附加到第一个端口。
-
将 &
验证浮动 IP 地址是否已分配给实例:
openstack server show <instance>
$ openstack server show <instance>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
9.4. 从实例取消关联浮动 IP 地址 复制链接链接已复制到粘贴板!
当实例不再需要公共访问权限时,将其从实例取消关联,并将它返回到分配池。
流程
从实例取消关联浮动 IP 地址:
openstack server remove floating ip <instance> <ip_address>
$ openstack server remove floating ip <instance> <ip_address>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 &
lt;instance> 替换为您要从中删除公共访问权限的实例的名称或 ID。 -
将
<floating_ip> 替换为分配给实例的浮动 IP 地址。
-
将 &
将浮动 IP 地址释放回分配池:
openstack floating ip delete <ip_address>
$ openstack floating ip delete <ip_address>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认浮动 IP 地址已被删除,且不再可用于分配:
openstack floating ip list
$ openstack floating ip listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5. 创建具有 SSH 访问权限的实例 复制链接链接已复制到粘贴板!
您可以在创建实例时指定密钥对来提供实例的 SSH 访问。密钥对是 SSH 或 x509 凭据,在实例启动时注入到实例中。每个项目应至少有一个密钥对。密钥对属于单个用户,而不是项目。
您不能在创建实例后将密钥对与实例关联。
您可以在实例创建过程中直接将安全组应用到实例,或应用到正在运行的实例上的端口。
您无法在实例创建过程中将基于角色的访问控制 (RBAC) 共享安全组直接应用到实例。要将 RBAC 共享安全组应用到实例,您必须首先创建端口,将共享安全组应用到该端口,然后将该端口分配给实例。请参阅 添加安全组到端口。
先决条件
- 可以使用密钥对 SSH 到您的实例。如需更多信息,请参阅生成新的 SSH 密钥对。
- 您计划在 上创建实例的网络必须是外部网络,或者连接到将外部网络配置为网关的路由器的项目网络。有关更多信息,请参阅网络指南中的 添加路由器。
- 实例连接的外部网络必须具有子网来提供浮动 IP 地址。
- 安全组允许 SSH 访问实例。如需更多信息,请参阅使用安全组和密钥对保护实例访问。
-
实例所基于的镜像包含
cloud-init软件包,用于将 SSH 公钥注入到实例中。 - 一个浮动 IP 地址可用于分配给您的实例。有关更多信息,请参阅将浮动 IP 地址分配给实例。
流程
检索具有实例所需硬件配置文件的类别的名称或 ID:
openstack flavor list
$ openstack flavor listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意选择足够大小的类别,以便镜像成功引导,否则实例将无法启动。
检索具有实例所需软件配置集的镜像名称或 ID:
openstack image list
$ openstack image listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您所需的镜像不可用,您可以下载或创建新镜像。有关创建或下载云镜像的详情,请参考 创建镜像。
检索您要连接实例的网络的名称或 ID:
openstack network list
$ openstack network listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检索您要用来远程访问实例的密钥对名称:
openstack keypair list
$ openstack keypair listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建具有 SSH 访问的实例:
openstack server create --flavor <flavor> \ --image <image> --network <network> \ [--security-group <secgroup>] \ --key-name <keypair> --wait myInstancewithSSH
$ openstack server create --flavor <flavor> \ --image <image> --network <network> \ [--security-group <secgroup>] \ --key-name <keypair> --wait myInstancewithSSHCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<flavor> 替换为在第 1 步中检索的类别的名称或 ID。 -
将
<image> 替换为在第 2 步中检索的镜像的名称或 ID。 -
将
<network> 替换为在第 3 步中检索的网络的名称或 ID。您可以根据需要多次使用--network选项将实例连接到多个网络。 -
可选:
默认安全组应用到没有指定替代安全组的实例。您可以在实例创建过程中直接将替代安全组应用到实例,或应用到正在运行的实例上的端口。在创建实例时,使用--security-group选项指定备选安全组。有关向正在运行的实例上的端口添加安全组的详情,请参考 向端口 添加安全组。 -
将
<keypair> 替换为在第 4 步中检索的密钥对的名称或 ID。
-
将
为实例分配一个浮动 IP 地址:
openstack server add floating ip myInstancewithSSH <floating_ip>
$ openstack server add floating ip myInstancewithSSH <floating_ip>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<floating_ip> 替换为您要分配给实例的浮动 IP 地址。使用自动创建的
cloud-user帐户来验证您可以使用 SSH 登录您的实例:ssh -i ~/.ssh/<keypair>.pem cloud-user@<floatingIP> [cloud-user@demo-server1 ~]$
$ ssh -i ~/.ssh/<keypair>.pem cloud-user@<floatingIP> [cloud-user@demo-server1 ~]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 10 章 连接到实例 复制链接链接已复制到粘贴板!
在实例安全组规则中允许协议时,您可以使用 SSH 或 WinRM 等远程 shell 从云外部访问实例。您还可以直接连接到实例的控制台,以便您可以调试,即使网络连接失败。
如果您没有为实例提供密钥对,或者为实例分配安全组,则只能使用 VNC 从云内部访问实例。您无法 ping 实例。
10.1. 访问实例控制台 复制链接链接已复制到粘贴板!
您可以通过在浏览器中输入 VNC 控制台 URL 来直接连接到实例的 VNC 控制台。
流程
要显示实例的 VNC 控制台 URL,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 要直接连接到 VNC 控制台,请在浏览器中输入显示的 URL。
10.2. 登录实例 复制链接链接已复制到粘贴板!
您可以远程登录到公共实例。
先决条件
- 您有实例的密钥对证书。证书在创建密钥对时下载。如果您没有自己创建密钥对,请询问您的管理员。
- 实例配置为公共实例。有关公共实例要求的更多信息,请参阅 提供实例的公共访问权限。
- 您有一个云用户帐户。
流程
检索您要登录的实例的浮动 IP 地址:
openstack server show <instance>
$ openstack server show <instance>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 &
lt;instance> 替换为您要连接的实例的名称或 ID。使用自动创建的
cloud-user帐户登录到您的实例:ssh -i ~/.ssh/<keypair>.pem cloud-user@<floatingIP> [cloud-user@demo-server1 ~]$
$ ssh -i ~/.ssh/<keypair>.pem cloud-user@<floatingIP> [cloud-user@demo-server1 ~]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<keypair> 替换为密钥对的名称。 将
<floating_ip> 替换为实例的浮动 IP 地址。提示您可以使用以下命令在没有浮动 IP 地址的情况下登录到实例:
openstack server ssh --login cloud-user \ --identity ~/.ssh/<keypair>.pem --private <instance>
$ openstack server ssh --login cloud-user \ --identity ~/.ssh/<keypair>.pem --private <instance>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<keypair> 替换为密钥对的名称。 -
将 &
lt;instance> 替换为您要连接的实例的名称或 ID。
-
将
-
将
第 11 章 管理实例 复制链接链接已复制到粘贴板!
您可以对实例执行管理操作,如重新定义实例大小或移除实例。有关管理操作的完整列表,请参阅 实例管理操作。
11.1. 调整实例大小 复制链接链接已复制到粘贴板!
如果需要增加或减少实例的内存或 CPU 数量,您可以重新定义实例的大小。要调整实例大小,请为具有所需容量的实例选择一个新类别。重新定义实例重建并重启实例的大小。
流程
检索您要调整大小的实例的名称或 ID:
openstack server list
$ openstack server listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检索您要用来调整实例大小的类别名称或 ID:
openstack flavor list
$ openstack flavor listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 调整实例大小:
openstack server resize --flavor <flavor> \ --wait <instance>
$ openstack server resize --flavor <flavor> \ --wait <instance>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<flavor> 替换为在第 2 步中检索的类别的名称或 ID。 -
将
<instance> 替换为您要调整大小的实例的名称或 ID。
注意调整大小可能需要时间。实例上的操作系统在实例关闭之前执行受控的关闭,并且实例重新调整大小。在这段时间中,实例状态为
RESIZE:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
调整大小完成后,实例状态将更改为
VERIFY_RESIZE。现在,您必须确认或恢复调整大小:要确认调整大小,请输入以下命令:
openstack server resize confirm <instance>
$ openstack server resize confirm <instance>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要恢复调整大小,请输入以下命令:
openstack server resize revert <instance>
$ openstack server resize revert <instance>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 实例恢复为原始类别,其状态更改为
ACTIVE。
如果没有在配置的时间范围内确认或恢复,云可能会被配置为自动确认实例大小。
11.2. 创建实例快照 复制链接链接已复制到粘贴板!
快照是捕获实例运行磁盘状态的镜像。您可以对实例进行快照来创建镜像,以用作模板来创建新实例。通过快照,您可以从另一个实例创建新实例,并恢复实例的状态。如果删除了基于快照的实例,您可以使用快照镜像创建新实例到与快照相同的状态。
流程
检索您要为其快照的实例名称或 ID:
openstack server list
$ openstack server listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建快照:
openstack server image create --name <image_name> <instance>
$ openstack server image create --name <image_name> <instance>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<image_name> 替换为新快照镜像的名称。 -
将
<instance> 替换为您要创建快照的实例的名称或 ID。
-
将
可选:在使用实例快照作为模板创建新实例时,要确保磁盘状态一致,请启用 QEMU 客户机代理,并通过将以下元数据添加到快照镜像来指定在快照处理过程中必须静止文件系统:
openstack image set --property hw_qemu_guest_agent=yes \ --property os_require_quiesce=yes <image_name>
$ openstack image set --property hw_qemu_guest_agent=yes \ --property os_require_quiesce=yes <image_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow QEMU 客户机代理是一个后台进程,可帮助管理应用程序执行实例操作系统级别命令。启用此代理为实例添加另一个设备,消耗 PCI 插槽,并限制您可以分配给实例的其他设备数量。它还会导致 Windows 实例显示有关未知硬件设备的警告信息。
11.3. 销毁实例 复制链接链接已复制到粘贴板!
在系统故障或访问失败等紧急情况下,您可以将实例置于救援模式中。这会关闭实例,使用新实例磁盘重启它,并将原始实例磁盘和配置驱动器作为卷挂载到重启实例上。您可以连接到重新引导的实例,以查看原始实例磁盘,以修复系统并恢复您的数据。
流程
执行实例救援:
openstack server rescue [--image <image>] <instance>
$ openstack server rescue [--image <image>] <instance>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
可选:默认情况下,实例从云管理员提供的救援镜像引导,或原始实例镜像的新副本。使用--
image选项指定在救援模式中重新引导实例时所使用的替代镜像。 -
将 &
lt;instance> 替换为您要救援的实例的名称或 ID。
-
可选:默认情况下,实例从云管理员提供的救援镜像引导,或原始实例镜像的新副本。使用--
- 连接到 rescued 实例,以修复问题。
从正常引导磁盘重启实例:
openstack server unrescue <instance>
$ openstack server unrescue <instance>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.4. 搁置实例 复制链接链接已复制到粘贴板!
如果您有一个实例没有被使用,但您不想删除,则 shelving 非常有用。当您删除实例时,您保留实例数据和资源分配,但清除实例内存。根据云配置,她实例将立即或经过时间延迟后移动至 SHELVED_OFFLOADED 状态。当 SHELVED_OFFLOADED 时,实例数据和资源分配会被删除。
当您取消一个实例时,计算服务会生成一个快照镜像来捕获实例状态,并以以下格式为镜像分配一个名称: < instance>-shelved。当实例被取消或删除时,此快照镜像会被删除。
如果您不再需要 shelved 实例,您可以将其删除。您可以一次关闭多个实例。
流程
检索您要 shelve 的实例或实例的名称或 ID:
openstack server list
$ openstack server listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 搁置实例或实例:
openstack server shelve <instance> [<instance> ...]
$ openstack server shelve <instance> [<instance> ...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 &
lt;instance> 替换为您要 shelve 的实例的名称或 ID。您可以根据需要指定多个实例到 shelve。验证实例是否已移除:
openstack server list
$ openstack server listCopy to Clipboard Copied! Toggle word wrap Toggle overflow shelved 实例的状态为
SHELVED_OFFLOADED。
11.5. 实例管理操作 复制链接链接已复制到粘贴板!
创建实例后,您可以执行以下管理操作。
| 操作 | 描述 | 命令 |
|---|---|---|
| 停止实例 | 停止实例。 | |
| 启动一个实例 | 启动已停止的实例。 | |
| 暂停正在运行的实例 | 立即暂停正在运行的实例。实例的状态存储在内存(RAM)中。暂停的实例继续以冻结状态运行。系统不会提示您确认暂停操作。 | |
| 恢复运行暂停的实例 | 立即恢复暂停的实例。系统不会提示您确认恢复操作。 | |
| 挂起正在运行的实例 | 立即暂停正在运行的实例。实例的状态存储在实例磁盘上。系统不会提示您确认 suspend 操作。 | |
| 恢复运行暂停的实例 | 立即恢复暂停的实例。实例的状态存储在实例磁盘上。系统不会提示您确认恢复操作。 | |
| 删除实例 | 永久销毁实例。系统不会提示您确认销毁操作。删除的实例无法恢复,除非云已配置为启用软删除。 注意 删除实例不会删除其附加的卷。您必须单独删除附加的卷。如需更多信息,请参阅存储指南中的删除块存储服务卷。 | |
| 编辑实例元数据 | 您可以使用实例元数据指定实例的属性。如需更多信息,请参阅创建自定义实例。 |
|
| 添加安全组 | 将指定的安全组添加到实例。 | |
| 删除安全组 | 从实例移除指定的安全组。 | |
| 在系统故障或访问失败等紧急情况下,您可以将实例置于救援模式中。这会关闭实例,并将根磁盘挂载到临时服务器。您可以连接到临时服务器来修复系统并恢复您的数据。 也可以将正在运行的实例重新引导到救援模式。例如,如果实例的文件系统损坏,则可能需要此操作。 | ||
| 恢复救援实例 | 重启 rescued 实例。 | |
| 查看实例日志 | 查看实例控制台日志的最新部分。 | |
|
当您删除保留实例数据和资源分配的实例时,请清除实例内存。根据云配置,她实例将立即或经过时间延迟后移动至 | ||
| 取消删除实例 | 使用 shelved 实例的磁盘镜像恢复实例。 | |
| 锁定实例 | 锁定实例,以防止非管理员用户对实例执行操作。 | |
| 软重启实例 | 正常停止并重新启动实例。软重启会尝试在重启实例前安全地关闭所有进程。默认情况下,当您重启实例时,它是软重启。 | |
| 硬重启实例 | 停止并重启实例。硬重启会关闭实例的电源,然后将其重新打开。 | |
| 重建实例 | 使用新镜像和 disk-partition 选项重建实例,该实例涉及实例关闭、重新镜像和重启。如果您遇到操作系统问题,而不是终止实例并启动,则使用此选项。 |
第 12 章 创建自定义实例 复制链接链接已复制到粘贴板!
云用户可以指定要在启动实例时使用的额外数据,如实例在引导时运行的 shell 脚本。云用户可以使用以下方法将数据传递给实例:
- 用户数据
-
使用 在 instance launch 命令中包含指令,以便
cloud-init用于执行。 - 实例元数据
- 创建或更新实例时可以指定的键值对列表。
您可以使用配置驱动器或元数据服务访问传递给实例的额外数据。
- 配置驱动器
-
您可以在启动时将配置驱动器附加到实例。配置驱动器以只读驱动器的形式呈现给实例。实例可以挂载此驱动器并从中读取文件。您可以使用配置驱动器作为
cloud-init信息的来源。配置驱动器在与用于服务器引导的cloud-init结合使用时,以及您要将大型文件传递给您的实例时很有用。例如,您可以将cloud-init配置为自动挂载配置驱动器,并在初始实例引导过程中运行设置脚本。创建配置驱动器时带有config-2的卷标签,并在引导时附加到实例。传递给配置驱动器的任何其他文件的内容添加到 config 驱动器的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
$ vim /home/scripts/install_httpd #!/bin/bash yum -y install httpd python-psycopg2 systemctl enable httpd --nowCopy 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.123Copy 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.123Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查已成功执行自定义。例如,要检查 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>
$ 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 ...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
$ 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 secondsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12.2. 使用元数据自定义实例 复制链接链接已复制到粘贴板!
您可以使用实例元数据在 instance launch 命令中指定实例的属性。
流程
使用--
property <key=value> 选项启动实例。例如,要将实例标记为 webserver,请设置以下属性:openstack server create \ --image rhel8 \ --flavor default \ --property role=webservers \ --wait web-server-instance
$ openstack server create \ --image rhel8 \ --flavor default \ --property role=webservers \ --wait web-server-instanceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:在创建实例后向实例添加额外属性,例如:
openstack server set \ --property region=emea \ --wait web-server-instance
$ openstack server set \ --property region=emea \ --wait web-server-instanceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12.3. 使用配置驱动器自定义实例 复制链接链接已复制到粘贴板!
您可以为在实例引导过程中附加的实例创建配置驱动器。您可以将内容传递给配置驱动器可供实例使用的配置驱动器。
流程
启用配置驱动器,并指定包含您要在配置驱动器中可用内容的文件。例如,以下命令创建一个名为
config-drive-instance的新实例,并附加包含my-user-data.txt文件内容的配置驱动器:openstack server create --flavor m1.tiny \ --config-drive true \ --user-data ./my-user-data.txt \ --image cirros config-drive-instance
(overcloud)$ openstack server create --flavor m1.tiny \ --config-drive true \ --user-data ./my-user-data.txt \ --image cirros config-drive-instanceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令创建配置驱动器,其卷标签为
config-2,它在启动时附加到实例,并将my-user-data.txt的内容添加到配置驱动器的openstack/{version}/目录中的user_data文件中。- 登录实例。
挂载配置驱动器:
如果实例操作系统使用
udev:mkdir -p /mnt/config mount /dev/disk/by-label/config-2 /mnt/config
# mkdir -p /mnt/config # mount /dev/disk/by-label/config-2 /mnt/configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果实例操作系统没有使用
udev,则需要首先识别与配置驱动器对应的块设备:blkid -t LABEL="config-2" -odevice /dev/vdb mkdir -p /mnt/config mount /dev/vdb /mnt/config
# blkid -t LABEL="config-2" -odevice /dev/vdb # mkdir -p /mnt/config # mount /dev/vdb /mnt/configCopy to Clipboard Copied! Toggle word wrap Toggle overflow