fist(https://github.com/fanux/fist)是sealyun开源的一款k8s管理软件,不同于其它管理软件的是其奉承的原则是少极是多,仅实现核心功能,偏极客一些。
附上一拳大大照片震文!
其实做这个项目的初衷是想传达我自己有使用云时的理念,其中最核心的一点是“云是个整体,而不是零散的机器”,所以看到很多人只是把强大的k8s当成个部署工具,内心是十分着急的,就像虚竹得了无涯子的内力发挥不出来一样。
包含几个核心功能:
本文讲讲template模块的一些东西,欢迎拍砖,前端功能还在开发中,用户也可基于后台的功能自行开发前端,微服务架构,各模块较独立
模板模块可以定义动态的API,且新增一些模板时无需修改代码,仅需要协商好模板格式与value格式即可.
最重要的应用场景就是帮助用户渲染各种yaml配置,Deployment Configmap Service等等。。。
所以代码设计时肯定不希望增加一个模板时就需要修改代码和API,所以动态API很重要。
还可用于其它一切模板渲染的场景,如渲染kubeconfig文件,namespace配额等等
使用kubernetes
cd fist/template
kubectl create -f deploy
使用docker
docker run -d -p 8080:8080 lameleg/fist:latest ./fist template
渲染请求
curl http://localhost:8080/templates?type=text -H "Content-Type:application/json" -d '[
{
"name":"Deployment",
"value": {
"Name":"fist",
"Image":"sealyun/fist",
"Replicas":3,
"Namespace":"sealyun",
"Command": "['./fist', 'serve']",
"ImagePolicy":"IfnotPresent",
"Port":9090}
}
]'
这里的Deployment
是内建模板, 用户可以自定义模板
type=text指定渲染结果格式,不指定会把渲染结果字符串放在数组中。
渲染结果:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: fist
namespace: sealyun
spec:
replicas: 3
selector:
matchLabels:
name: fist
template:
metadata:
labels:
name: fist
spec:
containers:
- name: fist
image: sealyun/fist
command: [./fist, serve]
imagePullPolicy: IfnotPresent
ports:
- containerPort: 9090
创建template文件
默认目录:/etc/fist/templates
(进入容器内部,或者挂载此文件夹)
# cat /etc/fist/templates/Hello-world
This is my hello world template
{{ .Name }}
{{ .Value }}
curl http://localhost:8080/templates?type=text -H "Content-Type:application/json" -d '[
{
"name":"Hello-world",
"value": {
"Name": "Sealyun",
"Value": "Hello everyone!"}
}
]'
所以可以创建很多模板,value里面的值也是随意调整的,但是一定要与模板对应上。
如此就能解决大家写yaml不方便的问题了
后续还会开放一些更高级的功能,如命令行,模板元数据,根据元数据动态渲染前端表单等等功能。将会成为一个非常好用的系统,希望大家喜欢。
最后问题来了: 为什么不用helm? 其实本人是helm的重度用户,但是说实在的越用越不喜欢,主要是嫌弃重,讨厌tiller,也不喜欢其扯出的概念,对多租户支持还不好,导致弃用。 fist template不希望干多余的事情,简简单单帮助用户渲染模板就好。