一、背景
Kubernetes(k8s)是一个基于容器技术的分布式架构当先计划。它在Docker技术的根底上,为容器化的利用提供部署运行、资源调度、服务发现和动静伸缩等一系列残缺性能,进步了大规模容器集群治理的便捷性。
在容器云环境及容器化服务在业界开始大规模部署利用的前提下,Kubernetes在业界的理论利用状况又是怎么的呢?在往年召开的JFrog SwampUp用户大会上,Codefresh公司为大家展现了一些有意思的数据。如下图:
据Codefresh公司统计,在目前JFrog的企业用户当中,有80%曾经应用了Kubernetes,这阐明Kubernetes曾经失去了业界的认可并开始了宽泛的利用。然而,只有5%的JFrog用户在生产环境中应用Kubernetes。也就是说,企业更多的只是在本人的研发、测试环境中去应用 Kubernetes。这是什么起因呢?JFrog通过本身在Kubernetes利用上的大量实践证明,“Kubernetes is hard”,间接应用Kubernetes去部署和治理容器化的云服务,尤其是基于微服务的云服务,是十分具备挑战性的工作。
那如何能力更便捷地利用Kubernetes呢?JFrog抉择了Helm,Kubernetes的官网包管理工具。咱们再来看Codefresh提供的另一组数据,如下图:
和上一组数据一样,只有5%的JFrog企业用户在生产环境应用了Kubernetes。但同时,也有5%的JFrog用户应用了Helm。可见,当把Kubernetes利用到生产环境的时候,泛滥企业也和JFrog一样,抉择了Helm这一“利器”。
为什么Helm会受到这样的青眼?本文将通过JFrog施行Helm和Kubernetes的实际来介绍和剖析Helm的劣势所在。
二、Helm是什么
在介绍Helm之前,咱们先来看看间接利用Kubernetes部署云服务会遇到哪些艰难。
Kubernetes应用yaml文件来形容和治理服务中各个组件的配置和部署需要,每个组件对应一个yaml文件。当下的云服务通常都是由多个组件形成的,如何配置和解决好这些组件,也就是多个yaml文件之间的关联关系,成为了Kubernetes利用的额定工作。而当云服务降级,却仅仅波及其中一个或某几个模块时,降级模块的新yaml文件和已有yaml文件之间的关联关系就会变得更加盘根错节,从而更减少了应用Kubernetes来配置和治理降级的难度。
其次,Kubernetes把组件的配置信息也间接记录到yaml文件当中。从形容组件的角度来讲,这种形式的确比拟清晰。然而,当云服务的部署面对多个环境,如不同的开发、测试、产品环境(这也是以后比拟常见的利用场景)时,要如何解决这些环境配置之间的差异?要为每个环境都开发和保护一套不同的yaml文件?这显然大大增加了利用Kubernetes的难度和工作量。
而且,Kubernetes的yaml文件自身是没有版本的概念的。那么当某次部署失败,须要回滚到上一个稳固版本时,该抉择哪一套yaml文件来解决?显然,这须要很多额定的工作来解决。
那Helm是如何来解决这些问题的呢?
Helm(https://helm.sh)是Kubernetes的官网包管理工具。Helm是通过被称作Helm Chart的包来形容和治理云服务的。Helm Chart对应的是一组结构化的目录和yaml文件,而这些目录和文件大抵可分为三个局部:
1、模板
在templates目录下寄存着一组用来形容云服务当中各个组件的yaml文件,这和目前Kubernetes的用法相似。Helm把这些yaml文件组织在同一目录,可能很不便地理解以后云服务的组成,构造清晰且便于管理。
2、配置与依赖
templates目录下的yaml文件是不蕴含具体的配置信息的,只保留了对配置项(key)的援用。真正与指标环境对应的配置信息(value)是存储在values.yaml文件里的。当然,values.yaml只是存储了一些缺省的、动态的配置信息,在部署的过程中也能够动静地减少或批改这些配置信息。这种配置与利用拆散的设计使得同一套templates能够不便地部署到不同的指标环境中,只须要更新values.yaml文件或部署时动静批改配置信息就能够了。
另外,针对某些已被宽泛应用的云服务或组件,目前曾经存在比拟成熟、通过验证的Helm Chart了。当应用到这些服务或组件时,能够间接在requirements.yaml文件里形容这种依赖关系。在部署的时候,Helm会主动获取这些依赖的Helm Chart应用,并存储在charts目录。这种依赖性的设计,防止了很多重复性的工作,也使得Helm Chart的并行开发和共享成为可能。
3、版本化
每一个Helm Chart包都能够在Chart.yaml文件里定义本人的版本。另外,每一次 Helm的部署都会主动生成一个版本(release)。应用Helm的命令,能够不便地实现这些已部署版本的查问、降级、回滚和其余治理工作。
三、Helm的利用实际
通过上面对Helm的介绍和剖析能够看出,Helm可能很好地解决Kubernetes利用部署的难题。JFrog在本人的Kubernetes实际当中也充沛应用了Helm。
目前,在JFrog各个产品本身的CI/CD流水线上都应用Helm进行Kubernetes上的部署,曾经能够实现每周100+不同产品线的任意版本组合部署,每次部署超过50种微服务。JFrog也将为客户提供这些Helm Chart,以帮忙客户在Kubernetes环境疾速部署JFrog的各种产品。
在实际Helm的过程中,JFrog也积攒了一些教训和最佳实际。
1、配置与利用拆散
针对所有的环境应用同样的Helm Chart,然而依据不同的环境配置本人特定的values.yaml文件。同时,依据指标环境的变动对这些values.yaml文件进行版本化的治理。
2、善用依赖
目前曾经有很多产品和通用组件都实现了比较完善、通过验证的Helm Chart,能够在https://hub.kubeapps.com里找到。咱们在开发本人的Helm Chart时,能够通过定义依赖来充沛地利用这些已有的成绩,在缩小工作量的同时,也能进步产品的品质。
3、在理论部署前查看Helm Chart
Helm提供了很多实用的命令来帮忙咱们在理论部署之前查看Helm Chart里的谬误,升高应用的危险。比方:
· helm lint <chart path>
helm lint能够用来查看下载的Helm Chart是否存在问题
· helm install –debug –dry-run <chart>
helm install带上dry-run参数能够在不理论执行部署的状况下查看Helm Chart的各种配置是否正确
Helm的各种命令及其具体用法请参考Helm的官网文档,https://docs.helm.sh。
4、充分利用社区的力量
目前有很多开发者都在钻研和实际Helm,咱们应该充分利用他们的教训和成绩,并踊跃地和他们沟通交流,从而晋升咱们应用Helm的效率和品质。
罕用的用于Helm交换的社区包含:
· GitHub issues: https://github.com/helm/charts/issues
· Slack: #helm-users room in the Kubernetes Slack (https://kubernetes.slack.com/)
· Slack: #helm-dev room in the Kubernetes Slack (https://kubernetes.slack.com/)
四、Helm仓库
下图是Helm的利用架构:
其中,Tiller部署在Kubernetes环境中,执行利用部署等操作。而Helm作为客户端,实现Helm Chart的治理和部署工作的公布。在这个架构中,Helm仓库(Storage)保留了Helm部署所须要的各种Chart文件、依赖包和配置信息,在Helm部署过程中起到了非常重要的作用。
JFrog的Artifactory产品,作为寰球惟一提供Helm仓库反对的对立制品治理仓库,能够在为Helm Chart提供仓库反对的同时,为相干制品,如docker镜像、版本化的配置信息,以及各种依赖制品等提供一站式的对立服务和治理。而JFrog的Xray产品,集成Artifactory的对立制品仓库,可能实现安全漏洞的主动扫描及破绽的影响范畴剖析。
无关JFrog产品的具体介绍、能力剖析及用户案例,请参考本公众号的系列文章和官网的相干介绍(http://jfrogchina.com)。
五、总结
通过Kubernetes部署云服务曾经在业界的到了宽泛的利用。Helm通过其对立治理、配置与利用拆散、版本化等个性可能大大降低Kubernetes部署的难度,晋升部署的效率和品质,也逐步失去了泛滥的关注和利用。
JFrog的Artifactory和Xray等产品可能提供蕴含Helm仓库在内的对立制品仓库治理和安全漏洞扫描,在实现基于Helm的CI/CD流水线和自动化部署计划起到了重要的作用。Codefresh公司就利用JFrog的产品和相干工具搭建了本人产品的流水线并宽泛应用。
参考文献
· Kubernetes is hard! https://www.youtube.com/watch?v=o4PRs0gpl18
· Helm CI/CD https://www.youtube.com/watch?v=Di14-HfTaKc&t=2022s
· 应用Artifactory Helm仓库+Kubernetes实现微服务继续交付
http://www.jfrogchina.com/support-service/training-free-artifactory
**欢送观看JFrog杰蛙每周二在线课堂,点击报名:
https://www.bagevent.com/even...
**