fist介绍
fist(https://github.com/fanux/fist)是sealyun开源的一款k8s管理软件,不同于其它管理软件的是其奉承的原则是少极是多,仅实现核心功能,偏极客一些。
附上一拳大大照片震文!

其实做这个项目的初衷是想传达我自己有使用云时的理念,其中最核心的一点是“云是个整体,而不是零散的机器”,所以看到很多人只是把强大的k8s当成个部署工具,内心是十分着急的,就像虚竹得了无涯子的内力发挥不出来一样。
包含几个核心功能:
User token, fist的user token是基于oidc实现的,这种token校验时只需要消耗计算资源而不需要去查数据库,这样在很多场景下消除了鉴权的性能瓶颈,因为apiserver是可以扩展的。token很重要,因为它可以标识一个用户和用户组,这是整个多租户系统的基础,有了它你就可以通过https请求去调用k8s api了
webterminal对于资深的k8s工程师来说,可能还是更习惯于使用终端,但是自己去安装kubectl,配置kubeconfig等等远没有在web上打开直接用方便,且多租户时fist可以把用户token注入到terminal里,同样以后还能支持自定义terminal镜像,这样比如在终端里运行k9s,或者装个java运行环境等都可以,笔者默认就在终端里集成了golang的开发环境
template模块,大家最烦的就是写yaml文件了,所以在网页上渲染配置是个极其好用的功能,不过这里设计要足够灵活,可支持自定义yaml文件模板,当然理论上不仅是yaml文件,其它文件也可以渲染,在下甚至用来渲染一些微服务的golang代码
用户管理权限管理,哪些人能访问哪些namespace,能有哪些操作等,新增用户,用户组管理等
namespace管理,namespace是隔离多租户的关键,但是仅仅依靠namespace远远不够,还需要角色与权限,以及pod安全策略,配额等等,比如禁止用户使用特权,禁止挂载本地磁盘,禁止共享主机网络等等,因为多租户,用户有这些权限之后会影响别的租户。
本文讲讲template模块的一些东西,欢迎拍砖,前端功能还在开发中,用户也可基于后台的功能自行开发前端,微服务架构,各模块较独立
模板使用教程
模板模块可以定义动态的API,且新增一些模板时无需修改代码,仅需要协商好模板格式与value格式即可.
应用场景
最重要的应用场景就是帮助用户渲染各种yaml配置,Deployment Configmap Service等等。。。
所以代码设计时肯定不希望增加一个模板时就需要修改代码和API,所以动态API很重要。
还可用于其它一切模板渲染的场景,如渲染kubeconfig文件,namespace配额等等
安装
使用kubernetes
cd fist/templatekubectl 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/v1kind: Deploymentmetadata:name: fistnamespace: sealyunspec:replicas: 3selector:matchLabels:name: fisttemplate:metadata:labels:name: fistspec:containers:- name: fistimage: sealyun/fistcommand: [./fist, serve]imagePullPolicy: IfnotPresentports:- containerPort: 9090
自定义模板
创建template文件
默认目录:/etc/fist/templates
(进入容器内部,或者挂载此文件夹)
# cat etc/fist/templates/Hello-worldThis 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不希望干多余的事情,简简单单帮助用户渲染模板就好。




