KCL 开源双周报 | 如何在 KCL 中使用不同 Kubernetes 配置合并策略? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
peefy
V2EX    程序员

KCL 开源双周报 | 如何在 KCL 中使用不同 Kubernetes 配置合并策略?

  •  
  •   peefy 2023-12-07 17:48:33 +08:00 1190 次点击
    这是一个创建于 687 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简介

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

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

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

    内容概述

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

    模型更新

    KCL 模型数量新增至240 个,主要新增与 Crossplane Provider 相关的模型和与 JSON 合并操作相关的库

    工具链更新

    • 文档工具更新

      • 支持模型依赖的三方库的文档生成,比如k8s模型
    • 验证工具更新

      • 支持验证结果和错误定位到 YAML/JSON 文件,输出错误行列号信息
    • 导入工具更新

      • 支持 OpenAPImultiplyOf规范映射到 KCLmultiplyof函数进行校验
      • 支持 YAML Stream 格式的 Kubernetes CRD 文件输出为多个 KCL 文件
      • 优化 KCL 代码生成,去除空的 check 语句

    SDK 更新

    • 在 KCL 已有 Go 和 Python SDK 的基础上新增 Rust SDK (不需要 LLVM 依赖), 初步包含 KCL 文件编译、校验、测试和格式化代码等 API

    IDE 更新

    • 体验改进

      • 支持增量解析和异步编译功能,提升性能
    • 错误修复

      • 修复 assert 语句中字符串插值变量不能跳转的异常
      • 修复了字符串中异常触发函数补全的异常
      • 修复 import 语句别名语义检查和补全的异常
      • 修复了 schema 中 check 表达式补全的异常

    文档更新

    特别鸣谢

    以下排名不分先后

    精选更新

    在 KCL 中使用 Kubernetes Strategy Merge Patch 更新配置

    在目前的 KCL 版本中支持使用各种属性运算符对配置进行更新和覆盖操作,但是能力还比较原子,无法很好地覆盖云原生常规的配置策略场景,对于 Kubernetes 配置,会频繁地使用到 Kubernetes 原生支持的 Json Merge Patch 和 Strategy Merge Patch 能力,比如使用kubectl patch,kustomize和大部分与云原生配置/策略工具开箱支持的 Patch 能力。

    因此,为了避免在 KCL 中处理 Kubernetes 配置时反复使用 KCL 属性运算符编写配置 Patch 的模版代码,我们提供了 Kubernetes Strategy Merge Patch 库用于 Kubernetes 配置更新,并且支持所有 Kubernetes 原生对象定义的合并策略,比如列表对象的覆盖,修改和添加等。下面是使用方式

    • 新建工程并添加Strategy Merge Patch库依赖
    kcl mod init && kcl mod add strategic_merge_patch 
    • main.k中编写配置 Patch 代码 (以Deployment模版的labels,replicascontainer字段为例)
    import strategic_merge_patch as s original = { apiVersion = "apps/v1" kind = "Deployment" metadata = { name = "my-deployment" labels.app = "my-app" } spec: { replicas = 3 template.spec.cOntainers= [ { name = "my-container-1" image = "my-image-1" } { name = "my-container-2" image = "my-image-2" } ] } } patch = { apiVersion = "apps/v1" kind = "Deployment" metadata = { name = "my-deployment" labels.version = "v1" } spec: { replicas = 4 template.spec.cOntainers= [ { name = "my-container-1" image = "my-new-image-1" } { name = "my-container-3" image = "my-image-3" } ] } } got = s.merge(original, patch) 
    • 运行命令获得输出
    kcl run 

    输出为

    original: metadata: name: my-deployment labels: app: my-app spec: replicas: 3 template: spec: containers: - name: my-container-1 image: my-image-1 - name: my-container-2 image: my-image-2 patch: metadata: labels: version: v1 spec: replicas: 4 template: spec: containers: - name: my-container-1 image: my-new-image-1 - name: my-container-3 image: my-image-3 got: metadata: name: my-deployment labels: app: my-app version: v1 spec: replicas: 4 template: spec: containers: - name: my-container-1 image: my-new-image-1 - name: my-container-2 image: my-image-2 - name: my-container-3 image: my-image-3 

    可以看到Deployment模版的labels,replicascontainer字段都被更新为了正确的值,更多文档和使用方式请查阅https://artifacthub.io/packages/kcl/kcl-module/strategic_merge_patch

    其他资源

    感谢所有 KCL 用户和社区小伙伴在社区中提出的宝贵反馈与建议。后续我们会发布更多 KCL 云原生模型和工具集成文章,敬请期待! 查看KCL 社区加入我们。

    更多其他资源请参考:

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2199 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 00:49 PVG 08:49 LAX 17:49 JFK 20:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86