kubernets-helm

2,080 阅读2分钟

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.sh/zh/docs/

artifacthub.io/packages/se…

Helm 中的三大基本概念

Chart

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

  • 模版的默认值 会放在一个values.yaml中

Repository(仓库)

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

image.png

Release

它是运行在 Kubernetes 集群中的 Chart 的实例。

一个 Chart 通常可以在同一个集群中安装多次。

每一次安装都会创建一个新的 Release

Helm3 架构图

image.png

部署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等操作

image.png

快速入门

参考 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

image.png

image.png

访问成功 image.png

helm进阶

参考 time.geekbang.org/column/arti…

示例值文件 github.com/ikubernetes/learning-k8s/helm/