支持 v2 LCM API 中的 CNF 修复¶
https://blueprints.launchpad.net/tacker/+spec/support-nfv-solv3-heal-vnf
本规范增强了 v2 Heal API,以支持 CNF。
问题描述¶
Yoga 版本支持 ETSI NFV SOL002 v3.3.1 [1] 和 SOL003 v3.3.1 [2] 中定义的 VNF 生命周期管理 (LCM) 操作。它还支持使用 v2 API(例如实例化 API、终止 API 和更改当前 VNF 包 API)进行 CNF 生命周期管理。
但是,v2 Heal API 尚未支持 CNF。在 v2 LCM API 中支持 CNF 可以使 Tacker 成为更强大的通用 VNFM。
提议的变更¶
本规范增强了以下 API 以支持 CNF。
修复 VNF (POST /v2/vnf_instances/{vnfInstanceId}/heal)
CNF 修复的定义¶
v2 CNF 修复的定义与 v1 CNF 修复的定义相同。
对于“使用 SOL003 修复 VNF 实例”,将修复操作定义为终止和实例化 VNF。
对于“使用 SOL002 修复 VNFC”,Pod 映射到 VNFC。Pod 可以是单例,也可以使用 Kubernetes 中的 工作负载资源(例如 ReplicaSet、Deployment、DaemonSet 或 StatefulSet)创建。对于单例 Pod,删除后需要创建新的 Pod。另一方面,对于工作负载资源,Kubernetes 会自动创建新的 Pod。
v2 Heal 操作支持在 Kubernetes 中定义的以下类型。它们与 v1 Heal 操作相同。
Pod
ReplicaSet
Deployment
DaemonSet
StatefulSet
注意
Tacker 支持修复单例 Pod 或使用上述工作负载资源创建的 Pod。使用 Job 和 CronJob 创建的 Pod 不在范围内,因为不需要修复操作。
当用户执行“使用 SOL003 修复 VNF 实例”时,VNF 包中描述的所有 Kubernetes 资源都会被重新创建,但是对于 StatefulSet 的情况,Kubernetes 自动创建的 PersistentVolumeClaim 分配的 PersistentVolume 不会被删除。同样,在“使用 SOL002 修复 VNFC”中,只有映射到 VnfInstance.instantiatedVnfInfo.VnfcInfo.id 的具有 vnfcInstanceId 的 Pod 会被重新创建,而其他相关资源不会被删除。
注意
存储在 VnfInstance.instantiatedVnfInfo.VnfcResourceInfo.computeResource.resourceId 中的 Pod 名称可能与 Kubernetes 集群中实际的 Pod 名称不同,因为当 Kubernetes 自动修复或自动扩展工作时,Pod 名称可能会更改。在扩展和修复之前需要同步数据库。关于数据库同步的信息在 Tacker 和 Kubernetes 之间资源 ID 不匹配的错误处理 中描述。
修复操作的选项¶
客户端可以使用 API 请求中的 vnfcInstanceId 指定修复的目标资源。vnfcInstanceId 是一个列表,指示请求修复操作的 VNFC 实例。
此外,v2 Heal API 支持 all 选项,该选项指定除了计算资源之外,还包括网络资源和存储资源等修复目标资源。但是,此选项在 CNF 修复的情况下无效,因为 Kubernetes 无法控制单个网络和存储。
使用 vnfcInstanceId,Tacker 支持以下两种修复模式。
- 模式 A。vnfcInstanceId 包含在请求中。
它指定“使用 SOL002 修复 VNF 实例”。仅修复指定的 VNFC 实例。
- 模式 B。vnfcInstanceId 不包含在请求中。
它指定“使用 SOL003 修复 VNF 实例”。修复 VNF 实例中包含的所有 VNFC 实例。
修复操作流程¶
除了 InfraDriver(KubernetesDriver)处理之外,当前实现没有变化。
该过程包括以下步骤,如图所示
先决条件:VNF 实例处于“INSTANTIATED”状态。
客户端发送修复 VNF 实例的 POST 请求。
如果请求包含
vnfcInstanceId,VNFM 会根据 Tacker 数据库中的VnfInstance.instantiatedVnfInfo.VnfcResourceInfo检查相应资源的存在性。VNFM 向端点(例如客户端)发送带有“STARTING”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的开始。
VNFM 和 NFVO 交换授权信息。
VNFM 向端点(例如客户端)发送带有“PROCESSING”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的处理。
MgmtDriver 根据 MgmtDriver 脚本执行预操作。
KubernetesDriver 向 Kubernetes 发送删除 Pod 请求。在模式 A 的情况下,请求仅针对目标 VNFC 对应的 Pod。在模式 B 的情况下,请求针对 VNF 中的所有 Pod。
如果修复目标是单例 Pod,KubernetesDriver 会向 Kubernetes 发送创建 Pod 请求。
KubernetesDriver 向 Kubernetes 发送读取资源请求以检查已修复资源的的状态。
MgmtDriver 根据 MgmtDriver 脚本执行后操作。
VNFM 向端点(例如客户端)发送带有“COMPLETED”状态或“FAILED_TEMP”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的结果。
后置条件:VNF 实例处于“INSTANTIATED”状态,并且已修复。
注意
对于 Kubernetes 中的工作负载资源(例如 ReplicaSet、Deployment、DaemonSet 或 StatefulSet)创建的 Pod,不需要显式的创建过程,因为 Kubernetes 会自动重新生成 Pod。
Kubernetes API 支持¶
KubernetesDriver 调用以下 API 来修复 Pod 并检查其状态。
API 组 |
类型 |
API 方法 |
|---|---|---|
apps (AppsV1Api) |
读取 |
read_namespaced_replica_set_scale |
read_namespaced_deployment_scale |
||
read_namespaced_daemon_set |
||
read_namespaced_stateful_set_scale |
||
删除 |
delete_namespaced_pod |
|
创建 |
create_namespaced_pod |
Read API 的参数是 name 和 namespace。
Delete API 的参数是 name、namespace 和 body。在修复操作的情况下,body 未设置。
Create API 的参数是 name、namespace 和 body。body 包含从 Kubernetes 清单文件中设置的资源定义。
Tacker 和 Kubernetes 之间资源 ID 不匹配的错误处理¶
Pod 可能会使用 Kubernetes 自身的自动修复功能进行修复,而无需 Tacker 的参与。此修复操作会更改 Kubernetes 资源的名称。因此,目标 VNFC 可能无法通过先前存储为 VnfInstance.instantiatedVnfInfo.vnfcResourceInfo.computeResource.resourceId 的资源名称找到。在这种情况下,Tacker 会返回错误,并将操作状态移动到 FAILED_TEMP。
注意
仅在使用 ReplicaSet、Deployment、DaemonSet 而不是 StatefulSet 时,Kubernetes 自动修复才会更改 Kubernetes 资源的名称。
要恢复此错误,需要执行以下三个步骤:
调用 fail API 将 VnfLcmOpOcc 标记为“FAILED”
同步 Tacker 和 Kubernetes 的数据库
使用更新后的 vnfcInstanceId 调用 heal API
注意
此 SPEC 未提及同步方法。Tacker 将在未来的版本中支持此类同步功能。
注意
同步后,目标 VNFC 的 vnfcInstanceId(映射到 VnfInstance.instantiatedVnfInfo.vnfcInfo.id)会更改,因为 VnfInstance.instantiatedVnfInfo.vnfcInfo.id 基于当前实现中 Kubernetes 的资源名称。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
工作项¶
实施在 Tacker-conductor 上运行的 InfraDriver 流程。
添加新的单元和功能测试。
更新 Tacker 用户指南。
依赖项¶
修复操作
依赖于 spec “增强 NFV SOL_v3 LCM 操作” [3]。
测试¶
将为使用 Kubernetes VIM 的 v2 CNF 修复操作添加单元和功能测试用例。
文档影响¶
将在 Tacker 用户指南中添加有关 v2 CNF 修复操作的描述。