ETSI NFV-SOL VNF 扩展

本文档描述了在 Tacker v1 API 中扩展 VNF 的方法。

注意

这是 Tacker v1 API 的文档。有关 Tacker v2 API,请参阅 ETSI NFV-SOL VNF 扩展

概述

下图显示了 VNF 扩展的概述。

  1. 请求伸缩 VNF

    用户通过请求 scale VNF 使用 tacker-client,向 tacker-server 请求伸缩 VNF 或所有 VNF。

  2. 调用 OpenStack Heat API

    收到 tacker-client 的请求后,tacker-server 会将其重定向到 tacker-conductor。在 tacker-conductor 中,请求会再次根据实例化参数的内容重定向到适当的基础设施驱动程序(在本例中为 OpenStack 基础设施驱动程序)。然后,OpenStack 基础设施驱动程序调用 OpenStack Heat API。

  3. 更改虚拟机数量

    OpenStack Heat 根据 API 调用更改虚拟机数量。

../_images/etsi_vnf_scaling.png

注意

扩展 API 版本 1 支持 is_reverse 选项。使用此选项进行的缩减操作会从最后注册的虚拟机中删除 VNF。

先决条件

应安装以下软件包

  • tacker

  • python-tackerclient

应根据 VIM 管理 注册默认 VIM。

下面使用的 VNF 包(sample_vnf_package_csar.zip)是通过参考 VNF 包 准备的。

从“注册 VIM”到“实例化 VNF”的扩展操作的准备过程,基本参考 ETSI NFV-SOL VNF 作为具有 LCM 操作用户数据的 VM 部署

此过程使用示例 VNF 包。

VNF 扩展流程

如“先决条件”中所述,在执行扩展之前必须实例化 VNF。

CLI 命令的详细信息在 使用 v1 Tacker 进行 VNF 生命周期管理 中描述。

VNF 扩展有两种主要方法。

  • 伸缩 VNF

  • 缩容 VNF

如何识别 ASPECT_ID

为了执行扩展,有必要指定 ASPECT_ID,这是目标扩展组的 ID。首先,将描述指定 ID 的方法。

ASPECT_ID 在 VNF 包中包含的 VNFD 中描述。在以下 VNFD 摘录中,VDU1_scale 对应于 ASPECT_ID。

node_templates:
  VDU1:
    type: tosca.nodes.nfv.Vdu.Compute
    properties:
      name: VDU1
      description: VDU1 compute node
      vdu_profile:
        min_number_of_instances: 1
        max_number_of_instances: 3

...snip VNFD...

policies:
  - scaling_aspects:
      type: tosca.policies.nfv.ScalingAspects
      properties:
        aspects:
          VDU1_scale:
            name: VDU1_scale
            description: VDU1 scaling aspect
            max_scale_level: 2
            step_deltas:
              - delta_1

  - VDU1_initial_delta:
      type: tosca.policies.nfv.VduInitialDelta
      properties:
        initial_delta:
          number_of_instances: 1
      targets: [ VDU1 ]

  - VDU1_scaling_aspect_deltas:
      type: tosca.policies.nfv.VduScalingAspectDeltas
      properties:
        aspect: VDU1_scale
        deltas:
          delta_1:
            number_of_instances: 1
      targets: [ VDU1 ]

  - instantiation_levels:
      type: tosca.policies.nfv.InstantiationLevels
      properties:
        levels:
          instantiation_level_1:
            description: Smallest size
            scale_info:
              VDU1_scale:
                scale_level: 0
          instantiation_level_2:
            description: Largest size
            scale_info:
              VDU1_scale:
                scale_level: 2
        default_level: instantiation_level_1

  - VDU1_instantiation_levels:
      type: tosca.policies.nfv.VduInstantiationLevels
      properties:
        levels:
          instantiation_level_1:
            number_of_instances: 1
          instantiation_level_2:
            number_of_instances: 3
      targets: [ VDU1 ]

...snip VNFD...

注意

有关 ASPECT_ID 的详细信息,请参阅 NFV-SOL001 v2.6.1 附录 A.6。

如何扩展 VNF

