最简单的helm教程

news2024/11/22 14:58:05

最简单的Helm教程

学习前置条件

  1. 你得了解Kubernetes,拥有实际的使用经验那是最好不过了

Helm是什么?

我们打开Helm的官网:Helm的官网

可以看到官网的第一页就告诉了我们Helm是什么。

image-20230512072617712

**Helm是Kubernetes(k8s)的包管理工具。**这就类似于Linux系统常用的apt、yum等包管理工具。

进一步说Helm这个k8s的包管理工具,具体能帮助我们做什么呢?如下图所示:

image-20230512072840595

Helm可帮助我们管理 Kubernetes 应用程序——Helm Charts 可帮助您定义、安装和升级即使是最复杂的 Kubernetes 应用程序。

Charts很容易创建版本化共享发布——所以开始使用 Helm 并停止复制和粘贴。

如果说上面的说明让你有些听不懂,那我们用示例讲解一遍。

在我们的日常工作中,肯定是有多套环境的。一般会有开发环境、预生产测试环境、生产环境,甚至还有压测环境,生产环境可能又分为多个地方资源池的环境。

现在我们的服务大多都是微服务化的,一个应用有几个甚至几十个的微服务,每一个微服务都对应了一个部署的yaml文件,那可能就是几个甚至几十个yaml文件。

假如我们新增了一个要部署的环境,或者是我们的yaml文件需要修改的时候,那我们就需要到这几个甚至几十上百个yaml文件中进行修改。这太费时费力了,而且还容易搞错。

其实我们的yaml文件中,大部分内容是相同的,为什么不能将那一些不同点抽离出来,做成配置,到时候,直接维护那一点配置文件,这不就简化了我们的工作吗。

这其实就是Helm的一个作用。

当然不仅仅只有这个作用,类似还有版本管理、回滚和发布。这些都是在我们的k8s的使用中很需要的一些功能。

总之一句话,使用Helm可以简化k8s应用部署。

Helm的下载与安装

在开始学习Helm之前,我们得先拥有学习的环境,大家在学习的过程中一边学习,一边实践,这样才学习得更快。

Helm的下载

Helm下载路径:https://github.com/helm/helm/releases

目前的最新版本是v3.11.3,大家选择安装的时候,选择跟自己的k8s版本兼容的版本即可。

Helm的版本支持的Kubernetes版本
3.11.x1.26.x - 1.23.x
3.10.x1.25.x - 1.22.x
3.9.x1.24.x - 1.21.x
3.8.x1.23.x - 1.20.x
3.7.x1.22.x - 1.19.x
3.6.x1.21.x - 1.18.x
3.5.x1.20.x - 1.17.x
3.4.x1.19.x - 1.16.x
3.3.x1.18.x - 1.15.x
3.2.x1.18.x - 1.15.x
3.1.x1.17.x - 1.14.x
3.0.x1.16.x - 1.13.x
2.16.x1.16.x - 1.15.x
2.15.x1.15.x - 1.14.x
2.14.x1.14.x - 1.13.x
2.13.x1.13.x - 1.12.x
2.12.x1.12.x - 1.11.x
2.11.x1.11.x - 1.10.x
2.10.x1.10.x - 1.9.x
2.9.x1.10.x - 1.9.x
2.8.x1.9.x - 1.8.x
2.7.x1.8.x - 1.7.x
2.6.x1.7.x - 1.6.x
2.5.x1.6.x - 1.5.x
2.4.x1.6.x - 1.5.x
2.3.x1.5.x - 1.4.x
2.2.x1.5.x - 1.4.x
2.1.x1.5.x - 1.4.x
2.0.x1.4.x - 1.3.x

下面我以下载Windows上使用的Helm v3.11.3版本为例。

  1. 打开Helm的下载页面,找到v3.11.3版本下载的部分。

  2. 在Installation and Upgrading部分,选择Windows环境使用的二进制安装包。

    image-20230512101723741

  3. 下载下来的是一个压缩包:helm-v3.11.3-windows-amd64.zip,压缩包里面的文件也很简单。

image-20230512102119589

Helm的安装

  1. 将安装包压缩到任意一个地方,例如我解压的位置为:E:\software\windows-amd64

  2. 将安装包解压的路径配置到环境变量中,并点击确定。

    image-20230512102523063

  3. 现在已经可以在命令行中使用helm的命令了。使用命令helm version可以显示helm的版本。

    image-20230512102640637

Helm内的概念解释

Chart

Chart是一个Helm包*。*它包含在Kubernetes集群内运行应用程序、工具或服务所需的所有资源定义。等同于Yum使用的RPM文件。

