ETSI NFV-SOL CNF 修复

本文档描述了在 Tacker v2 API 中修复 CNF 的方法。

注意

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

概述

下图显示了 CNF 修复的概述。

  1. 请求修复 VNF

    用户通过请求 heal 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/heal.svg

先决条件

应安装以下软件包

  • tacker

  • python-tackerclient

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

CNF 修复流程

如前提条件和修复目标 VNF 实例中所述,在修复之前必须实例化 VNF。

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

CNF 修复主要有两种方法。

  • 修复整个 VNF

    通过终止和实例化 VNF 来修复整个 VNF 实例。

  • 使用 VNFC 实例指定修复

    修复 Pod(映射为 VNFC),该 Pod 是单例或使用 Kubernetes 的控制器资源(例如 Deployment、DaemonSet、StatefulSet 和 ReplicaSet)创建的。

注意

VNFC 是“VNF 组件”,一个 VNFC 基本对应于 VNF 中的一个 VDU。有关 VNFC 的更多信息,请参阅 NFV-SOL002 v3.3.1

修复目标 VNF 实例

假设存在以下 VNF 实例,将修复此实例。

$ openstack vnflcm show VNF_INSTANCE_ID --os-tacker-api-version 2 \
  -f json | jq .'["Instantiated Vnf Info"]'.vnfcInfo

结果

[
  {
    "id": "VDU1-vdu1-749bb6cbbf-dcjpn",
    "vduId": "VDU1",
    "vnfcResourceInfoId": "vdu1-749bb6cbbf-dcjpn",
    "vnfcState": "STARTED"
  },
  {
    "id": "VDU1-vdu1-749bb6cbbf-hmsbh",
    "vduId": "VDU1",
    "vnfcResourceInfoId": "vdu1-749bb6cbbf-hmsbh",
    "vnfcState": "STARTED"
  }
]

如何修复整个 VNF

使用 CLI 命令执行整个 CNF 的修复,并在修复前后检查 pod 信息的名字和年龄。 目的是确认修复后名字已更改且年龄为新的。

修复前 Pod 信息

$ kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
vdu1-749bb6cbbf-dcjpn   1/1     Running   0          7h38m
vdu1-749bb6cbbf-hmsbh   1/1     Running   0          7h38m

可以通过以下 CLI 命令执行修复整个 VNF。

$ openstack vnflcm heal VNF_INSTANCE_ID --os-tacker-api-version 2

结果

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

修复后 Pod 信息

$ kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
vdu1-749bb6cbbf-jgjq9   1/1     Running   0          31s
vdu1-749bb6cbbf-tj4vx   1/1     Running   0          31s

修复目标 VNF 实例中显示的 VNF 实例中,所有 vnfcResourceInfo 都将被更新。

$ openstack vnflcm show VNF_INSTANCE_ID --os-tacker-api-version 2 \
  -f json | jq .'["Instantiated Vnf Info"]'.vnfcInfo

结果

[
  {
    "id": "VDU1-vdu1-749bb6cbbf-jgjq9",
    "vduId": "VDU1",
    "vnfcResourceInfoId": "vdu1-749bb6cbbf-jgjq9",
    "vnfcState": "STARTED"
  },
  {
    "id": "VDU1-vdu1-749bb6cbbf-tj4vx",
    "vduId": "VDU1",
    "vnfcResourceInfoId": "vdu1-749bb6cbbf-tj4vx",
    "vnfcState": "STARTED"
  }
]

如何使用 VNFC 实例指定修复

使用部分 CNF CLI 命令执行修复,并在修复前后检查 pod 信息的名字和年龄。 目的是确认修复后名字已更改且年龄为新的。

修复前 Pod 信息

$ kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
vdu1-749bb6cbbf-jgjq9   1/1     Running   0          31s
vdu1-749bb6cbbf-tj4vx   1/1     Running   0          31s

可以通过运行 openstack vnflcm heal VNF_INSTANCE_ID --vnfc-instance VNFC_INSTANCE_ID 来执行指定 VNFC 实例的修复。

注意

VNFC_INSTANCE_IDinstantiatedVnfInfo.vnfcInfo.id

$ openstack vnflcm heal VNF_INSTANCE_ID --vnfc-instance VNFC_INSTANCE_ID \
  --os-tacker-api-version 2

结果

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

修复后 Pod 信息

$ kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
vdu1-749bb6cbbf-6mbsl   1/1     Running   0          86s
vdu1-749bb6cbbf-tj4vx   1/1     Running   0          9m59s
$ openstack vnflcm show VNF_INSTANCE_ID --os-tacker-api-version 2 \
  -f json | jq .'["Instantiated Vnf Info"]'.vnfcInfo

结果

[
  {
    "id": "VDU1-vdu1-749bb6cbbf-6mbsl",
    "vduId": "VDU1",
    "vnfcResourceInfoId": "vdu1-749bb6cbbf-6mbsl",
    "vnfcState": "STARTED"
  },
  {
    "id": "VDU1-vdu1-749bb6cbbf-tj4vx",
    "vduId": "VDU1",
    "vnfcResourceInfoId": "vdu1-749bb6cbbf-tj4vx",
    "vnfcState": "STARTED"
  }
]