目录

1 helm简介

2 部署helm

2.1 官网与软件资源

2.2 部署helm

2.2.1 安装helm

2.2.2 配置helm命令补全

3 helm常用操作

3.1 查询官方应用中心

3.2 管理第三方repo源

3.3 helm的使用方法

3.3.1 查找chart

3.3.2 查看chart信息

3.3.3 安装chart包

3.3.4 安装项目前预定义项目选项

4 构建helm中的chart包

4.1 Helm Chart目录结

4.2 构建方法

5 构建helm仓库

5.1 在harbor仓库中构建一个公开的项目

5.2 安装helm push插件

5.2.1 在线安装

5.2.2 离线安装

5.3 上传项目到仓库

5.3.1 添加仓库

5.3.2 上传本地项目

6 helm的版本迭代

6.1 从新构建新版本项目

6.2 上传项目到helm仓库中

6.3 更新应用


1 helm简介

  • Helm是Kubernetes 应用的包管理工具,主要用来管理 Charts,类似Linux系统的yum。

  • Helm Chart是用来封装Kubernetes原生应用程序的一系列YAML文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。

  • 对于应用发布者而言,通过Helm打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。

  • 对于使用者而言,使用Helm后可以以简单的方式在Kubernetes上查找、安装、升级、回滚、卸载应用程序。

2 部署helm

2.1 官网与软件资源

官网:Helm | 快速入门指南如何安装和开始使用Helm,包括Helm的介绍、FAQs和Helm插件https://helm.sh/zh/docs/intro/quickstart/

软件资源:https://github.com/helm/helm/releaseshttps://github.com/helm/helm/releases

2.2 部署helm

2.2.1 安装helm

提前准备这两个资源包

tar zxf helm-v3.18.6-linux-amd64.tar.gz # 解压下载的资源包
ls                                      # 查看是否解压成功
cd linux-amd64/                         # 进入解压后的资源包
ls                                      # 查看资源包内的启动文件
cp -p helm /usr/local/bin/              # 复杂启动文件到bin目录
helm version                            # 查看版本

2.2.2 配置helm命令补全

echo "source <(helm completion bash)" >> ~/.bashrc
source ~/.bashrc

3 helm常用操作

命令 描述
create 创建一个 chart 并指定名字
dependency 管理 chart 依赖
get 下载一个 release,可用子命令:all、hooks、manifest、notes、values
history 获取 release 历史
install 安装一个 chart
list 列出 release
package 将 chart 目录打包到 chart 存档文件中
pull 从远程仓库中下载 chart 并解压到本地 # helm pull stable/mysql -- untar
repo 添加,列出,移除,更新和索引 chart 仓库,可用子命令:add、index、 list、remove、update
rollback 从之前版本回滚
search 根据关键字搜索 chart,可用子命令:hub、repo
show 查看 chart 详细信息,可用子命令:all、chart、readme、values
status 显示已命名版本的状态
template 本地呈现模板
uninstall 卸载一个 release
upgrade 更新一个 release
version 查看 helm 客户端版本

3.1 查询官方应用中心

helm search hub nginx    # 在官方仓库中搜索
helm search repo nginx   # 在本地仓库中搜索

3.2 管理第三方repo源

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

# 添加bitnami仓库
helm repo add bitnami https://charts.bitnami.com/bitnami

# 查看仓库信息
helm repo list

# 查看仓库存储helm清单
helm search repo  aliyun

# 删除第三方存储仓库
helm repo list

helm repo remove aliyun

3.3 helm的使用方法

3.3.1 查找chart

helm  search  repo nginx

3.3.2 查看chart信息

helm show chart bitnami/nginx

3.3.3 安装chart包

helm install timinglee bitnami/nginx
helm list

# 查看pod的运行情况
kubectl get pods

# 查看项目的发布状态
helm status timinglee

# 卸载项目
helm uninstall timinglee

kubectl get pods
helm list

3.3.4 安装项目前预定义项目选项

# 拉取项目
helm pull bitnami/nginx
ls
tar zxf nginx-21.1.23.tgz
ls
cd nginx/
ls
ls templates/    # 项目模板
vim values.yaml  # 项目变量文件

修改项目变量文件中第13行,添加本地仓库地址

修改第87行

拉取项目

创建本地项目

上传项目所需镜像到仓库