执行 Scale CLI 命令并检查扩展前后堆栈的数量。这是为了确认扩展后堆栈的数量已增加。有关 Heat CLI 命令的详细信息,请参阅 Heat CLI 参考

扩展前堆栈信息

$ openstack stack list --nested -c 'ID' -c 'Stack Name' -c 'Stack Status' -c 'Parent'

结果

+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
| ID                                   | Stack Name                                                                                    | Stack Status    | Parent                               |
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
| 3315a9f5-9c55-45ec-8b52-91875856c6e6 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep                           | CREATE_COMPLETE | e9d4576f-950c-4076-a54d-35b5cf43ebdd |
| 1b0bd450-3154-4301-b004-46a8b21152c1 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-gfrxqjt6nfqb-2ufs4pbsedui | CREATE_COMPLETE | 3315a9f5-9c55-45ec-8b52-91875856c6e6 |
| e9d4576f-950c-4076-a54d-35b5cf43ebdd | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a                                                   | CREATE_COMPLETE | None                                 |
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+

可以通过以下 CLI 命令执行扩展 VNF。

$ openstack vnflcm scale --type SCALE_OUT --aspect-id VDU1_scale VNF_INSTANCE_ID

结果

Scale request for VNF Instance 0c3644ff-b207-4a6a-9d3a-d1295cda153a has been accepted.

扩展后堆栈信息

$ openstack stack list --nested -c 'ID' -c 'Stack Name' -c 'Stack Status' -c 'Parent'

结果

+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
| ID                                   | Stack Name                                                                                    | Stack Status    | Parent                               |
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
| 909dc6a6-f60a-4410-84a1-9cfbfb788be1 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-cvfcy4h2rmuh-6zmqn6ason36 | CREATE_COMPLETE | 3315a9f5-9c55-45ec-8b52-91875856c6e6 |
| 3315a9f5-9c55-45ec-8b52-91875856c6e6 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep                           | UPDATE_COMPLETE | e9d4576f-950c-4076-a54d-35b5cf43ebdd |
| 1b0bd450-3154-4301-b004-46a8b21152c1 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-gfrxqjt6nfqb-2ufs4pbsedui | UPDATE_COMPLETE | 3315a9f5-9c55-45ec-8b52-91875856c6e6 |
| e9d4576f-950c-4076-a54d-35b5cf43ebdd | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a                                                   | CREATE_COMPLETE | None                                 |
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+

堆栈详情

$ openstack stack resource list 3315a9f5-9c55-45ec-8b52-91875856c6e6
+---------------+--------------------------------------+---------------+-----------------+----------------------+
| resource_name | physical_resource_id                 | resource_type | resource_status | updated_time         |
+---------------+--------------------------------------+---------------+-----------------+----------------------+
| gfrxqjt6nfqb  | 1b0bd450-3154-4301-b004-46a8b21152c1 | VDU1.yaml     | UPDATE_COMPLETE | 2023-12-28T02:36:50Z |
| cvfcy4h2rmuh  | 909dc6a6-f60a-4410-84a1-9cfbfb788be1 | VDU1.yaml     | CREATE_COMPLETE | 2023-12-28T02:36:50Z |
+---------------+--------------------------------------+---------------+-----------------+----------------------+

$ openstack stack resource list 1b0bd450-3154-4301-b004-46a8b21152c1
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
| resource_name | physical_resource_id                 | resource_type     | resource_status | updated_time         |
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
| VDU1          | f32848eb-598f-4158-8896-5ea9479456de | OS::Nova::Server  | CREATE_COMPLETE | 2023-12-28T02:32:04Z |
| VDU1_CP4      | e21dc5cc-eb46-4cf9-a352-7aa3cf659af7 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:32:04Z |
| VDU1_CP2      | 0988d9dc-97ba-43be-944d-185e316785f9 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:32:04Z |
| VDU1_CP3      | d125eec4-4e85-43cb-9887-cd5373b0abae | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:32:04Z |
| VDU1_CP5      | 16e66a58-c75c-4afe-be4f-e7eaafdfa506 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:32:04Z |
| VDU1_CP1      | d581db6b-eac8-49cf-99e0-3c494450b33b | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:32:04Z |
+---------------+--------------------------------------+-------------------+-----------------+----------------------+

