Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/kcl-lang/flux-kcl-controller
- Owner: kcl-lang
- License: apache-2.0
- Created: 2024-01-30T12:42:57.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2024-09-18T02:55:56.000Z (3 months ago)
- Last Synced: 2024-09-18T05:58:50.525Z (3 months ago)
- Topics: gitops
- Language: Go
- Homepage: https://kcl-lang.io
- Size: 714 KB
- Stars: 23
- Watchers: 6
- Forks: 7
- Open Issues: 3
-
Metadata Files:
- Readme: README-zh.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
Flux KCL controller
# 介绍
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` 资源。