Skip to main content
版本: 0.6.0

从 Kubernetes 迁移

简介

KCL 对 Kubernetes 配置提供了许多开箱即用的支持,通过 KCL 工具,我们可以将 Kubernetes Schema 和 配置集成到 KCL 中,本节内容将介绍如何使用 KCL 对 Kubernetes 进行集成

1. Kubernetes OpenAPI Spec

从 Kubernetes 1.4 开始,引入了对 OpenAPI 规范(在捐赠给 Open API Initiative 之前称为 swagger 2.0)的 alpha 支持,API 描述遵循 OpenAPI 规范 2.0,从 Kubernetes 1.5 开始,Kubernetes 能够直接从源码自动地提取模型并生成 OpenAPI 规范,自动化地保证了规范和文档与操作/模型的更新完全同步。

此外,Kubernetes CRD 使用 OpenAPI v3.0 validation 来描述(除内置属性 apiVersion、kind、metadata 之外的)自定义 schema,在 CR 的创建和更新阶段,APIServer 会使用这个 schema 对 CR 的内容进行校验。

2. KCL OpenAPI 支持

KCLOpenAPI 工具支持从 OpenAPI/CRD 定义提取并生成 KCL schema. 在KCLOpenapi Spec中明确定义了 OpenAPI 规范与 KCL 语言之间的映射关系。

3. 从 Kubernetes 模型迁移到 KCL

3.1 基于 kusion_models 编写配置

我们为你提供了一个开箱即用的 kusion_models 包,让你可以快速开始。其中包含一个精心设计的前端模型,称为服务器模型(Server schema)。你可以通过初始化 Server schema 来声明其配置。

3.2 创建自定义的 models 前端模型

现有的 konfig 模型可能无法满足你的特定业务需求,那么你也可以设计自定义前端模型包。您可基于预先生成的 Kubernetes KCL 包自定义您的前端模型。

3.2.1 获取 Kubernetes KCL 模型

我们提供了预生成的各版本Kubernetes KCL模型,您可以在项目下执行 kpm add k8s:<version> 来获得它。有关 kpm 使用的详细信息,请参考 kpm快速入门指南

或者,如果您需要自己生成这些包,请参考从 Kubernetes OpenAPI 文件生成 KCL 包

3.2.2 编写自定义前端模型

由于 Kubernetes 内置模型较为原子化和复杂,我们推荐以 Kubernetes 原生模型作为后端输出的模型,对其进一步抽象,而向用户暴露一份更为友好和简单的前端模型界面,具体您可参照 Konfig 仓库中 kusion_models Server 模型的设计方式进行。

3.2.3 迁移配置数据

对于存量的 Kubernetes 配置数据,您可以仿照 kube2Kcl 工具的做法,编写自定义的转换脚本,进行一键迁移。Kusion 后续将提供该脚本的编写脚手架和编写指南。

4. 从 Kubernetes CRD 迁移

如果您的项目中使用了 CRD,也可以采用类似的模式,生成 CRD 对应的 KCL schema,并基于该 schema 声明 CR。

  • 从 CRD 生成 KCL Schema

    kcl-openapi generate model --crd --skip-validation -f your_crd.yaml
  • 使用 KCL 声明 CR

    使用 KCL 声明 CR 的模式与声明 Kubernetes 内置模型配置的模式相同,在此不做赘述。

小结

本节介绍了如何使用 kcl-openapi 工具将 OpenAPI 规范映射到 KCL 语言特性,此外提供了将 KCL 与 OpenAPI 和 Kubernetes CRD 一起使用的快速入门指南帮助从 Kubernetes 进行迁移或集成。