ETSI NFV-SOL VNF 伸缩

本文档描述了在 Tacker v2 API 中如何伸缩 VNF。

注意

本文档的内容已确认使用以下 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/scale1.svg

注意

缩减操作会从最后一个注册的虚拟机中删除 VNF。

先决条件

应安装以下软件包

  • tacker

  • python-tackerclient

执行 ETSI NFV-SOL VNF 部署为带有 LCM 操作用户数据的虚拟机 中的过程,直到“实例化 VNF”。 换句话说,在“终止 VNF”之后的过程不会执行。

VNF 伸缩流程

如前提条件中所述,在执行伸缩之前必须实例化 VNF。

CLI 命令的详细信息在 v2 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
    capabilities:
      virtual_compute:
        properties:
          requested_additional_capabilities:
            properties:
              requested_additional_capability_name: m1.tiny
              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: 3 GB
    requirements:
      - virtual_storage: VDU1-VirtualStorage

...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' --os-tacker-api-version 2

结果

+--------------------------------------+--------------------------------------------------------------+-----------------+--------------------------------------+
| ID                                   | Stack Name                                                   | Stack Status    | Parent                               |
+--------------------------------------+--------------------------------------------------------------+-----------------+--------------------------------------+
| f4221c17-0b42-41c8-af4e-66b15a730275 | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c-VDU1-0-tnyubgoik7ib | CREATE_COMPLETE | cbf6a703-f8fc-441a-9e9d-4f5f723a1e69 |
| 4533da6b-df2e-44bc-b52c-83c1db74aa3f | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c-VDU2-0-5whajpoqh5uh | CREATE_COMPLETE | cbf6a703-f8fc-441a-9e9d-4f5f723a1e69 |
| cbf6a703-f8fc-441a-9e9d-4f5f723a1e69 | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c                     | CREATE_COMPLETE | None                                 |
+--------------------------------------+--------------------------------------------------------------+-----------------+--------------------------------------+

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

$ openstack vnflcm scale --type SCALE_OUT --aspect-id VDU1_scale \
  --additional-param-file param_file VNF_INSTANCE_ID --os-tacker-api-version 2

结果

Scale request for VNF Instance df9150a0-8679-4b14-8cbc-9d2d6606ca7c has been accepted.

扩展后堆栈信息

$ openstack stack list --nested -c 'ID' -c 'Stack Name' -c 'Stack Status' \
  -c 'Parent' --os-tacker-api-version 2

结果

+--------------------------------------+--------------------------------------------------------------+-----------------+--------------------------------------+
| ID                                   | Stack Name                                                   | Stack Status    | Parent                               |
+--------------------------------------+--------------------------------------------------------------+-----------------+--------------------------------------+
| 10a627b8-afde-4ecc-b44a-2200b733ea2e | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c-VDU1-1-5vvpoq7l2c2k | CREATE_COMPLETE | cbf6a703-f8fc-441a-9e9d-4f5f723a1e69 |
| f4221c17-0b42-41c8-af4e-66b15a730275 | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c-VDU1-0-tnyubgoik7ib | UPDATE_COMPLETE | cbf6a703-f8fc-441a-9e9d-4f5f723a1e69 |
| 4533da6b-df2e-44bc-b52c-83c1db74aa3f | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c-VDU2-0-5whajpoqh5uh | UPDATE_COMPLETE | cbf6a703-f8fc-441a-9e9d-4f5f723a1e69 |
| cbf6a703-f8fc-441a-9e9d-4f5f723a1e69 | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c                     | UPDATE_COMPLETE | None                                 |
+--------------------------------------+--------------------------------------------------------------+-----------------+--------------------------------------+

堆栈详情

$ openstack stack resource list --filter type=VDU1.yaml cbf6a703-f8fc-441a-9e9d-4f5f723a1e69
+---------------+--------------------------------------+---------------+-----------------+----------------------+
| resource_name | physical_resource_id                 | resource_type | resource_status | updated_time         |
+---------------+--------------------------------------+---------------+-----------------+----------------------+
| VDU1-0        | f4221c17-0b42-41c8-af4e-66b15a730275 | VDU1.yaml     | UPDATE_COMPLETE | 2023-11-10T04:16:05Z |
| VDU1-1        | 10a627b8-afde-4ecc-b44a-2200b733ea2e | VDU1.yaml     | CREATE_COMPLETE | 2023-11-10T04:16:04Z |
+---------------+--------------------------------------+---------------+-----------------+----------------------+

