Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/kcl-lang/flux-kcl-controller

Flux KCL Controller
https://github.com/kcl-lang/flux-kcl-controller

gitops

Last synced: about 1 month ago
JSON representation

Flux KCL Controller

Awesome Lists containing this project

README

        

Flux KCL controller


English | 简体中文

# 介绍

flux-kcl-controller 是一个组件,用于集成 [KCL](https://github.com/kcl-lang/kcl) 和 [Flux](https://github.com/fluxcd/flux2), 主要用来根据存储在 git/oci 仓库中的 KCL 程序定义的基础设施和工作负载,通过 [source-controller](https://github.com/fluxcd/source-controller) 获取 KCL 程序,实现基础设施和工作负载的持续交付。

![kcl-flux](./docs/img/kcl-flux.png)

# 特性

- 定期监控存储 KCL 程序的 git/oci 仓库,并根据 git 仓库中的变化,调谐 k8s 集群状态。

# 快速开始

## 前提条件

- k3d: 用于创建测试用的 k8s 集群,如果你已经有了 k8s 集群,可以忽略这一步。
- Kustomize
- Kubectl

## 创建测试用的 k8s 集群

通过如下命令创建集群:

```shell
k3d cluster create
```

## 下载 kcl-controller 并且安装到集群中

clone 本仓库到本地:

```shell
git clone https://github.com/kcl-lang/flux-kcl-controller.git
```

进入到本仓库的根目录:

```shell
cd flux-kcl-controller
```

将 kcl-controller 安装到集群中:

```shell
make deploy
```

## 监控一个 git 仓库

我们以仓库 https://github.com/awesome-kusion/kcl-deployment 为例,该仓库中存储了一个 KCL 程序,该程序定义了一个 Deployment,我们将使用 `flux-kcl-controller` 来部署该程序。

通过 `gitrepo.yaml` 文件,定义一个 `GitRepository` 对象,用来监控该仓库:

```yaml
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: kcl-deployment
namespace: source-system
spec:
interval: 30s # 每隔 30s 检查一次仓库
url: https://github.com/awesome-kusion/kcl-deployment.git
ref:
branch: main # 监控 main 分支
---
apiVersion: krm.kcl.dev.fluxcd/v1alpha1
kind: KCLRun
metadata:
name: kcl-deployment
namespace: source-system
spec:
sourceRef:
kind: GitRepository
name: kcl-deployment
```

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

## 查看部署结果

使用命令 `kubectl get deployment` 查看部署结果:

```shell
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 1/1 1 0 28s
```

可以看到,kcl-controller 根据仓库中的 KCL 程序,创建了一个 Deployment。

## 更新仓库中的 KCL 程序

我们可以通过修改仓库中的 KCL 程序,来更新集群中的 Deployment。

修改仓库中的 KCL 程序,将 nginx 的版本从 `1.7.7` 修改为 `1.7.8`,将`deployment`的名字改为 `nginx-deployment-1`,并且提交到 main 分支。

具体变化可以参考:
[nginx:1.7.7 deployment](https://github.com/awesome-kusion/kcl-deployment/commit/dc8b2aa70b1b47bef0637212ea184792b8c43449) -> [nginx:1.7.8 deployment](https://github.com/awesome-kusion/kcl-deployment/commit/f257a71fdff6cb9190f49c1dbf5fa4496d7b3cb2)

使用命令 `kubectl get deployment` 查看部署结果:

```shell
NAME READY UP-TO-DATE AVAILABLE AGE
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 1/1 1 1 20m
nginx-deployment-1 1/1 1 0 4s
```

可以看到,`flux-kcl-controller` 根据仓库中的 KCL 程序,创建了一个 `nginx-deployment-1` 资源。