最简单的helm教程

最简单的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)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值