跳到主要内容

Helm软件包管理工具安装和使用

Helm官网

简介

Helm是Kubernetes生态系统中的一个软件包管理工具,可以将Helm看作Kubernetes下的apt-get/yum。
对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。
对于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用。
除此以外,Helm还提供了kubernetes上的软件部署,删除,升级,回滚应用的强大功能。

安装

# 测试环境
OS Version: Debian GNU/Linux 11 (bullseye)
Kubernetes Version: v1.28.4+k3s2

在官网可以找到helm版本和Kubernetes版本对应关系,查询得知我们这里可以安装3.12.x版本的helm

# 在这里找到对应的下载地址 https://github.com/helm/helm/releases
wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz
tar -zxvf helm-v3.12.3-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
helm version

Helm中的三大概念

  • Chart: Chart 代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。可以把它看作是 Homebrew formulaApt dpkg,或 Yum RPM 在Kubernetes 中的等价物。
  • Repository: Repository(仓库) 是用来存放和共享 charts 的地方。
  • Release: Release是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。

helm常用命令

helm version                            // 查看helm版本
helm create xxx // 创建一个xxx charts
helm lint ./xxx // 检查包的格式或信息是否有问题
helm install xxx1 ./xxx // 部署安装xxx,设置名称为xxx1
helm list // 列出已经部署的charts
helm history // 发布历史
helm upgrade // 更新版本
helm rollback // 回滚版本
helm package ./xxx // 打包charts
helm repo add --username admin --password password myharbor xxx // 增加repo
helm uninstall xxx1 // 卸载删除xxx1
helm pull // 拉取chart包
helm cm-push // 推送chart包
helm repo update // 更新仓库资源
helm search hub // 从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库
helm search repo // 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网

与k3s整合

在k3s master节点上安装helm完成后执行helm list会报错

Error: Kubernetes cluster unreachable: Get "http://localhost:8080/version": dial tcp [::1]:8080: connect: connection refused

报错原因为:helm v3版本不再需要Tiller,而是直接访问ApiServer来与k8s交互,通过环境变量KUBECONFIG来读取存有ApiServre的地址与token的配置文件地址,默认地址为~/.kube/config

解决办法:

# 修改文件/etc/profile,添加下面一行配置
vim /etc/profile
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
source /etc/profile

使用helm安装traefik

traefik官方文档

# 将 Traefik Labs 图表存储库添加到 Helm
helm repo add traefik https://traefik.github.io/charts
# 更新Chart列表
helm repo update
# 安装traefik
helm install traefik traefik/traefik
# 查看pod,可以看到traefik已经部署成功了
kubectl get pods -n kube-system -o wide | grep traefik

开启Traefik dashboard

安全提示

下面的操作会在公网暴露端口,请注意做好安全防护

  • 方式一:
kubectl port-forward --address 0.0.0.0 $(kubectl get pods --selector "app.kubernetes.io/name=traefik" --output=name) 9000:9000

之后可以通过http://{公网ip}:9000/dashboard/访问控制台

  • 方式二: 定义一个IngressRoute
# traefik-dashboard.yaml
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: traefik-dashboard
spec:
entryPoints:
- web
routes:
- match: Host(`traefik.localhost`) && (PathPrefix(`/dashboard`) || PathPrefix(`/api`))
kind: Rule
services:
- name: api@internal
kind: TraefikService

之后可以通过http(s)://{公网ip}/dashboard/访问控制台