Repository

存储库是可以收集和共享Charts的地方。例如我们可以在Jfrog的Artifactory上创建一个Helm制品库,我们创建了Chart之后,可以将Chart推到这个Helm制品库中,以此共享给其他人。当然我们也可以从Helm制品库中下载Helm的Chart。

Release

Release是在 Kubernetes 集群中运行的Chart实例。一个图表通常可以多次安装到同一个集群中。每次安装时,都会创建一个新版本。

Helm的最简单实战

查看帮助信息

学习一个工具,最开始要学习的就是如何查看帮助信息。

helm -h

image-20230512132034171

创建一个Chart

创建一个Chart,可以使用如下命令:

helm create my-chart

返回

Creating my-chart

这样,我们就创建了一个名为my-chart的Chart。我们也可以看到,在当前目录中多了一个名为my-chart的目录。目录结构如下所示:

image-20230512140807430

  1. charts目录:该charts/目录可能包含其他图表(我们称之为subcharts)。
  2. templates目录:该templates/目录用于保存模板文件。当 Helm使用Chart创建实例时,它会通过模板渲染引擎发送templates/目录中的所有文件。然后它收集这些模板的结果并将它们发送到 Kubernetes。
  3. .helmignore文件:.helmignore 文件用来指定你不想包含在你的helm chart中的文件。
  4. Chart.yaml文件:该Chart.yaml文件包含chart的描述。可以从模板中访问它。
  5. values.yaml文件:该values.yaml文件对模板很重要。该文件包含chart的默认值。这些值可能会在helm installhelm upgrade期间被覆盖。

配置Repisotory

  1. 使用命令新增Repository配置

    helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
    

    输出:

    "aliyun" has been added to your repositories
    

    此时就新增了一个名为aliyun的Repository。

  2. 更新Repository信息

    helm repo update
    

    输出:

    Hang tight while we grab the latest from your chart repositories...
    ...Successfully got an update from the "aliyun" chart repository
    Update Complete. ⎈Happy Helming!⎈
    

推送Chart到Repository

创建了Chart文件之后,就可以推送到Repository之中。

  1. 新增有推送权限的Repository。

    helm repo add --username ****** --password ****** artifact_sr6-release-helm-local "https://xxx/helm/artifact-sr6/artifact_sr6-release-helm-local"
    

    输出:

    "artifact_sr6-release-helm-local" has been added to your repositories
    
  2. 将chart打包

    helm package my-chart
    

    输出:

    Successfully packaged chart and saved it to: D:\个人事项\xxx\xxx\5月\代码\my-chart-0.1.0.tgz
    
  3. 将chart推送到Repository。

    curl -F "chart=@my-chart-0.1.0.tgz" -u ******:****** https://xxx/helm/api/artifact-sr6/artifact_sr6-release-helm-local/charts
    

    输出:

    {
      "saved" : true
    }
    

    到此就已经将helm的chart推送到了Repository。

    image-20230512180620774

从Repository拉取Chart

  1. 使用命令下载并解压chart包。

    helm pull aliyun/mysql --untar
    

    发现当前目录下多了一个mysql的目录,目录里面的内容为:

    image-20230512211031974

    这便是一个名为mysql的chart包。

Helm的chart模版指南

