一、Helm介绍:

1.前言:

在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。 况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制, 很大程度上简化了 Kubernetes 应用的部署和管理。

2. 概况:

Helm 本质就是让 K8s 的应用管理(Deployment、Service 等)可配置,可以通过类似于传递环境变量的方式能动态生成。通过动态生成 K8s 资源清单文件(deployment.yaml、service.yaml)。然后调用 Kubectl 自动执行 K8s 资源部署。

3.三个重要的概念:

Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装。Helm 有三个重要的概念:Chart 、Repository 和 Release
Chart:Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。

Repository(仓库):Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。

Release:使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。可以理解为 Helm 使用 Chart 包部署的一个应用实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。
以 MySQL chart 为例,如果你想在你的集群中运行两个数据库,你可以安装该 chart 两次。每一个数据库都会拥有它自己的 release 和 release name。可以将 release 想象成应用程序发布的版本号。

总结:

Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。

 4.Helm3 与 Helm2 的区别:

Helm2 是 C/S 架构,主要分为客户端 helm 和服务端 Tiller。在 Helm 2 中,Tiller 是作为一个 Deployment 部署在 kube-system 命名空间中,很多情况下,我们会为 Tiller 准备一个 ServiceAccount ,这个 ServiceAccount 通常拥有集群的所有权限。 用户可以使用本地 Helm 命令,自由地连接到 Tiller 中并通过 Tiller 创建、修改、删除任意命名空间下的任意资源。

在 Helm 3 中,Tiller 被移除了。新的 Helm 客户端会像 kubectl 命令一样,读取本地的 kubeconfig 文件,使用我们在 kubeconfig 中预先定义好的权限来进行一系列操作。

 Helm 的官方网站:https://helm.sh/

 二、Helm 部署:

1.安装 helm:

//下载二进制 Helm client 安装包
https://github.com/helm/helm/tags

tar -zxvf helm-v3.6.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
helm version

//命令补全
vim /etc/bashrc
source <(helm completion bash)

  2.使用 helm 安装 Chart:

###helm添加chat的语法格式:
helm repo add  chart仓库名   chart仓库地址
 
###添加常用的chart仓库############
#一个开源项目的仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
#微软chart仓库,推荐使用,内容基本与官方仓库保持一致
helm repo add stable http://mirror.azure.cn/kubernetes/charts
#阿里chart仓库,应有尽有
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
#官方仓库,国内网络问题,不太推荐应用
helm repo add incubator https://charts.helm.sh/incubator

//更新 charts 列表
helm repo update          
helm repo list

//查看 stable 仓库可用的 charts 列表
helm search repo stable

//删除 incubator 仓库
helm repo remove incubator

//查看 chart 信息
helm show chart stable/mysql     #查看指定 chart 的基本信息

helm show all stable/mysql		 #获取指定 chart 的所有信息

//安装 chart
helm install my-redis bitnami/redis [-n default]   #指定 release 的名字为 my-redis,-n 指定部署到 k8s 的 namespace

helm install bitnami/redis --generate-name    #不指定 release 的名字时,需使用 –generate-name 随机生成一个名字

//查看所有 release
helm ls 
helm list

//查看指定的 release 状态
helm status my-redis     

//删除指定的 release
helm uninstall my-redis 

三、Helm 自定义模板:

 charts 除了可以在 repo 中下载,还可以自己自定义,创建完成后通过 helm 部署到 k8s。

1.拉取 chart:

mkdir /opt/helm
cd /opt/helm

helm pull stable/mysql

ls
mysql-1.6.9.tgz

tar xf mysql-1.6.9.tgz

yum install -y tree

tree mysql
mysql
├── Chart.yaml
├── README.md
├── templates
│   ├── configurationFiles-configmap.yaml
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── initializationFiles-configmap.yaml
│   ├── NOTES.txt
│   ├── pvc.yaml
│   ├── secrets.yaml
│   ├── serviceaccount.yaml
│   ├── servicemonitor.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   └── tests
│       ├── test-configmap.yaml
│       └── test.yaml
└── values.yaml

可以看到,一个 chart 包就是一个文件夹的集合,文件夹名称就是 chart 包的名称。

chart 是包含至少两项内容的helm软件包:
(1)软件包自描述文件 Chart.yaml,这个文件必须有 name 和 version(chart版本) 的定义
(2)一个或多个模板,其中包含 Kubernetes 清单文件:
●NOTES.txt:chart 的“帮助文本”,在用户运行 helm install 时显示给用户
●deployment.yaml:创建 deployment 的资源清单文件
●service.yaml:为 deployment 创建 service 的资源清单文件
●ingress.yaml: 创建 ingress 对象的资源清单文件
●_helpers.tpl:放置模板助手的地方,可以在整个 chart 中重复使用

2.创建自定义的 chart:

helm create nginx

tree nginx
nginx
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

cat nginx/templates/deployment.yaml

在 templates 目录下 yaml 文件模板中的变量(go template语法)的值默认是在 nginx/values.yaml 中定义的,只需要修改 nginx/values.yaml 的内容,也就完成了 templates 目录下 yaml 文件的配置。

 3.打包 chart:

helm lint nginx        #检查依赖和模版配置是否正确

helm package nginx     #打包 chart,会在当前目录下生成压缩包 nginx-0.1.0.tgz

4.部署 chart:

helm install nginx ./nginx --dry-run --debug    #使用 --dry-run 参数验证 Chart 的配置,并不执行安装

helm install nginx ./nginx -n default           #部署 chart,release 版本默认为 1
或者
helm install nginx ./nginx-0.1.0.tgz

#可根据不同的配置来 install,默认是 values.yaml
helm install nginx ./nginx -f ./nginx/values-prod.yaml

5.部署 ingress:

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

kubectl apply -f mandatory.yaml
kubectl apply -f service-nodeport.yaml

kubectl get pod,svc -n ingress-nginx

6.回滚:

#根据 release 版本回滚
helm history nginx              #查看 release 版本历史

helm rollback nginx 1           #回滚 release 到版本1

7.如何上传到harbor:

在harbor主机进行配置更新
 
-----line35-----
chart:
  absolute_url: enabled
 
 在chart中启用绝对url

四、helm常用命令总结:

helm repo add 仓库名 url地址 添加仓库
 
helm repo update 不加仓库名,就是更新所有仓库
 
helm repo list 仓库列表
 
helm repo remove 仓库名称
 
helm show chart stabke/nginx 查看chart信息
 
helm show stable/nginx 查看详细信息
 
helm install nginx-11 stable/nginx -n lucky-zzr
安装官网的默认版本
 
helm uninstall nginx-11 删除安装好的chart
 
helm list 查看已经安装的chart
 
自定义模板
helm create nginx  创建一个自定义的chart模板
 
values.yaml:这里会传给templates里面的yaml文件
 
 
用helm拉取nginx的两种方式
 
helm install nginx-11 ./nginx
helm install nginx-11 ./nginx-0.1.0.tgz
 
 
 
如何打包创建好的chart:
helm package nginx
 
 
 
回滚:
helm history nginx-11   //查看回滚点
 
helm rollback nginx-11 1   //指定回滚点回滚

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