Kubernetes包管理器:Helm详解

科技   2024-11-02 09:45   广东  

 码字不易,戳下方名片,关注+星标


1 Helm基本概念

1.1 什么是helm

Helm看作Kubernetes下的apt-get/yum。Helm是kubernetes的包管理器,用于简化 Kubernetes 应用程序的安装和管理。它允许用户将应用及其相关资源打包成一个可重用的单元——Chart。借助 Helm,用户可以通过简单的命令轻松部署、升级、配置和管理复杂的 Kubernetes 应用。

helm仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像仓库来提供,比如hub.docker.com、私有仓库。

1.2 Helm架构原理

Helm 的架构主要由以下几个部分组成:

1.2.1 客户端

Helm CLI 是用户与 Helm 交互的工具。用户通过命令行与 Helm 进行操作,如安装、升级和管理应用。Helm CLI 将用户的请求转换为 Kubernetes API 的调用。

1.2.2 服务端

Tiller(在 Helm 2 中):Tiller 是 Helm 2 的服务端组件,负责处理来自 Helm CLI 的请求,管理 Release 状态。Tiller 会在 Kubernetes 集群中运行,并维护 Release 的信息。

无 Tiller(在 Helm 3 中):从 Helm 3 开始,Tiller 被移除,Helm CLI 直接与 Kubernetes API 交互。这种设计提高了安全性,简化了架构,减少了配置和管理的复杂性。

1.2.3 Chart

Chart 是 Helm 的核心概念,是一个定义了 Kubernetes 应用的打包格式。一个 Chart 包含以下内容:

  • Chart.yaml:定义 Chart 的基本信息,包括名称、版本、描述等。

  • templates/ 目录:包含 Kubernetes 资源的模板文件,如 Deployment、Service、ConfigMap 等。

  • values.yaml:定义 Chart 中使用的默认值,这些值可以在安装时被覆盖。

1.2.4 Release

Release 是 Helm 中 Chart 的一个具体实例。当用户安装一个 Chart 时,Helm 会创建一个 Release,每个 Release 都有唯一的名称和版本。用户可以独立管理每个 Release,包括升级和回滚操作。

1.2.5 Repository

Chart 仓库用于存储和分发 Helm Charts。用户可以从公共或私有仓库中获取 Charts。Helm 支持多个 Chart 仓库,用户可以根据需要添加、删除或更新这些仓库。

2 Helm安装部署

2.1 安装Helm

Helm 可以通过多种方式进行安装,可以参考官方文档:https://helm.sh/zh/docs/intro/install/

最简单的安装方式是通过官方提供的安装脚本,适用于大多数系统:

# 安装chart
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

# 查看版本
helm version

该脚本会自动检测操作系统,并下载并安装最新版本的 Helm。

2.2 配置chart仓库

(1)添加官方仓库

可以通过以下命令添加官方的 stable 仓库:

[root@k8s-master ~]helm repo add stable https://charts.helm.sh/stable
"stable" has been added to your repositories

(2)更新仓库

添加仓库后,使用以下命令更新本地缓存的仓库信息,以获取最新的 Charts 列表:

helm repo update

(3)添加其他仓库

# 添加格式
helm repo add <repo-name> <repo-url>

# 添加阿里云chart存储库
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 

# 添加 Bitnami Charts 存储库
 helm repo add bitnami https://charts.bitnami.com/bitnami
 
# 更新存储库

(4)查看已添加的仓库

可以使用以下命令查看已添加的仓库列表:

[root@k8s-master ~]helm repo list
NAME   URL                                                   
stable https://charts.helm.sh/stable                         
aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

该命令会列出所有已配置的仓库及其 URL。

(5)查看仓库里面所有的包

[root@k8s-master ~]helm search repo aliyun
NAME                           CHART VERSION APP VERSION   DESCRIPTION                                       
aliyun/acs-engine-autoscaler   2.1.3         2.1.1         Scales worker nodes within agent pools            
aliyun/aerospike               0.1.7         v3.14.1.2     A Helm chart for Aerospike in Kubernetes
....

