聊聊 K8s 中的 Sidecar 设计模式 第 2 篇 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
peefy

聊聊 K8s 中的 Sidecar 设计模式 第 2 篇

  •  
  •   peefy Jun 30, 2023 1605 views
    This topic created in 1037 days ago, the information mentioned may be changed or developed.

    介绍

    在前一篇文章聊聊 K8S 中的 Sidecar 设计模式第 1 篇中,我们介绍了土话说的三蹦子的 Sidecar 设计模式。本文尝试用 KCL 这种现代化的类型安全的配置语言,来展示 Pod 资源的描述,在后续的文章中,我们将以 KCL 来介绍 Sidecar 这种模式的实际应用。

    designpattern.png

    1. Pod 的 OpenAPI 定义

    先回到最开始最简单的 Nginx 例子,其 YAML 文件几乎是相同的模式:

    apiVersion: v1 kind: Pod metadata: name: web-app spec: containers: - image: nginx name: main-container ports: - containerPort: 80 

    这里的 Pod 数据满足 Kubernetes 规范 中io.k8s.api.core.v1.Pod模型的定义。完整的 OpenAPI 定义请参考。仔细分析可以发现,apiVersion 和 kind 信息都是比较常见的默认配置,我们需要更现代的配置语言来简化。

    2. 使用 KCL 定义 Pod 资源

    KCL 是一门面向云原生领域配置策略语言,详细资料可参考语言官网

    基本的 KCL 配置程序仍然遵循K=V的形式,YAML 比较相似。比如,我们可以用下面的 KCL 代码来重写 Nginx 容器的配置:

    import k8s.api.core.v1 as k8core k8core.Pod { metadata.name = "web-app" spec.cOntainers= [{ name = "main-container" image = "nginx" ports = [{containerPort: 80}] }] } 

    其中 import 导入了 k8s 包中的k8s/api/core/v1包,其中的 Pod 结构定义对应 Pod 模型,其中已经包含了 apiVersion 和 kind 的默认值,因此只需要添加metadata.namespec.containers属性( KCL 也针对一些多级嵌套的属性提供了的语法糖)。

    我们可以通过kpm 包管理工具,创建一个 KCL 程序来定义一个 Pod 资源。并执行这个程序来得到对应的 YAML 。

    # 1. 初始化一个 kcl 程序包 hello. kpm init hello # 2. 编辑 hello 包内的 main.k 文件, # 将前文中提到的 KCL 配置代码添加到 hello/main.k 中 cat <<EOF > hello/main.k import k8s.api.core.v1 as k8core k8core.Pod { metadata.name = "web-app" spec.cOntainers= [{ name = "main-container" image = "nginx" ports = [{containerPort: 80}] }] } EOF # 3. 进入到 hello 包内,添加 k8s 依赖,并且运行 hello 包。 cd hello && kpm add k8s && kpm run 

    可以得到如下 YAML 输出:

    apiVersion: v1 kind: Pod metadata: name: web-app spec: containers: - image: nginx name: main-container ports: - containerPort: 80 

    3. 小结

    这一篇文章我们简要介绍了如何通过 KCL 构建出 Pod 配置来获得更灵活、更健壮的配置。后续文章中我们将通过 KCL 来提炼和抽象最佳的 Sidecar 模式实践,包括使用 KCL 对 Sidecar 模型进行抽象以及使用 KCL 对已存在的上游 YAML 配置进行 Sidecar 注入。

    No Comments Yet
    About     Help     Advertise     Blog     API     FAQ    Solana     2513 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 08:49 PVG 16:49 LAX 01:49 JFK 04: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