Skip to main content

· 阅读需要 1 分钟

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

本栏目将会双周更新 KCL 语言社区最新动态,包括功能、官网更新和最新的社区动态等,帮助大家更好地了解 KCL 社区!

KCL 官网:https://kcl-lang.io

内容概述

感谢所有贡献者过去两周 (2023 08.24 - 09.06) 的杰出工作,以下是重点合并内容概述

🔧 语言及工具链更新

  • KCL 导入工具更新 - 支持由 JSON/YAML 数据导出为 KCL 配置
  • KCL IDE 更新 - 支持右键一键格式化能力,支持直接格式化单个文件或部分 KCL 代码
  • KCL 文档工具更新 - 导出文档支持 HTML 转义
  • KCL 包管理工具 KPM 更新 - kpm run 运行命令以及错误信息优化,支持直接运行位于本地路径的 KCL 包
  • KCL 语言更新 - 优化系统库类型检查等错误信息及错误信息代码统一

📰 官网和用例更新

特别鸣谢

以下排名不分先后

祝贺 @jakezhu9 祝贺 jakezhu9 成为 KCL 社区 Maintainer 🎉

精选更新

KCL Operator

KCL Operator 提供了 Kubernetes 集群集成,允许您在将资源应用到集群时使用 Access Webhook 根据 KCL 配置生成、变异或验证资源。Webhook 将捕获创建、应用和编辑操作,并 KCLRun 在与每个操作关联的配置上执行资源,比如可以使用 KCL 语言完成如下功能

  • 使用 KCL 对资源进行修改,如根据某个条件添加/修改 label 标签或 annotation 注释或在包含 PodTemplate 的所有 Kubernetes Resource Model (KRM) 资源中注入 Sidecar 容器配置等。
  • 使用 KCL Schema 验证所有 KRM 资源,如约束只能以 Root 方式启动容器等。
  • 使用抽象模型生成 KRM 资源或者对不同的 KRM API 进行组合并使用。

使用 KCL Operator, 通过几个步骤您就可以在 Kubernetes 集群内部以很轻量的方式地通过 KCL 代码自动化地完成资源配置的管理和安全验证,无需重复开发 Webhook Server 在运行时动态修改和验证配置。

此外借助 KCL 良好的建模和抽象能力,我们可以为不同的资源 API 定义进行功能抽象/组合并以 KCL Schema 的形式对外透出,并且可以由 KCL Schema 进一步自动生成 OpenAPI Schema 定义供集群其他客户端调用,而无需为 API 抽象/组合手动维护复杂的 OpenAPI Schema 定义。

下面以一个简单的资源 annotation 注解修改示例介绍 KCL Operator 的使用方式

0.前置条件

通过 k3d 等工具准备一个 Kubernetes 集群以及 kubectl 工具

1. 安装 KCL Operator

kubectl apply -f https://raw.githubusercontent.com/kcl-lang/kcl-operator/main/config/all.yaml

使用以下命令观察并等待 pod 状态为 Running。

kubectl get po

2. 部署注解修改模型

kubectl apply -f- << EOF
apiVersion: krm.kcl.dev/v1alpha1
kind: KCLRun
metadata:
name: set-annotation
spec:
# 设置注解修改模型所需的动态参数,在此处我们可以添加我们想要修改/添加的标签
params:
annotations:
managed-by: kcl-operator
# 引用 OCI 上注解修改模型
source: oci://ghcr.io/kcl-lang/set-annotation
EOF

3. 部署一个 Pod 资源验证模型结果

执行如下命令部署一个 Pod 资源

kubectl apply -f- << EOF
apiVersion: v1
kind: Pod
metadata:
name: nginx
annotations:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
EOF
kubectl get po nginx -o yaml | grep kcl-operator

我们可以看到如下输出

    managed-by: kcl-operator

我们可以发现 Nginx Pod 上自动添加了 managed-by=kcl-operator 注解

此外,除了为 KCLRun 资源 source 字段引用已有的模型,我们可以直接为 source 字段设置 KCL 代码也可以达到同样的效果,比如

apiVersion: krm.kcl.dev/v1alpha1
kind: KCLRun
metadata:
name: set-annotation
spec:
params:
annotations:
managed-by: kcl-operator
# 仅通过一行 KCL 代码就可完成资源的修改
source: |
items = [item | {metadata.annotations: option("params").annotations} for item in option("items")]

我们已经开箱提供了多达 30+ 的内置模型,您可以在下面的链接中获得更多代码示例

https://github.com/kcl-lang/krm-kcl/tree/main/examples

KCL IDE 插件更新

过去两周,我们将 KCL 语言服务器 LSP 集成到了 NeoVim 和 Idea 中,使得可以在 NeoVim 和 IntelliJ IDEA 中体验到和 VS Code IDE 支持的补全、跳转和悬停等功能

  • NeoVim KCL 插件

kcl.nvim

  • IntelliJ 插件

intellij

更多 IDE 插件下载安装方式和功能说明可参考:

其他资源

❤️ 感谢所有 KCL 用户和社区小伙伴在社区中提出的宝贵反馈与建议。预计 9 月中旬我们会正式发布 KCL v0.6 新版本,敬请期待!

更多其他资源请参考:

· 阅读需要 1 分钟

快讯

jakezhu9

🎉 近日,KCL 社区迎来了一位新的 Maintainer 成员,恭喜 jakezhu9 成功晋升为社区维护者

感谢他在 KCL Go SDK 中做出一系列贡献以及为 KCL Import 工具带来的一系列增强功能的升级,为用户提供更加便捷高效的数据和 Schema 导入体验。以下是他近期的重要贡献列表

新晋 Maintainer 的加入,不仅标志着 jakezhu9 在技术上的卓越表现,也体现了社区对他的高度认可和信任。

心得体会

以下是 jakezhu9 同学参与 KCL 社区的心得体会

我非常幸运能够加入 KCL 这样一个优秀的社区来,并参与项目的开发和社区的建设。从一开始了解云原生领域 KusionStack 和 KCL 这样强大的工具和语言,到为项目修复一个简单的 Bug,再到逐步设计和开发 KCL 转换和生成的部分,在这个过程中,我不仅获得了技术水平上的提升,还积累了许多的开源贡献的经验,感受到了不断进步的快乐和成就感。每当看到自己提交的 PR 被合并时,我都会感到特别的满足。感谢 KCL 社区,也感谢社区的前辈和一路上遇到的所有小伙伴,他们在我开发过程中给了我很多的想法和建议,真的非常有帮助。

KCL 社区是一个开放自由、充满活力与机遇的开源社区,来自不同公司、学校,拥有不同技术背景的开发者,共同在 Github、社区周会上相互交流碰撞,探索前沿的技术解决方案,并为社区持续贡献高效简洁的代码。无论是开源新手还是技术大佬,都可以快速融入社区并参与其中。社区里和谐友好、共同进步的氛围,也让我感到非常的温暖。未来,我将继续为 KCL 社区贡献更多的力量,也热烈欢迎感兴趣的同学加入我们,共同参与到社区的建设和发展中来!

其他资源

❤️ 感谢所有 KCL 用户和社区小伙伴在社区中提出的宝贵反馈与建议。更多其他资源请参考: