helm 安装使用
一、介绍
Helm是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理。可以把Helm比作CentOS的yum工具。
yum不光要解决包之间的依赖关系,还要提供具体的程序包。但是helm仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像仓库来提供,比如hub.docker.com等;
Helm有如下几个基本概念:
- Chart: 是Helm管理的安装包,里面包含需要部署的安装包资源。可以把Chart比作CentOS yum使用的rpm文件。每个Chart包含下面两部分:
- 包的基本描述文件Chart.yaml
- 放在templates目录中的一个或多个Kubernetes manifest文件模板
- Release:是chart的部署实例,一个chart在一个Kubernetes集群上可以有多个release,即这个chart可以被安装多次
- Repository:chart的仓库,用于发布和存储chart
helm提供了一个应用所需要的所有清单文件。比如对于一个nginx,我们需要一个deployment的清单文件、一个service的清单文件、一个hpa的清单文件。我们把这三个文件打包到一起,就是一个应用程序的程序包,我们称之为Chart。
Helm把Kubernetes资源(比如deployments、services或 ingress等) 打包到一个chart中,而chart被保存到chart仓库。通过chart仓库可用来存储和分享chart。
helm是工作在k8s集群之外的。helm不直接操作apiserver,而是和Tiller交互。Tlller再和apiserver交互,最后由Apiserver把chart使用config赋值(值文件),最后部署成为release。
在helm工作中,helm先去检查chart是否存在,存在就把chart下载到helm本机当前用户的家目录下。然后helm把chart交给tiller,tiller再和api server交互。api server一旦把chart部署在k8s集群上,就不再叫chart了,而叫release。
所以,一个chart赋值不同,完全可以部署出多个release出来的,所以我们可以把chart看做是一个安装包的模板。
如果发现chart更新了,helm就自动滚动更新,而且helm还支持一键回滚的操作。
二. 安装helm
wget http://storage.googleapis.com/kubernetes-helm/helm-v2.14.0-rc.2-linux-amd64.tar.gz
tar xvf helm-v2.14.0-rc.2-linux-amd64.tar.gz
cd linux-amd64/
mv helm /usr/bin/
三、部署Tiller
(1)Tiller运行在k8s集群之上,也必须拥有集群的管理权限,也就是需要一个serviceaccount,创建一个clusterrolebinding到cluster-admin
rbac配置示例文件: 配置文件
rbac-config.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
$ kubectl create -f rbac-config.yaml
serviceaccount "tiller" created
clusterrolebinding "tiller" created
[root@node1 ~]# helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1 --stable-repo-url http://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
每个节点执行以下操作 yum install -y socat
[root@node1 ~]# helm version
Client: &version.Version{SemVer:"v2.14.0-rc.2", GitCommit:"05811b84a3f93603dd6c2fcfe57944dfa7ab7fd0", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
[root@node1 ~]# kubectl get pods -n kube-system grep tiller
tiller-deploy-8665684d44-xpprw 1/1 Running 0 3m6s
四、使用helm
官方可用的Chart仓库列表: 地址
helm常用命令:
- helm search: 搜索charts
- helm fetch: 下载charts到本地目录
- helm install: 安装charts
- helm list: 列出charts的所有版本
用法:
helm [command]
命令可用选项:
- completion 为指定的shell生成自动补全脚本(bash或zsh)
- create 创建一个新的charts
- delete 删除指定版本的release
- dependency 管理charts的依赖
- fetch 下载charts并解压到本地目录
- get 下载一个release
- history release历史信息
- home 显示helm的家目录
- init 在客户端和服务端初始化helm
- inspect 查看charts的详细信息
- install 安装charts
- lint 检测包的存在问题
- list 列出release
- package 将chart目录进行打包
- plugin add(增加), list(列出), or remove(移除) Helm 插件
- repo add(增加), list(列出), remove(移除), update(更新), and index(索引) chart仓库
- reset 卸载tiller
- rollback release版本回滚
- search 关键字搜索chart
- serve 启动一个本地的http server
- status 查看release状态信息
- template 本地模板
- test release测试
- upgrade release更新
- verify 验证chart的签名和有效期
- version 打印客户端和服务端的版本信息
Helm 安装时已经默认配置好了两个仓库:stable
和 local
。stable
是官方仓库,local
是用户存放自己开发的chart
的本地仓库。
[root@node1 ~]# helm repo list
NAME URL
stable http://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
local http://127.0.0.1:8879/charts