KCL 是一个 CNCF 基金会托管的基于约束的记录及函数语言,期望通过成熟的编程语言技术和实践来改进对大量繁杂配置比如云原生 Kubernetes 配置场景的编写,致力于构建围绕配置的更好的模块化、扩展性和稳定性,更简单的逻辑编写,以及更简单的自动化和生态工具集成。
本栏目将会双周更新 KCL 语言社区最新动态,包括功能、官网更新和最新的社区动态等,帮助大家更好地了解 KCL 社区!
KCL 官网:https://kcl-lang.io
感谢所有贡献者过去两周 (2024 01.19 - 2024.02.01) 的杰出工作,以下是重点内容概述
📦 模型更新
replicas
等,可以直接通过一条命令渲染 Kubernetes 资源配置,并且可以在此模型的基础上修改并自定义资源模版kcl run oci://ghcr.io/kcl-lang/podinfo -D replicas=2
🏄 语言更新
🔧 工具链更新
文档工具更新
CodeQL KCL 工具
💻 IDE 更新
语义高亮
错误修复
🎁 API 更新
🚀 SDK 更新
更多内容详见: https://github.com/kcl-lang/lib
🚢 集成更新
以下排名不分先后
将 KCL 与 Flux 等 GitOps 工具一起使用具有如下好处:
在此示例中,我们使用一个 Python Flask 应用和 Github Actions 作为 CI 示例,使用部署在集群中 Flux KCL Controller 作为 CD 示例,使用 KCL 定义需要部署的 Kubernetes 资源
注意:你可以在此方案中使用任何容器化应用以及不同的 CI 和 CD 系统如 Gitlab CI ,Jenkins CI ,ArgoCD 等
我们将 Python Flask 应用代码和配置代码分成两个仓库,以实现不同角色如开发人员和运维团队的关注点分离
整体工作流程如下:
k3d cluster create
注意:你可以在此方案中使用其他方式创建您自己的 Kubernetes 集群,如 kind, minikube 等。
git clone https://github.com/kcl-lang/flux-kcl-controller.git && cd flux-kcl-controller && make deploy
通过 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
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 流程
当业务仓库 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 社区 加入我们。
更多其他资源请参考:
1
mightybruce 288 天前
👍👍👍
|