安装本地项目

# 安装时添加参数,允许非标准镜像
helm install timinglee . --set global.security.allowInsecureImages=true
24     allowInsecureImages: true
helm install timinglee .

更新项目

vim values.yaml
624   type: ClusterIP
751   enabled: true
763   hostname: myapp.timinglee.org
783   ingressClassName: "nginx"

# 更新项目
helm upgrade timinglee .

kubectl get svc

访问之前记得在/etc/hosts加入域名解析

查看历史项目

helm history timinglee

删除项目

4 构建helm中的chart包

4.1 Helm Chart目录结

[root@master helm]# helm create timinglee
Creating timinglee
[root@master helm]# ls
timinglee
[root@master helm]# tree timinglee/
timinglee/
├── charts                            # 目录里存放这个chart依赖的所有子chart
├── Chart.yaml                        # 用于描述这个 Chart 的基本信息,包括名字、描述信息以及版本等
├── templates                         # 目录里面存放所有 yaml 模板文件
│   ├── deployment.yaml
│   ├── _helpers.tpl                  # 放置模板助手的地方,可以在整个 chart 中重复使用
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml                       # 用于存储 templates 目录中模板文件中用到变量的值

3 directories, 10 files

4.2 构建方法

[root@master helm]# cd timinglee/
[root@master timinglee]# ls
charts  Chart.yaml  templates  values.yaml
[root@master timinglee]# vim Chart.yaml
[root@master timinglee]# cat Chart.yaml
apiVersion: v2
name: timinglee
description: A Helm chart for Kubernetes
version: 0.1.0        # 项目版本
appVersion: "v1"      # 软件版本
[root@master timinglee]# vim values.yaml
image:
  repository: myapp
  pullPolicy: IfNotPresent
  tag: "v1"
ingress:
  enabled: true
  className: "nginx"
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts:
    - host: myapp.timinglee.org
      paths:
        - path: /
          pathType: ImplementationSpecific
[root@master timinglee]# helm lint .    # 语法检测
==> Linting .
[INFO] Chart.yaml: icon is recommended

1 chart(s) linted, 0 chart(s) failed
[root@master timinglee]# cd ..
[root@master helm]# helm package timinglee/    # 打包项目
Successfully packaged chart and saved it to: /root/helm/timinglee-0.1.0.tgz
[root@master helm]# ls
nginx  nginx-21.1.23.tgz  timinglee  timinglee-0.1.0.tgz

部署项目本地项目

先删除已存在的 timinglee ServiceAccount,清除冲突

删除旧的冲突 Ingress(若已无用)

[root@master helm]# kubectl delete serviceaccounts timinglee -n default
serviceaccount "timinglee" deleted
[root@master helm]# kubectl delete ingress myapp-v1-ingress -n default
ingress.networking.k8s.io "myapp-v1-ingress" deleted
# 部署本地项目
[root@master helm]# helm install timinglee timinglee-0.1.0.tgz
[root@master helm]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP   20d
timinglee    ClusterIP   10.98.78.155   <none>        80/TCP    20s

[root@master helm]# vim /etc/hosts

5 构建helm仓库

5.1 在harbor仓库中构建一个公开的项目

在 Harbor 2.10 中,默认情况下不支持 Helm Chart 的管理功能。如果需要使用 Helm Chart 功能,可以通过启用 ChartMuseum 来实现。

启用 ChartMuseum 支持

在安装 Harbor 时,可以通过添加参数 --with-chartmuseum 来启用 Helm Chart 支持。

[root@harbor harbor]# docker-compose down
[root@harbor harbor]# ./install.sh --with-chartmuseum

5.2 安装helm push插件

官方网址:GitHub - chartmuseum/helm-push: Helm plugin to push chart package to ChartMuseum

5.2.1 在线安装

如果网络没问题情况下直接安装即可

[root@master helm]# dnf install git -y
[root@master helm]# helm plugin install https://github.com/chartmuseum/helm-push

5.2.2 离线安装

#创建helm plugin的存放目录
[root@master helm]# mkdir  ~/.local/share/helm/plugins/helm-push -p

#解压push插件包到指定目录
[root@master helm]# tar zxf helm-push_0.10.4_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-push
[root@master helm]# ls ~/.local/share/helm/plugins/helm-push
bin  LICENSE  plugin.yaml

