【DevOps】掌握 Helm:Kubernetes 应用程序部署指南

目录

一、前言

二、什么是 Helm?

三、Helm 的优势

四、Helm 组件

五、安装和配置 Helm

1、先决条件

2、安装 Helm 客户端

3、初始化 Helm

4、添加 Helm Charts 存储库

5、搜索和安装应用程序

5.1、搜索 Helm Charts

5.2、安装应用程序

5.3、自定义应用程序安装

5.4、管理应用程序

5.5、删除应用程序

6、管理 Helm Charts 依赖关系

7、创建自己的 Helm Charts

六、Helm 最佳实践

七、结论


一、前言

在当今的云原生时代,Kubernetes 已经成为管理和部署分布式应用程序的首选平台。随着应用程序复杂性的增加,管理和部署这些应用程序的工具变得至关重要。这就是 Helm 发挥作用的地方。 Helm 是一个强大的打包和部署工具,可以极大地简化在 Kubernetes 环境中部署和管理应用程序的过程。在本指南中,我们将深入探讨 Helm,包括其功能、优势、最佳实践以及分步安装和配置指南。

二、什么是 Helm?

Helm 是一个开源的打包和部署工具,专为 Kubernetes 应用程序而设计。它提供了一种结构化且可重复的方法来管理、安装、升级和删除 Kubernetes 群集中的应用程序及其相关资源。 Helm 的目标是使应用程序部署变得更加容易、可预测和可管理。

Helm 引入了“Charts”的概念,Charts 是预配置的 Kubernetes 资源捆绑包,可以轻松地部署到群集中。这些图表包含所有必需的资源(例如 Pod、服务、部署等)以及安装和管理应用程序的说明。

三、Helm 的优势

使用 Helm 在 Kubernetes 群集中管理和部署应用程序有几个关键优势:

  • 简化应用程序部署:Helm 通过提供一组预配置的资源和简单的命令行界面简化了应用程序部署。您不再需要手动管理一堆 YAML 文件。
  • 声明式管理:Helm 使用声明性方法管理应用程序。您只需定义应用程序的所需状态,Helm 将处理使其达到该状态的过程。这简化了应用程序生命周期管理。
  • 版本控制和回滚:Helm 支持对图表进行版本控制,允许您轻松回滚或升级应用程序。您可以跟踪应用程序的更改并确保在部署新版本时保持稳定性。
  • 依赖关系管理:Helm 可以处理应用程序的依赖关系。 Charts 可以指定对其他图表的依赖关系,Helm 将确保所有必需的组件都安装到位。
  • 自定义和配置:Helm 允许您通过自定义值文件轻松自定义应用程序的安装。您可以根据自己的要求调整应用程序的配置,而无需直接修改 Kubernetes YAML 文件。
  • 共享和可重用性:Helm Charts 旨在共享和重复使用。您可以发现和使用现成的图表,或者创建自己的图表来捕获应用程序的部署模式。
  • 升级和更新:Helm 简化了应用程序的升级过程。您可以轻松地将应用程序升级到图表的最新版本,同时确保所有依赖关系得到满足。
  • 社区和生态系统:Helm 拥有一个强大的社区和不断发展的生态系统。您可以利用现成的图表、插件和工具,并受益于社区的持续贡献和支持。

四、Helm 组件

Helm 由三个主要组件组成:

  • Helm 客户端:Helm 客户端是一个命令行界面 (CLI),用于与 Kubernetes 群集交互并管理 Charts 的安装。它是与群集通信的主要界面。
  • Tiller 服务器:Tiller(在 Helm 3 中已弃用)是 Helm 的服务器端组件,它在 Kubernetes 群集内运行并管理 Chart 的实际安装。它负责解释 Helm 图表并将其转换为 Kubernetes 对象。
  • Charts:Charts 是 Helm 的打包格式。它们包含一组相关的 Kubernetes 资源(例如 Pod、服务、部署等)以及安装和管理应用程序的说明。

五、安装和配置 Helm

让我们逐步了解如何安装和配置 Helm:

1、先决条件

  • 确保您的系统具有 Kubernetes CLI (kubectl) 并配置了访问 Kubernetes 群集的权限。
  • 您的 Kubernetes 群集至少应运行版本 1.10 或更高版本。

2、安装 Helm 客户端

您可以从 Helm 的官方 GitHub 存储库下载并安装 Helm 客户端:

  • 下载 Helm 二进制文件:

    curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh
    chmod 700 get_helm.sh
    ./get_helm.sh
    
  • 验证 Helm 是否已正确安装:

    helm version
    

