Helm操作指南

  • Helm 简介
    • 我们可以将helm看作Kubernetes下的yum(centos 下负责安装包管理的工具)。helm是一个用于Kubernetes包管理器,每一个包称为chart,一个chart是一个目录(一般会打包为name-version.tgz包,便于传输管理)。   
    • helm提供应用部署、删除、升级、回滚等功能。
  • Helm 组件及相关术语
    • Helm
      • helm是命令行下的客户端工具。主要用于kubernetes应用程序chart的创建、打包、创建、和管理本地和远程的chart仓库。     
    • Tiller
      • tiller是helm的服务器,部署在kubernetes集群中,tiller用于接收helm 的请求。并根据chart生成kunernetes的部署文件(helm称为release),然后交给kubernetes创建应用。tiller还提供release的升级、删除、回滚等一系列功能。             
    • Chart
      • chart是helm的软件包,采用tar格式。 其中包含一组kubernetes资源相关的yaml文件。         
    • Repoistory                                
      • repoistory是helm的软件仓库,repoistory本质上是一个web服务器。该服务器保存了一系列chart软件包以给用户下载,并提供了一个该repoistory的chart包的清单以供查询。helm可以同时管理多个不同的repoistory。        
    • Release 
      • 使用helm install 命令在kubernetes集群部署的chart称为release。
      • 注意:helm提到的release和通常概念的版本不同,这里的release可以理解为helm使用chart打包部署的一个应用实例。     
  • Helm 工作原理
    •     
    • Chart install 过程:
      1. helm从指定的目录或者.tgz文件解析出chart结构信息。
      2. helm将指定的chart结构和values信息通过grpc传递给tiller。
      3. tiller根据chart和values生成一个relesae。
      4. tiller将release传递给kunernetes用于生成release。
    • Chart Update过程:
      1. helm从指定的目录或者.tgz文件解析出chart结构信息。
      2. helm将要更新的relsase的名称、结构信息、values信息传递给tiller。
      3. tiller生成release并更新指定名称的release的history。
      4. tiller将release发送给kubernetes用于更新release。 
    • Chart Rollback过程:
      1. helm将要回滚的release名称传递给tiller。
      2. tiller将根据release名称查找history。
      3. tiller将从history中获取一个release。
      4. tiller将上一个release发送给kubernetes用于替换当前的release。 
  • Helm 部署  
    • helm 客户端安装
      • helm init #安装helm客户端(默认是谷歌镜像)
      • helm init --client-only --stable-repo-url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/  #使用国内镜像安装
    • helm 服务端安装tiller
    • 给 tiller 授权
    • 验证 tiller是否安装成功
      • kubectl -n kube-system get pods|grep tille
      • helm version 
    • 卸载 helm 服务端 tiller
      • helm reset --force
    • helm 使用
      1. 更换仓库:
        • 若遇到Unable to get an update from the “stable” chart repository (https://kubernetes-charts.storage.googleapis.com) 错误 手动更换stable 存储库为阿里云的存储库
          1. helm repo remove stable #移除原先的仓库。
          2. helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts #添加新的仓库地址
          3. helm repo update #更新仓库
      2. 查看存储库中可用的所有 helm chart:
        1. helm search #查看所有chart
      3. 更新 charts 列表:
        1. helm repo update #更新charts列表 
      4. 安装 charts 
        • Monocular是一个开源软件,用于管理kubernetes上以helm charts形式创建的服务。可以通过它来安装
          1. helm charts
          2. Nginx ingress controller
      5. 查看 kubernetes 已经安装的 charts
        • helm list #查看charts列表
      6. 删除安装的 chart 
        • helm delete xxx #删除指定的chart 
  • Helm Chart 结构     
    • chart 目录结构
      •  
        myapp/                     # Chart 目录
        ├── charts                 # 这个 charts 依赖的其他 charts,始终被安装
        ├── Chart.yaml             # 描述这个 Chart 的相关信息、包括名字、描述信息、版本等
        ├── LICENSE                # [可选]协议
        ├── Requirements.yaml      # [可选] 用于存放当前Chart依赖的其它Chart的说明文件
        ├── Readme.md              # [可选]当前chart的介绍
        ├── templates              # 模板目录
        │ ├── deployment.yaml      # deployment 控制器的 Go 模板文件
        │ ├── _helpers.tpl         # 以 _ 开头的文件不会部署到 k8s 上,可用于定制通用信息
        │ ├── ingress.yaml         # ingress 的模板文件 
        │ ├── NOTES.txt            # Chart 部署到集群后的一些信息,例如:如何使用、列出缺省值
        │ ├── service.yaml         # service 的 Go 模板文件
        │ ├── secrets.yaml         # secrets的 Go 模板文件
        │ └── tests
        │ └── test-connection.yaml
        └── values.yaml            # 模板的值文件,这些值会在安装时应用到 GO 模板生成部署文件

      • Chart.yaml 文件
        • name : [必须] chart的名称 
        • apiVersion :[可选] api版本和版本号
        • version : [必须] chart的版本号,版本号必须符合SemVer 2   简书 https://www.jianshu.com/p/e2619a7aa60e
        • description : [可选] 文档描述
        • keywords:
          •  -  [可选]关键字列表
        • home : [可选] 项目地址 
        • sources :
          •  -  [可选]当前chart的下载地址列表                                                
      • Chart 目录和 Requirements.yaml
        • chart支持两种方式表示依赖关系,可以使用Requirements.yaml或直接将依赖的chart放置到chart目录中。
        • dependencies:
          - name: example
          version: 1.2.3
          repository: http://example.com/charts
          - name: Chart名称
          version: Chart版本
          repository: 该Chart所在的仓库地址
      • templates 目录
        • templates目录存放了kubernetes部署文件的模板。
        • yaml文件模板遵循 go template语法 官网链接 https://golang.org/pkg/text/template/
        • 模板语法扩展了 golang/text/template的语法:
# 这种方式定义的模版,会去除test模版尾部所有的空行
{{- define "test"}}
模版内容
{{- end}}

# 去除test模版头部的第一个空行
{{- template "test" }}   
  • 检查配置和模板是否有效     
    • helm install --dry-run --debug <chart_dir> #验证配置的模板变量与渲染的yaml是否一致
  • 部署到kubernetes 
    • 在mychart目录下执行命令
      • helm install .   #安装到默认命名空间
      • helm install --namespace gitlab --name gitlab-runner *.tgz  #安装到指定命名空间
    • 查看部署的relaese
      • helm list              #查看relaese list
    • 删除部署的relaese
      • helm delete XXX  #执行删除命令 
    • 查看部署relaese相信信息
      • helm get XXX     #查看详细信息     
    • 打包分享
      • 我们可以修改chart.yaml中的配置信息,然后使用下列命令将chart打包成一个压缩文     件。
      • helm pakaage .        #打包文件,得到xxx-version.tgz

    • 将应用包发布到 Repository     
      • 虽然我们打包了 chart 并且发布到了helm本地目录中,但通过helm search找不到刚刚生成的chart包。
        • helm search XXX #查找包
      • 这是因为 repository目录中的  chart包还没有被helm管理。但是通过helm repo list 命令可以查看目前 helm中配置的repository信息。
        • helm repo list       #查看repository信息   
        • 注意:在新版中,使用helm init 命令会默认配置一个名为local的本地仓库。      
    • 第三方的chart存储库
    • helm 升级和回退一个应用
      • helm history xxx      #查看发布的历史版本
      • helm search XXX -l    #查看chart包版本    
      • 升级一个应用
        • 我们可以指定升到某一个版本,如果不指定,默认是最新版。 
        • helm upgrade XXX local/XXX   #升级
      • 回退一个应用
        • helm rollback XXX #默认回退到上一个版本     
      • 删除一个应用
        • helm delete XXX   #删除
        • helm ls -a XXX    #确认是否已经删除,状态为delete
        • helm ls -deleted  #列出删除的relaese 
    • helm 如何结合CI/CD?
      • 采用helm可以把零散的kubernetes应用配置文件作为一个chart管理。chart源码和源代码一起放到Git库中管理。通过把chart参数化,可以在测试环境和生成环境采用不同的chart参数。
      • helm CD/CD流程图:   
          
      • helm 如何在多环境下(Test、Staging、Production)的业务配置?
        • chart是支持参数替换的,可以把业务配置的相关参数设置为模板变量,使用helm install 命令部署的时候指定一个值,这样就可以把业务参数从chart中剥离了。
        • 例如:helm install --values=values-production.yaml wordpress
posted @ 2020-02-15 20:53  谭洪军  阅读(1727)  评论(0编辑  收藏  举报