#查看helm调用命令是否成功
[root@master helm]# helm cm-push --help
Helm plugin to push chart package to ChartMuseum

Examples:

  $ helm cm-push mychart-0.1.0.tgz chartmuseum       # push .tgz from "helm package"
  $ helm cm-push . chartmuseum                       # package and push chart directory
  $ helm cm-push . --version="1.2.3" chartmuseum     # override version in Chart.yaml
  $ helm cm-push . https://my.chart.repo.com         # push directly to chart repo URL

5.3 上传项目到仓库

5.3.1 添加仓库

[root@master helm]# helm repo add timinglee https://harbor.timinglee.org/chartrepo/timinglee

报错的原因是因为采用加密访问

为helm添加证书

[root@master helm]# cp /etc/docker/certs.d/harbor.timinglee.org/ca.crt /etc/pki/ca-trust/source/anchors/
[root@master helm]# update-ca-trust

重新添加仓库

[root@master helm]# helm repo add timinglee https://harbor.timinglee.org/chartrepo/timinglee

5.3.2 上传本地项目

#命令执行格式
helm cm-push <项目名称> <仓库名称> -u admin -p 123456
[root@master helm]# helm cm-push timinglee-0.1.0.tgz timinglee -u admin -p 123456

[root@master helm]# helm search repo timinglee
No results found
[root@master helm]# helm repo update timinglee
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "timinglee" chart repository
Update Complete. ⎈Happy Helming!⎈

[root@master helm]# helm install timinglee timinglee/timinglee
[root@master helm]# vim /etc/hosts
[root@master helm]# curl myapp.timinglee.org
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

6 helm的版本迭代

6.1 从新构建新版本项目

[root@master helm]# vim timinglee/Chart.yaml
version: 0.2.0
appVersion: "v2"

[root@master helm]# vim timinglee/values.yaml
tag: "v2"

[root@master helm]# helm package timinglee
Successfully packaged chart and saved it to: /root/helm/timinglee-0.2.0.tgz

6.2 上传项目到helm仓库中

[root@master helm]# helm cm-push timinglee-0.2.0.tgz timinglee -u admin -p lee
Pushing timinglee-0.2.0.tgz to timinglee...
Done.

[root@master helm]# helm repo  update timinglee
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "timinglee" chart repository
Update Complete. ⎈Happy Helming!⎈

[root@master helm]# helm search  repo timinglee -l
NAME                    CHART VERSION   APP VERSION     DESCRIPTION
timinglee/timinglee     0.2.0           v2              A Helm chart for Kubernetes
timinglee/timinglee     0.1.0           v1              A Helm chart for Kubernetes

6.3 更新应用

# 应用更新
[root@master helm]# helm upgrade timinglee timinglee/timinglee
Release "timinglee" has been upgraded. Happy Helming!
NAME: timinglee
LAST DEPLOYED: Wed Sep  3 11:56:46 2025
NAMESPACE: default
STATUS: deployed
REVISION: 2
NOTES:
1. Get the application URL by running these commands:
  http://myapp.timinglee.org/
[root@master helm]# curl myapp.timinglee.org
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>

# 查看历史版本
[root@master helm]# helm history timinglee
REVISION        UPDATED                         STATUS          CHART           APP VERSION     DESCRIPTION
1               Wed Sep  3 11:44:09 2025        superseded      timinglee-0.1.0 v1              Install complete
2               Wed Sep  3 11:56:46 2025        deployed        timinglee-0.2.0 v2              Upgrade complete

# 应用回滚
[root@master helm]# helm rollback timinglee
Rollback was a success! Happy Helming!
[root@master helm]# helm history timinglee
REVISION        UPDATED                         STATUS          CHART           APP VERSION     DESCRIPTION
1               Wed Sep  3 11:44:09 2025        superseded      timinglee-0.1.0 v1              Install complete
2               Wed Sep  3 11:56:46 2025        superseded      timinglee-0.2.0 v2              Upgrade complete
3               Wed Sep  3 11:57:37 2025        deployed        timinglee-0.1.0 v1              Rollback to 1
[root@master helm]# curl myapp.timinglee.org
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

恢复测试环境

[root@master helm]# helm uninstall timinglee
release "timinglee" uninstalled

到此helm的部署和简单的使用结束!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