内置对象

  • Release:此对象描述版本本身。它里面有几个对象:
    • Release.Name: 发布名称
    • Release.Namespace:要发布到的命名空间(如果清单没有覆盖)
    • Release.IsUpgrade:如果当前操作是升级或回滚,则设置为true
    • Release.IsInstall:如果当前操作是安装,则设置为true
    • Release.Revision:此版本的修订号。在安装时,这是 1,并且随着每次升级和回滚而递增。
    • Release.Service:呈现当前模板的服务。在 Helm 上,这始终是Helm.
  • Values:从values.yaml文件和用户提供的文件传递到模板的值。默认情况下,Values为空。
  • Chart: Chart.yaml文件的内容。Chart.yaml中的任何数据都可以在这里访问。例如{{ .Chart.Name }}-{{ .Chart.Version }},将打印出mychart-0.1.0.
  • Files:这提供了对chart中所有非特殊文件的访问。虽然不能使用它来访问模板,但可以使用它来访问chart中的其他文件。
    • Files.Get是按名称获取文件的函数 ( .Files.Get config.ini)
    • Files.GetBytes是一个将文件内容作为字节数组而不是字符串获取的函数。这对于图像之类的东西很有用。
    • Files.Glob是一个返回名称与给定 shell glob 模式匹配的文件列表的函数。
    • Files.Lines是一个逐行读取文件的函数。这对于遍历文件中的每一行很有用。
    • Files.AsSecrets是一个将文件主体作为 Base 64 编码字符串返回的函数。
    • Files.AsConfig是一个将文件主体作为 YAML 映射返回的函数。
  • Capabilities:这提供了有关 Kubernetes 集群支持哪些功能的信息。
    • Capabilities.APIVersions是一组版本。
    • Capabilities.APIVersions.Has $version指示版本(例如, batch/v1)或资源(例如,apps/v1/Deployment)在集群上是否可用。
    • Capabilities.KubeVersion并且Capabilities.KubeVersion.Version是 Kubernetes 版本。
    • Capabilities.KubeVersion.Major是 Kubernetes 的主要版本。
    • Capabilities.KubeVersion.Minor是 Kubernetes 次要版本。
    • Capabilities.HelmVersion是包含 Helm 版本详细信息的对象,它是相同的输出helm version
    • Capabilities.HelmVersion.Version是 semver 格式的当前 Helm 版本。
    • Capabilities.HelmVersion.GitCommit是 Helm git sha1。
    • Capabilities.HelmVersion.GitTreeState是 Helm git 树的状态。
    • Capabilities.HelmVersion.GoVersion是使用的 Go 编译器的版本。
  • Template: 包含有关当前正在执行的模板的信息
    • Template.Name:当前模板的命名空间文件路径(例如 mychart/templates/mytemplate.yaml
    • Template.BasePath:当前图表模板目录的命名空间路径(例如mychart/templates)。

Capabilities.HelmVersion.GitTreeState是 Helm git 树的状态。

  • Capabilities.HelmVersion.GoVersion是使用的 Go 编译器的版本。
  • Template: 包含有关当前正在执行的模板的信息
    • Template.Name:当前模板的命名空间文件路径(例如 mychart/templates/mytemplate.yaml
    • Template.BasePath:当前图表模板目录的命名空间路径(例如mychart/templates)。

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

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

相关文章

第十二届蓝桥杯青少组省赛Python真题,包含答案

目录 一、选择题 二、编程题 第十二届蓝桥杯青少组省赛Python真题 一、选择题 第 1 题 单选题 设s="Hello Lan Qiao,执行print(s[4:11])输出的结果为 () 答案:D 第 2 题 单选题 循环语句for iin range (8,4,2) : 执行了几次循环 ()

进腾讯了,38k....

大家好,最近有一位老同学成功去了腾讯,特意找他要了一些面试相关的资料,内容涵盖测试理论、Linux基础、MySQL基础、Web测试、接口测试、App测试、管理工具、Python基础、Selenium相关、性能测试、LordRunner相关等质量非常高!&…

SM2椭圆曲线公钥密码算法--密钥对与数字签名

1. SM2国密算法介绍 SM2算法全称是SM2椭圆曲线公钥密码算法(SM是商用密码的拼音缩写),是一种基于“椭圆曲线”的密码ECC(Elliptic Curve Cryptography)。2016年,SM2成为中国国家密码标准。 在商用密码体系中,SM2主要用…

超详细,多图 PVE 安装 OpenWRT 教程(个人记录)

前言 - 写这个的目的是因为本人健忘所以做个记录以便日后再折腾时查阅。 - 本人笔拙如有选词,错字,语法,标点错误请忽视,大概率不会修改,我自己能看懂就好。 - 内容仅适用于本人的使用环境,不同环境请忽…

Java --- redis7之布隆过滤器BloomFilter

目录 一、布隆过滤器BloomFilter 1.1、面试题 1.2、 布隆过滤器简介 1.2.1、设计思想 1.3、特点 1.4、布隆过滤器原理 1.4.1、实现原理与数据结构 1.4.2、添加key、查询key 1.4.3、hash冲突导致数据不精准 1.4.4、三步骤 1.4.5、布隆过滤器误判,为什么不…

使用ncnn在树莓派4B上部署nanoDet-m网络(12fps)

1. 背景 在机器人的应用中,目标检测是一个重要的课题。深度学习的快速发展,在检测的效果方面对比大多数传统检测算法,都有明显的优势。但是将深度学习模型部署到端侧设备上,实现高效的推理,同样是一个问题很多的领域。…

1099 Build A Binary Search Tree(超详细注解+38行代码)

分数 30 全屏浏览题目 作者 CHEN, Yue 单位 浙江大学 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the nodes key.The right subtree…

Word+ChatGPT,一分钟完成周报总结作文

大家好,我是可夫小子,关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加:keeepdance,备注:chatgpt,拉你进群。 Office 的办公软件Word,是我们日常的文字工作的阵地。与ChatGPT的文字生成…

自学黑客【网络安全】,一般人我劝你还是算了吧

一、自学网络安全学习的误区和陷阱 1.不要试图先成为一名程序员(以编程为基础的学习)再开始学习 我一直强调不要以编程为基础再开始学习网络安全,一般来说,学习编程不但学习周期长,而且实际向安全过渡后可用到的关键…

6 # 实现简单的 promise

什么是 Promise ? 在 JavaScript 中,Promise 是一种用于处理异步操作的对象,它可以更加优雅地处理回调函数嵌套和错误处理。 promise es6已经内部实现了, ie 不兼容 promise,需要 polyfill (比如&#xf…

C++学习记录——이십이 红黑树

文章目录 1、了解概念2、模拟实现1、插入2、插入代码3、测试是否是红黑树 3、封装map、set 1、了解概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结…

Dcip的学习1-计算器

文章目录 前言一、配置安装环境1.1 网址1.2 再次打开需要进行的操作1.3 NodeJS控制台的操作1.4 出现的页面 二、Dcip生成计算器2.1 软件的基本单位 - Unitform中添加内容 2.2 OnleftChange(); 前言 只是为方便学习,不做其他用途, 一、配置安装环境 1.1 …

Jetpack之Navigation技术解密

Navigation是什么 官方的话: Navigation 是一个框架,用于在 Android 应用中的“目标”之间导航,该框架提供一致的 API,无论目标是作为 Fragment、Activity 还是其他组件实现。 自己的话: Navigation是管理Fragment…

win11、VS2019下配置PCL1.11.1

1、PCL安装配置 下载pcl-1.11.1-pdb-msvc2019-win64与PCL-1.11.1-AllInOne-msvc2019-win64.exe文件。以管理员身份运行PCL-1.11.1-AllInOne-msvc2019-win64.exe程序,截图如下: 安装过程中没有弹出OpenNI2的安装,但是要安装在3rdParty下&#…

MySQL空间查询

MySQL空间查询 文章目录 MySQL空间查询1. 空间数据支持2. 空间函数支持3. 操作示例3.1 创建表结构3.2 插入数据3.3 查询空间相交数据 4. 参考链接 1. 空间数据支持 MySQL 具有对应于 OpenGIS 类的空间数据类型。一些空间数据类型包含单个几何值: GEOMETRYPOINTLIN…

PCS-2022-VVC中帧内和帧间预测的统一快速划分算法

本文来自PCS 2022的论文《Unified Fast Partitioning Algorithm for Intra and Inter Predictions in Versatile Video Coding》 介绍 VVC (Versatile Video Coding) 标准采用了比HEVC (High Efficiency Video Coding) 标准更灵活的划分结构,在HEVC的四叉树划分结构…

前端CSS经典面试题总结

前端CSS经典面试题总结 2.1 介绍一 下 CSS 的盒子模型?2.2 css 选择器优先级?2.3 垂直居中几种方式?2.4 简明说一下 CSS link 与 import 的区别和用法?2.5 rgba和opacity的透明效果有什么不同?2.6 display:none和visib…

在大模型的喧嚣中,SAS向企业AI押注70亿

ChatGPT和GPT所代表的大模型,已经在国内形成了海啸效应,几乎所有顶级科技企业都在想方设法进入大模型赛道。大模型的最大价值在于普遍提升个人生产力,而各行各业的公司都在积极寻找应用大模型和生成式AI的机会,以普遍提升全员生产…

IntelliJ IDEA 安装及配置详细教程

IDEAIntelliJ IDEA 安装及配置详细教程 1、下载2、安装3、IDEA使用设置3.1 进入设置界面3.2 JDK配置3.3 主题样式设置3.4 字体样式设置3.5 编辑器背景颜色设置3.6 字符集和配置文件编码格式设置3.7 设置鼠标悬浮提示 4、idea配置maven5、idea创建springboot工程 IntelliJ IDEA …

MYSQL02高级_目录结构、默认数据库、表文件、系统独立表空间

文章目录 ①. MySQL目录结构②. 查看默认数据库③. MYSQL5.7和8表文件③. 系统、独立表空间 ①. MySQL目录结构 ①. 如何查看关联mysql目录 [rootmysql8 ~]# find / -name mysql /var/lib/mysql /var/lib/mysql/mysql /etc/selinux/targeted/tmp/modules/100/mysql /etc/seli…