Helm介绍
Helm是一款简化安装和管理Kubernetes应用程序的工具
- 可用于Kubernetes之上的应用程序管理的资源配置文件需要以特定的结构组织为Chart
- Chart代表着可由Helm管理的有着特定格式的程序包
- Chart中的资源配置文件通常以模板(go template)形式定义
- 在部署时,用户可通过向模板参数赋值实现定制化安装的目的
- 各模板参数通常也有默认值,这些默认值定义在Chart包里一个名为values.yml的文件中
类似于kubectl,Helm也是Kubernetes API Server的命令行客户端工具
- 支持kubeconfig认证文件
- 需要事先从仓库或本地加载到要使用目标Chart,并基于Chart完成应用管理
- Chart可缓存于Helm本地主机上
支持仓库管理和包管理的各类常用操作,例如Chart仓库的增、删、改、查,以及Chart包的制作、发布、搜索、下载等
Helm 中的三大基本概念
Chart
代表一个 Helm 包。它包含了在 Kubernetes 集群中运行应用程序、工具或服务所需的所有 YAML 格式的资源定义文件
- 模版的默认值 会放在一个values.yaml中
Repository(仓库)
它是用来存放和共享 Helm Chart 的地方,类似于存放源码的 GitHub 的 Repository,以及存放镜像的 Docker 的 Repository
Release
它是运行在 Kubernetes 集群中的 Chart 的实例。
一个 Chart 通常可以在同一个集群中安装多次。
每一次安装都会创建一个新的 Release
Helm3 架构图
部署Helm
参考文档 helm.sh/zh/docs/int…
- 使用操作系统包管理器安装,支持Homebrew、Chocolatey、Scoop、GoFish和Snap等包管理器
- 直接下载适合目标平台的二进制Helm程序包,展开并放置于合适的位置即可使用
mkdir -p $HOME/bin
wget https://get.helm.sh/helm-v3.13.1-linux-amd64.tar.gz
tar -xvzf helm-v3.13.1-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/
helm version
常用的helm命令
Repostory管理
- repo命令,支持repository的add、list、remove、update和index等子命令
Chart管理
- create、 package、pull、 push、dependency、search、show和verify等操作
Release管理
- install、upgrade、get、list、history、status、rollback和uninstall等操作
快速入门
参考 time.geekbang.org/column/arti…
初始化一个 Helm Chart 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami # 添加 Chart Repository
helm repo list # 查看添加的 Repository 列表
配置仓库
helm repo add elastic https://helm.elastic.co
helm repo add gitlab https://charts.gitlab.io
helm repo add harbor https://helm.goharbor.io
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com
helm repo add stable https://kubernetes-charts.storage.googleapis.com #添加国内仓库
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update helm repo list
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 example.com/charts/foo-…
安装一个Chart
helm repo update # Make sure we get the latest list of charts
helm install bitnami/mysql --generate-name
查看当前集群安装了哪些 Release
通过helm list可以查看当前集群、当前 Namespace 下安装的 Release 列表
$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mysql-1629528555 default 1 2021-08-21 14:49:19.101935218 +0800 CST deployed mysql-8.8.4 8.0.26
mysql-1629529348 default 1 2021-08-21 15:02:32.079969128 +0800 CST deployed mysql-8.8.4 8.0.26
卸载 Release
helm uninstall mysql-1629528555
部署示例
首先创建目标名称空间
kubectl create namespace blog
部署主从复制
helm install mysql \
--set auth.rootPassword=MageEdu \
--set global.storageClass=nfs-csi \
--set architecture=replication \
--set auth.database=wpdb \
--set auth.username=wpuser \
--set auth.password='magedu.com' \
--set secondary.replicaCount=1 \
--set auth.replicationPassword='replpass' \
bitnami/mysql \
-n blog
使用外部的数据库:
helm install wordpress \
--set mariadb.enabled=false \
--set externalDatabase.host=mysql-primary.blog.svc.cluster.local \
--set externalDatabase.user=wpuser \
--set externalDatabase.password='magedu.com' \
--set externalDatabase.database=wpdb \
--set externalDatabase.port=3306 \
--set persistence.storageClass=nfs-csi \
--set ingress.enabled=true \
--set ingress.ingressClassName=nginx \
--set ingress.hostname=blog.magedu.com \
--set ingress.pathType=Prefix \
--set wordpressUsername=admin \
--set wordpressPassword='magedu.com' \
bitnami/wordpress \
-n blog
helm status mysql -n blog
访问成功
helm进阶
参考 time.geekbang.org/column/arti…
示例值文件 github.com/ikubernetes/learning-k8s/helm/