Author: Jimmy Zhang (张浩)
K8s中使用传统方式部署应用的挑战
- 编辑,部署和更新应用的众多资源描述文件心智负担较重
- 没有统一的视图来看待一个应用的相关资源
- 缺乏有效机制来管理应用的整个生命周期
- 无法管理应用的依赖
- 难以共享和复用现有的应用
什么是Helm
- Helm是一个应用于K8s的包管理器,类似于YUM或者APT
- Helm将原生应用程序涉及到的众多K8s资源对象打包成一个所谓的Chart,以此实现统一的管理
- 对于应用发布者而言,可以通过Helm来打包应用,管理应用依赖关系,管理应用版本,发布到应用仓库
- 对于应用使用者而言,使用Helm后无需手动编写Manifests文件,通过简单的操作即可完成对应用的安装,升级,回滚,卸载
Helm核心概念
- Chart:Helm的软件包,采用TAR格式,它包含了一组相关的K8s资源对象的Yaml文件
- Release:Chart包的一个部署实例,包含了特定的配置
- Repository:Helm的软件仓库,本质上是一个Web服务器,包含了若干的Chart包和一个index文件
- Helm:客户端命令行工具,用于完成Chart的制作,部署以及一系列管理操作
- Tiller:Helm的服务端组件,部署在K8s集群中,用于完成Helm的请求,实现针对Release的一系列操作
Helm系统架构
云上集成Helm的问题
- 如何满足用户通过控制台来管理应用的需求?
- 如何将Helm命令行客户端的功能集成到控制台?
- 如何最大限度兼容Helm原生功能,同时降低用户的使用门槛?
- 如何与应用仓库相结合以完成闭环操作?
TKE集成Helm的系统架构
核心实现
- gRPC转REST 通过引入appscode/swift项目将Tiller 服务代理为适合控制台的REST接口
- Sync转Async 通过开发一个swift的反向代理组件 将某些耗时较多的同步操作异步化
- 返回特定的结构化数据 反向代理中包装Helm原生接口 维护TKE自定义的业务数据
实现功能
- Helm功能的开通
- 应用的创建,展示,更新,回滚,删除
- 应用的自定义配置
- 应用所包含的资源展示