3、初始化 Helm

对于 Helm 3:

  • Helm 3 不需要 Tiller 服务器端组件。初始化 Helm 将创建必要的配置文件:

    helm init
    

对于 Helm 2:

  • 初始化 Helm 并安装 Tiller 服务器端组件:

    helm init --service-account <service-account-name>
    

    用您的服务帐户名称替换 <service-account-name>

4、添加 Helm Charts 存储库

Helm Charts 存储库是存储和发现 Charts 的中央位置。 Bitnami Charts 存储库是社区中一个流行且经过验证的存储库:

  1. 添加 Bitnami Charts 存储库:

    helm repo add bitnami https://charts.bitnami.com/bitnami
    
  2. 更新存储库以获取最新图表:

    helm repo update
    

5、搜索和安装应用程序

让我们使用 Helm 在 Kubernetes 群集上安装应用程序:

5.1、搜索 Helm Charts

您可以使用 Helm 搜索图表以找到所需的应用程序:

helm search repo <chart_name>

用您要搜索的图表名称替换 <chart_name>。例如,要搜索 Nginx 图表:

helm search repo nginx
5.2、安装应用程序

使用 Helm 安装应用程序:

helm install <release_name> <chart_name> --namespace <namespace>

其中:

  • <release_name> 是您为应用程序安装选择的名称。
  • <chart_name> 是要安装的图表的名称。
  • <namespace> 是要安装应用程序的 Kubernetes 命名空间。

例如,要安装 Nginx 图表并将其命名为“my-nginx”,请运行:

helm install my-nginx bitnami/nginx --namespace default
5.3、自定义应用程序安装

您可以通过提供自定义值文件来配置应用程序的安装:

helm install <release_name> <chart_name> --namespace <namespace> -f values.yaml

在 values.yaml 文件中,您可以指定资源限制、配置参数等。

5.4、管理应用程序

Helm 提供了一组命令来管理应用程序:

  • 列出 Helm 发行版:

    helm list --namespace <namespace>
    
  • 获取发行版详细信息:

    helm status <release_name> --namespace <namespace>
    
  • 升级应用程序:

    helm upgrade <release_name> <chart_name> --namespace <namespace>
    
  • 回滚应用程序:

    helm rollback <release_name> --namespace <namespace>
    
5.5、删除应用程序

要删除应用程序,请使用以下命令:

helm uninstall <release-name> --namespace

自定义 Helm Charts

Helm 的一个强大功能是能够自定义应用程序的安装。您可以通过多种方式自定义 Helm Charts:

自定义值:您可以通过提供自定义值文件来自定义应用程序的配置。这些值文件允许您覆盖图表的默认值。例如,您可以自定义资源限制、副本计数或应用程序设置。

  helm install <release_name> <chart_name> --namespace <namespace> -f values.yaml

  • 覆盖单个值:您可以覆盖图表的特定值,而无需创建单独的值文件:

    helm install <release_name> <chart_name> --namespace <namespace> --set <value_name>=<value>
    
  • 使用 YAML 文件:如果您有现成的 YAML 文件(例如 Kubernetes 秘密),您可以将其与 Helm Charts 一起使用:

    helm install <release_name> <chart_name> --namespace <namespace> -f secrets.yaml
    

6、管理 Helm Charts 依赖关系

Helm Charts 可以具有对其他图表的依赖关系。 Helm 可以帮助您管理这些依赖关系:

  • 显示依赖关系:您可以查看图表的依赖关系:

    helm dependencies <chart_name>
    
  • 自动管理依赖关系:当您安装或升级图表时,Helm 将自动管理其依赖关系。它将确保所有必需的组件都安装到位。

7、创建自己的 Helm Charts

除了使用现成的图表外,您还可以创建自己的 Helm Charts:

  • 初始化图表:您可以使用 Helm 提供的工具来初始化新的图表:

    helm create <chart_name>
    
  • 图表结构:Helm Charts 具有特定的文件和目录结构。您可以在 charts/ 目录中定义应用程序的资源,并在 values.yaml 中指定可配置的值。

  • 模板化:Helm 使用 Go 模板来生成 Kubernetes YAML 文件。您可以使用模板变量和条件来创建动态资源。

  • 测试和验证:编写测试以验证图表是否按预期工作非常重要。您可以使用 Helm 的内置测试工具来帮助您验证图表。

  • 文档:确保为您的图表提供清晰的文档,包括说明、参数和任何自定义选项。

六、Helm 最佳实践

遵循这些最佳实践可以帮助您充分利用 Helm:

  • 版本控制图表:对您的 Helm Charts 进行版本控制,以便您可以轻松回滚或升级。使用 Git 等版本控制系统来管理图表。
  • 组织图表:使用有意义的命名约定组织图表,并考虑使用 Helm 存储库来集中存储和管理图表。
  • 管理敏感数据:避免在 Helm Charts 中包含敏感数据,例如密码或 API 密钥。使用 Kubernetes Secrets 或外部密钥管理系统来管理这些数据。
  • 测试和验证:在安装之前测试和验证您的图表。编写测试以验证应用程序是否正确部署。
  • 文档和注释:记录您的图表,包括说明、参数和任何自定义选项。使用注释来解释图表的不同部分。
  • 持续集成和部署:将 Helm 与 CI/CD 管道集成,以实现应用程序的自动化和可重复的部署。
  • 监控和警报:实施监控和警报系统以监视应用程序的运行状况。使用工具(例如 Prometheus 和 Grafana)来收集和可视化指标。
  • 定期升级:跟上 Helm 和应用程序的最新版本。定期检查更新,以利用新功能和错误修复。
  • 回滚策略:为应用程序定义回滚策略,以便在出现问题时能够轻松回滚。
  • 团队合作:确保您的团队了解 Helm 的使用,并制定标准和准则。鼓励文档共享和持续学习。

七、结论

Helm 是一个强大的工具,可以极大地简化在 Kubernetes 环境中部署和管理应用程序的过程。它提供了一种声明性且可重复的方法来管理应用程序生命周期。通过遵循本指南,您应该对 Helm 有了很好的了解,并能够开始在 Kubernetes 群集中使用 Helm 部署和管理应用程序。

记住,Helm 不断发展,因此确保参考 Helm 的官方文档以获取最新信息和功能。此外,积极参与 Helm 社区可以帮助您了解最佳实践并了解其他用户的经验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

echarts的toolbox自定义feature标签及事件

1. 需求 在使用echarts图时希望toolbox扩展一些自定义icon和点击事件&#xff0c;而不只是图中这些echarts提供的事件。 2. 文档 属性名类型描述toolbox.featureObject各工具配置项。 feature中除了echarts提供的各个内置的工具按钮外&#xff0c;可以自定义工具按钮。 除…

电脑ip地址查询:快速定位你的网络位置(4种方法)

在互联网的浩瀚海洋中&#xff0c;每台联网的电脑都有一个独特的身份标识&#xff0c;那就是IP地址。无论是进行网络通信、定位问题还是安全防护&#xff0c;了解自己或他人的电脑IP地址都是非常关键的。那么&#xff0c;电脑ip地址查询怎么操作呢&#xff1f;本文将为你提供一…

学习笔记——路由网络基础——缺省(默认)路由

3、缺省(默认)路由 1、定义 缺省路由(默认路由)&#xff1a;是目的地址和掩码都为全0的特殊路由。全0代表任意网络。缺省路由在路由表中的形式为&#xff1a;0.0.0.0/0缺省路由也被叫默认路由。缺省路由优先级比直连路由低 缺省路由是一种特殊的路由&#xff0c;当报文没有在…

Facebook海外户Facebook广告被暂停的原因

有很多伙伴在Facebook广告时&#xff0c;有时会遇到账号被暂停&#xff0c;并通知你违反了哪些规则&#xff0c;那么Facebook广告被暂停的原因有哪些呢&#xff1f;今天小编详细梳理了一些原因&#xff0c;可以往下看哦~ 您的Facebook广告被暂停可能有以下几个原因&#xff1a…

Redis系列之淘汰策略介绍

Redis系列之淘汰策略介绍 文章目录 为什么需要Redis淘汰策略&#xff1f;Redis淘汰策略分类Redis数据淘汰流程源码验证淘汰流程Redis中的LRU算法Redis中的LFU算法 为什么需要Redis淘汰策略&#xff1f; 由于Redis内存是有大小的&#xff0c;当内存快满的时候&#xff0c;又没有…

【Qt】TreeWidget中Item的UserCheckable注意事项,没有出现多选框

1. 异常 开启 ItemIsUserCheckable以后&#xff0c;界面上没有出现多选框。 QTreeWidgetItem *item new QTreeWidgetItem();item->setText(0, "hello");item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsSelectable |Qt::ItemIsEnabled | Qt::ItemIsAuto…

AIGC 介绍与典型应用与亚马逊科技AIGC方案

1、AIGC ( 生成式人工智能 ) 是指可生成全新内容的人工智能技术 从字面意思来看&#xff0c;AIGC 是继 PGC&#xff0c;UGC 之后的新型内容创作方式&#xff0c;可以在创意、表现力、迭代、传播、个性化等方面&#xff0c;充分发挥技术优势&#xff0c;打造新的数字内容生成与…

AXI Quad SPI IP核AXI4接口下的三种操作模式

当选择Enable Performance Mode选项时&#xff0c;AXI4接口包括在内。在该模式下&#xff0c;IP核可以在增强模式下操作&#xff08;未选择启用XIP模式&#xff09;或XIP模式&#xff08;选择启用XIP模式&#xff09;。在性能模式下&#xff0c;AXI4接口用于在DTR和DRR位置的突…

力扣2106.摘水果

力扣2106.摘水果 在下标上做滑窗 二分出左边最远能取到的点j 自己写lowerbound (j,start)这个区间的水果数就是初值 如何判断一个区间是否合法 先往右走再往左走&#xff1a;fruit(right,0) - start fruit(right,0) - fruit(left,0);先往左走再往右走&#xff1a;start - fru…

ActiveMQ 介绍、下载、安装和控制台

ActiveMQ 介绍 Apache ActiveMQ 是一款非常成熟且功能全面的开源消息中间件&#xff0c;由Apache软件基金会维护。它遵循 Java Message Service (JMS) 规范&#xff0c;这意味着它提供了一组标准的 API&#xff0c;允许 Java 应用程序以一种标准化的方式发送和接收消息。 以下…

为何数据仓库需要“分层次”?

在数据驱动的商业世界中&#xff0c;数据仓库是企业决策的心脏。然而&#xff0c;一个高效、可扩展且易于管理的数据仓库&#xff0c;需要精心设计和构建。分层是构建数据仓库的关键策略之一。本文将探讨数据仓库分层的重要性以及它如何帮助企业更好地管理数据。 数据仓库分层…

操作系统期末填空、问答往年考试题总结

1、什么是文件目录&#xff1f;目录管理的要求有哪些&#xff1f; 文件目录是文件控制块FCB的有序集合&#xff0c;一个文件的文件名和对该文件实施控制管理的说明信息称为文件目录。 实现文件按名存取、提高对目录的检索速度、文件共享、允许文件重名。 2、什么是操作系统&…

游戏研发(策略+sass+回调模式)

前言 由于这边需要对接游戏研发后台,基本就是开服,封禁.角色日志等,但是每个游戏提供的接口都是不一样的,所以为了统一处理提前进行sass封装,以便后续可以更好的兼容 同时还涉及了多数据源的问题,因为有些日志太大不可能直接去http调用,会使用直接查询游戏研发的数据库方式这一…

前端修改接口返回测试工具 Inssman使用教程

之前用的requestly现在要登录才能用了&#xff0c;然后我又登录不上去&#xff0c;同事又推荐了个谷歌插件&#xff0c;试了下&#xff0c;挺好用&#xff0c;还不用登录&#xff0c;用法和之前差不多 下载网站&#xff1a;https://chromewebstore.google.com/detail/inssman-…

mysql json_quote和json_unquote的用法

在 MySQL 中&#xff0c;JSON_QUOTE() 和 JSON_UNQUOTE() 函数与 JSON 数据类型的处理有关。这两个函数在处理 JSON 字符串时特别有用。 JSON_QUOTE() JSON_QUOTE() 函数用于将字符串值转换为有效的 JSON 字符串。它会将特殊字符&#xff08;如引号、反斜杠等&#xff09;进行…

从入门到精通:Java Lambda运算符详解!

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

力扣 503. 下一个更大元素 II

题目来源&#xff1a;https://leetcode.cn/problems/next-greater-element-ii/description/ C题解&#xff1a;因为是循环数组&#xff0c;所以对数组进行了两次遍历&#xff0c;相当于循环。使用了栈&#xff0c;一个存放元素&#xff0c;一个存放索引&#xff0c;用来更新res…

【C++ | 析构函数】类的析构函数详解

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-06-06 1…

使用MFC DLL

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 应用程序与DLL链接后&#xff0c;DLL才能通过应用程序调用运行。应用程序与DLL链接的方式主要有如下两种&#xff1a;隐式链接和显式链接。 隐式链接又称为静态加载&…

Linux常见故障处理之df命令卡住不输出

一、背景说明 朋友咨询Linux系统下输入df -h命令后没有任何输出结果&#xff0c;博主的第一反应是/根分区磁盘空间满了&#xff0c;朋友说cd等其他命令可以执行。博主又猜测可能是有人误定义了命令别名&#xff0c;进一步确认命令卡住在等待输出页面。事后博主想起来可能是共享…