如何使用示例 VNF 包进行实际用例¶
警告
本文档展示了一个示例 VNF 包和使用 v1 VNF LCM API 的 VNF 操作。请注意,v2 API 和 CNF 操作对 VNF 包和 API 参数有不同的要求。有关要求的详细信息,请参阅 API 参考和其他用例指南。
概述¶
1. 示例 VNF 包介绍¶
针对希望部署在更实际环境所需的 VNF 的用户,设计了 实际用例的 VNF 包示例。您可以在本用户指南中了解如何使用它。
2. 用例¶
在本示例中,支持以下用例:
使用多个部署 flavor
部署连接到外部网络的 VNF
部署作为 HA 集群的 VNF
部署可扩展的 VNF
3. 示例 VNF 包结构¶
此示例包含以下两个部署 flavor:
ha
scalable
1. ha 部署 flavor¶
ha 部署 flavor 定义了设计为高可用性集群的 VNF 的结构。它有两个 VDU,每个 VDU 都有一个 CP,该 CP 连接到内部和外部网络。它还有一个由 VDU 共享的 CP,该 CP 设计为用作 VIP。每个 CP 都有自己的固定 IP 地址。
注意
此示例仅定义了 openstack 资源。因此,需要额外的配置,例如 cloud_init 或 mgmt 驱动程序,才能使 VNF 聚合成 HA。
2. scalable 部署 flavor¶
scalable 部署 flavor 定义了可以扩展或缩减的 VNF 的结构。它定义了三个 VDU。最初可能不需要部署 VDU_2,稍后可以通过缩放操作部署它。每个 VDU 都有自己的固定 IP 地址,这些信息通过 InstantiateVNFRequest 传递。即使 VDU_2 最初未部署,也可以在其中传递 VDU_2 的地址。
下图显示了此示例中使用的 VNFD 的架构。
+--------------------------------------+
| VNFD |
| |
| +----------------------------+ |
| | Deployment flavour: ha | |
| | +---------+ +---------+ | |
| | | VDU_0 | | VDU_1 | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | +------+--+ +--+------+ | |
| | |\ /| | |
| | | \ / | | |
| | | \ / | | |
| | | +vip| | |
| | | | | | |
| | | | | int net | |
| | ------+---+---+------- | |
| | | | | | |
| +---------|---|---|----------+ |
| | | | |
| | | | |
+--------------|---|---|---------------+
| | |
| | | ext net
----+---+---+---------
+---------------------------------------------------------------------------------------------------------------+
| VNFD |
| |
| +----------------------------------------------------------------------------------------------------+ |
| | Deployment flavour: scalable | |
| | |------------------------------+ +------------------------------+ +------------------------------+ | |
| | | VDU_0 | | VDU_1 | | VDU_2 | | |
| | | properties: | | properties: | | properties: | | |
| | | vdu_profile: | | vdu_profile: | | vdu_profile: | | |
| | | min_num_of_instance:1 | | min_num_of_instance:1 | | min_num_of_instance:0 | | |
| | | max_num_of_instance:1 | | max_num_of_instance:1 | | max_num_of_instance:1 | | |
| | +------+--------------+--------+ +------+--------------+--------+ +------+--------------+--------+ | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | int net | |
| | ----+--------------|-----------------+--------------|-----------------+--------------|------- | |
| | | | | | |
| +-----------------------|--------------------------------|--------------------------------|----------+ |
| | | | |
| | | | |
+----------------------------|--------------------------------|--------------------------------|----------------+
| | |
| | | ext net
---------+--------------------------------+--------------------------------+-------
准备工作¶
要实例化此示例,需要以下准备:
1. 创建外部网络¶
此示例使用外部网络。您应该创建一个外部网络并设置网络配置,参考 mgmt_driver_deploy_k8s_usage_guide。
2. 创建镜像¶
在本用户指南中,使用了 cirros 镜像。
1. 下载 Cirros 镜像¶
从官方网站下载 cirros 镜像(版本 0.5.1)。命令如下:
$ wget -P ./ http://download.cirros-cloud.net/0.5.1/cirros-0.5.1-x86_64-disk.img
2. 创建镜像¶
执行以下 CLI 命令创建镜像。
$ openstack image create --disk-format qcow2 --container-format bare \
--public --file ./cirros-0.5.1-x86_64-disk sample_image
3. 创建 Flavor¶
执行以下 CLI 命令创建 Flavor。
$ openstack flavor create sample_flavor --ram 512 --disk 1 --vcpus 1
结果
+----------------------------+--------------------------------------+
| Field | Value |
+----------------------------+--------------------------------------+
| OS-FLV-DISABLED:disabled | False |
| OS-FLV-EXT-DATA:ephemeral | 0 |
| description | None |
| disk | 1 |
| extra_specs | {} |
| id | 22afc806-b361-4fae-83b5-5da4e86f2597 |
| name | sample_flavor |
| os-flavor-access:is_public | True |
| properties | |
| ram | 512 |
| rxtx_factor | 1.0 |
| swap | 0 |
| vcpus | 1 |
+----------------------------+--------------------------------------+
4. 注册 VIM¶
应根据 VIM 管理 注册 VIM。
创建并上传 VNF 包¶
VNF 包是一个 ZIP 文件,其中包含 VNFD 和其他工件资源,例如脚本和配置文件。目录结构和文件内容在 NFV-SOL004 v2.6.1 中定义。根据 NFV-SOL004 v2.6.1,VNF 包应为 ZIP 文件格式,并具有 TOSCA-Simple-Profile-YAML-v1.2 规范。在本用户指南中,使用了带有 TOSCA-Metadata 目录的 CSAR。
注意
有关 VNF 包的更详细定义,请参阅 VNF 包。
1. 目录结构¶
此示例的结构如下:
!----TOSCA-Metadata
!---- TOSCA.meta
!----Definitions
!---- etsi_nfv_sol001_common_types.yaml
!---- etsi_nfv_sol001_vnfd_types.yaml
!---- Common.yaml
!---- Node.yaml
!---- df_ha.yaml
!---- df_scalable.yaml
!----BaseHOT
!---- ha
!---- ha_hot.yaml
!---- scalable
!---- nested
!---- VDU_0.yaml
!---- VDU_1.yaml
!---- VDU_2.yaml
!---- scalable_hot.yaml
!----UserData
!---- __init__.py
!---- lcm_user_data.py
注意
您也可以在 tacker 的 samples/practical_vnf_package 目录中找到它们。
TOSCA-Metadata/TOSCA.meta¶
根据 TOSCA-Simple-Profile-YAML-v1.2 规范,TOSCA.meta 元数据文件在 TOSCA-1.0-specification 中描述。 Scripts 目录下的文件是工件文件,因此您应该将它们的位置和摘要添加到 TOSCA.meta 元数据文件中。 示例文件如下:
Definitions/¶
所有 VNFD YAML 文件都位于此处。在本指南中,有两种类型的定义文件:ETSI NFV 类型定义文件和用户定义的类型定义文件。
ETSI NFV 提供了两种类型的定义文件 [1],其中包含 NFV-SOL001 v2.6.1 中定义的所有类型定义。您可以从官方网站下载它们。
您可以从 NFV-SOL001 v2.6.1 扩展您自己的类型定义。在大多数情况下,您需要扩展 tosca.nodes.nfv.VNF 以定义您的 VNF 节点类型。在本指南中,定义了 df_ha.yaml 和 df_scalable.yaml。 示例文件如下:
BaseHOT/¶
Base HOT 文件是 Native 云编排模板,HOT 在这里指的是,通常用于不同 VNF 中的 LCM 操作。用户负责准备此文件,并且需要使其与位于 Definitions/ 目录下的 VNFD 一致。
在本指南中,您必须使用用户数据来部署此示例,因此必须包含 BaseHot 目录。
您必须将存储在 Definitions/ 下的 deployment_flavour 对应的目录放在 BaseHOT/ 下,并将 Base HOT 文件存储在其中。
在本指南中,此 VNF 包中有两种部署 flavor,因此在 BaseHOT/ 目录下有两个目录。 示例文件如下:
UserData/¶
LCM 操作用户数据是一个脚本,它返回作为 Base HOT 中 Heat 输入参数使用的键/值数据。 示例文件如下:
2. 创建 VNF 包¶
执行以下 CLI 命令以创建 VNF 包。
$ openstack vnf package create
结果
+-------------------+-------------------------------------------------------------------------------------------------+
| Field | Value |
+-------------------+-------------------------------------------------------------------------------------------------+
| ID | 5413f0ee-23a7-438d-bc5d-4ea1eb19117e |
| Links | { |
| | "self": { |
| | "href": "/vnfpkgm/v1/vnf_packages/5413f0ee-23a7-438d-bc5d-4ea1eb19117e" |
| | }, |
| | "packageContent": { |
| | "href": "/vnfpkgm/v1/vnf_packages/5413f0ee-23a7-438d-bc5d-4ea1eb19117e/package_content" |
| | } |
| | } |
| Onboarding State | CREATED |
| Operational State | DISABLED |
| Usage State | NOT_IN_USE |
| User Defined Data | {} |
+-------------------+-------------------------------------------------------------------------------------------------+
3. 上传 VNF 包¶
在实例化 VNF 之前,必须创建一个 VNF 包的 zip 文件并上传它。
执行以下命令以创建一个 zip 文件。
$ cd /opt/stack/tacker/samples/practical_vnf_package
$ zip sample_csar.zip -r Definitions/ TOSCA-Metadata/ BaseHOT/ UserData/
执行以下 CLI 命令以上传 VNF 包。
$ openstack vnf package upload --path ./sample_csar.zip VNF_PACKAGE_ID
结果
Upload request for VNF package 5413f0ee-23a7-438d-bc5d-4ea1eb19117e has been accepted.
之后,执行以下 CLI 命令并确认 VNF 包上传成功。
确认“Onboarding State”为“ONBOARDED”。
确认“Operational State”为“ENABLED”。
确认“Usage State”为“NOT_IN_USE”。
请记下“VNFD ID”,因为您将在下一个“部署 VNF”中需要它。
$ openstack vnf package show VNF_PACKAGE_ID
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| Checksum | { |
| | "hash": "8892cc96acf4f34117e228d7d6352812c4dc62e0b9ae894979de4eba920c6d49b153c074bfa898043507b9d2260be97b2e21c1ad3cee66691eff480d936e54bd", |
| | "algorithm": "sha512" |
| | } |
| ID | 5413f0ee-23a7-438d-bc5d-4ea1eb19117e |
| Links | { |
| | "self": { |
| | "href": "/vnfpkgm/v1/vnf_packages/5413f0ee-23a7-438d-bc5d-4ea1eb19117e" |
| | }, |
| | "packageContent": { |
| | "href": "/vnfpkgm/v1/vnf_packages/5413f0ee-23a7-438d-bc5d-4ea1eb19117e/package_content" |
| | } |
| | } |
| Onboarding State | ONBOARDED |
| Operational State | ENABLED |
| Software Images | |
| Usage State | NOT_IN_USE |
| User Defined Data | {} |
| VNF Product Name | Node |
| VNF Provider | Sample |
| VNF Software Version | 10.1 |
| VNFD ID | 9ed8bcf4-1e01-4d91-8cfb-57cd052e6a90 |
| VNFD Version | 1.0 |
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
部署 VNF¶
1. 部署 ha 部署 flavor 的 VNF¶
1. 创建 VNF 标识符¶
执行以下 CLI 命令以创建 VNF 实例。
openstack vnflcm create VNFD_ID
结果
+--------------------------+------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+--------------------------+------------------------------------------------------------------------------------------------------------------+
| ID | d57acd9a-34f1-4a2d-a8a0-7013270def45 |
| Instantiation State | NOT_INSTANTIATED |
| Links | { |
| | "self": { |
| | "href": "https://:9890/vnflcm/v1/vnf_instances/d57acd9a-34f1-4a2d-a8a0-7013270def45" |
| | }, |
| | "instantiate": { |
| | "href": "https://:9890/vnflcm/v1/vnf_instances/d57acd9a-34f1-4a2d-a8a0-7013270def45/instantiate" |
| | } |
| | } |
| VNF Instance Description | None |
| VNF Instance Name | vnf-d57acd9a-34f1-4a2d-a8a0-7013270def45 |
| VNF Package ID | 5413f0ee-23a7-438d-bc5d-4ea1eb19117e |
| VNF Product Name | Node |
| VNF Provider | Sample |
| VNF Software Version | 10.1 |
| VNFD ID | 9ed8bcf4-1e01-4d91-8cfb-57cd052e6a90 |
| VNFD Version | 1.0 |
+--------------------------+------------------------------------------------------------------------------------------------------------------+
之后,执行以下 CLI 命令并确认 VNF 实例创建成功。
确认 VNF 包的“Usage State”为“IN_USE”。
确认 VNF 实例的“Instantiation State”为“NOT_INSTANTIATED”。
$ openstack vnf package show VNF_PACKAGE_ID \
-c 'Usage State'
结果
+-------------+--------+
| Field | Value |
+-------------+--------+
| Usage State | IN_USE |
+-------------+--------+
$ openstack vnflcm show VNF_INSTANCE_ID \
-c 'Instantiation State'
结果
+---------------------+------------------+
| Field | Value |
+---------------------+------------------+
| Instantiation State | NOT_INSTANTIATED |
+---------------------+------------------+
2. 实例化 VNF¶
使用以下格式创建一个 sample_ha_param_file.json 文件。此文件定义了实例化请求的参数。这些参数将在实例化请求的主体中设置。
必需参数
flavourId
additionalParams
extVirtualLinks
注意
[这是 UserData 特定的部分] additionalParams 是一个可以由 KeyValuePairs 描述的参数。通过在此参数中设置以下两个参数,可以使用 LCM 操作用户数据进行实例化。对于 file_name.py 和 class_name,请设置 Prerequisites 中描述的文件名和类名。
lcm-operation-user-data: ./UserData/file_name.py
lcm-operation-user-data-class: class_name
可选参数
vimConnectionInfo
在本指南中,VM 与外部网络连接。因此,需要 extVirtualLinks 参数。如果您具有 cli-legacy-vim 中描述的默认 VIM,则可以跳过 vimConnectionInfo。
sample_ha_param_file.json
{
"flavourId": "ha",
"extVirtualLinks": [
{
"extCps": [
{
"cpConfig": [
{
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"subnetId": "589a97b7-5fb7-4969-a1fd-e7cc206384a9", #Set the uuid of the subnet to use
"type": "IPV4",
"fixedAddresses": [
"10.181.221.40" #Set the fixed IP address to use
]
}
]
}
}
]
}
],
"cpdId": "VDU_extvCP"
},
{
"cpConfig": [
{
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"subnetId": "589a97b7-5fb7-4969-a1fd-e7cc206384a9", #Set the uuid of the subnet to use
"type": "IPV4",
"fixedAddresses": [
"10.181.221.41" #Set the fixed IP address to use
]
}
]
}
}
]
}
],
"cpdId": "VDU0_extCP0"
},
{
"cpConfig": [
{
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"subnetId": "589a97b7-5fb7-4969-a1fd-e7cc206384a9", #Set the uuid of the subnet to use
"type": "IPV4",
"fixedAddresses": [
"10.181.221.42" #Set the fixed IP address to use
]
}
]
}
}
]
}
],
"cpdId": "VDU1_extCP0"
},
{
"cpConfig": [
{
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"subnetId": "589a97b7-5fb7-4969-a1fd-e7cc206384a9", #Set the uuid of the subnet to use
"type": "IPV4",
"fixedAddresses": [
"10.181.221.43" #Set the fixed IP address to use
]
}
]
}
}
]
}
],
"cpdId": "RT_extCP"
}
],
"id": "mgmt_network",
"resourceId": "1b13c680-d091-4564-b652-4074f5382da7" #Set the uuid of the network to use
}
],
"vimConnectionInfo": [
{
"id": "d98b6cf8-dbc4-4254-a628-5801a1c20dbe",
"vimId": "d98b6cf8-dbc4-4254-a628-5801a1c20dbe", #Set the uuid of the VIM to use
"vimType": "openstack"
}
],
"additionalParams": {
"lcm-operation-user-data": "./UserData/lcm_user_data.py",
"lcm-operation-user-data-class": "ETSICompatibleUserData",
"security_group": "default"
}
}
执行以下 CLI 命令以实例化 VNF 实例。
$ openstack vnflcm instantiate VNF_INSTANCE_ID \
./sample_ha_param_file.json
结果
Instantiate request for VNF Instance d57acd9a-34f1-4a2d-a8a0-7013270def45 has been accepted.
之后,执行以下 CLI 命令并确认 VNF 实例实例化成功。
确认“Instantiation State”为“INSTANTIATED”。
$ openstack vnflcm show VNF_INSTANCE_ID \
-c 'Instantiation State'
结果
+---------------------+--------------+
| Field | Value |
+---------------------+--------------+
| Instantiation State | INSTANTIATED |
+---------------------+--------------+
2. 部署 scalable 部署 flavor 的 VNF¶
1. 创建 VNF 标识符¶
执行以下 CLI 命令以创建 VNF 实例。
openstack vnflcm create VNFD_ID
结果
+--------------------------+------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+--------------------------+------------------------------------------------------------------------------------------------------------------+
| ID | 1b71922e-3531-4cd1-8961-0feb38f6f82e |
| Instantiation State | NOT_INSTANTIATED |
| Links | { |
| | "self": { |
| | "href": "https://:9890/vnflcm/v1/vnf_instances/1b71922e-3531-4cd1-8961-0feb38f6f82e" |
| | }, |
| | "instantiate": { |
| | "href": "https://:9890/vnflcm/v1/vnf_instances/1b71922e-3531-4cd1-8961-0feb38f6f82e/instantiate" |
| | } |
| | } |
| VNF Instance Description | None |
| VNF Instance Name | vnf-1b71922e-3531-4cd1-8961-0feb38f6f82e |
| VNF Package ID | 5413f0ee-23a7-438d-bc5d-4ea1eb19117e |
| VNF Product Name | Node |
| VNF Provider | Sample |
| VNF Software Version | 10.1 |
| VNFD ID | 9ed8bcf4-1e01-4d91-8cfb-57cd052e6a90 |
| VNFD Version | 1.0 |
+--------------------------+------------------------------------------------------------------------------------------------------------------+
之后,执行以下 CLI 命令并确认 VNF 实例创建成功。
确认 VNF 包的“Usage State”为“IN_USE”。
确认 VNF 实例的“Instantiation State”为“NOT_INSTANTIATED”。
$ openstack vnf package show VNF_PACKAGE_ID \
-c 'Usage State'
结果
+-------------+--------+
| Field | Value |
+-------------+--------+
| Usage State | IN_USE |
+-------------+--------+
$ openstack vnflcm show VNF_INSTANCE_ID \
-c 'Instantiation State'
结果
+---------------------+------------------+
| Field | Value |
+---------------------+------------------+
| Instantiation State | NOT_INSTANTIATED |
+---------------------+------------------+
2. 实例化 VNF¶
使用以下格式创建一个 sample_scalable_param_file.json 文件。此文件定义了实例化请求的参数。这些参数将在实例化请求的主体中设置。
必需参数
flavourId
instantiationLevelId
additionalParams
extVirtualLinks
注意
[这是 UserData 特定的部分] additionalParams 是一个可以由 KeyValuePairs 描述的参数。通过在此参数中设置以下两个参数,可以使用 LCM 操作用户数据进行实例化。对于 file_name.py 和 class_name,请设置 Prerequisites 中描述的文件名和类名。
lcm-operation-user-data: ./UserData/file_name.py
lcm-operation-user-data-class: class_name
可选参数
vimConnectionInfo
在本指南中,VM 与外部网络连接。因此,需要 extVirtualLinks 参数。如果您具有 cli-legacy-vim 中描述的默认 VIM,则可以跳过 vimConnectionInfo。
sample_scalable_param_file.json
{
"flavourId": "scalable",
"instantiationLevelId": "r-node-min",
"extVirtualLinks": [
{
"extCps": [
{
"cpConfig": [
{
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"subnetId": "589a97b7-5fb7-4969-a1fd-e7cc206384a9", #Set the uuid of the subnet to use
"type": "IPV4",
"fixedAddresses": [
"10.181.221.40" #Set the fixed IP address to use
]
}
]
}
}
]
}
],
"cpdId": "VDU0_CP1"
},
{
"cpConfig": [
{
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"subnetId": "589a97b7-5fb7-4969-a1fd-e7cc206384a9", #Set the uuid of the subnet to use
"type": "IPV4",
"fixedAddresses": [
"10.181.221.41" #Set the fixed IP address to use
]
}
]
}
}
]
}
],
"cpdId": "VDU1_CP1"
},
{
"cpConfig": [
{
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"subnetId": "589a97b7-5fb7-4969-a1fd-e7cc206384a9", #Set the uuid of the subnet to use
"type": "IPV4",
"fixedAddresses": [
"10.181.221.42" #Set the fixed IP address to use
]
}
]
}
}
]
}
],
"cpdId": "VDU2_CP1"
}
],
"id": "mgmt_network",
"resourceId": "1b13c680-d091-4564-b652-4074f5382da7" #Set the uuid of the network to use
}
],
"vimConnectionInfo": [
{
"id": "d98b6cf8-dbc4-4254-a628-5801a1c20dbe",
"vimId": "d98b6cf8-dbc4-4254-a628-5801a1c20dbe", #Set the uuid of the VIM to use
"vimType": "openstack"
}
],
"additionalParams": {
"lcm-operation-user-data": "./UserData/lcm_user_data.py",
"lcm-operation-user-data-class": "ETSICompatibleUserData",
"vdu0_availabilityzone": "sample-az-1",
"vdu1_availabilityzone": "sample-az-2",
"vdu2_availabilityzone": "sample-az-2",
"security_group": "default"
}
}
执行以下 CLI 命令以实例化 VNF 实例。
$ openstack vnflcm instantiate VNF_INSTANCE_ID \
./sample_scalable_param_file.json
结果
Instantiate request for VNF Instance d57acd9a-34f1-4a2d-a8a0-7013270def45 has been accepted.
之后,执行以下 CLI 命令并确认 VNF 实例实例化成功。
确认“Instantiation State”为“INSTANTIATED”。
$ openstack vnflcm show VNF_INSTANCE_ID \
-c 'Instantiation State'
结果
+---------------------+--------------+
| Field | Value |
+---------------------+--------------+
| Instantiation State | INSTANTIATED |
+---------------------+--------------+
3. 扩展 VNF¶
在执行缩放之前,必须实例化 VNF。
为了执行扩展,有必要指定 ASPECT_ID,这是目标扩展组的 ID。首先,将描述指定 ID 的方法。
ASPECT_ID 在 VNF 包中包含的 VNFD 中描述。在以下 VNFD 摘录中,VDU_2 对应于 ASPECT_ID。
node_templates:
VDU_2:
type: tosca.nodes.nfv.Vdu.Compute
properties:
name: VDU_2
description: VDU_2
vdu_profile:
min_number_of_instances: 0
max_number_of_instances: 1
sw_image_data:
name: sample_image
version: '1.0'
checksum:
algorithm: sha-512
hash: 6513f21e44aa3da349f248188a44bc304a3653a04122d8fb4535423c8e1d14cd6a153f735bb0982e2161b5b5186106570c17a9e58b64dd39390617cd5a350f78
container_format: bare
disk_format: qcow2
min_disk: 0 GB
size: 1869 MB
capabilities:
virtual_compute:
properties:
requested_additional_capabilities:
properties:
requested_additional_capability_name: sample_flavor
support_mandatory: true
target_performance_parameters:
entry_schema: test
virtual_memory:
virtual_mem_size: 512 MB
virtual_cpu:
num_virtual_cpu: 1
virtual_local_storage:
- size_of_storage: 1 GB
...snip VNFD...
policies:
- vdu_scale:
type: tosca.policies.nfv.ScalingAspects
properties:
aspects:
VDU_2:
name: VDU_2
description: VDU_2
max_scale_level: 1
step_deltas:
- delta_1
- vdu_2_initial_delta:
type: tosca.policies.nfv.VduInitialDelta
properties:
initial_delta:
number_of_instances: 0
targets: [ VDU_2 ]
- vdu_2_scaling_aspect_deltas:
type: tosca.policies.nfv.VduScalingAspectDeltas
properties:
aspect: VDU_2
deltas:
delta_1:
number_of_instances: 1
targets: [ VDU_2 ]
- instantiation_levels:
type: tosca.policies.nfv.InstantiationLevels
properties:
levels:
r-node-min:
description: vdu-min structure
scale_info:
VDU_2:
scale_level: 0
r-node-max:
description: vdu-max structure
scale_info:
VDU_2:
scale_level: 1
- vdu_2_instantiation_levels:
type: tosca.policies.nfv.VduInstantiationLevels
properties:
levels:
r-node-min:
number_of_instances: 0
r-node-max:
number_of_instances: 1
targets: [ VDU_2 ]
...snip VNFD...
注意
有关 ASPECT_ID 的详细信息,请参阅 NFV-SOL001 v2.6.1 附录 A.6。
执行 Scale CLI 命令并检查缩放前后资源数量。这是为了确认缩放后资源数量已增加。有关 Heat CLI 命令的详细信息,请参阅 Heat CLI 参考。
扩展前堆栈信息
执行以下命令以检查 VDU_2 的 uuid。
$ openstack stack resource list STACK_ID -c resource_name \
-c physical_resource_id -c resource_type -c resource_status
结果
+----------------------+--------------------------------------+----------------------------+-----------------+
| resource_name | physical_resource_id | resource_type | resource_status |
+----------------------+--------------------------------------+----------------------------+-----------------+
| VDU_1 | 617802bf-9f55-4d13-968f-8682079514d0 | OS::Heat::AutoScalingGroup | CREATE_COMPLETE |
| int_subnet | 60d7daa5-7687-4bbf-bcff-bb1b35e58032 | OS::Neutron::Subnet | CREATE_COMPLETE |
| VDU_2_scale_out | 11092f1a82b14151928f996070977f11 | OS::Heat::ScalingPolicy | CREATE_COMPLETE |
| VDU_0 | ae4376b7-d390-4c11-bc3a-a6a8223598c5 | OS::Heat::AutoScalingGroup | CREATE_COMPLETE |
| VDU_2_scale_in | 30d0bdda9b2e4b01bc9899453314b00d | OS::Heat::ScalingPolicy | CREATE_COMPLETE |
| VDU_2 | 519c9eed-036c-429c-bf75-56b9f303689e | OS::Heat::AutoScalingGroup | CREATE_COMPLETE |
| int_net | 7a25ec57-d2c3-4237-8586-3f3b7c6471ec | OS::Neutron::Net | CREATE_COMPLETE |
| vdu_placement_policy | 1226676d-ee9b-4de8-9220-39cd37de5c98 | OS::Nova::ServerGroup | CREATE_COMPLETE |
+----------------------+--------------------------------------+----------------------------+-----------------+
执行以下命令并确认不会返回任何结果。这意味着在此时,VDU_2 的资源没有嵌套资源。
$ openstack stack resource list VDU_2_ID -c resource_name \
-c physical_resource_id -c resource_type -c resource_status
然后,可以通过以下 CLI 命令执行 Scale-out VNF。
$ openstack vnflcm scale --type SCALE_OUT --aspect-id VDU_2 VNF_INSTANCE_ID
结果
Scale request for VNF Instance d57acd9a-34f1-4a2d-a8a0-7013270def45 has been accepted.
扩展后堆栈信息
执行以下命令并确认已在 VDU_2 下创建资源。
$ openstack stack resource list VDU_2_ID -c resource_name \
-c physical_resource_id -c resource_type -c resource_status
结果
+---------------+--------------------------------------+-------------------+-----------------+
| resource_name | physical_resource_id | resource_type | resource_status |
+---------------+--------------------------------------+-------------------+-----------------+
| nsatlzzxx2ik | f0258a82-53a4-4239-932e-2ab18c3b69ae | VDU_2.yaml | CREATE_COMPLETE |
| VDU_2 | ed2dd9d1-ffc7-43a3-8efd-75b79d922463 | OS::Nova::Server | CREATE_COMPLETE |
| VDU2_CP1 | 22d9d536-f1f4-4495-9a69-31be4bce9730 | OS::Neutron::Port | CREATE_COMPLETE |
| VDU2_CP0 | cf9bbfef-beb9-42ff-94bf-5a367fb8b04d | OS::Neutron::Port | CREATE_COMPLETE |
+---------------+--------------------------------------+-------------------+-----------------+
4. 缩减 VNF¶
执行 Scale CLI 命令并检查缩放前后资源数量。这是为了确认缩放后资源数量已减少。有关 Heat CLI 命令的详细信息,请参阅 Heat CLI 参考。
缩减前堆栈信息
执行以下命令并确认 VDU_2 下有某些资源。
$ openstack stack resource list VDU_2_ID -c resource_name \
-c physical_resource_id -c resource_type -c resource_status
结果
+---------------+--------------------------------------+-------------------+-----------------+
| resource_name | physical_resource_id | resource_type | resource_status |
+---------------+--------------------------------------+-------------------+-----------------+
| nsatlzzxx2ik | f0258a82-53a4-4239-932e-2ab18c3b69ae | VDU_2.yaml | CREATE_COMPLETE |
| VDU_2 | ed2dd9d1-ffc7-43a3-8efd-75b79d922463 | OS::Nova::Server | CREATE_COMPLETE |
| VDU2_CP1 | 22d9d536-f1f4-4495-9a69-31be4bce9730 | OS::Neutron::Port | CREATE_COMPLETE |
| VDU2_CP0 | cf9bbfef-beb9-42ff-94bf-5a367fb8b04d | OS::Neutron::Port | CREATE_COMPLETE |
+---------------+--------------------------------------+-------------------+-----------------+
然后,可以通过以下 CLI 命令执行 Scale-in VNF。
$ openstack vnflcm scale --type SCALE_IN --aspect-id VDU_2 VNF_INSTANCE_ID
结果
Scale request for VNF Instance d57acd9a-34f1-4a2d-a8a0-7013270def45 has been accepted.
缩减后堆栈信息
执行以下命令并确认不会返回任何结果。这意味着 VDU_2 下的资源已被删除。
$ openstack stack resource list VDU_2_ID -c resource_name \
-c physical_resource_id -c resource_type -c resource_status