TKE基于Helm的应用管理实践

2019-07-08 10:56:09 浏览数 (1)

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的问题

  • 如何满足用户通过控制台来管理应用的需求?
  • 如何将Helm命令行客户端的功能集成到控制台?
  • 如何最大限度兼容Helm原生功能,同时降低用户的使用门槛?
  • 如何与应用仓库相结合以完成闭环操作?

TKE集成Helm的系统架构

TKE集成Helm的系统架构TKE集成Helm的系统架构

核心实现

  • gRPC转REST 通过引入appscode/swift项目将Tiller 服务代理为适合控制台的REST接口
  • Sync转Async 通过开发一个swift的反向代理组件 将某些耗时较多的同步操作异步化
  • 返回特定的结构化数据 反向代理中包装Helm原生接口 维护TKE自定义的业务数据

实现功能

  • Helm功能的开通
  • 应用的创建,展示,更新,回滚,删除
  • 应用的自定义配置
  • 应用所包含的资源展示

界面示例

Helm功能开通Helm功能开通
应用详情应用详情
版本历史版本历史
资源列表资源列表
资源状态资源状态

0 人点赞