告别YAML烦恼,Helm让你一键管理Kubernetes应用

目录

一、什么是Helm

二、Helm的三个重要概念

三、Helm的主要特点

3.1、简化部署流程  

3.2、模板化配置 

3.3、参数化部署 

3.4、版本控制和回滚 

3.5、依赖管理 

3.6、社区支持  

3.7、与Kubernetes 的集成 

3.8、包存储和管理  

3.9、安全性和维护  

四、Helm3 与 Helm2 的区别 

五、Helm安装和使用 

5.1、下载二进制 Helm client 安装包  

5.2、添加常用chart仓库

5.3、更新chart仓库

5.4、查看仓库可用chart列表

5.5、删除chart仓库

5.6、搜索特定的chart

5.7、查看chart信息

5.8、安装 chart

5.9、查看所有 release

5.10、查看指定的release状态

5.11、删除指定的 release

六、Helm自定义模版

6.1、拉取chart

6.2、查看chart结构

6.3、创建自定义chart

6.4、打包chart和部署chart

6.5、升级chart

6.6、回滚chart

七、Helm仓库

7.1、搭建Harbor仓库

7.2、在Harbor上新建一个项目

7.3、推送chart到Harbor上

7.4、查看Harbor上到chart

7.5、Artifacthub仓库


一、什么是Helm

Helm 是 Kubernetes 的一个包管理工具,它用来帮助管理 Kubernetes 应用的部署和配置。Helm 使用"charts"来封装一个应用的所有必要的资源,包括部署、服务、配置文件等。这些 charts 可以被版本控制,并且可以被分享和重用。

在没使用Helm之前,我们在Kubernetes上部署应用要依次部署deployment、service、configmap等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制,很大程度上简化了 Kubernetes 应用的部署和管理。

Helm 本质就是让 K8s 的应用管理(Deployment、Service 等)可配置,可以通过类似于传递环境变量的方式能动态生成资源清单文件。然后调用 Kubectl 自动执行 K8s 资源部署。

二、Helm的三个重要概念

Helm 有三个重要的概念:Chart 、Repository 和 Release

Chart:

Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。

Repository:

Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository

Release:

使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。可以理解为 Helm 使用 Chart 包部署的一个应用实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release   

三、Helm的主要特点

3.1、简化部署流程  

在没有使用 Helm 之前,部署到 Kubernetes 的应用通常需要手动创建多个资源配置文件,如 Deployment、Service、ConfigMap、Secrets 等。而 Helm 通过将这些资源封装在一个 chart 中,简化了部署流程。

3.2、模板化配置 

Helm 使用模板(通常是 YAML 文件),这些模板可以使用 Go 模板语言进行配置,允许用户传递参数来生成特定的 Kubernetes 资源配置文件。

3.3、参数化部署 

用户可以通过在部署时指定不同的参数值来实现环境的隔离和配置的差异化,这在多环境部署中非常有用。   

3.4、版本控制和回滚 

Helm 允许用户对发布的应用进行版本控制,并且可以轻松回滚到之前的版本。这是通过 Helm 的 release 系统来实现的。

3.5、依赖管理 

Helm charts 可以有依赖项,这些依赖也会自动被安装和管理,这对于复杂的服务依赖关系非常有用。

3.6、社区支持  

Helm 社区非常活跃,提供了一个名为 Helm Hub 的平台,上面有大量的 charts 供用户使用。

3.7、与Kubernetes 的集成 

Helm 虽然不是 Kubernetes 官方直接提供的,但它与 Kubernetes 的集成非常紧密,可以通过 `kubectl` 命令行工具与 Kubernetes 集群进行交互。

3.8、包存储和管理  

Helm charts 可以存储在 Helm 仓库中,类似于软件包的存储库,可以被搜索、下载和管理。

3.9、安全性和维护  

由于 Helm 的广泛使用,大量的安全实践和最佳实践已经形成,可以帮助用户安全地部署和管理 Kubernetes 应用。   

Helm 通过上述方式,确实为 Kubernetes 用户提供了一种强大的工具,使得应用的部署和管理更加自动化和标准化。

四、Helm3 与 Helm2 的区别 

Helm2 是 C/S 架构,主要分为客户端 helm 和服务端 Tiller。在 Helm 2 中,Tiller 是作为一个 Deployment 部署在 kube-system 命名空间中,很多情况下,我们会为 Tiller 准备一个 ServiceAccount ,这个 ServiceAccount 通常拥有集群的所有权限。用户可以使用本地 Helm 命令,自由地连接到 Tiller 中并通过 Tiller 创建、修改、删除任意命名空间下的任意资源。

在 Helm 3 中,Tiller 被移除了。新的 Helm 客户端会像 kubectl 命令一样,读取本地的 kubeconfig 文件,使用我们在 kubeconfig 中预先定义好的权限来进行一系列操作。

heml3的兼容性更好,一般使用helm3

五、Helm安装和使用 

5.1、下载二进制 Helm client 安装包  

