近日,灵雀云宣布Captain 1.0.0 GA 版本正式发布。Captain 1.0经过了较长时间的持续开发及内部测试,其主要包含的新功能如下:
- 不再依赖 helm 以及 cert-manager 的安装及运行方式;
- 支持将 Git/SVN 作为 helm chart repo;
- ARM64 环境支持;
- 大量 helm 相关代码修复;
- kubectl plugin 大量新命令支持。
全新的安装方式
因为 Captain 本身使用了 webhook ,按照 kubernetes 的规范,这需要有 https 以及 签名证书。之前的版本里使用了 cert-manager, 由于 cert-manager 的安装比较繁琐,所以采用了 helm 安装的方式,这样 helm 就成了 captain 安装的依赖。这是一个很尴尬的现状,因为 Captain 的目的是为了在很大程度上取代 helm 的使用。
在Captain 1.0 版本中,我们采用了以脚本自动生成自签名证书,并结合 kubernetes 的 CSR 方式,将证书的生成放在 initContainers 中来做,并在程序启动时自动检查更新 webhook 中的 cert 数据。至此,Captain 的安装仅需使用常用的 kubectl apply
命令即可。
Git/SVN 作为 ChartRepo
Captain 之前的版本已经支持了 helm 的 chart repo 作为 Captain 的 ChartRepo(CRD). 其实在用户的日常使用中,很多场景没有直接可用的 chart repo ,因为 chart repo 需要一个 http server 和 固定存储,这是一个不小的开销,尤其是对普通开发者来说。
对于所有人来说,会将 chart 相关的源文件存放于 VCS 上。在 Captain 1.0.0 版本里,用户可以用 VCS 的地址来配置 ChartRepo, Captain 会自动拉取源代码,并在配置好的目录下面搜寻 chart 文件,然后打包成 chart 压缩包,上传到一个新的由 chartmuseum 生成的 chartrepo 里。如下所示:
```yaml apiVersion: app.alauda.io/v1beta1 kind: ChartRepo metadata: name: svn namespace: captain-system spec: secret: name: svn source: path: / url: http://example.svn.org/svn/repo1 url: http://captain-chartmuseum:8080/svn18 type: SVN status: phase: Synced ```
如示例所示,.spec.url
便是 Captain 自动生成的只能集群内部访问的 ChartRepo 地址。
ARM64 镜像支持
最近两年,领先的云计算厂商都在积极研发和部署 ARM 架构的产品,其以优良的性价比、高度可定制化等优势正在占领越来越多的服务器和家用电子产品市场。
基于 Docker 和 Golang 所提供的对于多架构环境的支持,Captain 在 1.0.0 版本中也正式加入了对 ARM64 环境的支持。只需在安装时替换相应的镜像版本即可。未来还将根据需求支持更多的平台。
Kubectl Plugin 功能完备
Captain 作为一个 Controller,其适用性以及可扩展性都远远地超过了 Helm 本身。但是从用户角度来说,CLI 工具仍然是需要的。这样用户可以在不用编写 YAML 的情况下用命令行工具来完成相应的操作。Captain 的 kubectl plugin, 目前已经包含了常用的类似于 helm 的命令,足够满足日常需求。如下所示:
kubectl captain create
: 用于创建 HelmRequestkubectl captain upgrade
: 用于更新 HelmRequestkubectl get-manifest
: 获取当前HelmRequest的 Release里的 manifest 信息- …
Helm相关代码优化
Captain 本身是基于 Helm 3 的代码构建的。一方面,Cpatain 会尽量保持与官方 Helm 代码的同步,另一方面,也会针对 Helm2/Helm3 之前的不同做一些兼容性处理,同时也会修复一些 Helm 本身处理逻辑不合适的地方。这些 Fix 都是我们经过大量内部实践总结出来的,能够尽量避免用户在使用时遇到难以理解的错误和非预期的行为。