k8s-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
一般helm是安装在k8s集群之外,这里我们就安装在master上了;
https://github.com/helm/helm/releases
下载压缩包,并解压:
[root@master src]# tar zxf helm-v2.9.1-linux-amd64.tar.gz [root@master src]# ls helm-v2.9.1-linux-amd64.tar.gz linux-amd64 [root@master src]# cd linux-amd64/ #解压后名字是 linux-amd64 [root@master linux-amd64]# ls helm LICENSE README.md [root@master linux-amd64]# mv helm /usr/bin/ #直接就能用 [root@master linux-amd64]# helm -h #查看帮助
三、部署Tiller
(1)Tiller运行在K8s集群之上,也必须拥有集群的管理权限,也就是需要一个serviceaccount,创建一个clusterrolebinding到cluster-admin
rbac配置示例文件: https://github.com/helm/helm/blob/master/docs/rbac.md
[root@master helm]# pwd /root/manifests/helm #资源定义清单 [root@master helm]# vim tiller-rbac.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 #创建 [root@master helm]# kubectl apply -f tiller-rbac.yaml serviceaccount/tiller created clusterrolebinding.rbac.authorization.k8s.io/tiller created [root@master helm]# kubectl get sa -n kube-system |grep tiller tiller 1 107s
(2)初始化
进行初始化时,会用到gcr.io/kubernetes-helm中的镜像,可以提前去阿里云下载、打标,镜像标签要和Helm版本号相同;
#初始化 [root@master helm]# helm init Creating /root/.helm Creating /root/.helm/repository Creating /root/.helm/repository/cache Creating /root/.helm/repository/local Creating /root/.helm/plugins Creating /root/.helm/starters Creating /root/.helm/cache/archive Creating /root/.helm/repository/repositories.yaml Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com Adding local repo with URL: http://127.0.0.1:8879/charts $HELM_HOME has been configured at /root/.helm. Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy. For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation Happy Helming! #查看,pod起来了 [root@master helm]# kubectl get pods -n kube-system |grep tiller tiller-deploy-86c9995bb6-6mnvb 1/1 Running 0 49s #查看server、client [root@master helm]# 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
(1)
官方可用的Chart仓库列表: https://hub.kubeapps.com
可以搜索charts
也可以使用helm命令搜索;
[root@master helm]# helm search redis NAME CHART VERSION APP VERSION DESCRIPTION stable/prometheus-redis-exporter 1.0.2 0.28.0 Prometheus exporter for Redis metrics stable/redis 6.4.3 4.0.14 Open source, advanced key-value store. It is of... stable/redis-ha 3.3.3 5.0.3 Highly available Kubernetes implementation of R... stable/sensu 0.2.3 0.28 Sensu monitoring framework backed by the Redis ...
(2)helm常用命令:
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 打印客户端和服务端的版本信息
(3)helm仓库
Helm 安装时已经默认配置好了两个仓库:stable
和 local
。stable
是官方仓库,local
是用户存放自己开发的chart
的本地仓库。
[root@master .helm]# helm repo list NAME URL stable https://kubernetes-charts.storage.googleapis.com local http://127.0.0.1:8879/chart