从github上搜索helm二进制包,卸载对应版本


~$ tar zxvf  helm-v3.15.3-linux-amd64.tar.gz
~$ mv linux-amd64/helm /usr/local/bin/helm
~$ helm version

5.2、添加常用chart仓库

​
~$ helm repo add stable http://mirror.azure.cn/kubernetes/charts

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

~$ helm repo add incubator Helm Incubator | charts

​

5.3、更新chart仓库

helm repo update

helm repo list

5.4、查看仓库可用chart列表

helm search repo stable

5.5、删除chart仓库

helm repo remove incubator

helm repo remove aliyun  #清除aliyun

5.6、搜索特定的chart

helm search repo mysql

helm search repo redis

5.7、查看chart信息

查看指定 chart 的基本信息

helm show chart stable/mysql

获取指定 chart 的所有信息

helm show all stable/mysql

5.8、安装 chart

~$ helm install my-redis redis [-n default]   #指定 release 的名字为 my-redis,-n 指定部署到 k8s 的 namespace
~$ helm install bitnami/redis --generate-name    #不指定 release 的名字时,需使用 –generate-name 随机生成一个名字

5.9、查看所有 release

~$ helm ls -n NAMESPACE
~$ helm list -n NAMESPACE

5.10、查看指定的release状态

~$ helm status my-redis 

5.11、删除指定的 release

~$ helm uninstall my-redis

六、Helm自定义模版

Helm Chart 是 Helm 用来部署 Kubernetes 应用的包。一个 Chart 包含一系列的 Kubernetes 资源定义文件(YAML 格式),以及一个描述 Chart 的 Chart.yaml 文件和一个用于配置的 values.yaml 文件。自定义 Helm Chart 允许根据具体需求来创建和部署 Kubernetes 应用。charts 除了可以在 repo 中下载,还可以自己自定义,创建完成后通过 helm 部署到 k8s。

6.1、拉取chart

6.2、查看chart结构

可以看到,一个 chart 包就是一个文件夹的集合,文件夹名称就是 chart 包的名称。

#chart 是包含至少三项内容:

软件包自描述文件 Chart.yaml,这个文件必须有 name 和 version(chart版本) 的定义

一个或多个模板,其中包含 Kubernetes 清单文件

一个values.yaml文件,定义一些变量的默认值

6.3、创建自定义chart

6.4、打包chart和部署chart

~$ helm lint nginx                  #检查依赖和模版配置是否正确
~$ helm package nginx               #打包 chart,会在当前目录下生成压缩包 nginx-0.1.0.tgz

6.5、升级chart

#例如,要将 Nginx chart 的镜像标签升级到 1.16.0,可以使用以下命令

~$ helm upgrade nginx nginx --set image.tag='1.16.0'

#这个命令会更新 Nginx chart 的镜像标签,而无需修改 values.yaml 文件。这种快捷方式在需要快速更改配置或在没有访问 values.yaml 文件的情况下非常有用。

6.6、回滚chart

~$ helm history my-nginx              #查看 release 版本历史

~$ helm rollback my-nginx 1           #回滚 release 到版本1

 

#使用 helm rollback 命令加上 release 名称和要回滚到的版本号来执行回滚操作。

helm history my-nginx

#执行回滚后,可以再次使用 helm history 命令确认 release 是否已经成功回滚到指定版本

#通常情况下,在配置好 templates 目录下的 kubernetes 清单文件后,后续维护一般只需要修改 Chart.yaml 和 values.yaml 即可。

  • Chart.yaml:更新 chart 的元数据,如版本号、描述等。
  • values.yaml:调整或添加配置参数,这些参数将应用于模板中,以定制 Kubernetes 资源的行为。

七、Helm仓库

7.1、搭建Harbor仓库

使用之前文章【docker基础】使用Harbor搭建私有仓库-docker-compose使用示例_harbor docker-compose-CSDN博客搭建到Harbor仓库

7.2、在Harbor上新建一个项目

在Harbor上创建一个公开仓库repo,提示helm推送命令

7.3、推送chart到Harbor上

7.4、查看Harbor上到chart

复制拉取命令

7.5、Artifacthub仓库

上面介绍了自己搭建到helm仓库的使用,如果需要使用一些通用的chart,可以通过artifacthub.io查询获取,Artifact Hub 是一个开源的云原生包仓库,用于存储、发现和管理 Kubernetes 包,也就是所谓的 "artifacts"。它提供了一个集中的平台,供开发者和团队分享、使用和管理 Helm 图表、OPA 约束、CUE 模块等云原生应用的组件。

Artifact Hub上存储着很多成功的项目,每个项目的chart都是写好的并经过多人测试使用的程序包,每个chart都有详细的部署指导,参数说明,可根据部署指导一键部署想要的项目。

例如:

MySQL的部署指导:

参数说明:

简单一条命令即可完成一个应用的部署。


欢迎关注作者的公众号,公众号每天分享运维干货文章

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值