什么是 KCL
Kusion 配置语言(KCL)是一个开源的基于束缚的记录及函数语言。KCL 通过成熟的编程语言技术和实际来改良对大量繁冗配置比方云原生 Kubernetes 配置场景的编写,致力于构建围绕配置的更好的模块化、扩展性和稳定性,更简略的逻辑编写,以及更简略的自动化和生态工具集成。
什么是形象
形象是指一个实体的简化示意,通常用于计算。它容许暗藏特定的具体细节,同时向程序员提供最相干的信息。每一个形象都是为满足特定需要而定制的,并且能够极大地提高给定实体的可用性。在 KCL 的上下文中,形象能够使代码更容易了解和保护,同时也能够简化用户界面。
须要留神的是,代码形象并不是为了缩小代码大小,而是为了进步可维护性和可扩展性。在形象代码的过程中,应思考可重用性、可读性和可扩展性等因素,并依据须要对代码进行一直优化。
良好的形象能够提供如下价值
- 提供不同的焦点,关注点拆散,以便更好地了解特定的身份、角色和场景。
- 屏蔽较低级别的细节,以防止潜在的谬误。
- 晋升用户敌对性和自动化。
KCL 本身可能不会评估用户定的模型形象的合理性,但它提供了技术解决方案来帮忙用户构建形象。
应用 KCL 进行形象
当初,让咱们将 Docker Compose 和 Kubernetes 资源形象为应用程序配置
以应用程序为核心的开发使开发人员可能专一于其工作负载的体系结构,而不是指标环境、基础设施或平台中的技术栈。咱们用 App
构造定义了应用程序模型,而后应用 KCL CLI 将其翻译到多个平台,例如不同版本的 Docker Compose
或 Kubernetes
。
Docker Compose
是一个用于定义和运行多容器 Docker 应用程序的工具。应用 Docker Compose,您能够在一个文件中定义应用程序的服务、网络和卷,而后应用它作为一个单元启动和进行应用程序。Docker Compose 通过解决网络、存储和其余基础设施问题的细节,简化了运行简单的多容器应用程序的过程。
Kubernetes 清单是定义 Kubernete 对象(如 Pods、Deployments 和 Services)的 YAML 文件。清单提供了一种申明性的办法来定义应用程序的所需状态,包含正本数量、要应用的镜像和网络配置。Kubernetes 应用清单来创立和治理部署和运行应用程序所需的资源。
以下是一些参考资料,以理解更多对于 Docker Compose 和 Kubernetes 相干的信息:
- Docker Compose 文档
- Kubernetes 对象文档
该应用程序模型旨在通过只需定义一个跨多个平台工作的 KCL 文件来缩小开发人员的工作量和认知负荷,并且它被设计为利用于多个环境以缩小配置量。当初,让咱们学习如何做到这一点。
1. 获取示例
首先,咱们执行 git 命令取得用例
git clone https://github.com/KusionStack/kcl-lang.io.git/
cd ./kcl-lang.io/examples/abstraction
咱们能够运行以下命令来显示配置。
cat main.k
输入为
import .app
app.App {
name = "ngnix"
containers.ngnix = {
image = name
ports = [{containerPort = 80}]
}
service.ports = [{port = 80}]
}
在下面的代码中,咱们应用 App
schema 定义了一个配置,其中咱们配置了一个 ngnix
容器,并开启 80
端口配置。
此外,KCL 容许开发人员以申明式的形式定义应用程序所需的资源,并与 Docker Compose 或 Kubernetes 清单等平台绑定,并容许生成特定于平台的配置文件,如 Docker Compose.yaml
或 Kuberneses manifests.yaml
文件。接下来,让咱们生成相应的配置。
2. 将利用配置转换为 Docker Compose 配置
如果咱们想将应用程序配置转换为 Docker Compose 配置,咱们能够简略地运行如下命令:
$ kcl main.k docker_compose_render.k
services:
ngnix:
image: ngnix
ports:
- published: 80
target: 80
protocol: TCP
3. 将利用配置转换为 Kubernetes Deployment and Service 资源清单
如果咱们想将应用程序配置转换为 Kubernetes 清单,咱们能够简略地运行如下命令:
$ kcl main.k kubernetes_render.k
apiVersion: apps/v1
kind: Deployment
metadata:
name: ngnix
labels:
app: ngnix
spec:
replicas: 1
selector:
matchLabels:
app: ngnix
template:
metadata:
labels:
app: ngnix
spec:
containers:
- name: ngnix
image: "ngnix:v1.4.2"
ports:
- protocol: TCP
containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: ngnix
labels:
app: ngnix
spec:
selector:
app: ngnix
ports:
- port: 80
protocol: TCP
如果您想理解无关应用程序模型的更多信息,能够参考此处.
小结
通过应用 KCL,咱们可能拆散模型的形象和实现细节,容许将形象模型映射到各种基础设施或平台。这是通过不同实现之间的灵便切换和 KCL 组合编译来实现的,屏蔽配置差别,加重认知累赘。
更多信息
除了手动保护配置外,咱们还能够应用 KCL API 将 主动配置更改能力 集成到咱们的应用程序中。无关 KCL 自动化能力的相干阐明,请参阅此处。