Helm简述
Helm 是一个软件包管理器,提供了一种简单的方法来查找、共享和使用为 Kubernetes 而构建的软件。类似于Linux系统下的包管理器,如yum/apt等,可以方便快捷的将之前打包好的yaml文件快速部署进kubernetes内,方便管理维护。
Helm 能够管理 k8s 中的资源依赖,能够重用 chart 包,能够为不同 k8s 集群制定不同的配置。
Helm 的生态圈和 Helm 官方所提供的众多包含有最佳实践的 chart 包。
helm 具有版本控制,可以保存历史配置进行回退等操作。
举个栗子
比如需要部署一个 nginx 服务,那么就需要分别去创建对应的 Pod 资源、Service 资源和 ingress 资源。 通过这种方式来部署几个服务还是可以接受的,但是如果服务数量众多,这种一个一个的操作方式不仅效率低下,而且非常容易出错。能尽量减少人工的操作那么就需要尽量去减少,甚至消除人工操作。k8s 仅仅只是针对资源对象定义了操作,而非对一个服务整体,又或者是一个应用整体进行定义,它是一种细粒度的编排管理。出于这样的原因,k8s 对高层次的服务或应用编排的支持可能就不够了。Helm 的出现就是为了解决这种粗粒度的编排管理的。
基本概念
helm:一个命令行下客户端工具,主要用于kubernetes应用chart的创建/打包/发布以及创建和管理和远程Chart仓库。
Tiller:helm的服务端,部署于kubernetes内,Tiller接受helm的请求,并根据chart生成kubernetes部署文件(helm称为release),然后提交给 Kubernetes 创建应用。Tiller 还提供了 Release 的升级、删除、回滚等一系列功能。
Chart: helm的软件包,采用tar 格式或者目录,其中包含运行一个应用所需的所有镜像/依赖/资源定义等,还可能包含kubernetes集群中服务定义
Release:在kubernetes中集群中运行的一个Chart实例,在同一个集群上,一个Chart可以安装多次,每次安装均会生成一个新的release,后期的更新/删除等操作是基于release 名称完成的
Repository:用于发布和存储Chart的仓库
命令介绍
创建一个 chart
helm create chart-name #生产完整的chart 目录结构根据实际情况再做定制化修改
创建一个release(启动服务)
helm install ./configmap-test -n configmaptest --namespace kzf #安装chart 包,启动一个release。#第一个参数:chart 目录 -n release 名 --namesapce 指定创建资源在哪个命名空间
注意:不指定release 名字随机生成;默认命名空间default;相同chart可部署多个release,只要release 名字不冲突,即使不同命名空间都不能冲突;可以通过-f 指定特定的values.yaml 文件,默认用chart 目录里面的
删除一个运行的服务
helm del --purge release-name #删除的时候是在全局而不是命名空间下
更新配置
helm upgrade -i --namespace kzf --set config=dev1 configmaptest ./configmap-test #-i release 如果不存在就install --set 设置变量默认覆盖value.yml中的同名变量, release 名字,chart目录
注意:chart 里面templates/*.yaml 中如果变更了资源名称,那么upgrade 不是创建新的资源也是更改资源名称。如果release 变了,有-i 参数就会创建新的release 和资源 如果是更新的话没必要指定命名空间,因为release 是全局唯一
但是第一次执行此命令就相当于创建所以要指定命名空间
查询历史版本
helm history configmaptest #根据 release 名查询所有的版本历史
回滚
helm rollback configmaptest 2 #版本号通过helm history 查询REVISION 列得知,根据release 名及版本号回滚
查询信息
helm get manifest configmaptest #查询此release 信息包括由哪个chart 创建而来以及创建的资源信息等
测试安装
helm install --debug --dry-run ./mychart #这会将 chart 发送到 Tiller 服务器,它将渲染模板。但不是安装 chart,它会将渲染模板返回,以便可以看到输出