前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >fist模板模块介绍

fist模板模块介绍

作者头像
sealyun
发布2019-07-25 15:35:18
7570
发布2019-07-25 15:35:18
举报
文章被收录于专栏:sealyun

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

代码语言:javascript
复制
cd fist/template
kubectl create -f deploy

使用docker

代码语言:javascript
复制
docker run -d -p 8080:8080 lameleg/fist:latest ./fist template

渲染模板

渲染请求

代码语言:javascript
复制
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指定渲染结果格式,不指定会把渲染结果字符串放在数组中。

渲染结果:

代码语言:javascript
复制
---
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 (进入容器内部,或者挂载此文件夹)

代码语言:javascript
复制
# cat /etc/fist/templates/Hello-world 
This is my hello world template
{{ .Name }}
{{ .Value }}
代码语言:javascript
复制
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不希望干多余的事情,简简单单帮助用户渲染模板就好。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 sealyun 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • fist介绍
  • 模板使用教程
    • 应用场景
    • 安装
      • 渲染模板
        • 自定义模板
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档