作者:王青,JFrog 中国首席架构师,之前在 IBM,HPE,爱奇艺,新浪,VIPKID 等公司做过研发和架构,是有十多年开发经验的互联网老兵,专注于软件生命周期管理,微服务架构,云原生应用,容器化等领域。
Helm Charts是 Kubernetes 项目中的一个子项目(https://github.com/kubernetes/helm)目的是提供 Kubernetes 的包管理平台。Helm 能够帮你管理 Kubernetes 的应用集合。Helm Charts 能够帮你定义,安装,升级最复杂的 Kubernetes 应用集合。
Helm Charts 很容易创建,做版本化,共享和发布,最新版本的 Helm 由 CNCF 进行维护,目前在业界已经有大量的公司在使用 Helm,其中包括谷歌,微软,Bitnami 等大型企业。
Helm 由两部分组成:
Helm 客户端。它用来创建,拉取,搜索和验证 Charts,初始化 Tiller 服务。
Tiller server。跑在 Kubernetes 集群之内,管理这些应用的发布。
很多Kubernetes 的使用者在部署一些通用组件时,例如数据库,CI 工具,缓存组件,负载均衡等等,通常会需求一些业界统一的最佳实践进行应用的配置。
目前市面上有很多仓库提供这样的最佳实践,例如:Kubernetes 的contrib repository,Helm Charts Repository (https://github.com/kubernetes/charts),Bitnami Charts Repository. 面对如此众多的来源,用户更希望有一个统一的入口去管理所有 Helm Charts仓库,于是就有了 Helm 私有仓库的诞生。它的好处在于:
1、管理复杂的应用集合
Charts 能够描述最复杂的应用,提供可重复,幂等性的安装,以及提供统一的认证中心服务。
2、容易升级
为团队提供实时的镜像升级,以及自定义 webhook,解决镜像升级的痛点。
3、企业内部共享
Charts能够很容易的进行版本化,共享,在企业内部提供私有Heml 仓库服务,解决了从官方源拉镜像速度奇慢的痛点。
4、回滚
使用 Helm 可以方便的进行应用的回滚,回到之前的 Release 版本。
目前在Kubernetes Charts repository有两个主要的目录Stable 和Incubator,Stable 里有近百种应用,例如:Artifactory, Jenkins,Mysql,MariaDB,Consul,Gitlab, Grafana,Nginx 等等。Incubator 里也有cassandra,Kafka,zk 等等知名软件,并且 Stable 仓库会持续的更新,提供更为便捷的应用配置管理。
1、Mac 下可以执行brew install kubernetes-helm。
2、定义一个 Chart:
3、执行 Helm install
helm install . 会使用./templates 目录下的Kubernetes manifests 去创建一个部署(deployment)和服务(service):
4、删除一个 Release(Helm delete RELEASE_NAME)
5、回滚一个 Release
使用 helm rollback RELEASE_NAME REVISION_NUMBER 可以恢复一个被删除的 Release。
6、使用模版管理Release
如果管理 Release?每次发布 Release,你不可能手动的去修改 yaml 文件去发布,Helm Chart提供了 模版的方式去实现。Helm Charts 的模版由 Go模版语言实现,并提供了数十种公共模版供用户使用。模版的值是从 value.yaml文件读取,例如:
一个模版文件写出来会是下面的样子,deployment.yaml:
其中模版中的变量是从 value.yaml 文件中读取。你也可以使用helm install —set image.tag=’latest’命令去覆盖 value.yaml 文件中的值。
随着 5.8 版本的发布,JFrog Artifactory不仅提供了高可用的 Docker 镜像中心,而且现在原生支持 Kubernetes Helm Chart 仓库, 为企业带来 Kubernetes 部署流程完全的可控制性。
Artifactory 提供了企业内部的高可用 Docker 注册中心集群,当研发团队达到100人以上之后,Docker 原生的镜像中心,或者 Harbor 会变成单点瓶颈。Artifactory 能够提供高并发 Docker Pull 的拉取,谷歌云平台每周并发拉取20亿次镜像,就是通过 Artifactory 实现的。
Artifactory 5.8版本之后,能够让你在公司内部拥有一个 Helm Charts 的本地私服。也就是说你的数据中心不会再依赖于网络下载外网的 Helm 仓库,例如公有的 Helm 仓库(https://kubernetes-charts.storage.googleapis.com/)。
Artifactory 的虚拟 Hem Chart 仓库能够聚合公司本地和远程的仓库成为一个仓库,为开发者解析和安装 Charts 时提供唯一的 URL。如下图所示:
Artifactory也支持提供全语言的二进制包的管理, 能够集成公司内部所有 CI/CD 工具,实现端到端的二进制包管理,从而解决复杂的跨语言包交付的问题,例如 Docker,NPM,Java包的统一管理。
下面是详细的 Kubernetes Helm 仓库的支持文档:https://www.jfrog.com/confluence/display/RTF/Helm+Chart+Repositories
安全,私有的 Helm Charts 仓库,为公司所有的项目和开发团队提供指纹级别的认证能力。
为 Artifactory 本地仓库 Host 的 Helm Charts 进行元数据的计算。
通过Artifactory 的远程仓库实现对 Helm 公有源的统一访问,并且将下载的文件缓存在本地,下次开发再拉取同样的内容不会去访问外网。
提供企业级功能的支持:例如高可用,仓库全球多地复制,水平扩容和一键容灾备份。
参考文章:
https://jfrog.com/blog/enterprise-grade-helm-chart-repository-jfrog-artifactory
https://medium.com/@gajus/the-missing-ci-cd-kubernetes-component-helm-package-manager-1fe002aac680
欢迎关注 JFrog 杰蛙中国,获取更多国外最新DevOps 干货!