ETSI NFV-SOL CNF 修复¶
本文档描述了在 Tacker v2 API 中修复 CNF 的方法。
概述¶
下图显示了 CNF 修复的概述。
请求修复 VNF
用户通过请求
heal VNF,使用 tacker-client 请求 tacker-server 修复 VNF 或所有 VNF。调用 Kubernetes API
收到 tacker-client 的请求后,tacker-server 会将其重定向到 tacker-conductor。在 tacker-conductor 中,请求会再次根据实例化参数的内容重定向到适当的基础设施驱动程序(在本例中为 Kubernetes 基础设施驱动程序)。然后,Kubernetes 基础设施驱动程序调用 Kubernetes API。
重新创建 Pod
Kubernetes Master 根据 API 调用重新创建 Pod。
先决条件¶
应安装以下软件包
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_ID 是 instantiatedVnfInfo.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"
}
]