把大量yaml作为一个整体管理,实现yaml高效复用,

三个重要概念:

  1. helm 命令行客户端工具
  2. Chart 把yaml打包,是yaml集合
  3. Release 基于chart部署实体,应用级别的版本管理

安装

Helm github下载地址

解压(tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)
在解压目中找到helm程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm)

添加helm仓库

添加仓库

  1. helm repo add 仓库名 仓库地址
# 配置微软源
helm repo add stable http://mirror.azure.cn/kubernetes/charts
# 配置阿里源
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
# 配置google源
helm repo add google https://kubernetes-charts.storage.googleapis.com/

# 更新
helm repo update

然后可以查看我们添加的仓库地址

# 查看全部
helm repo list
# 查看某个
helm search repo stable
# 删除添加的源
helm repo remove stable

使用helm快速安装部署应用

使用weave-scope做事例,这个service也会图形化展示k8s集群

# 搜索 weave仓库
helm search repo weave
# 使用命令查看仓库
[root@master ~]# helm search repo weave
NAME                    CHART VERSION   APP VERSION     DESCRIPTION                                       
aliyun/weave-cloud      0.1.2                           Weave Cloud is a add-on to Kubernetes which pro...
aliyun/weave-scope      0.9.2           1.6.5           A Helm chart for the Weave Scope cluster visual...
# ui为别名
[root@master ~]# helm install ui aliyun/weave-scope

值得一提的是阿里云的weave-scope版本太低,建议用微软源
weave-scope默认用ClusterIp,没有对外暴露端口,使用edit改一下这个service的yaml

kubectl edit svc ui-weave-scope

chart使用

创建chart模板

helm create mychart

可以在当前目录下看到mychart的文件夹
image.png

  • charts是空文件夹
  • templates:生成了一些文件,编写yaml文件存放到这个目录
  • values.yaml:存放的是全局变量的yaml文件,templates中可以用
  • chart.yaml:当前chart属性配置信息

在templates文件夹下创建Yaml
把nginx的deployment拉取下来导出成deployment.yaml

kubectl create deployment web1 --image=nginx --dry-run -o yaml > deployment.yaml

再导出service.yaml,使用service向外暴露端口,前提是上面的deployment需要启动,这个命令才能执行完成,这样做其实不太可取

kubectl expose deployment web1 --port=80 --target-port=80 --type=NodePort --dry-run -o yaml >service.yaml

安装mychart

在mychart的父目录下执行此命令

helm install web1 mychart/

当我们修改了mychart中的东西后,就可以进行升级操作

helm upgrade web1 mychart

全局变量使用

针对templates里面的各种yaml部分数据灵活处理
主要是values.yaml里面写,然后在templates下面的yaml文件中使用
在templates的yaml文件里通过表达式形式 使用全局变量 {{.Values.变量名称}}
表达式 {{.Release.Name}} 表示取当前版本名称 比如helm install web1 mychart/ 这里就是web1
image.png