一步到位 - 使用 KCL OCI Registry 管理 Kubernetes 配置 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
peefy
V2EX    程序员

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

  •  1
     
  •   peefy 2023-06-01 20:13:30 +08:00 838 次点击
    这是一个创建于 875 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    kcl-website.jpg

    什么是 KCL

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

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

    为什么使用 KCL?

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

    • 通过代码抽象等手段屏蔽基础设施和平台的细节,降低研发者负担
    • 编辑校验已有的存量配置或模版
    • 通过配置语言无副作用地管理跨团队的大规模配置数据,提升团队协作效率
      • 生产级高性能编程语言编写代码的方式提升配置的灵活度,比如条件语句、循环、函数、包管理等特性提升配置重用的能力
      • 在代码层面提升配置语义验证的能力,比如字段可选 /必选、类型、范围等配置检查能力
      • 提供配置分块编写、组合和抽象的能力,比如结构定义、结构继承、约束定义等能力
      • 通过多语言 SDKKCL 语言插件等手段提升其自动化集成能力

    如何使用 KPM 管理 Kubernetes 资源

    1. 初始化一个空的 KCL 包

    使用kpm init命令创建一个名为my_package的 kcl 程序包, 并且在我们创建完成一个名为my_package的包后,我们需要通过命令cd my_package进入这个包来进行后续的操作。

    kpm init my_package 

    kpm_init

    kpm将会在执行kpm init my_package命令的目录下创建两个默认的配置文件kcl.modkcl.mod.lock

    - my_package |- kcl.mod |- kcl.mod.lock |- # 你可以直接在这个目录下写你的 kcl 程序。 

    kcl.mod.lockkpm用来固定依赖版本的文件,是自动生成的,请不要人工修改这个文件。

    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_add_k8s

    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 

    kpm_run

    想要了解更多?

    有关详细信息,请参阅 KCL 网站和 KCL Github Repo 。

    my3157
        1
    my3157  
       2023-06-01 23:35:04 +08:00
    jsonnet 不好用么?
    peefy
        2
    peefy  
    OP
       2023-06-02 18:22:06 +08:00
    @my3157 前有写过一篇总结: https://kcl-lang.io/blog/2022-declarative-config-overview ,在语言定位、场景和特性上还是有一些差别。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5401 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 01:33 PVG 09:33 LAX 18:33 JFK 21:33
    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