Helm 通过将各种 Kubernetes 资源打包,类似于 Linux 的apt-get 或 yum 工具,来完成复杂软件的安装和部署,并且支持部署实例的版本管理等,大大简化了在 Kubernetes 上部署和管理应用的复杂度
Helm 解决了什么问题
随着容器技术和微服务架构逐渐被企业接受,在 Kubernetes 上已经能便捷地部署简单的应用了。
但对于复杂的应用或者中间件系统,在 Kubernetes 上进行容器化部署并非易事,通常需要研究 Docker 镜像的运行需求、环境变量等内容,为容器配置依赖的存储、网络等资源,并设计和编写 Deployment、ConfigMap、Service、Volume、Ingress 等 YAML 文件,再将其依次提交给 Kubernetes 部署。
总之,微服务架构和容器化给复杂应用的部署和管理都带来了很大的挑战。
Helm 由 Deis 公 司 ( 已 被 微 软 收 购 ) 发 起 , 用 于 对 需 要 在Kubernetes 上部署的复杂应用进行定义、安装和更新,是 CNCF 基金会的 毕 业 项 目 , 由 Helm 社 区 维 护 。 Helm 将 Kubernetes 的 资 源 如Deployment、Service、ConfigMap、Ingress 等,打包到一个 Chart中,而 Chart 被保存到 Chart 仓库,由 Chart 仓库存储、分发和共享。Helm 支持应用 Chart 的版本管理,简化了 Kubernetes 应用部署的应用定义、打包、部署、更新、删除和回滚等操作。
Helm 整体架构图


Helm版本支持的Kubernetes版本列表:


helm如何使用
举个例子: 一个名为myapp的微服务应用程序,它由三个组件构成:
API服务器(apiserver)、数据库(database)和消息队列(message-queue)。
每个组件都是一个单独的Docker镜像。
-
使用Docker仓库:
每个组件都被构建为独立的Docker镜像,并推送到Docker仓库(例如 Docker Hub 或阿里云容器镜像服务 ACR)中。例如,你可能有以下镜像:
myorg/myapp-apiserver:v1.0
myorg/myapp-database:v1.1
myorg/myapp-message-queue:v2.0
-
使用Helm部署到Kubernetes集群:
-
为了在Kubernetes集群上部署整个应用,你需要创建一个Helm Chart。Chart会包含以下内容:
-
templates/ 目录下有多个YAML模板文件:
-
apiserver-deployment.yaml:定 义了如何创建并配置API服务器的Deployment资源。
-
database-deployment.yaml 和 database-pvc.yaml:定义数据库的Deployment和PersistentVolumeClaim资源。
-
message-queue-deployment.yaml:定义消息队列的Deployment资源。
-
可能还包括Service、Ingress以及其他Kubernetes对象的模板。
-
values.yaml 文件:包含了可以自定义的应用程序配置参数,如镜像版本、环境变量等。
-
Chart.yaml 和 requirements.yaml(如果存在依赖关系的话):描述了Chart的基本信息和依赖的其他Charts。
-
当你使用Helm安装此Chart时(例如 helm install myapp . –set image.tag=v1.0),Helm会根据values.yaml中的值解析并渲染模板文件,生成最终的Kubernetes资源配置清单,然后提交给Kubernetes集群执行部署操作。
备注:(helm把资源配置清单提交给Kubernetes集群的具体流程)
安装或升级Chart: 当你运行helm install 或 helm upgrade命令时,Helm会根据提供的Chart目录和可选的参数生成最终的Kubernetes资源配置清单。这些参数可以是通过命令行传递的,也可以是在values.yaml文件中定义的。
例如:
helm install myapp ./myapp-chart –set image.tag=v1.0 渲染模板: Helm使用Go模板引擎解析templates/目录下的所有YAML文件,并将values.yaml中的值替换到模板中。这一步完成后,你会得到一组完全填充了实际值的Kubernetes资源清单文件。
发送请求到Kubernetes API Server: Helm客户端(helm)将生成的资源配置清单转换为JSON格式,并通过kubeconfig文件配置的API服务器地址,以HTTP/HTTPS请求的方式将资源配置数据发送给Kubernetes API Server。
创建或更新资源: Kubernetes API Server接收到请求后,验证并处理这些资源对象的创建或更新请求,按照Kubernetes的调度逻辑来创建Pods、Deployments、Services等资源对象。
监控部署状态: 在部署过程中,Helm客户端会等待直到所有的资源对象都达到预期的状态(如Deployment成功滚动更新至新版本),确保整个应用已经正确地部署到了Kubernetes集群上。
记录Release信息: 部署完成后,Helm会在本地存储Release的相关信息,包括使用的Chart版本、配置以及部署的具体资源信息。这样用户可以通过helm list命令查看已部署的Release列表,并进行后续的回滚、卸载等操作。
在这个场景中,Docker仓库用于存储和分发单个容器镜像,而Helm则负责将这些镜像组织成一个完整的应用架构,并且管理其在Kubernetes上的生命周期,包括安装、升级、回滚等操作。
原文始发于微信公众号(云计算解决方案架构师):k8s生态组件-helm
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/225684.html