当面向很多用户时,Kubernetes 的使用方式是一个需要考虑的问题。如果直接让用户写 yaml,一方面是要求每个用户都学 Kubernetes,这对研发人员来说是一个不必要的负担,另一方面 yaml 的管理以及权限分配对运维人员来说也是一个不必要的负担,平添很多琐事。因此,使用一个管理系统来屏蔽 Kubernetes 细节,管理权限等,对研发和运维来说都很有用。本文介绍基于 iTop 的 Kubernetes 工作流方案。
概述
iTop 是一个开源的 ITSM 软件,核心功能是 CMDB,另外还包含请求管理,事件管理,变更管理等功能。
利用 iTop
完善的 CMDB
功能管理 Kubernetes
对象,相比于 yaml
定义 Kubernetes
对象,具有以下特点
- 用户仅需具备基本的 docker 容器经验即可使用 Kubernetes,无需专门学习Kubernetes
- 资源唯一性校验,保证 app 名称,域名等不会冲突
- 利用
iTop
的 lnk 类型,直观的实现 nginx 配置,volume 挂载,affinity 等功能,用户可以直接勾选 - 利用
lifecycle
,实现业务更新、下线等操作。并且原生支持批量操作。适合于灾难恢复场景下快速批量上线大量业务 - 权限控制,用户只能部署自己名下的
APP
相关资源,只能看到自己名下APP
的secret
内容 - 嵌入 kubernetes dashboard,供用户调试使用
当然,这种方式也存在一定的问题,首先 iTop 插件开发挺麻烦的,另外这种方式导致 Kubernetes 使用上不够灵活,只能以特定的方式使用,不能完全发挥 Kubernetes 的能力。
预览
Deployment 列表
Deployment 详情
嵌入 Dashboard
Ingress 列表
自定义 Nginx 配置
工作原理
- iTop 对象创建或删除时触发动作执行脚本,脚本中调用 Kubernetes API 应用iTop 中的更新
- 触发器需要安装插件 ops-itop/itop-extensions/knowitop-trigger-on-update
- 自定义动作需要安装插件 ops-itop/itop-extensions/action-shell-exec
触发器配置
TriggerOnCreate
"描述","类别","目标类","过滤器"
"Kubernetes对象创建","触发器 (对象创建时)","Kubernetes","SELECT Kubernetes"
TriggerOnObjectUpdate
"描述","类别","目标类","Tracked attributes","过滤器"
"Kubernetes对象更新","Trigger on object update","Kubernetes","","SELECT Kubernetes"
两个触发器均链接以下动作:
"名称","类别","名称","描述","状态","Path","Parameters"
"Kubernetes","Script execution","Kubernetes","Kubernetes对象操作","生产中","/home/wwwroot/default/cmdb/cmdbApi/actions/demo.sh","SCRIPT_NAME=kubernetes.php\nID=$this->id$"
持续集成
镜像如果由人工生成,可能存在疏忽导致的 tag 被覆盖的情况,这对回滚有很大影响。因此镜像制作最好有持续集成方案,由持续集成工具自动生成 tag。推荐使用 Drone CI,参见 基于Drone CI的持续集成方案。
相关链接
- iTop 源码:https://github.com/Combodo/iTop
- iTop kubernetes 插件:https://github.com/ops-itop/itop-extensions/tree/master/kubernetes
- iTop kubernetes action: https://github.com/ops-itop/cmdbApi/tree/master/actions
发表回复