支持 Kubernetes VIM 的多租户¶
https://blueprints.launchpad.net/tacker/+spec/k8s-namespace
问题描述¶
ETSI NFV-SOL003 VNF 生命周期管理,适用于 Kubernetes VIM 上的 CNF,在 Wallaby 版本中得到支持,例如实例化 [1]、伸缩 [2] 和修复 [3],但未提供使用指定命名空间的这些操作。本规范提出针对具有指定命名空间的 CNF 的 VNF 生命周期管理操作。用户应该是绑定到 ClusterRoles 作为管理员或绑定到 Roles 作为普通用户的 ServiceAccount。
提议的变更¶
ETSI NFV-SOL003 VNF 生命周期管理 2.6.1 中的实例化操作 [4] 允许用户在 InstantiateVnfRequest 中指定目标命名空间,以便在 Kubernetes VIM 上部署 CNF。additionalParams 字段提供了一个新的参数 namespace 用于目标命名空间。
注意
VNF 实例应该位于单个命名空间中。可以将多个 Kubernetes 资源作为 VNF 实例部署,但它们应该在同一个命名空间中管理。
CNF 的 LCM 操作需要以下更改
CNF 实例化
将命名空间字段添加到
InstantiateVnfRequest。添加逻辑,在 Kubernetes InfraDriver 中使用指定的命名空间。
将指定的命名空间存储在 Tacker DB 中。
注意
命名空间存储在
VnfResource.resource_name和VnfInstance.instantiatedVnfInfo.vnfcResourceInfo.metadata中。本规范建议将它们聚合到VnfInstance.metadata中,以便更轻松地在 Tacker DB 中管理命名空间。注意
在
GET /vnf_instances/{vnfInstanceId}/的响应中应描述指定的命名空间。CNF 伸缩
添加逻辑,在
VnfInstance表中获取存储的命名空间。
注意
需要设计如何在实例化后管理命名空间。这可能不需要。
CNF 修复
添加逻辑,在
VnfInstance表中获取存储的命名空间。
注意
需要设计如何在实例化后管理命名空间。这可能不需要。
CNF 终止
添加逻辑,在
VnfInstance表中获取存储的命名空间。
使用指定命名空间进行 CNF 实例化¶
下图显示了使用指定命名空间的 CNF 实例化示意图
+----------+
| |
| VNFD |
| |
+-+--------+
|
+----------------+ +--------v-+ +------------------+
| CNF Definition | | | | Instantiation |
| File +--> CSAR | | Request with |
| | | | | additionalParams |
+----------------+ +------+---+ +--+---------------+
| |
| | 1. Request
| | with namespace
+------------------------------+ +-----------------------------+
| CNF | | | | VNFM |
| | | +--v--------v----+ |
| +----------+ +----------+ | | | TackerServer | |
| | Pod | | Pod | | | +------+---------+ |
| | | | | | | | |
| +----------+ +----------+ | | +---------------------+ |
+------------------------------+ | | | | |
| | +-v-+----------+ | |
+------------------------------+ | | | VnflcmDriver | | |
| Kubernetes cluster VNF | | | | | | |
| | | | +-+-^----------+ | |
| +----------+ +----------+ | | | | | 3. Store | |
| | VM | | VM | | 2. Set namespace | | | | namespace | |
| | +------+ | | +------+ | | in K8s API call | | --v-+----------+ | |
| | |Worker| | | |Master+<-------------------------------+ Kubernetes | | |
| | +------+ | | +------+ | | | | | InfraDriver | | |
| +----------+ +----------+ | | | +--------------+ | |
| | | | | |
+------------------------------+ | | Tacker Conductor | |
| | | |
+------------------------------+ | +---------------------+ |
| Hardware Resources | | |
+------------------------------+ +-----------------------------+
指定的命名空间在
InstantiateVnfRequest中发送。Kubernetes InfraDriver 使用指定的命名空间调用 K8s API。
VnflcmDriver 将命名空间存储在数据库中。
示例输入参数¶
在 ETSI NFV-SOL003 v2.2.6 中定义的 InstantiateVnfRequest 的 additionalParams 参数中添加了一个名为 namespace 的新属性 [4]。现有 CNF 操作的其他参数无需更改。
属性名称 |
参数描述 |
|---|---|
namespace |
Kubernetes API 调用的命名空间。如果不存在,则使用资源文件中的命名空间。 |
以下是一个示例
{
"flavourId": "simple",
"additionalParams": {
"lcm-kubernetes-def-files": [
"Files/kubernetes/pod.yaml"
],
"namespace": "namespaceA"
},
"vimConnectionInfo": [
{
"id": "8a3adb69-0784-43c7-833e-aab0b6ab4470",
"vimId": "specified by response of vim list",
"vimType": "kubernetes"
}
]
}
使用指定命名空间的 CNF 实例化序列¶
该过程包含上述步骤。
客户端发送实例化请求。
与 Wallaby 版本中的步骤相同,直到调用 KubernetesInfraDriver。
KubernetesInfraDriver 使用指定的命名空间调用 Kubernetes API
Kubernetes 客户端发送带有
InstantiateVnfRequest.additionalParams中命名空间的请求。如果未提供命名空间,则使用 Kubernetes 资源文件中的命名空间。KubernetesInfraDriver 将命名空间添加到 TackerDB 中的“vnf_resources”表中。
注意
存储在“vnf_resources”表中的
namespace在 CNF 的伸缩、修复和终止操作中使用。
数据模型影响¶
如上所述,存储在 Tacker DB 中的命名空间将通过此实现聚合到 VnfInstance.vnf_metadata 中。这些字段将更改如下
VnfResource.resource_name此字段包含以逗号分隔的命名空间和资源名称,但本规范将仅存储资源名称。
VnfInstance.instantiatedVnfInfo.vnfcResourceInfo.metadata本规范未修改此字段,但 Tacker 将不再引用它。
注意
“vnf_instances”表中的 metadata 字段定义为 JSON。无需更改,但值得注意的是,metadata 字段实现为 vnf_metadata。
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
- 其他贡献者
Tatsuhiro Furuya <tatu.furuya@fujitsu.com>
Yoshiyuki Katada <katada.yoshiyuk@fujitsu.com>
Ayumu Ueha <ueha.ayumu@fujitsu.com>
陆梁 <lu.liang@fujitsu.com>
工作项¶
实现以支持
在 CNF 实例化时指定目标命名空间,以便在 Kubernetes VIM 上部署 CNF。
在 CNF 实例化时将指定的命名空间存储在 Tacker DB 中。
从 Tacker DB 获取指定的命名空间,并在 CNF 伸缩和修复时使用它。
添加新的单元和功能测试。
依赖项¶
无
测试¶
将添加单元和功能测试,以涵盖规范所需的用例。
文档影响¶
用户指南将被修改,以解释针对具有指定命名空间的 CNF 的 VNF 生命周期管理操作。