
使用 KCL 和 KPM 简化 Kubernetes 配置管理的使用指南。
KCL 是一个开源的基于约束的记录及函数语言。KCL 通过成熟的编程语言技术和实践来改进对大量繁杂配置比如云原生 Kubernetes 配置场景的编写,致力于构建围绕配置的更好的模块化、扩展性和稳定性,更简单的逻辑编写,以及更简单的自动化和生态工具集成。
KPM是 KCL 包管理器。KPM 下载您的 KCL 包的依赖项、编译您的 KCL 包、制作包并将它们上传到 kcl 包注册表。
KCL 期望通过更现代化的声明式配置语言在 Kubernetes 资源管理解决如下问题:
使用kpm init命令创建一个名为my_package的 kcl 程序包, 并且在我们创建完成一个名为my_package的包后,我们需要通过命令cd my_package进入这个包来进行后续的操作。
kpm init my_package kpm将会在执行kpm init my_package命令的目录下创建两个默认的配置文件kcl.mod和kcl.mod.lock。
- my_package |- kcl.mod |- kcl.mod.lock |- # 你可以直接在这个目录下写你的 kcl 程序。 kcl.mod.lock是kpm用来固定依赖版本的文件,是自动生成的,请不要人工修改这个文件。
kpm将会为这个新包创建一个默认的kcl.mod。如下所示:
[package] name = "my_package" edition = "0.0.1" version = "0.0.1" 然后,您可以通过kpm add命令来为您当前的库添加一个外部依赖。
如下面的命令所示,为当前包添加一个版本号为1.27.2并且名为k8s的依赖包。
kpm add k8s:1.27.2 kpm会为您将依赖添加到 kcl.mod 文件中.
[package] name = "my_package" edition = "0.0.1" version = "0.0.1" [dependencies] k8s = "1.27.2" # The dependency 'k8s' with version '1.27.2' konfig中的内容在当前包中创建main.k。
- my_package |- kcl.mod |- kcl.mod.lock |- main.k # Your KCL program. 并且将下面的内容写入main.k文件中。
# 导入并使用外部依赖 `k8s` 包中的内容。 import k8s.api.core.v1 as k8core k8core.Pod { metadata.name = "web-app" spec.cOntainers= [{ name = "main-container" image = "nginx" ports = [{cOntainerPort= 80}] }] } 你可以使用 kpm 编译刚才编写的main.k文件, 得到编译后的结果。
kpm run 输出为
apiVersion: v1 kind: Pod metadata: name: web-app spec: containers: - image: nginx name: main-container ports: - containerPort: 80 有关详细信息,请参阅 KCL 网站和 KCL Github Repo 。
1 my3157 2023-06-01 23:35:04 +08:00 jsonnet 不好用么? |
2 peefy OP @my3157 前有写过一篇总结: https://kcl-lang.io/blog/2022-declarative-config-overview ,在语言定位、场景和特性上还是有一些差别。 |