Helm is the best way to find, share, and use software built for Kubernetes.

Helm 基本概念

Helm之于Kubernetes好比yum之于RHEL,或者apt-get之于Ubuntu。Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现、共享和使用为Kubernetes构建的应用,它包含几个基本概念

  • Chart:一个 Helm 包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含 Kubernetes 集群中的服务定义,类似 Homebrew 中的 formula,APT 的 dpkg 或者 Yum 的 rpm 文件,
  • Release: 在 Kubernetes 集群上运行的 Chart 的一个实例。在同一个集群上,一个 Chart 可以安装很多次。每次安装都会创建一个新的 release。例如一个 MySQL Chart,如果想在服务器上运行两个数据库,就可以把这个 Chart 安装两次。每次安装都会生成自己的 Release,会有自己的 Release 名称。
  • Repository:用于发布和存储 Chart 的仓库。

Helm 组件

Helm 采用客户端/服务器架构,有如下组件组成:

  • Helm CLI 是 Helm 客户端,可以在本地执行
  • Tiller 是服务器端组件,在 Kubernetes 群集上运行,并管理 Kubernetes 应用程序的生命周期
  • Repository 是 Chart 仓库,Helm客户端通过HTTP协议来访问仓库中Chart的索引文件和压缩包。

Helm 安装

Every release of Helm provides binary releases for a variety of OSes. These binary versions can be manually downloaded and installed.

  1. Download your desired version
  2. Unpack it (tar -zxvf helm-v2.0.0-linux-amd64.tgz)
  3. Find the helm binary in the unpacked directory, and move it to its desired destination (mv linux-amd64/helm /usr/local/bin/helm)

From there, you should be able to run the client:

[root@ec-k8s-m1 ~]# helm version
Client: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}
Error: could not find tiller # tiller 未配置

Tiller

Server: Tiller应用运行在Kubernetes内部

root@ec-k8s-m1 helm]# vi helm-rbac.yaml

## 配置helm的Service account及其相关角色
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: helm
  name: helm-admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: helm-admin
  labels:
    k8s-app: helm
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: helm-admin
    namespace: kube-system
 
[root@ec-k8s-m1 helm]# kubectl apply -f helm-rbac.yaml

可预先拉取国内 tiller 镜像

在缺省配置下, Helm 会利用 “gcr.io/kubernetes-helm/tiller” 镜像在Kubernetes集群上安装配置 Tiller;并且利用 “https://kubernetes-charts.storage.googleapis.com” 作为缺省的 stable repository 的地址。由于在国内可能无法访问 “gcr.io”, “storage.googleapis.com” 等域名,阿里云容器服务为此提供了镜像站点。

registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.11.0

# 全部 node 节点
[root@ec-k8s-n1 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.11.0
v2.11.0: Pulling from google_containers/tiller
c67f3896b22c: Pull complete 
c12cb9af1ab6: Pull complete 
c1946e757e66: Pull complete 
9f15637d9e6c: Pull complete 
Digest: sha256:f6d8f4ab9ba993b5f5b60a6edafe86352eabe474ffeb84cb6c79b8866dce45d1
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.11.0

helm init

## 部署tiller
## 如启用了RBAC,在 helm init 时指定service-account
[root@ec-k8s-m1 ~]# helm init --service-account helm-admin --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.11.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
$HELM_HOME has been configured at /root/.helm.

Tiller (the Helm server-side component) has been upgraded to the current version.
Happy Helming!
kubectl get service --all-namespaces
kubectl get pods --all-namespaces
tiller-deploy service
tiller pod
## 查看helm version
[root@ec-k8s-m1 ~]# helm version
Client: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}

## 查询repo上的内容
[root@ec-k8s-m1 ~]# helm search hadoop
NAME         	CHART VERSION	APP VERSION	DESCRIPTION                                                 
stable/hadoop	1.0.4        	2.7.3      	The Apache Hadoop software library is a framework that al...
stable/luigi 	2.7.2        	           	Luigi is a Python module that helps you build complex pip...
version & search
# 安装完成 
٩( •̀㉨•́ )و get!

参考资料:

https://docs.helm.sh/using_helm/#installing-helm

https://yq.aliyun.com/articles/159601