$ openstack stack resource list 909dc6a6-f60a-4410-84a1-9cfbfb788be1
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
| resource_name | physical_resource_id                 | resource_type     | resource_status | updated_time         |
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
| VDU1          | e92cb6ca-72bb-46c8-91f1-531eb1d01315 | OS::Nova::Server  | CREATE_COMPLETE | 2023-12-28T02:36:52Z |
| VDU1_CP4      | 838a673d-d684-4eaa-92ff-78f1d145b4e1 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:36:52Z |
| VDU1_CP2      | e10f8b96-7e90-4232-b8aa-ec72b9a39d55 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:36:52Z |
| VDU1_CP3      | 40960abd-5a3d-439f-8f2d-4ad70b5eb1ea | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:36:52Z |
| VDU1_CP5      | b71a8b32-5ce4-48fb-9cf5-8bb6328b3679 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:36:52Z |
| VDU1_CP1      | 35344427-eff6-47e3-820b-11782996e805 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:36:52Z |
+---------------+--------------------------------------+-------------------+-----------------+----------------------+

可以看到,通过扩展操作,具有父堆栈(ID:3315a9f5-9c55-45ec-8b52-91875856c6e6)的子堆栈(ID:909dc6a6-f60a-4410-84a1-9cfbfb788be1)增加了。

如何缩减 VNF

执行 Scale CLI 命令并检查扩展前后堆栈的数量。这是为了确认缩减后堆栈的数量已减少。有关 Heat CLI 命令的详细信息,请参阅 Heat CLI 参考

缩减前堆栈信息

$ openstack stack list --nested -c 'ID' -c 'Stack Name' -c 'Stack Status' -c 'Parent'

结果

+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
| ID                                   | Stack Name                                                                                    | Stack Status    | Parent                               |
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
| 909dc6a6-f60a-4410-84a1-9cfbfb788be1 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-cvfcy4h2rmuh-6zmqn6ason36 | CREATE_COMPLETE | 3315a9f5-9c55-45ec-8b52-91875856c6e6 |
| 3315a9f5-9c55-45ec-8b52-91875856c6e6 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep                           | UPDATE_COMPLETE | e9d4576f-950c-4076-a54d-35b5cf43ebdd |
| 1b0bd450-3154-4301-b004-46a8b21152c1 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-gfrxqjt6nfqb-2ufs4pbsedui | UPDATE_COMPLETE | 3315a9f5-9c55-45ec-8b52-91875856c6e6 |
| e9d4576f-950c-4076-a54d-35b5cf43ebdd | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a                                                   | CREATE_COMPLETE | None                                 |
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+

可以通过以下 CLI 命令缩减 VNF。

$ openstack vnflcm scale --type SCALE_IN --aspect-id VDU1_scale VNF_INSTANCE_ID

结果

Scale request for VNF Instance 0c3644ff-b207-4a6a-9d3a-d1295cda153a has been accepted.

缩减后堆栈信息

$ openstack stack list --nested -c 'ID' -c 'Stack Name' -c 'Stack Status' -c 'Parent'

结果

+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
| ID                                   | Stack Name                                                                                    | Stack Status    | Parent                               |
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
| 909dc6a6-f60a-4410-84a1-9cfbfb788be1 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-cvfcy4h2rmuh-6zmqn6ason36 | UPDATE_COMPLETE | 3315a9f5-9c55-45ec-8b52-91875856c6e6 |
| 3315a9f5-9c55-45ec-8b52-91875856c6e6 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep                           | UPDATE_COMPLETE | e9d4576f-950c-4076-a54d-35b5cf43ebdd |
| e9d4576f-950c-4076-a54d-35b5cf43ebdd | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a                                                   | CREATE_COMPLETE | None                                 |
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+

有一个父堆栈(ID:3315a9f5-9c55-45ec-8b52-91875856c6e6)有两个子堆栈(ID:1b0bd450-3154-4301-b004-46a8b21152c1 和 ID:909dc6a6-f60a-4410-84a1-9cfbfb788be1),可以看到其中一个被缩减操作减少了。