(6)删除chart仓库

[root@k8s-master ~]helm repo remove aliyun
"aliyun" has been removed from your repositories

3 Helm基础使用

常用命令

3.1 安装应用

语法格式:

helm install <release-name> <chart-name>

例如,安装一个MySQL应用:

# 查看chart是否有MySQL
[root@k8s-master ~]helm search repo stable |grep mysql


# 安装MySQL
helm install mysql aliyun/mysql

# 查看pod状态
[root@k8s-master ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS        AGE
mysql-864489f4bf-p5f88   0/1     Pending   0               9m46s

# 查看到是失败的

注意:从stable直接下载的MySQL是默认使用pv存储卷,如果你没有存储卷的话是会失败的。

修改chart.yaml文件

# 先将chart.yaml文件下载
helm show values stable/mysql > values.yaml

# 修改persistence中enabled改为false,表示不适用存储卷
vi chart.yaml
...
## Persist data to a persistent volume
persistence:
  enabled: false
  
...

再次helm install进行安装,这里由于修改了values,所以通过-f指定了本地的values.yaml文件

# 先将刚才部署的删除
[root@k8s-master ~]# helm uninstall mysql
release "mysql" uninstalled

# 再次安装MySQL
[root@k8s-master ~]helm install mysql -f values.yaml stable/mysql

查看Release和pod状态

# 查看所有已安装的Release
[root@k8s-master ~]helm list

# 查看pod状态
[root@k8s-master ~]kubectl get pod

3.2 查看已安装的Release

h[root@k8s-master ~]helm list
NAME  NAMESPACE REVISION UPDATED                                 STATUS   CHART       APP VERSION
mysql default   1        2024-11-02 09:09:41.074126912 +0800 CST deployed mysql-1.6.9 5.7.30     

此命令会显示每个 Release 的名称、命名空间、版本、状态、更新时间等信息。

3.3 升级应用

要对已安装的应用进行升级,可以使用:

helm upgrade <release-name> <chart-name>

例如,升级 nginx 应用:

helm upgrade my-nginx stable/nginx

用户还可以通过 --set 参数直接在命令中覆盖配置。例如:

helm upgrade my-nginx stable/nginx --set service.type=LoadBalancer

3.4 回滚到先前版本

Helm 允许用户轻松回滚到之前的 Release 版本。使用以下命令:

helm rollback <release-name> <revision>

例如,回滚到上一个版本:

helm rollback my-nginx 1

可以使用 helm history <release-name> 查看 Release 的历史记录和版本,确认要回滚的版本号。

3.5 删除Release

要删除一个已安装的 Release,可以使用:

helm uninstall <release-name>

例如,删除 nginx 应用:

helm uninstall my-nginx

该命令会删除 Release 并清理与之关联的 Kubernetes 资源。

3.6 使用 Values 文件

使用 values.yaml 文件可以更灵活地配置 Chart。在安装或升级时,可以通过 -f 参数指定自定义的 Values 文件:

# 安装
helm install my-nginx stable/nginx -f custom-values.yaml

# 升级
helm upgrade my-nginx stable/nginx -f custom-values.yaml

今天分享先到这里。在日常运维中还用到Helm自定义安装,后续文章进行更新。


往期精彩文章

Linux上有趣的8个命令,你玩过几个?

万字长文:K8S命令详解汇总【自用珍藏版】

手把手教你搭建企业级Harbor镜像仓库

【Docker系列知识】常用命令大全汇总

局域网内构建统一可访问的YUM源(基础运维必备技能)

Linux文件处理三剑客详解(运维高手必备)

Nginx配置文件详解及常用功能配置(实用率90%)

运维李哥不背锅
专注于各种运维技术、,分享Linux基础知识,服务器,数据库,云原生和网络安全等相关技术,各种进阶知识等着你,助你成为技术达人!
 最新文章