ETSI NFV-SOL CNF 伸缩

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

注意

本文档的内容已确认使用以下 VNF 包有效。

概述

下图显示了 CNF 伸缩的概述。

  1. 请求伸缩 VNF

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

  2. 调用 Kubernetes API

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

  3. 更改 Pod 的数量

    Kubernetes Master 根据 API 调用更改 Pod 的数量。

../../../../_images/scale.svg

先决条件

应安装以下软件包

  • tacker

  • python-tackerclient

执行 ETSI NFV-SOL CNF(容器化 VNF)部署 中的步骤,直到“实例化 VNF”。换句话说,不执行“终止 VNF”之后的步骤。

CNF 伸缩流程

如前提条件中所述,在执行伸缩之前必须实例化 VNF。用户可以伸缩由控制器资源(如 Kubernetes Deployment、StatefulSet 和 ReplicaSet)管理的 pod 副本数。

注意

如果类型是 Stateful Set 且没有动态配置(no-provisioner),用户必须提前为最大副本数创建持久卷,因为在伸缩操作期间不会创建增加的持久卷。

CLI 命令的详细信息在 v2 Tacker 的 VNF 生命周期管理 中描述。

CNF 伸缩主要有两种方法。

  • CNF 扩容

  • CNF 缩容

如何识别 ASPECT_ID

为了执行伸缩,需要指定 ASPECT_ID,这是目标伸缩组的 ID。首先,将描述指定 ID 的方法。

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

node_templates:
  VNF:
    type: company.provider.VNF
    properties:
      flavour_description: A simple flavour

  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

policies:
  - scaling_aspects:
      type: tosca.policies.nfv.ScalingAspects
      properties:
        aspects:
          vdu1_aspect:
            name: vdu1_aspect
            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: 2
      targets: [ VDU1 ]

  - VDU1_scaling_aspect_deltas:
      type: tosca.policies.nfv.VduScalingAspectDeltas
      properties:
        aspect: vdu1_aspect
        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_aspect:
                scale_level: 1
          instantiation_level_2:
            description: Largest size
            scale_info:
              vdu1_aspect:
                scale_level: 2
        default_level: instantiation_level_1

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

注意

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

如何扩容 CNF

执行 Scale CLI 命令并检查伸缩前后的副本数。这是为了确认在扩容后副本数已增加。这里描述了一个使用部署的示例。

扩容前副本信息

$ kubectl get deployment
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
vdu1   2/2     2            2           7h4m

可以通过以下 CLI 命令执行 CNF 扩容。

$ openstack vnflcm scale --type SCALE_OUT --aspect-id ASPECT_ID \
  VNF_INSTANCE_ID --os-tacker-api-version 2

结果

Scale request for VNF Instance 431b94b5-d7ba-4d1c-aa26-ecec65d7ee53 has been accepted.

扩容后副本信息

$ kubectl get deployment
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
vdu1   3/3     3            3           7h8m

如何缩容 CNF

执行 Scale CLI 命令并检查伸缩前后的副本数。这是为了确认在缩容后副本数已减少。这里描述了一个使用部署的示例。

扩容前副本信息

$ kubectl get deployment
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
vdu1   3/3     3            3           7h8m

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

$ openstack vnflcm scale --type SCALE_IN --aspect-id ASPECT_ID \
  VNF_INSTANCE_ID --os-tacker-api-version 2

结果

Scale request for VNF Instance 431b94b5-d7ba-4d1c-aa26-ecec65d7ee53 has been accepted.

缩容后副本信息

$ kubectl get deployment
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
vdu1   2/2     2            2           7h12m