一篇文章让你学会K8s软件安装神器Helm

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 下平时OS安装软件时为什么需要yum安装你可以类比到在k8s中安装 软件为什么需要helm。

helm概述


为什么需要helm?


下平时OS安装软件时为什么需要yum安装你可以类比到在k8s中安装 软件为什么需要helm。


看一下官方slogan


Helm is the best way to find, share, and use software built for Kubernetes.

如果一个40多个微服务的超大型应用,每个服务又包含了多个Kubernetes资源,比如 Service、Deployment、StatefulSet、ConfigMap等。相同的应用又要部署在不同的环境中,例如


  • 测试环境
  • 预发环境
  • 生产环境


每个环境应用的配置也不同。


如果基于YAML文件一个一个地部署Kubernetes资源,是非常繁琐、低效的,而且这些YAML文件维护起来极其复杂,还容易出错。

ffd08d6af77845fd85130e2c725da212.png

helm是什么?


Helm是Kubernetes的包管理器,类似于Python的 pip ,centos的 yum 。Helm主要用来管理Chart包。Helm Chart包中包含一系列YAML格式的Kubernetes资源定义文件,以及这些资源的配置,可以通过Helm Chart包来整体维护这些资源。


Helm也提供了一个helm命令行工具,该工具可以基于Chart包一键创建应用,在创建应用时,可以自定义Chart配置。应用发布者可以通过Helm打包应用、管理应用依赖关系、管理应用版本,并发布应用到软件仓库;

helm对运维k8s的意义


使用Helm后不需要编写复杂的应用部署文件,可以非常方便地在Kubernetes上查找、安装、升级、回滚、卸载应用程序

helm3的新变化


Helm最新的版本是v3,Helm3以Helm2的核心功能为基础,对Chart repo、发行版管理、安全性和library Charts进行了改进。和Helm2比起来,Helm3最明显的变化是删除了Tiller(Helm2 是一种 Client-Server 结构,客户端称为 Helm,服务器称为 Tiller)。Helm3还新增了一些功能,并废弃或重构了Helm2的部分功能,与Helm2不再兼容。此外,Helm3还引入了一些新的实验功能,包括OCI支持。

d2fdada3a8054c68bebea165e675a241.png

helm的核心是Helm Client(helm命令)和Helm Chart包。


helm命令可以从Chart Repository中下载Helm Chart包,读取kubeconfig文件,并构建kube-apiserver REST API接口的HTTP请求。通过调用Kubernetes提供的REST API接口,将Chart包中包含的所有以YAML格式定义的Kubernetes资源,在Kubernetes集群中创建。


这些资源以Release的形式存在于Kubernetes集群中,每个Release又包含多个Kubernetes资源,例如Deployment、Pod、Service等


Helm中的三大基本概念


要学习和使用Helm,一定要了解Helm中的三大基本概念,Helm的所有操作基本都是围绕着这些概念来进行的。

Chart: 代表一个Helm包。它包含了在Kubernetes集群中运行应用程序、工具或服务所需的所有YAML格式的资源定义文件。

Repository(仓库): 它是用来存放和共享 Helm Chart的地方,类似于存放源码的GitHub的Repository,以及存放镜像的Docker的Repository。

**Release:**它是运行在 Kubernetes 集群中的 Chart 的实例。一个Chart通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 Release。

helm是如何生成最终执行的yaml文件


模板文件和配置文件。模板文件通常有多个,配置文件通常有一个。Helm的模板文件基于text/template模板文件,提供了更加强大的模板渲染能力。Helm可以将配置文件中的值渲染进模板文件中,最终生成一个可以部署的Kubernetes YAML格式的资源定义文件,如下图所示:

09aa1121472542db80c67548677aa450.png

helm 部署一个应用可以简化为Chart模板(多个服务) + Chart配置 -> 应用


Chart模板一个应用只用编写一次,可以重复使用。在部署时,可以指定不同的配置,从而将应用部署在不同的环境中,或者在同一环境中部署不同配置的应用。

f87407c37430454fad7c28796a1d1e5c.png

Helm快速入门


类似于用来托管Docker镜像的DockerHub、用来托管代码的GitHub,Chart包也有一个托管平台,当前比较流行的Chart包托管平台是


