执行器设计
- Dominant language
- Go
- Stars
- 238
- Forks
- 45
- PR merge metrics
- No merged PRs in 30d
Description
前端渲染好的模板需要执行,这的实现方式有几种:
1. 把yaml文件传给后台,起一个临时的kubectl容器去执行 (效率低下,依赖变多)
2. 解析yaml文件使用client-go,调用apiserver去创建对象。 其实这还是挺复杂的,基本每种对象都需要实现一遍,曾经有个项目就是基于这种方式实现的,虽然代码足够解耦,增加一种类型的object增加一个实现即可,但是还是偏复杂了,而且后续最好还是能支持CRD的创建。
3. 参考kubectl的实现并复用其代码。
因为如这种中间带有---的yaml,其实是在kubectl这块做切分的
```
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: admin
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin
namespace: sealyun
labels:
kubernetes.io/cluster-service: "true"
```
这个切分虽然不难,但是需要考虑一些细节,比如有时confimap里也有---应该如何处理。 这块代码我之前已经复用过kubectl里的函数进行处理了。
但是切分完成后我们依然要根据kind判断去实例化一个object 然后调用client-go进行创建。 这里最好能复用kubectl的代码。
fist相比kubectl更复杂的地方在于fist是多租户系统,client-set也需要根据租户的token 或者特定的kubeconfig字符串进行创建,这块实现我也已经做过:
Contributor guide
Assessment
This issue has not been assessed yet.