【QCon】精华内容上线92%,全面覆盖“人工智能+”的典型案例!>>> 了解详情
写点什么

详解 Kubernetes 包管理工具 Helm

  • 2022-04-24
  • 本文字数:2797 字

    阅读完需:约 9 分钟

详解 Kubernetes 包管理工具 Helm

当提到 Helm 时,我们常常会做这样的类比:Helm 之于 Kubernetes,就像 apt 之基于 debian 的系统,yum 或 rpm 之于基于 Red Hat 的系统一样。除了包管理之外,Helm 还内置了配置管理的许多内容。


Helm 是针对 Kubernetes 的一款包管理工具,最初是由一家名为 Deis 的公司开发的,后来被微软收购。微软全力支持 Helm,加快了它的开发速度,现在它是云本地计算基金会(CNCF)的一部分。



图片来源:“Helm history”——2018 年 5 月,在 CNCF TOC 上 Helm 项目的演示幻灯片


作为 CNCF 的一部分,Helm 得到了众多组织的积极开发和支持,并由此发展出一个庞大而活跃的社区。以下是 Helm 截至 2021 年 10 月的项目贡献统计数据示例:


ContributorsCode CommitsPull RequestsContributions
15,44917,07916,897152,442


表资料来源:中国石油天然气基金发展统计项目《项目总体统计表

为什么 Kubernetes 需要一个包管理器?

大多数技术都是以“Hello World”的示例来引入关键概念,Kubernetes 也不例外。除最简单的组件以外,将任何组件部署到 Kubernetes 集群都需要跨多个组件进行协调。


比如,管理 Kubernetes 集群外的应用程序部署的过程并不复杂,然而由于存在依赖关系和依赖版本、配置工件、部署前和部署后的步骤、验证等,这就变成一项繁琐的工作了。正如 apt 和 yum 是为 Linux 管理该过程一样,Helm 为 Kubernetes 处理这个过程。


总的说来,Helm 特性具有以下特性:


  • Kubernetes 管理组件和应用程序的部署生命周期

  • 基于模板的定义,支持跨部署环境(例如,开发、质保、生产)的可移植性

  • 钩子机制可以在部署生命周期的不同阶段注入特定于用例的代码

  • 部署测试框架

Helm 的结构

使用 Helm 只需要安装一个可执行文件。helm 命令提供了 20 多个参数,用于构建、部署、删除、回滚等,将应用程序部署到 Kubernetes 集群中。


Helm 部署构件是 Helm Chart。Helm Chart 由用于将组件或应用程序部署到 Kubernetes 集群的资源组成。Chart 中最常见的资源是 YAML 文件,它遵循标准的 Kubernetes 资源描述。如果你能够很熟练地使用kubectl create 或者kubectl apply命令部署到 Kubernetes 集群,那么就会觉得 Helm Chart 中的 YAML 文件看起来很熟悉。Helm Chart 通常包含额外的资源,如 README 文件、默认参数文件和部署所需的额外文件(如证书)。


开发 Helm Chart 需要使用预定义的目录结构组织文件。可以用 Helm 命令helm create <chart name>创建一个 Helm chart,它是预定义的目录结构,包含一些示例文件。生成的 chart 包含几个 YAML 文件。一个 Kubernetes 部署通常需要多个要部署的 Kubernetes 资源描述,在许多情况下,这些部署必须有一个优先级顺序。当手动部署时,必须知道顺序。而 Helm 则不必如此,因为 Helm 知道 Kubernetes 资源描述的优先顺序。


Helm 部署过程的一个关键特性是Chart Hooks。在 Helm Chart 的部署生命周期中,Chart hook 是一种执行额外任务的机制。Helm 支持以下几点来引入图 Chart Hook:


Chart Hook描述
pre-install在部署应用程序之前执行任务
post-install在应用程序部署之后执行任务
pre-delete在将应用程序从集群中移除之前执行任务
post-delete在将应用程序从集群中移除之后执行任务
pre-upgrade在执行已部署应用程序的升级过程之前执行任务
post-upgrade在执行已部署应用程序的升级过程之后执行任务
pre-rollback在执行已部署的应用程序回滚流程之前执行任务
post-rollback在执行已部署的应用程序回滚流程之后执行任务
test执行Helm Chart 中定义的Helm测试


