一步到位 - 使用 KCL OCI Registry 管理 Kubernetes 配置

2023-06-01 20:13:30 +08:00
 peefy

使用 KCL 和 KPM 简化 Kubernetes 配置管理的使用指南。

什么是 KCL

KCL 是一个开源的基于约束的记录及函数语言。KCL 通过成熟的编程语言技术和实践来改进对大量繁杂配置比如云原生 Kubernetes 配置场景的编写,致力于构建围绕配置的更好的模块化、扩展性和稳定性,更简单的逻辑编写,以及更简单的自动化和生态工具集成。

KPM是 KCL 包管理器。KPM 下载您的 KCL 包的依赖项、编译您的 KCL 包、制作包并将它们上传到 kcl 包注册表。

为什么使用 KCL?

KCL 期望通过更现代化的声明式配置语言在 Kubernetes 资源管理解决如下问题:

如何使用 KPM 管理 Kubernetes 资源

1. 初始化一个空的 KCL 包

使用 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"

2. 为 KCL 包添加依赖

然后,您可以通过 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}]
    }]
}

3. 运行 KCL 代码

你可以使用 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 。

562 次点击
所在节点    程序员
2 条回复
my3157
2023-06-01 23:35:04 +08:00
jsonnet 不好用么?
peefy
2023-06-02 18:22:06 +08:00
@my3157 之前有写过一篇总结: https://kcl-lang.io/blog/2022-declarative-config-overview ,在语言定位、场景和特性上还是有一些差别。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/945010

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX