灵雀云于近期发布并开源的Helm v3 Controller组件“Captain”,有了新的更新进展——Captain 0.9.0版本发布。本次更新最大的亮点在于,增长了一个新的 CRD: ChartRepo。ChartRepo用于定义helm 可使用的 charts 仓库。和原先使用的ConfigMap方式相比,ChartRepo更为便捷和原生,而且具备更高的可定制性。git
Captain是Helm官方社区发布的Helm v3 proposal的第一个Controller实现示例,帮助用户简化Helm资源描述,更便捷、高效地实现K8s应用的管理和控制,推动Helm项目向原生 K8s迈进的步伐。目前该项目代码已经在Github 上开源,项目地址为:https://github.com/alauda/Cap...。欢迎更多技术开发者和爱好者前去试用。github
helm repo安全
在 helm 的 repo 管理中,能够经过 helm 的命令来添加,查看 repo。以下图所示:app
实际上,helm 会将repo 的信息存储在一个配置文件中,一般位置在:~/.helm/repository/repositories.yaml。做为一个命令行工具,这是一种很常见的行为。但这种作法有个明显的缺陷,那就是用户名和密码会直接暴露在外。微服务
Captain 最初也是使用一样的方法。在 helm 3的当前代码中,仍然是从一样位置的配置文件读取 repo 信息,Captain 使用外挂的 ConfigMap 来记录 repositories.yaml 里的内容。这种作法尽管操做简便,可是弊端也比较突出:工具
如 helm cli 同样,将用户名和密码直接暴露了出来;
在 ConfigMap中 编辑 yaml 格式的 repo 信息并不方便;
修改 repo 信息须要重启 Captain 容器;spa
ChartRepo 即是为了解决这些问题而生。命令行
ChartRepo设计
首先来看一个简单的实例:3d
这里无需认证的 public charts repo其基本的信息就是 URL。Captain 会在启动后默认建立一个 ChartRepo。在 HelmRequest 中引用 chart 时,其使用的 repo 名字就是 ChartRepo 的名字: stable.
而对于须要 basic auth 的 ChartRepo, 只须要提供一个包含 username/password 的 Secret 便可:
与其余 CRD 同样,做为controller 的 Captain, 经过 watch ChartRepo 的变动来动态地更新 helm 的 repo信息,用户能够经过 kubectl 来添加/修改/删除 ChartRepo。这样不只使用上更为便利,也更为安全。咱们能够经过 kubectl 来看到与 helm list 相似的结果,可是去掉了敏感信息:
CRD 目前已经成为大多数基于kubernetes 产品的标准方案。一方面更贴近用户使用,另外一方面也带来了更多的可能性。经过定义好 CRD,咱们不只可使用 kubectl ,也拥有了完整的 CURD API,这对构建上层业务都是极为便利的。
关于开源项目Captain
Captain是Helm官方社区发布的Helm v3 proposal的第一个Controller实现示例,推动Helm项目向原生 K8s迈进的步伐。在Helm v3社区设计以外,Captain还具备如下特性:
支持多集群:Captain组件基于cluster-registry项目实现了对多集群的支持。用户能够将HelmRequest安装到当前集群,指定集群,甚至是全部集群。这在企业场景下很是实用。
依赖检查:Captain在Helmv3的基础上加了新的依赖检查。好比HelmRequest A 依赖于 HelmRequest B, Captain 在同步HelmRequest A 时,会首先检查 HelmRequest B是否已经同步。只有在全部依赖都同步成功以后,当前的HelmRequest才会开始同步。
集中式配置valuesFrom:在Captain中,充分利用了kubernetes 中 ConfigMap 以及 Secret 做为独立配置的功能。在微服务场景下,用户一般须要用多个HelmRequest 来描述不一样chart 的安装需求,而这些 chart 之间一般又常常有不少须要共同的配置, valuesFrom 能很好地解决这个问题。
资源冲突的处理:Captain引入了相似于 kubectl apply
的逻辑。当发现资源已存在的时候,会执行更新操做,一些没法更新的资源会进行删除重建操做。这样的策略可以极大地解决用户使用时的各类不便。
Captain的相关功能和版本进展,咱们将会持续更新,欢迎您随时关注,并前往GitHub试用体验。