表格来源:“有用的钩子——Chart Hook”,Helm Chart 可以依赖于其他 Helm Chart


例如,一个应用程序可能包含对一组微服务的依赖,其中的微服务由他自己的 Helm Chart 定义。当应用程序部署时,Helm 会管理这些依赖项。为了与微服务模式保持一致,每个组件都可以独立于其他组件进行更新,因此它仍然是内聚的应用程序的集合的定义。

规划 Helm 部署

Helm 在应用程序开发和部署的各个方面都能够发挥作用,这需要工程和运营团队紧密合作,以设计解决方案并回答部署问题。通过团队协调,可以迭代地做出部署决策,以使用单个部署包来支持每个环境的目标以适应每个部署环境中的差异。


除了前面描述的钩子概念之外,Helm 还提供了一种健壮的模板机制,使团队能够解决单一部署包的挑战。通常,Helm Chart 中的 YAML 文件看起来不像手写的 YAML Kubernetes 资源描述。


相反,Helm Chart 中的 YAML 文件是使用 Helm 的模板语言开发的:


{{- if .Values.ingress.enabled -}}{{- $fullName := include "helm-demo.fullname" . -}}{{- $svcPort := .Values.service.port -}}{{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}apiVersion: networking.k8s.io/v1beta1{{- else -}}apiVersion: extensions/v1beta1{{- end }}kind: Ingressmetadata:  name: {{ $fullName }}  labels:    {{- include "helm-demo.labels" . | nindent 4 }}  {{- with .Values.ingress.annotations }}  annotations:    {{- toYaml . | nindent 4 }}  {{- end }}spec:  {{- if .Values.ingress.tls }}  tls:    {{- range .Values.ingress.tls }}    - hosts:        {{- range .hosts }}        - {{ . | quote }}        {{- end }}      secretName: {{ .secretName }}    {{- end }}  {{- end }}  rules:    {{- range .Values.ingress.hosts }}    - host: {{ .host | quote }}      http:        paths:          {{- range .paths }}          - path: {{ .path }}            backend:              serviceName: {{ $fullName }}              servicePort: {{ $svcPort }}          {{- end }}    {{- end }}  {{- end }}
复制代码


这个由 helm create 生成的被模板化的 ingress 描述示例,提供了几个变量,用来定义和配置 ingress 资源,包括是否应该创建 ingress 资源。通过模板,Helm 提供了对 Kubernetes 资源如何部署的大量控制。规划良好的模板模式可以生成单个部署包,使 Helm Chart 能够成功部署,范围从开发人员工作站上的单节点 Kubernetes 集群到生产 Kubernetes 集群。

Helm Chart 和 CI/CD

作为组织持续集成/持续交付管道的一部分,Helm 扮演着促成者和组件的角色。作为一个推动者,它通过成为跨环境(工程、质保、交付、认证、生产等)部署应用程序或组件的机制来增强管道。在 CI/CD 管道中,自动化的 Helm Chart 部署非常简单。


Helm Chart 作为一个应用程序组件,也像应用程序代码一样是迭代开发和部署的。这意味着 CI/CD 管道在验证 Helm Chart 本身时是不可或缺的。事实上,Helm Chart 应该被视为应用程序代码的一部分,而不是应用程序开发过程的外围部分——甚至应该将 Helm Chart 作为应用程序源代码的一部分纳入管理。与应用程序构建生成版本化的容器映像并将其推送到镜像注册表的方式类似,helm package 将 chart 绑定到版本化的归档文件中。生成的归档文件被提交到 Helm Chart 存储库,可以从该存储库访问它以进行部署。



上图突出强调了应用程序软件开发生命周期中的各个阶段。无论使用哪种模式来管理 Helm Chart 的源代码,它在应用程序 CI/CD 管道中与应用程序本身一样不可或缺。

结束语

Helm 一直是 Kubernetes 生态系统炒作曲线的一部分,随着 Kubernetes 炒作曲线开始变平,Helm 也已经成熟。Helm 的方法是革命性的吗?不完全是。Helm 利用多年积累了大量的软件包和配置管理工具的知识,现在将这些经验带给 Kubernetes。同时,Helm 通过 Helm Chart 定义部署包的观点对组织 CI/CD 管道的效率产生了直接影响,最显著的是配置模式和部署灵活性。设计良好的 Helm Chart 是有效交付的重要组成部分。


原文链接:


kubernetes-package-management-with-helm

2022-04-24 14:502490

评论

发布
暂无评论
发现更多内容

XMEX交易所系统软件开发|XMEX交易所APP开发

系统开发

即构SDK12月迭代:新增多项质量回调,互动白板、云录制SDK同步更新

ZEGO即构

如何在软件发布计划中自动化语义化版本与变更日志

华为云开发者联盟

自动化 工具 发布

有了Git这个功能,再也不需要依赖IDE了!

编程 架构

LeetCode题解:429. N叉树的层序遍历,BFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

社区团购大战升级:零售行业再次面临挑战

石头IT视角

海淀区政府携手百度,打造数字政务时代新门户

DT极客

一个改变世界的“箱子”

阿里巴巴云原生

Docker 阿里云 容器 云原生 k8s

网络入门模拟器:Cisco Packet Tracer 实验教程

Mybatis是如何解析配置文件的?

田维常

mybatis

聚焦LS-MIMO的四大层面,浅谈5G关键技术

华为云开发者联盟

华为 5G 华为云

基于LiteOS Studio零成本学习LiteOS物联网操作系统

华为云开发者联盟

操作系统 物联网 华为云

手把手教你免费获取正版 Jetbrains 全家桶 License

郭旭东

ide JetBrains

探营苏州数字人民币试点

CECBC

数字人民币

《构建高性能WEB站点》.pdf

田维常

架构

工作日志:一文总结HBase从搭建到实操,大家一起进步

小Q

大数据 学习 编程 面试 HBase

我叫你不要重试,你非得重试。这下玩坏了吧?

比伯

Java 编程 架构 面试 程序人生

互联网新规鼓励保险与大数据、区块链等新技术融合!业内呼吁配套产品管理制度尽快出炉

CECBC

互联网金融

终于学完了阿里云大数据架构师推荐的Flink入门与实战PDF

小Q

大数据 flink 学习 编程 面试

盘点 2020 | 坚持写技术博客一年能有多少收获!

小傅哥

Java 小傅哥 技术人 盘点2020

阿里三面惨遭被虐,spring,jvm,mybatis,并发编程等一窍不通

Java架构之路

Java 程序员 架构 面试 编程语言

终于有人通过笔记+脑图+视频的模式把Spring源码讲明白了

Java架构追梦

Java 学习 架构 面试 spring源码

没弄懂这些Java基础,简历上千万别写熟悉:异常+反射+注解+泛型

小Q

Java 学习 编程 面试 基础

赶紧看!阿里架构师必备“绝杀版”Tomact架构笔记堪称绝技

比伯

Java tomcat 编程 架构 程序人生

快来!开源一份阿里微服务指导手册:springBoot+springCloud+MQ

小Q

学习 面试 微服务 MQ SpringCloud

Athena雅典娜交易所系统开发|Athena雅典娜交易所软件APP开发

系统开发

你只修改了2行代码,为什么需要两天时间?

Java架构师迁哥

BATJ面试常被问到的100+题:Spring+微服务+SpringMVC+MyBatis

Java架构之路

Java 程序员 架构 面试 编程语言

破51项国际榜单纪录!解读华为云擎天架构调度求解引擎

华为云开发者联盟

华为 架构 华为云

SpringBoot魔法堂:应用热部署实践与原理浅析

设计原则 框架 spring Boot Starter

BAT等大厂面试复习资料文档整理:ActiveMQ+redis+Spring+高并发多线程+JVM

Java架构之路

Java 程序员 架构 面试 编程语言

详解 Kubernetes 包管理工具 Helm_文化 & 方法_Ray Elenteny_InfoQ精选文章