近日,灵雀云宣布发布Helm v3 Controller组件“Captain”,并正式将其在Github上开源。Captain是Helm官方社区发布的Helm v3 proposal的第一个Controller实现示例,帮助用户简化Helm资源描述,更便捷、高效地实现K8s应用的管理和控制,推进Helm项目向原生 K8s迈进的步伐。
目前Captain项目代码已经在Github 上开源,项目地址为:https://github.com/alauda/cap...。欢迎更多技术开发者和爱好者前去试用。
关于Helm v3 的设计实现
虽然Helm是社区以及线下生产公认的Kubernetes通用包管理器,但从便捷性的角度来说,老版本Helm v2仍然存在诸多问题,如资源已存在导致的资源冲突安装频繁失败,CRD的管理问题,Tiller Server带来的各种问题等。
在已经发布的 Helm V3 Design Proposal 中,有以下部分设计:
移除Tiller Server,以CRD 形式扩展:
在Helm v2 中用于在 Kubernetes 集群中管理应用发布版本的Tiller,在 Helm v3 中移除了, 版本相关的数据可以通过直接与Kubernetes交互获取,集群权限的管理更加简单清晰。同时解决了在不同namespaces中Release名称冲突的问题。
与此同时,Helm v3 引入Helm request和Release两个CRD,分别代替Helm v2中的用命令行的参数来自定义的Chart和用ConfigMaps和Secret定义的Release,来记录历史版本信息。
加入Controller组件:
在使用Helm v2时,用户想要通过命令行的参数来自定义一个Chart,安装一次后不管成功与否,安装动作就结束了,更新也是。而kubernetes controller的架构可以实现自动重试的逻辑,只要用户在HelmRequest里描述好期望状态,controller 会尽量保证达到最终状态。
(更多Helm v3信息请关注:https://github.com/helm/helm/...)
Captain的功能与特性
在Helm v3社区设计之外,Captain还具有以下特性:
支持多集群:Helm v3的设计中并没有支持多集群的功能。Captain组件基于 cluster-registry项目实现了对多集群的支持。用户可以将HelmRequest安装到当前集群,指定集群,甚至是所有集群。这在企业场景下是非常有用的。
依赖检查:Helm本身具备依赖概念,功能也比较复杂。Captain在Helm v3的基础上加了新的依赖检查。如果HelmRequest A 依赖于 HelmRequest B, 在声明好依赖之后。Captain 在同步HelmRequest A 时,会首先检查 HelmRequest B是否已经同步。只有在所有依赖都同步成功之后,当前的HelmRequest才会开始同步。
集中式配置valuesFrom:在Helm v2中部署Chart 时,可以通过在命令行添加参数或者使用 values.yaml 文件来对 chart 部署添加一些自定义变量。在Captain中,除了对这种传统的方式进行进行支持外,也充分利用了kubernetes 中 ConfigMap 以及 Secret 作为独立配置的功能。用户可以在HelmRequest 的定义中通过 valuesFrom的来自外部的ConfigMap 或者Secret 作为 values 来源。在微服务场景下,用户通常需要用多个 HelmRequest 来描述不同chart 的安装需求,而这些 chart 之间通常又经常有很多需要共同的配置, valuesFrom 能很好地解决这个问题。
资源冲突的处理: 用户在使用 helm v2 的时候,经常会碰到很多使用上的不便之处。因为资源已存在导致的安装失败,因为卸载不彻底进一步导致下一步安装失败,这其中就包含了经典的CRD管理的问题(因为要等带crd的api生效,引入了crd-install hook, 加了hook的CRD在删除 release时不会删除)。Captain 为了解决了这个问题,引入了类似于 kubectl apply
的逻辑。当发现资源已存在的时候,会执行更新操作,一些无法更新的资源会进行删除重建操作。这样的策略能够极大地解决用户使用时遇到的各种不便之处
Captain开发计划
建立Helm Chart仓库的CRD,方便用户添加和删除仓库列表
支持仓库的PROXY,方便国内用户使用
Helm v2 到 Helm v3数据迁移工具:方便用户将Helm2的Rlease 数据转化为Helm3的Rlease CRD.
灵雀云是开源技术和开源精神的受益者,也是CNCF/CDF等开源社区的早期倡导者和贡献者。取之开源回馈开源,据悉,灵雀云计划将陆续开源多个K8s发行版及组件级产品,涉及集群管理,容器网络以及应用发布的平台全生命周期,敬请期待!