从 Kubernetes 迁移或集成
简介
KCL 提供了许多对 Kubernetes 配置开箱即用的支持。通过 KCL 工具,我们首先可以将Kubernetes 配置清单和自定义类型集成到 KCL 中。本节将介绍如何从 Kubernetes 进行迁移和集成。
前置依赖
- 安装 kcl
快速开始
将 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
# Add the Kubernetes dependency
kcl mod add k8s
# Convert the CRD YAML to KCL Schema
kcl import -m crd -s -f crd.yaml
- 使用生成的 KCL Schema 定义资源
import models
models.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 的迁移或集成。