$ openstack stack resource list --filter type=OS::Nova::Server f4221c17-0b42-41c8-af4e-66b15a730275
+---------------+--------------------------------------+------------------+-----------------+----------------------+
| resource_name | physical_resource_id                 | resource_type    | resource_status | updated_time         |
+---------------+--------------------------------------+------------------+-----------------+----------------------+
| VDU1          | 3395b07e-8c2e-4fb8-a652-f180d03ab284 | OS::Nova::Server | CREATE_COMPLETE | 2023-11-10T02:58:48Z |
+---------------+--------------------------------------+------------------+-----------------+----------------------+

$ openstack stack resource list --filter type=OS::Nova::Server 10a627b8-afde-4ecc-b44a-2200b733ea2e
+---------------+--------------------------------------+------------------+-----------------+----------------------+
| resource_name | physical_resource_id                 | resource_type    | resource_status | updated_time         |
+---------------+--------------------------------------+------------------+-----------------+----------------------+
| VDU1          | 3851c17e-ff76-445f-8286-12e4e1b0c125 | OS::Nova::Server | CREATE_COMPLETE | 2023-11-10T04:16:06Z |
+---------------+--------------------------------------+------------------+-----------------+----------------------+

可以看到,伸展操作增加了具有父堆栈(ID:cbf6a703-f8fc-441a-9e9d-4f5f723a1e69)的子堆栈(ID:10a627b8-afde-4ecc-b44a-2200b733ea2e)。

如何缩减 VNF

执行 Scale CLI 命令并检查伸缩前后堆栈的数量。 这用于确认缩减后堆栈的数量已减少。 请参阅 Heat CLI 参考,了解 Heat CLI 命令的详细信息。

缩减前堆栈信息

$ openstack stack list --nested -c 'ID' -c 'Stack Name' -c 'Stack Status' \
  -c 'Parent' --os-tacker-api-version 2

结果

+--------------------------------------+--------------------------------------------------------------+-----------------+--------------------------------------+
| ID                                   | Stack Name                                                   | Stack Status    | Parent                               |
+--------------------------------------+--------------------------------------------------------------+-----------------+--------------------------------------+
| 10a627b8-afde-4ecc-b44a-2200b733ea2e | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c-VDU1-1-5vvpoq7l2c2k | CREATE_COMPLETE | cbf6a703-f8fc-441a-9e9d-4f5f723a1e69 |
| f4221c17-0b42-41c8-af4e-66b15a730275 | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c-VDU1-0-tnyubgoik7ib | UPDATE_COMPLETE | cbf6a703-f8fc-441a-9e9d-4f5f723a1e69 |
| 4533da6b-df2e-44bc-b52c-83c1db74aa3f | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c-VDU2-0-5whajpoqh5uh | UPDATE_COMPLETE | cbf6a703-f8fc-441a-9e9d-4f5f723a1e69 |
| cbf6a703-f8fc-441a-9e9d-4f5f723a1e69 | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c                     | UPDATE_COMPLETE | None                                 |
+--------------------------------------+--------------------------------------------------------------+-----------------+--------------------------------------+

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

$ openstack vnflcm scale --type SCALE_IN --aspect-id VDU1_scale \
  --additional-param-file param_file VNF_INSTANCE_ID --os-tacker-api-version 2

结果

Scale request for VNF Instance df9150a0-8679-4b14-8cbc-9d2d6606ca7c has been accepted.

缩减后堆栈信息

$ openstack stack list --nested -c 'ID' -c 'Stack Name' -c 'Stack Status' \
  -c 'Parent' --os-tacker-api-version 2

结果

+--------------------------------------+--------------------------------------------------------------+-----------------+--------------------------------------+
| ID                                   | Stack Name                                                   | Stack Status    | Parent                               |
+--------------------------------------+--------------------------------------------------------------+-----------------+--------------------------------------+
| f4221c17-0b42-41c8-af4e-66b15a730275 | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c-VDU1-0-tnyubgoik7ib | UPDATE_COMPLETE | cbf6a703-f8fc-441a-9e9d-4f5f723a1e69 |
| 4533da6b-df2e-44bc-b52c-83c1db74aa3f | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c-VDU2-0-5whajpoqh5uh | UPDATE_COMPLETE | cbf6a703-f8fc-441a-9e9d-4f5f723a1e69 |
| cbf6a703-f8fc-441a-9e9d-4f5f723a1e69 | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c                     | UPDATE_COMPLETE | None                                 |
+--------------------------------------+--------------------------------------------------------------+-----------------+--------------------------------------+

有一个父堆栈(ID:cbf6a703-f8fc-441a-9e9d-4f5f723a1e69)和两个子堆栈(ID:f4221c17-0b42-41c8-af4e-66b15a730275 和 ID:10a627b8-afde-4ecc-b44a-2200b733ea2e),可以看到缩减操作减少了一个子堆栈。