#Kubernetes
一、Helm是什么
Helm 是 Kubernetes 的包管理器,是查找、分享和使用软件构建 Kubernetes 的最优方式。Helm 帮助用户管理 Kubernetes 应用——Helm 图表,即使是最复杂的 Kubernetes 应用程序,都可以方便的定义,安装和升级。
包管理器类似于我们在 Ubuntu 中使用的apt、Centos中使用的yum 或者Python中的 pip 一样,能快速查找、下载和安装软件包。Helm 由客户端组件 helm 和服务端组件 Tiller 组成, 能够将一组K8S资源打包统一管理, 是查找、共享和使用为Kubernetes构建的软件的最佳方式。
二、Helm解决了什么问题
在 Kubernetes中部署一个可以使用的应用,需要涉及到很多的 Kubernetes 资源的共同协作。比如你安装一个 WordPress 博客,用到了一些 Kubernetes (下面全部简称k8s)的一些资源对象,包括 Deployment 用于部署应用、Service 提供服务发现、Secret 配置 WordPress 的用户名和密码,可能还需要 pv 和 pvc 来提供持久化服务。并且 WordPress 数据是存储在mariadb里面的,所以需要 mariadb 启动就绪后才能启动 WordPress。这些 k8s 资源过于分散,不方便进行管理,直接通过 kubectl 来管理一个应用,你会发现这十分蛋疼。
所以总结以上,我们在 k8s 中部署一个应用,通常面临以下几个问题:
- 如何统一管理、配置和更新这些分散的 k8s 的应用资源文件
- 如何分发和复用一套应用模板
- 如何将应用的一系列资源当做一个软件包管理
三、Helm的相关组件和概念
Helm 包含两个部分,分别是 helm 客户端 和 Tiller 服务器;
Helm概念如下:
heml
一个命令行工具,用于本地开发及管理chart,chart仓库管理等
Tiller
Helm 的服务端。Tiller 负责接收 Helm 的请求,与 k8s 的 apiserver 交互,根据chart 来生成一个 release 并管理 release
chart
Helm的打包格式叫做chart,所谓chart就是一系列文件, 它描述了一组相关的 k8s 集群资源;Chart 代表着 Helm 包。
它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。
Repoistory
是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。Helm 客户端通过 HTTP 协议来访问存储库中 chart 的索引文件和压缩包。
Release
使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release;
Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 _release_。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该chart两次。每一个数据库都会拥有它自己的 release 和 _release name_。
因此,Helm可以解释为:
- Helm在Kubernetes中安装_Chart_,并且每次安装会创建一个新的_Release_。
- 想查找新chart,可以在Helm Chart 仓库 搜索。
四、Helm的安装
Helm 提供了几种安装方式,这里只提供官方的脚本一键安装,想要查看更多安装方式,请阅读 Helm 的官方文档:
1 | curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh |
安装Tiller
安装好 helm 客户端后,就可以通过以下命令将 Tiller 安装在 kubernetes 集群中:
这个地方默认使用 https://kubernetes-charts.storage.googleapis.com 作为缺省的 stable repository 的地址,但由于国内有一张无形的墙的存在,googleapis.com是不能访问的。可以使用阿里云的源来配置:
1 | helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts |
注意,上面命令的Tiller版本需要和装在本机的Helm版本保持一致
使用helm version
来查看 Helm 版本
执行上面命令后,可以通过 kubectl get po -n kube-system 来查看 tiller 的安装情况。
初始化配置
配置用户权限
由于 kubernetes 从1.6 版本开始加入了 RBAC 授权。当前的 Tiller 没有定义用于授权的 ServiceAccount, 访问 API Server 时会被拒绝,需要给 Tiller 加入授权。
比如:
1 | helm list |
出现以上错误后需要执行以下命令:
1 | kubectl create serviceaccount --namespace kube-system tiller |
使用 helm list 就不会报错了。
初始化仓库
五、实践
查找一个chart
Helm 自带一个强大的搜索命令,可以用来从两种来源中进行搜索:
1 | helm search {chartName} |
搜索是用来发现可用包的一个好办法。一旦找到想安装的 helm 包,便可以通过使用 helm install
命令来安装它。
安装一个helm包
使用 helm install
命令来安装一个新的 helm 包。最简单的使用方法只需要传入两个参数:你命名的release名字和你想安装的chart的名称。
1 | helm install [releaseName] [chartName] |
这里用nginx为例:
1 |
未完待续。