Skip to main content

1 post tagged with "Biweekly-Newsletter"

查看所有标签

· 阅读需要 1 分钟

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

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

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

内容概述

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

🔧 语言及工具链更新

  • KCL 导入工具更新 - 支持由 JSON/YAML 数据导出为 KCL 配置
  • KCL IDE 更新 - 支持右键一键格式化能力,支持直接格式化单个文件或部分 KCL 代码
  • KCL 文档工具更新 - 导出文档支持 HTML 转义
  • KCL 包管理工具 KPM 更新 - kpm run 运行命令以及错误信息优化,支持直接运行位于本地路径的 KCL 包
  • KCL 语言更新 - 优化系统库类型检查等错误信息及错误信息代码统一

📰 官网和用例更新

特别鸣谢

以下排名不分先后

祝贺 @jakezhu9 祝贺 jakezhu9 成为 KCL 社区 Maintainer 🎉

精选更新

KCL Operator

KCL Operator 提供了 Kubernetes 集群集成,允许您在将资源应用到集群时使用 Access Webhook 根据 KCL 配置生成、变异或验证资源。Webhook 将捕获创建、应用和编辑操作,并 KCLRun 在与每个操作关联的配置上执行资源,比如可以使用 KCL 语言完成如下功能

  • 使用 KCL 对资源进行修改,如根据某个条件添加/修改 label 标签或 annotation 注释或在包含 PodTemplate 的所有 Kubernetes Resource Model (KRM) 资源中注入 Sidecar 容器配置等。
  • 使用 KCL Schema 验证所有 KRM 资源,如约束只能以 Root 方式启动容器等。
  • 使用抽象模型生成 KRM 资源或者对不同的 KRM API 进行组合并使用。

使用 KCL Operator, 通过几个步骤您就可以在 Kubernetes 集群内部以很轻量的方式地通过 KCL 代码自动化地完成资源配置的管理和安全验证,无需重复开发 Webhook Server 在运行时动态修改和验证配置。

此外借助 KCL 良好的建模和抽象能力,我们可以为不同的资源 API 定义进行功能抽象/组合并以 KCL Schema 的形式对外透出,并且可以由 KCL Schema 进一步自动生成 OpenAPI Schema 定义供集群其他客户端调用,而无需为 API 抽象/组合手动维护复杂的 OpenAPI Schema 定义。

下面以一个简单的资源 annotation 注解修改示例介绍 KCL Operator 的使用方式

0.前置条件

通过 k3d 等工具准备一个 Kubernetes 集群以及 kubectl 工具

1. 安装 KCL Operator

kubectl apply -f https://raw.githubusercontent.com/kcl-lang/kcl-operator/main/config/all.yaml

使用以下命令观察并等待 pod 状态为 Running。

kubectl get po

2. 部署注解修改模型

kubectl apply -f- << EOF
apiVersion: krm.kcl.dev/v1alpha1
kind: KCLRun
metadata:
name: set-annotation
spec:
# 设置注解修改模型所需的动态参数,在此处我们可以添加我们想要修改/添加的标签
params:
annotations:
managed-by: kcl-operator
# 引用 OCI 上注解修改模型
source: oci://ghcr.io/kcl-lang/set-annotation
EOF

3. 部署一个 Pod 资源验证模型结果

执行如下命令部署一个 Pod 资源

kubectl apply -f- << EOF
apiVersion: v1
kind: Pod
metadata:
name: nginx
annotations:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
EOF
kubectl get po nginx -o yaml | grep kcl-operator

我们可以看到如下输出

    managed-by: kcl-operator

我们可以发现 Nginx Pod 上自动添加了 managed-by=kcl-operator 注解

此外,除了为 KCLRun 资源 source 字段引用已有的模型,我们可以直接为 source 字段设置 KCL 代码也可以达到同样的效果,比如

apiVersion: krm.kcl.dev/v1alpha1
kind: KCLRun
metadata:
name: set-annotation
spec:
params:
annotations:
managed-by: kcl-operator
# 仅通过一行 KCL 代码就可完成资源的修改
source: |
items = [item | {metadata.annotations: option("params").annotations} for item in option("items")]

我们已经开箱提供了多达 30+ 的内置模型,您可以在下面的链接中获得更多代码示例

https://github.com/kcl-lang/krm-kcl/tree/main/examples

KCL IDE 插件更新

过去两周,我们将 KCL 语言服务器 LSP 集成到了 NeoVim 和 Idea 中,使得可以在 NeoVim 和 IntelliJ IDEA 中体验到和 VS Code IDE 支持的补全、跳转和悬停等功能

  • NeoVim KCL 插件

kcl.nvim

  • IntelliJ 插件

intellij

更多 IDE 插件下载安装方式和功能说明可参考:

其他资源

