如何通过OpenStack客户端或openstacksdk创建带多块临时盘的实例
Nova 对多块临时磁盘的配置不通过openstack flavor create的基础--ephemeral参数实现,该参数仅支持配置单块临时磁盘的总容量,多块临时磁盘需要通过Flavor额外属性(Extra Specs)或实例创建时的块设备映射参数实现,Rocky版本已完整支持该能力。
OpenStack 命令行实现
方式1:Flavor预定义多块临时磁盘
- 创建基础Flavor,将单临时磁盘容量参数设为0:
openstack flavor create --ram 4096 --vcpus 2 --disk 20 --ephemeral 0 multi-eph-flavor - 为Flavor设置额外属性,按序号定义每块临时磁盘的容量(单位GB):
openstack flavor set multi-eph-flavor --property ephemeral_disk_size_0=50 --property ephemeral_disk_size_1=100
以上配置会让使用该Flavor创建的实例默认挂载2块临时磁盘,容量分别为50GB、100GB。
方式2:创建实例时临时指定多块临时磁盘
无需提前修改Flavor配置,创建实例时逐块传入临时磁盘的块设备映射参数即可,多块磁盘需多次传入--block-device参数,示例:
openstack server create --flavor <目标Flavor ID/名称> \ --image <启动镜像ID/名称> \ --network <所属网络ID/名称> \ --block-device source_type=ephemeral,destination_type=local,volume_size=50,delete_on_termination=true \ --block-device source_type=ephemeral,destination_type=local,volume_size=100,delete_on_termination=true \ multi-eph-test-instance
注意:如果使用的Flavor本身
--ephemeral参数值大于0,通过上述方式传入临时磁盘配置时,会在原有单块临时磁盘的基础上追加对应数量的临时磁盘,不会覆盖原有配置。
openstacksdk 实现
创建实例时直接指定多块临时磁盘
在创建实例的参数中传入block_device_mapping_v2列表,每一项对应一块磁盘的配置,示例代码:
import openstack # 初始化OpenStack连接,cloud参数对应你的clouds.yaml配置项 conn = openstack.connect(cloud='openstack-config') # 块设备配置:第一块为系统启动盘,后两块为临时磁盘 block_device_config = [ { "source_type": "image", "destination_type": "local", "uuid": "<启动镜像ID>", "boot_index": 0, "volume_size": 20, "delete_on_termination": True }, { "source_type": "ephemeral", "destination_type": "local", "volume_size": 50, "delete_on_termination": True }, { "source_type": "ephemeral", "destination_type": "local", "volume_size": 100, "delete_on_termination": True } ] # 发起实例创建请求 instance = conn.compute.create_server( name="multi-eph-sdk-instance", flavor_id="<目标Flavor ID>", networks=[{"uuid": "<所属网络ID>"}], block_device_mapping_v2=block_device_config ) # 等待实例创建完成 conn.compute.wait_for_server(instance)
为Flavor预配置多块临时磁盘
调用SDK的Flavor额外属性设置接口,写入对应序号的临时磁盘容量配置即可:
# 查找目标Flavor target_flavor = conn.compute.find_flavor("multi-eph-flavor") # 写入多临时磁盘配置 conn.compute.set_flavor_extra_specs( target_flavor, **{ "ephemeral_disk_size_0": 50, "ephemeral_disk_size_1": 100 } )
内容的提问来源于stack exchange,提问作者Victor Lee
相关产品推荐
相关产品推荐

