fist模板模块介绍

原创
2019/05/16 20:55
阅读数 435

fist介绍

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


附上一拳大大照片震文!

 


      其实做这个项目的初衷是想传达我自己有使用云时的理念,其中最核心的一点是“云是个整体,而不是零散的机器”,所以看到很多人只是把强大的k8s当成个部署工具,内心是十分着急的,就像虚竹得了无涯子的内力发挥不出来一样。


包含几个核心功能:

  1. User token, fist的user token是基于oidc实现的,这种token校验时只需要消耗计算资源而不需要去查数据库,这样在很多场景下消除了鉴权的性能瓶颈,因为apiserver是可以扩展的。token很重要,因为它可以标识一个用户和用户组,这是整个多租户系统的基础,有了它你就可以通过https请求去调用k8s api了

  2. webterminal对于资深的k8s工程师来说,可能还是更习惯于使用终端,但是自己去安装kubectl,配置kubeconfig等等远没有在web上打开直接用方便,且多租户时fist可以把用户token注入到terminal里,同样以后还能支持自定义terminal镜像,这样比如在终端里运行k9s,或者装个java运行环境等都可以,笔者默认就在终端里集成了golang的开发环境

  3. template模块,大家最烦的就是写yaml文件了,所以在网页上渲染配置是个极其好用的功能,不过这里设计要足够灵活,可支持自定义yaml文件模板,当然理论上不仅是yaml文件,其它文件也可以渲染,在下甚至用来渲染一些微服务的golang代码

  4. 用户管理权限管理,哪些人能访问哪些namespace,能有哪些操作等,新增用户,用户组管理等

  5. 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: fist  namespace: sealyunspec:  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不希望干多余的事情,简简单单帮助用户渲染模板就好。


本文分享自微信公众号 - sealyun(gh_f33fe7b0c869)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部