Skip to main content
版本: Next

从 Kubernetes 迁移或集成

简介

KCL 提供了许多对 Kubernetes 配置开箱即用的支持。通过 KCL 工具,我们首先可以将Kubernetes 配置清单和自定义类型集成到 KCL 中。本节将介绍如何从 Kubernetes 进行迁移和集成。

前置依赖

快速开始

将 Kubernetes 配置清单转换为KCL

首先,让我们获取示例。

git clone https://github.com/kcl-lang/kcl-lang.io.git/
cd ./kcl-lang.io/examples/kubernetes/from-kubernetes

我们可以运行以下命令来显示配置。

cat deployment.yaml

输出结果为

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80

将 Kubernetes YAML 代码转换为 KCL

kcl import -f deployment.yaml

上述命令将生成文件 deployment.k

"""
This file was generated by the KCL auto-gen tool. DO NOT EDIT.
Editing this file might prove futile when you re-run the KCL auto-gen generate command.
"""

apiVersion = "apps/v1"
kind = "Deployment"
metadata = {
name = "nginx-deployment"
labels = {
app = "nginx"
}
}
spec = {
replicas = 3
selector = {
matchLabels = {
app = "nginx"
}
}
template = {
metadata = {
labels = {
app = "nginx"
}
}
spec = {
containers = [
{
name = "nginx"
image = "nginx:1.14.2"
ports = [
{
containerPort = 80
}
]
}
]
}
}
}

我们可以运行以下命令来运行 KCL 代码并生成 YAML

kcl deployment.k

输出结果为

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80

从 Kubernetes 自定义资源生成 KCL 类型

KCL 支持从 Kubernetes OpenAPI/自定义资源定义(CRD)中提取和生成 KCL Schema。KCL OpenAPI 规范定义了 OpenAPI 规范与 KCL 语言功能之间的映射关系。

如果您开发了 Kubernetes CRD,可以由 CRD 生成 KCL Schema,并基于此类型声明 CR。这里我们以 Kubernetes 文档中所示 CronTab CRD 为例。

  • 从 CRD 生成 KCL Schema
# Convert the CRD YAML to KCL Schema
kcl import -m crd -s -f crd.yaml
# Init a new KCL project.
rm -rf kcl.mod && kcl mod init
# Add the crd models dependency
kcl mod add ./models --rename crd
  • 使用生成的 KCL Schema 定义资源
import crd.v1

v1.CronTab {
metadata.name = "my-new-cron-object",
spec: {
cronSpec = "* * * * */5",
image = "my-awesome-cron-image",
replicas = 3,
}
}

我们可以运行以下命令来运行 KCL 代码并生成 CR YAML

kcl cr.k

输出结果为

apiVersion: stable.example.com/v1
kind: CronTab
metadata:
name: my-new-cron-object
spec:
cronSpec: "* * * * */5"
image: my-awesome-cron-image
replicas: 3

小结

本节内容解释了如何使用 kcl import 工具将 Kubernetes YAML、CRD 等迁移到 KCL。快速入门指南将帮助您进行从 Kubernetes 的迁移或集成。