❤️ 感谢所有 KCL 用户和社区小伙伴在社区中提出的宝贵反馈与建议。预计 9 月中旬我们会正式发布 KCL v0.6 新版本,敬请期待!

更多其他资源请参考:

· 阅读需要 1 分钟

什么是 KCL

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

什么是 Helmfile

Helmfile 是一个是用于简化和管理 Helm Charts 的声明性规范和工具,Helmfile KCL 插件为 Helmfile 工具提供了额外的功能,使得在使用 Helmfile 时更加便捷和高效,通过 Helmfile KCL 插件您可以

  • 通过无侵入的 Hook 方式在客户端直接编辑或者验证 Helm Chart 配置,将 Kubernetes 配置管理的数据部分和逻辑部分分离,无需 Fork 上游 Chart 修改内部逻辑,比如
    • 修改资源标签/注解, 注入 Sidecar 容器配置
    • 使用 KCL Schema 校验 Kubernetes 资源,定义自己的抽象模型并分享复用
  • 优雅地维护多环境、多租户场景配置,而不是简单地复制粘贴

在本文中,我们将带您快速了解和入门 Helmfile KCL 插件,让您轻松管理您的 Kubernetes Helm Charts。

下面以一个简单示例进行详细说明,使用 Helmfile KCL 插件无需您安装与 KCL 任何相关的组件,只需本机具备 Helmfile 工具的最新版本(v0.156.0+)即可。

使用 Helmfile KCL 插件

1. 工具安装

首先,确保您已经安装了 Helmfile 客户端工具,可以根据下面链接中的文档提示进行安装。

https://github.com/helmfile/helmfile

2. 创建 Helmfile 配置文件

在您的项目根目录中创建一个名为 helmfile.yaml 的文件,并按照 Helmfile 的语法编写配置。在这个文件中,您可以指定要使用的 Helm Charts、配置值和任何其他 Helmfile 支持的功能。此外,您还可以在 helmfile.yaml 中使用 KCL 插件的功能来加载对 Helm Chart 进行原地配置修改和验证

repositories:
- name: prometheus-community
url: https://prometheus-community.github.io/helm-charts

releases:
- name: prom-norbac-ubuntu
namespace: prometheus
chart: prometheus-community/prometheus
set:
- name: rbac.create
value: false
transformers:
# Use KCL Plugin to mutate or validate Kubernetes manifests.
- apiVersion: krm.kcl.dev/v1alpha1
kind: KCLRun
metadata:
name: "set-annotation"
annotations:
config.kubernetes.io/function: |
container:
image: docker.io/kcllang/kustomize-kcl:v0.2.0
spec:
source: |
# 仅通过一行 KCL 代码,就可实现对 workload 配置原地修改
items = [resource | {if resource.kind == "Deployment": metadata.annotations: {"managed-by" = "helmfile-kcl"}} for resource in option("resource_list").items]

在上述配置中,我们引用了 Prometheus Helm Chart, 并通过一行 KCL 代码就可以完成 Prometheus 的所有的 Deployment 资源注入标签 managed-by="helmfile-kcl"。

3. 运行 Helmfile 工具

一切准备就绪后,您可以运行 Helmfile 命令来部署、管理和维护您的 Helm Charts,通过如下命令我们可以将上述配置下发到集群。

helmfile apply

正常情况我们会看到如下面所示的输出

Adding repo prometheus-community https://prometheus-community.github.io/helm-charts
"prometheus-community" has been added to your repositories...

...

想要更多?

对于上述 helmfile 配置,我们可以将其封装为常用的配置修改逻辑并使用,无需不断重复编写 KCL 代码并到处复制粘贴。此外,我们在 KCL 官方 Registry 已经封装好了许多常用的 Kubernetes 配置编辑和校验代码片段 https://github.com/orgs/kcl-lang/packages

registry

除了支持在配置文件中书写 KCL 代码,我们还支持直接引用 Registry 中的代码片段,如下所示

apiVersion: krm.kcl.dev/v1alpha1
kind: KCLRun
metadata:
name: https-only
annotations:
krm.kcl.dev/version: 0.0.1
krm.kcl.dev/type: validation
documentation: >-
Requires Ingress resources to be HTTPS only. Ingress resources must
include the `kubernetes.io/ingress.allow-http` annotation, set to `false`.
By default a valid TLS {} configuration is required, this can be made
optional by setting the `tlsOptional` parameter to `true`.
More info: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
spec:
# Use the OCI source
source: oci://ghcr.io/kcl-lang/https-only

具体的示例代码在这里

小结

本文提供了一个快速入门指南,帮助您在 5 分钟内掌握 Helmfile KCL 插件的基本用法。现在,您可以开始使用这个强大的工具来简化和优化您的 Kubernetes 应用部署流程了!

其他资源

更多其他资源请参考: