Helm 简介:Kubernetes 的包管理器

简介

将应用程序部署到 Kubernetes(一个功能强大且流行的容器编排系统)可能会很复杂。设置单个应用程序可能涉及创建多个相互依赖的 Kubernetes 资源,例如 pods、services、deployments 和 replicasets,每个资源都需要编写详细的 YAML 清单文件。

Helm 是 Kubernetes 的一个软件包管理器,允许开发人员和运维人员更轻松地将应用程序和服务打包、配置和部署到 Kubernetes 集群上。

Helm 现在是一个官方的 Kubernetes 项目,并且是云原生计算基金会的一部分,该基金会是一个支持 Kubernetes 生态系统内外的开源项目的非营利组织。

在本文中,我们将概述 Helm 及其使用的各种抽象,以简化将应用程序部署到 Kubernetes。如果您对 Kubernetes 还不熟悉,建议先阅读《Kubernetes 简介》以熟悉基本概念。

如果您正在寻找托管的 Kubernetes 主机服务,请查看我们为增长而构建的简单、托管的 Kubernetes 服务。

Helm 概述

几乎每种编程语言和操作系统都有自己的软件包管理器,以帮助安装和维护软件。Helm 提供了与许多您可能已经熟悉的软件包管理器(如 Debian 的 apt 或 Python 的 pip)相同的基本功能集。

Helm 可以:

  • 安装软件。
  • 自动安装软件依赖项。
  • 升级软件。
  • 配置软件部署。
  • 从存储库获取软件包。

Helm 通过以下组件提供这些功能:

  • 一个命令行工具 helm,它为所有 Helm 功能提供用户界面。
  • 一个伴随的服务器组件 tiller,它运行在您的 Kubernetes 集群上,监听来自 helm 的命令,并处理集群上软件发布的配置和部署。
  • Helm 打包格式,称为 charts
  • 一个官方的精选 charts 存储库,其中包含流行的开源软件项目的预打包 charts。

接下来我们将更详细地研究 charts 格式。

Charts

Helm 软件包称为 charts,它们由一些 YAML 配置文件和一些模板组成,这些模板被渲染为 Kubernetes 清单文件。以下是 chart 的基本目录结构:

package-name/charts/templates/Chart.yamlLICENSEREADME.mdrequirements.yamlvalues.yaml

这些目录和文件具有以下功能:

  • charts/: 可以将手动管理的 chart 依赖项放在此目录中,尽管通常最好使用 requirements.yaml 动态链接依赖项。
  • templates/: 此目录包含模板文件,这些文件与配置值(来自 values.yaml 和命令行)组合在一起,并渲染为 Kubernetes 清单。模板使用 Go 编程语言的模板格式。
  • Chart.yaml: 一个包含有关 chart 的元数据的 YAML 文件,例如 chart 名称和版本、维护者信息、相关网站和搜索关键字。
  • LICENSE: chart 的纯文本许可证。
  • README.md: 包含 chart 用户信息的自述文件。
  • requirements.yaml: 列出 chart 依赖项的 YAML 文件。
  • values.yaml: chart 的默认配置值的 YAML 文件。

helm 命令可以从本地目录安装 chart,也可以从打包成 .tar.gz 格式的此目录结构自动下载并安装 chart。这些打包的 charts 也可以从 chart 存储库或 repos 自动下载并安装。

接下来我们将看一下 chart 存储库。

Chart 存储库

Helm chart 存储库是一个简单的 HTTP 站点,提供 index.yaml 文件和 .tar.gz 打包的 charts。helm 命令有可用的子命令来帮助打包 charts 并创建所需的 index.yaml 文件。这些文件可以由任何 Web 服务器、对象存储服务或 GitHub Pages 等静态站点主机提供。

Helm 预先配置了一个名为 stable 的默认 chart 存储库。此存储库指向 https://kubernetes-charts.storage.googleapis.com 上的 Google 存储桶。stable 存储库的源代码可以在 GitHub 上的 helm/charts Git 存储库中找到。

可以使用 helm repo add 命令添加其他存储库。一些流行的备用存储库包括:

  • 官方的 incubator 存储库,其中包含尚未准备好用于 stable 的 charts。有关使用 incubator 的说明可以在官方 Helm charts GitHub 页面上找到。
  • Bitnami Helm Charts,提供一些在官方 stable 存储库中未涵盖的 charts。

无论是安装您本地开发的 chart,还是从存储库中安装 chart,您都需要为您的特定设置进行配置。接下来我们将研究配置。

Chart 配置

chart 通常在其 values.yaml 文件中具有默认配置值。一些应用程序可能可以使用默认值完全部署,但通常您需要覆盖一些配置以满足您的需求。

可以配置的值由 chart 的作者确定。有些用于配置 Kubernetes 原语,有些可能传递到底层容器以配置应用程序本身。

以下是一些示例值的片段:

service:type: ClusterIPport: 3306

这些是用于配置 Kubernetes Service 资源的选项。您可以使用 helm inspect values chart-name 来转储 chart 的所有可用配置值。

这些值可以通过编写自己的 YAML 文件并在运行 helm install 时使用它们来进行覆盖,也可以通过使用 --set 标志在命令行上单独设置选项来进行覆盖。您只需要指定您想要从默认值更改的那些值。

使用特定配置部署的 Helm chart 称为 release。接下来我们将讨论发布。

发布版本

在安装图表时,Helm 将图表的模板与用户指定的配置和values.yaml中的默认配置合并。这些被渲染成 Kubernetes 清单,然后通过 Kubernetes API 部署。这样就创建了一个 发布版本,即特定图表的特定配置和部署。

发布版本的概念很重要,因为您可能希望在集群上部署同一个应用程序多次。例如,您可能需要具有不同配置的多个 MySQL 服务器。

您可能还希望单独升级图表的不同实例。也许一个应用程序准备好升级 MySQL 服务器,但另一个应用程序没有准备好。使用 Helm,您可以单独升级每个发布版本。

您可能会升级一个发布版本,因为其图表已更新,或者因为您想要更新发布版本的配置。无论哪种方式,每次升级都会创建发布版本的新 修订版本,并且 Helm 将允许您轻松回滚到以前的修订版本,以防出现问题。

创建图表

如果找不到要部署的软件的现有图表,您可能希望创建自己的图表。Helm 可以使用 helm create chart-name 命令输出图表目录的脚手架。这将创建一个包含我们在上面的图表部分中讨论的文件和目录的文件夹。

然后,您需要在 Chart.yaml 中填写图表的元数据,并将 Kubernetes 清单文件放入 templates 目录中。然后,您需要从清单中提取相关配置变量,并将其放入 values.yaml 中,然后再使用模板系统将其包含回清单模板中。

helm 命令有许多可用的子命令,可帮助您测试、打包和提供图表。有关更多信息,请阅读有关开发图表的官方 Helm 文档。

结论

在本文中,我们回顾了 Helm,Kubernetes 的包管理器。我们概述了 Helm 架构和各个 helmtiller 组件,详细介绍了 Helm 图表格式,并查看了图表存储库。我们还深入探讨了如何配置 Helm 图表以及如何将配置和图表组合并部署为 Kubernetes 集群上的发布版本。最后,我们简要介绍了在没有合适图表可用时创建图表的基础知识。

有关 Helm 的更多信息,请查看官方 Helm 文档。要找到 Helm 的官方图表,请查看 GitHub 上的官方 helm/charts Git 存储库。

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

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

相关文章

基于YOLOv8的暗光低光环境下(ExDark数据集)检测,加入多种优化方式---DCNv4结合SPPF ,助力自动驾驶(一)

💡💡💡本文主要内容:详细介绍了暗光低光数据集检测整个过程,从数据集到训练模型到结果可视化分析,以及如何优化提升检测性能。 💡💡💡加入 DCNv4结合SPPF mAP0.5由原始的0.682提升至…

在 VMware 虚拟机上安装 CentOS系统 完整(全图文)教程

一、前期准备: 1.安装VMware 虚拟机软件(不在讲解,可自行去下载安装)。官网:https://customerconnect.vmware.com/cn/downloads/details?downloadGroupWKST-PLAYER-1750&productId1377&rPId111471 2.下载iso…

【AWS】step-functions服务编排

文章目录 step-functionsState machine typeStandard workflowsExpress workflows design skillsError handlingsaga Transaction processing控制分布式系统中的并发性 收费 作为AWS Serverless无服务器的一个重要一环 使用step-functions方法将 AWS 服务链接在一起 step-funct…

用python编写爬虫,爬取二手车信息+实验报告

题目 报告要求 工程报告链接放在这里 https://download.csdn.net/download/Samature/88805518使用 1.安装jupyter notebook 2.用jupyter notebook打开工程里的ipynb文件,再run all就行 注意事项 可能遇到的bug 暂无,有的话私信我

如何决定K8S Pod的剔除优先级

在Kubernetes(k8s)中,当节点资源面临压力时,如何决定Pod的优先级是一个关键问题。在Kubernetes 1.8版本之后,引入了基于Pod优先级的调度策略,即Pod Priority Preemption。这种策略允许在资源不足的情况下&a…

iOS平台如何实现低延迟RTSP转RTMP推送?

技术背景 好多开发者都知道我们有Windows、Android、Linux平台的RTSP转RTMP推送模块,实际上,iOS平台我们也有,并在2016年就已发布。我们都知道,一个好的RTSP转RTMP推送模块,需要足够稳定的前提下,还要低延…

Unity 接口、抽象类、具体类对象的配合使用案例

文章目录 示例1:接口(Interface)示例2:抽象类(Abstract Class)示例3:结合使用接口与抽象类示例4:多接口实现示例5:抽象类与接口结合 在Unity中使用C#编程时,接…

制作耳机壳的UV树脂耳机壳UV胶和塑料材质有什么不同?

制作耳机壳的UV树脂和塑料材质在以下几个方面存在区别: 硬度与耐磨性:UV树脂具有较高的硬度和耐磨性,能够有效保护耳机内部零件,延长耳机使用寿命。而塑料材质相对较软,容易受到磨损。透明度与光泽度:UV树…

JAVA中的单例模式->懒汉式

一、步骤 1.构造器私有化>防止直接new private Cat(String name) {System.out.println("构造器被调用");this.name name;} 2.类的内部创建对象 private static Cat cat; 3.向外暴露一个静态的公共方法。getInstance public static Cat getInstance(){if (cat…

es6模块化导入导出与commonjs模块化(nodejs导入导出)详解——导出export

博主的桌面工具软件已经正式开发,获取方式: 可以关注我的小程序【中二少年工具箱】获取。(若小程序更新有延迟,或关注小程序后续功能,可先收藏小程序) 通过下载链接 百度网盘: 链接:https://p…

【SpringBoot】application配置(5)

type-aliases-package: com.rabbiter.cm.domaintype-aliases-package: 这个配置用于指定mybatis的别名,别名是一个简化的方式,让你在Mapper xml 文件中引用java类型,而不需要使用使用完整的类名。例如,如果你在 com.rabbiter.cm.d…

pymunk初步:设置重力

文章目录 官方示例可视化 官方示例 pymunk是一款2D物理引擎,在游戏开发中十分有用。安装过程无坑 pip install pymunk下面举出官网的一个案例,来简述pymunk的使用流程 import pymunkspace pymunk.Space() space.gravity 0,-981body pymunk.Body() …

Vue组件通信的方式

文章目录 props 父传子$emit 子传父事件总线&#xff08;Event Bus&#xff09;使用Vuex\Pinia状态管理库使用provide/inject props 父传子 父组件向子组件传递数据&#xff1a;通过props属性将数据从父组件传递给子组件。 <template> <div> <child-compone…

邮件群发系统怎么用呢?专业的邮件群发器?

邮件群发系统哪个比较好&#xff1f;邮件营销系统的效果怎么样&#xff1f; 在现代商业活动中&#xff0c;邮件群发系统已成为企业营销的重要工具。那么&#xff0c;邮件群发系统究竟如何使用呢&#xff1f;接下来&#xff0c;蜂邮EDM将为您详细解析邮件群发系统的使用方法。 …

股市反转数据分析

20240206是一个很好的股市反转数据分析的样本。因为之前的1月份2月前3个交易日也就是2月1日&#xff0c;2月2日和2月5日基本都是大跌。数据记录如下&#xff1a; 指数名称指数代码收盘价 [日期] 20231229 [单位] 元收盘价 [日期] 20240205 [单位] 元区间涨跌幅上证指数000001.…

深度学习图像分类相关概念简析+个人举例3(CNN相关补充,附详细举例代码1)

【1】激活函数&#xff08;Activation Function&#xff09;&#xff1a;在深度学习&#xff08;CNN&#xff09;中&#xff0c;激活函数用于引入非线性性质&#xff0c;帮助模型学习复杂的关系。常见的激活函数有ReLU、Sigmoid和Tanh等。 &#xff08;1&#xff09;ReLU激活函…

Godot 游戏引擎个人评价和2024年规划(无代码)

文章目录 前言Godot C# .net core 开发简单评价Godot相关网址可行性 Godot(GDScirpt) Vs CocosGodot VS UnityUnity 的裁员Unity的股票Unity的历史遗留问题&#xff1a;Mono和.net core.net core的开发者&#xff0c;微软 个人的独立游戏Steam平台分成说明独立游戏的选题美术风…

C# CAD交互界面-自定义面板集-添加快捷命令(五)

运行环境 vs2022 c# cad2016 调试成功 一、引用 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.Windows; using System; using System.Drawing; using System.Windows.Forms; 二、代码说明 [CommandMethod("Cre…

Linux CentOS stream 9 alias

alias命令在Linux中用于创建命令别名。它允许用户为常用的命令或命令组合创建短而易记的别名,从而提高工作效率。 alias命令与windows中的快捷方式相同,执行别名时,终端解释器就进行查询与转换,进而执行原来的完整命令。 熟练使用alias命令可以使我们将一长串命令或者一些…

android下library打包aar并上传到maven,嵌入版的app

android嵌入版 准备工作简化代码到三方app上传maven自动打包上面已经完成了library到三方app的流程 这几天在研究android下怎么把自己的项目当作一个library给到另一个app做嵌入使用&#xff0c;把这些记录下来&#xff0c;方便以后参考 准备工作 1.需要了解一些gradle 命令打…