helm概念
Helm 有两个重要的概念:chart 和 release。
chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 apt、yum 中的软件安装包。
release 是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release。
Helm 是包管理工具,这里的包就是指的 chart。Helm 能够:
- 从零创建新 chart。
- 与存储 chart 的仓库交互,拉取、保存和更新 chart。
- 在 Kubernetes 集群中安装和卸载 release。
- 更新、回滚和测试 release。
Helm 包含两个组件:Helm 客户端 和 Tiller 服务器。
Helm 客户端是终端用户使用的命令行工具,用户可以:
- 在本地开发 chart。
- 管理 chart 仓库。
- 与 Tiller 服务器交互。
- 在远程 Kubernetes 集群上安装 chart。
- 查看 release 信息。
- 升级或卸载已有的 release。
Tiller 服务器运行在 Kubernetes 集群中,它会处理 Helm 客户端的请求,与 Kubernetes API Server 交互。Tiller 服务器负责:
- 监听来自 Helm 客户端的请求。
- 通过 chart 构建 release。
- 在 Kubernetes 中安装 chart,并跟踪 release 的状态。
- 通过 API Server 升级或卸载已有的 release。
简单的讲:Helm 客户端负责管理 chart;Tiller 服务器负责管理 release。
安装初始化
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
或者二进制安装,放到执行kubectl的机器上,修改可执行属性 二进制包下载地址
在所有node节点安装socat yum install -y socat
ifeng hub tiller
docker pull docker.ifeng.com/file/tiller:v2.9.1
docker tag 6253045f26c6 gcr.io/kubernetes-helm/tiller:v2.9.1
初始化
$ kubectl -n kube-system create sa tiller
$ kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
$ helm init --service-account tiller
(init 需要访问google,可以使用以下方式)
helm init --upgrade --tiller-image fishead/gcr.io.kubernetes-helm.tiller:v2.11.0
# helm version
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
helm 补全
编辑.bashrc,追加 source <(helm completion bash)
更新
server
helm init --tiller-image docker.ifeng.com/file/tiller:v2.12.3 --upgrade
常用命令
- helm repo list
- helm search mysql
- helm repo update
- helm list
- helm delete xxxx -force
- helm install -f ./prometheus/values.yaml --name prometheus --namespace=monitoring ./prometheus
- helm upgrade -f kube-prometheus/values.yaml prometheus ./kube-prometheus/
- helm delete prometheus --purge
- helm fetch stable/redis-ha #将tar包拉到本地
helm安装方式
- 指定chart: helm install stable/mariadb
- 指定打包的chart: helm install ./nginx-1.2.3.tgz
- 指定打包目录: helm install -f ./prometheus-8.4.2/values.yaml --name prometheus --namespace=monitoring ./prometheus-8.4.2/
- 指定chart包URL: helm install https://example.com/charts/nginx-1.2.3.tgz
CHART chart 是 Helm 的应用打包格式,一旦安装了某个 chart,我们就可以在 ~/.helm/cache/archive 中找到 chart 的 tar 包。
helm 调试
helm lint
验证chart是否有错误
helm install --dry-run --debug
调试,渲染模板并返回
helm get mainfest
输出已安装好的yaml配置
chart目录结构
- Chart.yaml YAML 文件,描述 chart 的概要信息。name 和 version 是必填项,其他都是可选。
- README.md Markdown 格式的 README 文件
- values.yaml chart 支持在安装的时根据参数进行定制化配置,而 values.yaml 则提供了这些配置参数的默认值。
- templates目录 各类 Kubernetes 资源的配置模板都放置在这里。Helm 会将 values.yaml 中的参数值注入到模板中生成标准的 YAML 配置文件。模板是 chart 最重要的部分,也是 Helm 最强大的地方。模板增加了应用部署的灵活性,能够适用不同的环境,我们后面会详细讨论。
- templates/NOTES.txt chart 的简易使用文档,chart 安装成功后会显示此文档内容。与模板一样,可以在 NOTE.txt 中插入配置参数,Helm 会动态注入参数值。
更新 helm upgrade
修改了values.yaml文件,upgrade后 prometheus-kube-prometheus-0会重启 数据会被清空 ,后续考虑共享存储
helm upgrade -f kube-prometheus/values.yaml kube-prometheus ./kube-prometheus/
版本回滚
helm rollback prometheus 3