Artifact Hub


添加BitNami Chart仓库

helm repo add bitnami https://charts.bitnami.com/bitnami # 添加 Chart Repository

helm repo add bitnami https://charts.bitnami.com/bitnami # 添加 Chart Repository
⚡ root@ninesun  ~  helm repo list
NAME            URL
bitnami         https://charts.bitnami.com/bitnami

helm search


helm search repo<keyword>:从你使用 helm repo add 添加到本地 Helm 客户端中的仓库里查找。该命令基于本地数据进行搜索,无需连接外网。

helm search hub<keyword>:从 Artifact Hub 中查找并列出 Helm Charts。 Artifact Hub中存放了大量的仓库。

 ⚡ root@ninesun  ~  helm search repo zookeeper
NAME                            CHART VERSION   APP VERSION     DESCRIPTION
bitnami/zookeeper               10.0.7          3.8.0           Apache ZooKeeper provides a reliable, centraliz...
bitnami/dataplatform-bp1        12.0.2          1.0.1           DEPRECATED This Helm chart can be used for the ...
bitnami/dataplatform-bp2        12.0.5          1.0.1           DEPRECATED This Helm chart can be used for the ...
bitnami/kafka                   18.0.8          3.2.1           Apache Kafka is a distributed streaming platfor...
bitnami/schema-registry         4.0.4           7.1.3           Confluent Schema Registry provides a RESTful in...
bitnami/solr                    6.0.7           9.0.0           Apache Solr is an extremely powerful, open sour...

helm install


helm install支持从多种源进行安装:


Chart的Repository。

本地的Chart Archive,例如helm install foo foo-1.0.0.tgz。

一个未打包的Chart路径,例如helm install foo path/to/foo。

一个完整的URL,例如helm install foo https://example.com/charts/foo-1.0.0.tgz

helm install bitnami/mysql --generate-name


创建了一个mysql-1629528555 Release。--generate-name参数告诉Helm自动为这个Release命名。

helm status


追踪Release 的状态


每次执行 helm install 的时候,都会创建一个新的发布版本。所以一个Chart在同一个集群里面可以被安装多次,每一个都可以被独立地管理和升级。

helm list


列出了Release的更新时间、状态、Chart的版本

[root@master2 /opt/helm/kafka]#helm list -n kafka
NAME      NAMESPACE REVISION  UPDATED                                 STATUS    CHART             APP VERSION
kafka     kafka     1         2022-08-12 14:58:25.087957636 +0800 CST deployed  kafka-18.0.8      3.2.1      
zookeeper kafka     1         2022-08-12 14:06:02.24625396 +0800 CST  deployed  zookeeper-10.0.7  3.8.0  

helm upgrade


helm upgrade命令来升级应用。升级操作会基于已有的Release,根据提供的信息进行升级。Helm在更新时,只会变更有更改的内容

helm upgrade mysql-1629528555 bitnami/mysql --set auth.rootPassword='iam59!z$'

mysql-1629528555 这个 Release 使用相同的 Chart 进行升级,使用了一个新的rootPassword配置

helm get value 查看设定的内容


[root@master2 /opt/helm/kafka]#helm get values kafka -n kafka
USER-SUPPLIED VALUES:
externalZookeeper:
  servers: zookeeper
replicaCount: 3
zookeeper:
  enabled: false

helm rollback


假如发布失败,通过 helm rollback [RELEASE] [REVISION] 命令,回滚到之前的发布版本。

helm rollback mysql-1629528555 1

Release 版本其实是一个增量修订(revision)。 每当发生了一次安装、升级或回滚操作,revision 的值就会加1。第一次 revision 的值永远是1。

helm history


[root@master2 /opt/helm/kafka]#helm history kafka -n kafka
REVISION  UPDATED                   STATUS    CHART         APP VERSION DESCRIPTION     
1         Fri Aug 12 14:58:25 2022  deployed  kafka-18.0.8  3.2.1       Install complete

helm uninstall


helm  uninstall mysql-1629528555

从Kubernetes卸载 mysql-1629528555, 它将删除和该版本关联的所有资源(Service、Deployment、Pod、ConfigMap等),包括该Release的所有版本历史。


--keep-history 选项Helm将会保存版本历史, 通过helm status命令查看

