KCL 社区最新动态 | v0.7.5 版本发布和针对 GitOps 的 Flux KCL 集成

325 天前
 peefy

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

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

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

内容概述

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

📦 模型更新

kcl run oci://ghcr.io/kcl-lang/podinfo -D replicas=2

🏄 语言更新

🔧 工具链更新

💻 IDE 更新

🎁 API 更新

🚀 SDK 更新

更多内容详见: https://github.com/kcl-lang/lib

🚢 集成更新

特别鸣谢

以下排名不分先后

精选更新

Flux KCL 集成

将 KCL 与 Flux 等 GitOps 工具一起使用具有如下好处:

工作流程

在此示例中,我们使用一个 Python Flask 应用和 Github Actions 作为 CI 示例,使用部署在集群中 Flux KCL Controller 作为 CD 示例,使用 KCL 定义需要部署的 Kubernetes 资源

注意:你可以在此方案中使用任何容器化应用以及不同的 CI 和 CD 系统如 Gitlab CI ,Jenkins CI ,ArgoCD 等

我们将 Python Flask 应用代码和配置代码分成两个仓库,以实现不同角色如开发人员和运维团队的关注点分离

整体工作流程如下:

  1. 从 Github 拉取应用代码
  2. 应用代码开发并提交到提交到 GitHub 存储库
  3. 触发 GitHub Actions 对应用代码进行编译,生成容器镜像,并将容器镜像推送到 Docker Hub 容器注册表
  4. 触发 GitHub Actions 根据 docker.io 容器注册表中容器镜像的版本号并同步更新 KCL 定义的 Kubernetes 清单部署文件
  5. Flux KCL Controller 获取 KCL 定义的 Kubernetes 清单更改并更新部署至 Kubernetes 集群

具体步骤

1. 配置 Kubernetes
k3d cluster create

注意:你可以在此方案中使用其他方式创建您自己的 Kubernetes 集群,如 kind, minikube 等。

2. 安装 Flux KCL Controller

git clone https://github.com/kcl-lang/flux-kcl-controller.git && cd flux-kcl-controller && make deploy
3. 配置需要持续交付的 Git 仓库

通过 gitrepo.yaml 文件,定义 GitRepository 和 KCLRun 对象,用来配置监控需要持续交付的 Git 仓库以及运行 KCL 配置所需的额外参数

apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
  name: kcl-deployment
  namespace: default
spec:
  interval: 10s # 每隔 10s 检查一次仓库
  url: https://github.com/kcl-lang/flask-demo-kcl-manifests.git
  ref:
    branch: main # 监控 main 分支
---
apiVersion: krm.kcl.dev.fluxcd/v1alpha1
kind: KCLRun
metadata:
  name: kcl-git-controller
  namespace: default
spec:
  sourceRef:
    kind: GitRepository
    name: kcl-deployment

使用命令 kubectl apply -f gitrepo.yaml 将该对象部署到集群中。

如果您使用的是私有存储库,需要使用私钥凭据配置专用私有存储库访问权限。请参阅这里以获取更多详细信息。

注意:你也可以在此方案中使用 OCIRepository,对文章开头提到的 oci://ghcr.io/kcl-lang/podinfo 配置包进行持续交付,比如下面的配置

apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: OCIRepository
metadata:
  name: podinfo
  namespace: default
spec:
  interval: 5m0s
  url: oci://ghcr.io/kcl-lang/podinfo
  ref:
    tag: latest
---
apiVersion: krm.kcl.dev.fluxcd/v1alpha1
kind: KCLRun
metadata:
  name: kcl-git-controller
  namespace: default
spec:
  sourceRef:
    kind: OCIRepository
    name: podinfo
4. 提交业务代码
git clone https://github.com/kcl-lang/flask-demo.git/
cd flask-demo

flask-demo 仓库提交代码后,Github 会自动构建容器镜像,并将制品推送到 Docker hub 中,会再触发 flask-demo-kcl-manifests 仓库的 Action ,通过 KCL 自动化 API 修改部署清单仓库中的镜像地址。现在让我们为 flask-demo 仓库创建一个提交,我们可以看到代码提交后触发业务仓库 Github CI 流程

5. 配置自动更新

当业务仓库 Github CI 流程执行完成后,会自动在存放 KCL 资源配置的仓库触发一个 CI 自动更新配置并提交到 flask-demo-kcl-manifests main 分支,commit 信息如下

git clone https://github.com/kcl-lang/flask-demo-kcl-manifests.git/
cd flask-demo-kcl-manifests
git checkout main && git pull && kcl

输出 YAML 为

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flask_demo
  labels:
    app: flask_demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: flask_demo
  template:
    metadata:
      labels:
        app: flask_demo
    spec:
      containers:
        - name: flask_demo
          image: "kcllang/flask_demo:6428cff4309afc8c1c40ad180bb9cfd82546be3e"
          ports:
            - protocol: TCP
              containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
  name: flask_demo
  labels:
    app: flask_demo
spec:
  type: NodePort
  selector:
    app: flask_demo
  ports:
    - port: 5000
      protocol: TCP
      targetPort: 5000

从上述配置可以看出资源的镜像确实自动更新为了新构建的镜像内容。同时 Flux KCL Controller 会自动拉取配置并更新到集群,这样就实现了业务代码提交并部署 Kubernetes 的 e2e 完整自动化流程,每次只需提交业务代码即可,当然可以进一步搭配 Flagger 实现多种部署策略如金丝雀发布、蓝绿发布等。

其他资源

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

更多其他资源请参考:

814 次点击
所在节点    Kubernetes
1 条回复
mightybruce
325 天前
👍👍👍

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

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

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

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

© 2021 V2EX