1 引入

1.1 之前部署应用的基本过程

  1. 编写yaml文件
  2. 对外暴露一个service
  3. 使用ingress做一个域名映射

缺陷

  • 如果使用之前方式部署单一应用,少数服务的应用,比较合适
  • 比如部署微服务,可能有几十个服务,每个服务都有一套yaml文件,需要维护大量yaml文件,版本管理特别不方便

1.2 使用helm可以解决哪些问题

  1. 使用helm可以把这些yaml作为一个整体管理
  2. 实现yaml高效复用
  3. 使用helm应用级别的版本管理

2 介绍

helm时一个k8s的包管理工具,就向Linux下的包管理器,如yum/apt等,可以很方便的将之前打包好的yaml文件部署到k8s上。

2.1 helm

一个命令行控制工具。

2.2 Chart

把yaml打包,是yaml集合。

2.3 Release

基于chart部署实体,应用级别的版本管理。

2.4 v3版本的变化(2019年发布)

  • V3 版本删除 Tiller
  • release可以在不同命名空间重用
  • 支持将chart推送到docker仓库中
  • helm架构变化

3 安装

3.1 配置helm仓库

helm几个常用仓库:

[

](https://blog.csdn.net/u010948569/article/details/108532215)

  1. // 配置仓库
  2. helm repo add 仓库名称 仓库地址
  3. // 更新仓库
  4. helm repo update
  5. // 删除仓库
  6. helm repo remove 仓库名称

4 helm部署应用

4.1 搜索应用

helm search repo 名称

4.2 根据搜索内容选择安装

helm install 安装之后名称 搜索的应用名称

4.3 查看安装之后的状态

helm list
helm status 安装之后名称

演示

  1. helm search repo weave
  2. helm install ui aliyunstable/weave-cloud

5 如何自己创建Chart

5.1 使用命令创建chart

  1. // 1 创建chart
  2. helm create chart 名称
  3. // 2 进入目录查看文件
  4. // - charts/:
  5. // - Chart.yaml: 当前chart属性配置信息
  6. // - templates/: 编写yaml文件放在这个目录中
  7. // - values.yaml: yaml文件可以使用的全局变量

5.2 在templates文件夹创建两个文件

  1. // 1 使用命令生成 deployment.yaml
  2. kubectl create deployment web --image=nginx -o yaml > deployment.yaml
  3. // 2 使用命令生成 service.yaml
  4. kubectl expose deployment web --port=80 --target-port=80 --type=NodePort --dry-run -o yaml > service.yaml
  5. // 3 安装chart
  6. helm install web1 名称/
  7. // 4 应用升级
  8. helm upgrade chart 名称/

6 chart模板

6.1 目的

  • 实现高效复用
  • 通过传递参数,动态渲染模板,yaml内容动态传入参数生成
  • 在chart有values.yaml文件没,定义yaml文件全局变量

6.2 过程

  1. 在values.yaml定义变量和值

定义变量值label: nginx

  1. 在具体yaml文件,获取定义变量值

通过{{ .Values.label }}使用变量值
取到当前版本的名称{{ .Release.name }}