其他参数


--timeout:一个 Go duration 类型的值,用来表示等待 Kubernetes 命令完成的超时时间,默认值为 5m0s。

--no-hooks:不运行当前命令的钩子。

--wait:表示必须要等到所有的 Pods 都处于 ready 状态、PVC 都被绑定、Deployments处在 ready 状态的Pods 个数达到最小值(Desired减去 maxUnavailable),才会标记该 Release 为成功。最长等待时间由 --timeout 值指定。如果达到超时时间,Release 将被标记为 FAILED。

helm命令参考


helm get -h

25307917382f4529b95d6f37dd280a33.png

Helm | 使用Helm

helm安装时两种传递配置数据的方式


-f, --values:使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件。
--set:通过命令行的方式对指定配置项进行覆盖。

--set 中的值优先级更高。在--set中覆盖的内容会被保存在 ConfigMap 中。你可以通过 helm get values <release-name> 来查看指定 Release 中 --set 设置的值,也可以通过运行 helm upgrade 并指定 --reset-values 字段,来清除 --set中设置的值。

helm 安装提示信息的重要性


Helm 客户端会打印一些有用的信息,包括哪些资源已经被创建,Release当前的状态,以及你是否还需要执行额外的配置步骤。在安装kafka时踩得坑.

安装helm


文件下载


链接:https://pan.baidu.com/s/1K1IzPjygF4-lepAA-7O2uA 
提取码:y30k 
--来自百度网盘超级会员V4的分享

安装helm


没有网络的情况下使用 helm pull 从有网络的机器上执行并copy内网。

helm pull bitnami/kafka

helm pull bitnami/zookeeper --untar

–untar 参数会直接加压出来

tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm

参考: https://helm.sh/zh/docs/intro/install/


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
运维
计算巢如何使用fluxcd在ack部署helm chart
为支持helm服务运维管理功能,现在改用fluxcd的方式进行helm chart部署,这里计算巢对fluxcd进行部署helm chart的过程进行了封装,封装成了ROS公共模块MODULE::ACS::ComputeNest::FluxOciHelmDeploy,下面将主要介绍下怎么使用这个模块在计算巢中进行Helm Chart的部署。
36 3
|
3月前
|
存储 Kubernetes 容器
百度搜索:蓝易云【Kubernetes使用helm部署NFS Provisioner】
现在,你已经成功使用Helm部署了NFS Provisioner,并且可以在Kubernetes中创建使用NFS存储的PersistentVolumeClaim。
44 10
|
3月前
|
Kubernetes 网络协议 数据安全/隐私保护
WireGuard 系列文章(八):基于 WireGuard 的 K8S CNI Kilo 简介
WireGuard 系列文章(八):基于 WireGuard 的 K8S CNI Kilo 简介
|
7月前
|
Kubernetes 应用服务中间件 Linux
helm安装和使用-通过helm部署k8s应用
helm安装和使用-通过helm部署k8s应用
|
7月前
|
存储 Kubernetes API
【K8S系列】第十一讲:包管理神器-Helm
【K8S系列】第十一讲:包管理神器-Helm
107 0
|
7月前
|
Kubernetes 应用服务中间件 API
kubernetes系列文章第二篇-kubectl
kubernetes系列文章第二篇-kubectl
|
2月前
|
存储 Kubernetes 分布式数据库
利用Helm在K8S上部署 PolarDB-X 集群(详细步骤--亲测!!!)
利用Helm在K8S上部署 PolarDB-X 集群(详细步骤--亲测!!!)
107 0
|
7月前
|
存储 Kubernetes 微服务
kubernetes简介-这是一篇学习k8s必看的文章
kubernetes简介-这是一篇学习k8s必看的文章
|
3月前
|
存储 Kubernetes 容灾
Velero 系列文章(五):基于 Velero 的 Kubernetes 集群备份容灾生产最佳实践
Velero 系列文章(五):基于 Velero 的 Kubernetes 集群备份容灾生产最佳实践
|
3月前
|
JSON Kubernetes 数据格式
Grafana 系列文章(十三):如何用 Loki 收集查看 Kubernetes Events
Grafana 系列文章(十三):如何用 Loki 收集查看 Kubernetes Events