支持使用 Mgmtdriver 扩展 Kubernetes Worker 节点¶
https://blueprints.launchpad.net/tacker/+spec/mgmt-driver-for-k8s-scale
问题描述¶
《Victoria》版本支持符合 ETSI 标准的 VNF 扩展接口。对于在 VNF 之上运行 Kubernetes 集群的用例,支持集群管理至关重要。本规范提出扩展包含 Kubernetes 集群的 VNF 的 Worker 节点。它有助于安装和配置集群,以便使用 Mgmtdriver 添加或删除 Worker 节点。此操作假定 VNF 已部署规范 mgmt-driver-for-k8s-cluster。
提议的变更¶
需要进行以下更改
实现新的 MgmtDriver 以支持 ETSI NFV-SOL001 [1] 中定义的
scale_start和scale_end。伸缩
伸缩过程包括
使用 OpenStackInfraDriver 部署新的虚拟机作为 Worker 节点
在
scale_end中将部署的虚拟机添加到现有的 Kubernetes 集群。MgmtDriver
识别伸缩操作中部署的虚拟机。
从数据库获取现有的 Kubernetes 集群信息,并使用以下参数执行脚本进行伸缩:
脚本
在 Worker 节点上安装和配置 Kubernetes 组件。
从 Worker 节点向现有的 Master 节点发送加入请求。
缩减
缩减过程包括
为了确保现有 Kubernetes 集群上运行的应用程序的连续性和安全性,在
scale_start中执行以下过程,遵循优雅关机的概念。MgmtDriver
识别缩减操作中要删除的虚拟机。
从数据库获取现有的 Kubernetes 集群信息,并使用以下参数执行脚本进行缩减:
脚本
将运行在虚拟机上的 Pod 迁移到另一个 Worker 节点。
从 Kubernetes 集群中删除 Worker 节点
使用 OpenStackInfraDriver 删除此缩减操作的虚拟机。
提供 MgmtDriver 执行的示例脚本,用于安装和/或配置 Kubernetes 集群。
注意
Kubernetes v1.16.0和Kubernetes python客户端v11.0支持Kubernetes VIM。
用于伸缩操作的 VNFD¶
VNFD 需要具有以下示例中定义的 scale_start、scale_end 和 policies 定义
node_templates:
VNF:
...
interfaces:
Vnflcm:
...
scale_start:
implementation: mgmt-drivers-kubernetes
scale_end:
implementation: mgmt-drivers-kubernetes
artifacts:
mgmt-drivers-kubernetes:
description: Management driver for kubernetes cluster
type: tosca.artifacts.Implementation.Python
file: /.../mgmt_drivers/kubernetes_mgmt.py
MasterVDU:
type: tosca.nodes.nfv.Vdu.Compute
...
WorkerVDU:
type: tosca.nodes.nfv.Vdu.Compute
...
policies:
- scaling_aspects:
type: tosca.policies.nfv.ScalingAspects
properties:
aspects:
worker_instance:
name: worker_instance_aspect
description: worker_instance scaling aspect
max_scale_level: 2
step_deltas:
- delta_1
- WorkerVDU_initial_delta:
type: tosca.policies.nfv.VduInitialDelta
properties:
initial_delta:
number_of_instances: 1
targets: [ WorkerVDU ]
- WorkerVDU_scaling_aspect_deltas:
type: tosca.policies.nfv.VduScalingAspectDeltas
properties:
aspect: worker_instance
deltas:
delta_1:
number_of_instances: 1
targets: [ WorkerVDU ]
伸缩
下图显示了 VNF 伸缩操作
+---------------+
| Scaling |
| Request with |
| Additional |
| Params |
+-+-------------+
|
+----------------+--------------+
| v VNFM |
| +-------------------+ |
| | Tacker-server | |
| +-------+-----------+ |
| | |
| v |
| +----------------------+ |
2.Setup new Worker-node | | +-------------+ | |
+-----------------------+--+----| MgmtDriver | | |
| | | +-------------+ | |
+--------------------+-----------+ | | | |
| | | | | | |
|+-----------+ +----|------+ | | | | |
|| | | v | | 1.Add | | +-------------+ | |
|| +------+ | | +------+ | | new VM | | |OpenStack | | |
|| |Master|<+--+-|Worker| |<---+-----------+--+----|InfraDriver | | |
|| +------+ | | +------+ | | | | +-------------+ | |
|| VM | | VM | | | | | |
|+-----------+ +-----------+ | | | | |
| +-----------+ | | | | |
| | +------+ | | | | | |
| | |Worker| | | | | | |
| | +------+ | | | | | |
| | VM | | | | | |
| +-----------+ | | | | |
+--------------------------------+ | | Tacker-conductor| |
+--------------------------------+ | +----------------------+ |
| Hardware Resources | | |
+--------------------------------+ +-------------------------------+
该图显示了本规范提案的相关组件以及以下处理的概述
OpenStackInfraDriver 使用 Heat 添加新的虚拟机,即伸缩,如规范 support-scale-api-based-on-etsi-nfv-sol 中所述
MgmtDriver 在
scale_end中在新的虚拟机上设置新的 Worker 节点。可以使用 shell 脚本或 python 脚本来实现此设置过程,包括安装和配置任务。
注意
为了识别要安装的虚拟机,即通过此伸缩操作增加的虚拟机,假设需要引用诸如伸缩前 Worker 节点虚拟机的数量以及每个虚拟机的创建时间等信息。
伸缩请求数据¶
用户将以下伸缩参数作为 ETSI NFV-SOL003 v2.6.1 [2] 中的 ScaleVnfRequest 数据类型发送到“POST /vnf_instances/{id}/scale”
属性名称
参数描述
type
用户指定伸缩操作类型: “SCALE_IN” 或 “SCALE_OUT”
aspectId
用户指定目标 aspectId,aspectId 在上述 VNFD 中定义,用户可以通过“GET /vnf_instances/{id}”响应中包含的
InstantiatedVnfInfo.ScaleStatus来了解。numberOfSteps
伸缩步骤数
additionalParams
不需要
以下是伸缩请求体的示例
{
"type": "SCALE_OUT",
"aspectId": "worker_instance",
"numberOfSteps": "1"
}
以下时序图描述了涉及的组件和 VNF scale-out 操作的流程
该过程包括以下步骤,如图所示
客户端向 scale VNF 实例资源发送 POST 请求。
基本上与规范 support-scale-api-based-on-etsi-nfv-sol 中描述的相同序列,除了 MgmtDriver 之外。
注意
Heat 模板包含虚拟机实例化资源信息。OpenstackDriver 向 Heat 发送请求以更新此伸缩操作中指定的变量“desired_capacity”中的 Worker 节点数量。
MgmtDriver 获取 vimConnection 信息,以便获取现有的 Kubernetes 集群信息,例如 auth_url。
MgmtDriver 从 Heat 获取通过伸缩操作创建的新虚拟机信息。
MgmtDriver 通过使用 RemoteCommandExecutor 调用 shell 脚本在 VM 上设置 Worker 节点。
缩减¶
下图显示了 VNF 缩减操作
+---------------+
| Scaling |
| Request with |
| Additional |
| Params |
+-+-------------+
|
+----------------+--------------+
| v VNFM |
| +-------------------+ |
| | Tacker-server | |
| +-------+-----------+ |
| | |
| v |
1. Pre-processing | +----------------------+ |
to remove VM | | +-------------+ | |
+-------------------------------------+--+----| MgmtDriver | | |
| | | +-------------+ | |
+------+-------------------------+ | | | |
| | | | | | |
|+-----|-----+ +-----------+ | | | | |
|| v | | | | 2.Remove | | +-------------+ | |
|| +------+ | | +------+ | | VM | | |OpenStack | | |
|| |Master|-+--+>|Worker| |<---+-----------+--+----|InfraDriver | | |
|| +------+ | | +------+ | | | | +-------------+ | |
|| VM | | VM | | | | | |
|+-----------+ +-----------+ | | | | |
| +-----------+ | | | | |
| | +------+ | | | | | |
| | |Worker| | | | | | |
| | +------+ | | | | | |
| | VM | | | | | |
| +-----------+ | | | | |
+--------------------------------+ | | Tacker-conductor| |
+--------------------------------+ | +----------------------+ |
| Hardware Resources | | |
+--------------------------------+ +-------------------------------+
该图显示了本规范提案的相关组件以及以下处理的概述
MgmtDriver 在
scale_start中预处理以删除 VM,以确保现有 Kubernetes 集群上运行的应用程序的连续性和安全性。具体来说,它通过访问 Master 节点将运行在 VM 上的 Pod 迁移到另一个 Worker 节点,并使 Worker 节点离开现有的 Kubernetes 集群。OpenStackInfraDriver 使用 Heat 删除 VM,即缩减,如规范 support-scale-api-based-on-etsi-nfv-sol 中所述。
注意
为了识别预处理阶段中要删除的虚拟机,即通过此缩减操作减少的虚拟机,假设需要引用诸如缩减前 Worker 节点虚拟机的数量以及每个虚拟机的创建时间等信息。
缩减请求数据¶
请求体中的 type 参数设置为 SCALE_IN。以下是缩减请求体的示例
{
"type": "SCALE_IN",
"aspectId": "worker_instance",
"numberOfSteps": "1"
}
以下时序图描述了涉及的组件和 VNF scale-in 操作的流程
该过程由上述序列中说明的以下步骤组成。
客户端向 scale VNF 实例资源发送 POST 请求。
基本上与规范 support-scale-api-based-on-etsi-nfv-sol 中描述的相同序列,除了 MgmtDriver 之外。
注意
Heat 模板包含虚拟机实例化资源信息。OpenstackDriver 向 Heat 发送请求以更新此伸缩操作中指定的变量“desired_capacity”中的 Worker 节点数量。
MgmtDriver 获取 Vim 连接信息,以便获取现有的 Kubernetes 集群信息,例如 auth_url。
MgmtDriver 从 Heat 获取通过缩减操作要删除的 VM 的信息。
MgmtDriver 预处理 Worker 节点,使其离开 Kubernetes 集群。
备选方案¶
无。
数据模型影响¶
无。
REST API 影响¶
无。
安全影响¶
无。
通知影响¶
无。
其他最终用户影响¶
无。
性能影响¶
无。
其他部署者影响¶
无。
开发人员影响¶
无。
实现¶
负责人¶
- 主要负责人
- 其他贡献者
Shotaro Banno <banno.shotaro@fujitsu.com>
Ayumu Ueha <ueha.ayumu@fujitsu.com>
陆梁 <lu.liang@fujitsu.com>
工作项¶
MgmtDriver将被修改以实现
支持缩减的
scale_start和伸缩的scale_end。提供 MgmtDriver 执行的示例脚本,用于安装和/或配置 Kubernetes 集群。
添加新的单元和功能测试。
依赖项¶
scale_end 在“Proposed change”中引用的是基于规范 mgmt-driver-for-k8s-cluster 中的 instantiate_end 的。
测试¶
将添加单元和功能测试,以涵盖规范所需的用例。
文档影响¶
将添加完整的用户指南,以从 VNF LCM API 的角度解释扩展 Kubernetes Worker 节点。