ETSI NFV-SOL VNF 部署为 VM,带 LCM 操作用户数据

本文档描述了使用 Tacker v1 API 通过 CLI 命令如何部署带有 LCM 操作用户数据的 VNF 作为 VM。请查看 LCM-user-data 规范NFV-SOL014 v2.8.1 以获取有关 LCM 操作用户数据的更多信息。

注意

这是 Tacker v1 API 的文档。有关 Tacker v2 API,请参阅 ETSI NFV-SOL VNF 部署为 VM,带 LCM 操作用户数据

注意

大部分内容与 ETSI NFV-SOL VNF 部署为 VM,带 TOSCA 相同,但有些内容包含“LCM 操作用户数据”的具体描述。该部分将使用标注 [这是 UserData 特定的部分] 进行说明。

概述

下图显示了 VNF 部署的概述。

  1. 请求创建 VNF

    用户通过上传 VNF 包并请求 create VNF,向 tacker-server 请求创建 VNF。VNF 包应包含 BaseHOTUserData,除了 VNFD 之外。这些内容的详细说明可以在 VNF 包 中找到。

  2. 请求实例化 VNF

    用户通过请求 instantiate VNF 并提供实例化参数,向 tacker-server 请求实例化创建的 VNF。

  3. 调用 OpenStack Heat API

    收到请求后,tacker-server 会将其重定向到 tacker-conductor。在 tacker-conductor 中,请求会根据实例化参数的内容再次重定向到适当的 infra-driver(在本例中为 OpenStack infra-driver)。然后,OpenStack infra-driver 调用 OpenStack Heat APIs 以创建 VM 作为 VNF。

  4. 创建 VM

    OpenStack Heat 根据 API 调用创建 VM。

../_images/etsi_vnf_deployment_as_vm_with_user_data.png

先决条件

应安装以下软件包

  • tacker

  • python-tackerclient

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

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

注意

[这是 UserData 特定的部分] 为了使用 LCM 操作用户数据部署 VNF,有必要在 VNF 包中包含 BaseHOT 和 UserData,在 VNF 包 中它们是可选的。

VNF 部署过程(作为虚拟机)

为了将 VNF 部署为 VM,有必要执行以下步骤。CLI 命令的详细信息在 VNF 包管理使用 v1 Tacker 进行 VNF 生命周期管理 中描述。

许多步骤与 ETSI NFV-SOL VNF 部署为 VM,带 TOSCA 相同,因此请参阅该文档了解这些步骤。

1. 创建 VNF 包信息

请参阅 ETSI NFV-SOL VNF 部署为 VM,带 TOSCA 中的步骤。

2. 上传 VNF 包

请参阅 ETSI NFV-SOL VNF 部署为 VM,带 TOSCA 中的步骤。

3. 创建 VNF 标识符

请参阅 ETSI NFV-SOL VNF 部署为 VM,带 TOSCA 中的步骤。

4. 实例化 VNF

使用以下格式创建 sample_param_file.json 文件。 这是定义实例化请求参数的文件。 这些参数将在实例化请求的主体中设置。

必需参数

  • flavourId

  • additionalParams

注意

flavorId 的详细信息在 基于 ETSI NFV-SOL001 的 VNF 描述符 (VNFD) 中描述。

注意

[这是 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

可选参数

  • instantiationLevelId

  • extVirtualLinks

  • extManagedVirtualLinks

  • vimConnectionInfo

注意

只有在您拥有 VIM 管理 中描述的默认 VIM 时,才能跳过 vimConnectionInfo

注意

此操作可以指定 VNF 实例的 vimConnectionInfo。即使此操作指定与一个 VNF 实例关联的多个 vimConnectionInfo,也只会使用其中一个用于生命周期管理操作。

仅包含必需参数的参数文件的示例

{
  "flavourId":"simple",
  "additionalParams": {
    "lcm-operation-user-data": "./UserData/lcm_user_data.py",
    "lcm-operation-user-data-class": "SampleUserData"
  }
}

包含可选参数的参数文件的示例

{
  "flavourId": "simple",
  "instantiationLevelId": "instantiation_level_1",
  "extVirtualLinks": [
    {
      "id": "net0",
      "resourceId": "4bf3e646-7a24-4f04-a985-d8f4bb1203de", #Set the uuid of the network to use
      "extCps": [
        {
          "cpdId": "CP1",
          "cpConfig": [
            {
              "cpProtocolData": [
                {
                  "layerProtocol": "IP_OVER_ETHERNET",
                  "ipOverEthernet": {
                    "ipAddresses": [
                      {
                        "type": "IPV4",
                        "fixedAddresses": [
                          "10.10.0.49"  #Set the ip address from subnet range
                        ],
                        "subnetId": "06709e3e-33ff-4221-9d07-565c3fd55223" #Set the subnetID of net0
                      }
                    ]
                  }
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "vimConnectionInfo": [
    {
      "id": "e24f9796-a8e9-4cb0-85ce-5920dcddafa1",    #Set a random uuid.
      "vimId": "8a0fd79d-e224-4c27-85f5-ee79c6e0d870", #Set the uuid of the VIM to use
      "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_2"
    }
  ],
  "additionalParams": {
    "lcm-operation-user-data": "./UserData/lcm_user_data.py",
    "lcm-operation-user-data-class": "SampleUserData"
  }
}

本文档中使用的 samlple_param_file.json 如下所示。

{
  "flavourId": "simple",
  "extVirtualLinks": [
    {
      "id": "net0",
      "resourceId": "${network_uuid}",
      "extCps": [
        {
          "cpdId": "CP1",
          "cpConfig": [
            {
              "cpProtocolData": [
                {
                  "layerProtocol": "IP_OVER_ETHERNET",
                  "ipOverEthernet": {
                    "ipAddresses": [
                      {
                        "type": "IPV4",
                        "numDynamicAddresses": 1,
                        "subnetId": "${subnet_uuid}"
                      }
                    ]
                  }
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "vimConnectionInfo": [
    {
      "id": "e24f9796-a8e9-4cb0-85ce-5920dcddafa1",
      "vimId": "${vim_uuid}",
      "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_2"
    }
  ],
  "additionalParams": {
    "lcm-operation-user-data": "./UserData/lcm_user_data.py",
    "lcm-operation-user-data-class": "SampleUserData"
  }
}

执行以下 CLI 命令来实例化 VNF 实例。

$ openstack vnflcm instantiate VNF_INSTANCE_ID ./sample_param_file.json

结果

Instantiate request for VNF Instance 810d8c9b-e467-4b06-9265-ac9dce015fce has been accepted.

之后,执行以下 CLI 命令并确认 VNF 实例实例化成功。

  • 确认“Instantiation State”为“INSTANTIATED”。

$ openstack vnflcm show VNF_INSTANCE_ID -c 'Instantiation State'

结果

+---------------------+--------------+
| Field               | Value        |
+---------------------+--------------+
| Instantiation State | INSTANTIATED |
+---------------------+--------------+

5. 终止 VNF

请参阅 ETSI NFV-SOL VNF 部署为 VM,带 TOSCA 中的步骤。

6. 删除 VNF 标识符

请参阅 ETSI NFV-SOL VNF 部署为 VM,带 TOSCA 中的步骤。