Helm安装部署详解

简介

Helm是一个kubernetes应用的包管理工具,用来管理预先配置好的安装包资源。
Helm chart是用来封装kubernetes原生应用程序的yaml文件,可以在你部署应用的时候自定义应用程序的一些metadata,便与应用程序的分发。

名词解释

Helm:

是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。

Tiller:

是 Helm 的服务端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的请求,并根据 Chart 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用。Tiller 还提供了 Release 的升级、删除、回滚等一系列功能。

Chart:

Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。

Repoistory:

Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。

Release:

使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。

--注:需要注意的是:Helm 中提到的 Release 和我们通常概念中的版本有所不同,这里的 Release 可以理解为 Helm 使用 Chart 包部署的一个应用实例. 

Chart Install 过程

Helm 从指定的目录或者 TAR 文件中解析出 Chart 结构信息。
Helm 将指定的 Chart 结构和 Values 信息通过 gRPC 传递给 Tiller。
Tiller 根据 Chart 和 Values 生成一个 Release。
Tiller 将 Release 发送给 Kubernetes 用于生成 Release。

Chart Update 过程

Helm 从指定的目录或者 TAR 文件中解析出 Chart 结构信息。
Helm 将需要更新的 Release 的名称、Chart 结构和 Values 信息传递给 Tiller。
Tiller 生成 Release 并更新指定名称的 Release 的 History。
Tiller 将 Release 发送给 Kubernetes 用于更新 Release。

Chart Rollback 过程

Helm 将要回滚的 Release 的名称传递给 Tiller。
Tiller 根据 Release 的名称查找 History。
Tiller 从 History 中获取上一个 Release。
Tiller 将上一个 Release 发送给 Kubernetes 用于替换当前 Release。

Chart 处理依赖说明

Tiller 在处理 Chart 时,直接将 Chart 以及其依赖的所有 Charts 合并为一个 Release,同时传递给 Kubernetes。因此 Tiller 并不负责管理依赖之间的启动顺序。Chart 中的应用需要能够自行处理依赖关系。

Helm和charts的主要作用:

应用程序封装
版本管理
依赖检查
便于应用程序分发

安装Helm

前提要求:

Kubernetes1.5以上版本;
集群可访问到的镜像仓库;
k8s 集群可以正常工作,执行helm命令的主机可以访问到kubernetes集群。

脚本安装

Helm 现在有一个安装 shell 脚本,将自动获取最新版本的 Helm 客户端并在本地安装。
可以获取该脚本,然后在本地执行它。这种方法有文档指导,以便可以在运行之前仔细阅读并理解它在做什么。

安装方法

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh

执行安装

[root@kubm-01 ~]# ./get_helm.sh
Downloading https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz
Preparing to install helm and tiller into /usr/local/bin
helm installed into /usr/local/bin/helm
tiller installed into /usr/local/bin/tiller
Run 'helm init' to configure helm.
[root@kubm-01 ~]# 
[root@kubm-01 ~]# 
[root@kubm-01 ~]# 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.

安装

Helm 的服务器端部分 Tiller 通常运行在 Kubernetes 集群内部。但是对于开发,它也可以在本地运行,并配置为与远程 Kubernetes 群集通信。

创建tiller的serviceaccount和clusterrolebinding

kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

快捷群集内安装

安装 tiller 到群集中最简单的方法就是运行 helm init。这将验证 helm 本地环境设置是否正确(并在必要时进行设置)。然后它会连接到 kubectl 默认连接的任何集群(kubectl config view)。一旦连接,它将安装 tiller 到 kube-system 命名空间中。

你可以通过参数运行 helm init:

--canary-image 参数安装金丝雀版本
--tiller-image 安装特定的镜像(版本)
--kube-context 使用安装到特定群集
--tiller-namespace 用一个特定的命名空间 (namespace) 安装
--service-account 使用 Service Account 安装 RBAC enabled clusters)
--automount-service-account false 不适用 service account 安装

更新helm镜像仓库地址:

若无法访问 gcr.io,可以使用阿里云镜像,使用-i指定自己的镜像,因为官方的镜像因为某些原因无法拉取,官方镜像地址是:gcr.io/kubernetes-helm/tiller:v2.x.xx,使用helm version可查看helm客户端版本。

helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.2 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

将Tiller安装到Kubernetes集群中:

helm init --history-max 200

--history-max 设置最大历史记录,大限制清除,如果没有设置最大历史记录,则无限期地保留历史记录.

返回

$HELM_HOME has been configured at /root/.helm.

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

应用程序设置serviceAccount:

请注意:默认情况下,部署舵柄与一个不安全的“允许未经身份验证的用户”政策。

kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

验证安装

helm init 以后,可以运行 kubectl get pods --namespace kube-system 并看到 Tiller 正在运行。tiller默认被部署在k8s集群中的kube-system这个namespace下。一旦安装了

除非设置 --tiller-namespace 或 TILLER_NAMESPACE 参数,否则 Helm 将在命名空间 kube-system 中查找 Tiller

[root@kubm-01 ~]# kubectl get pod -n kube-system -l app=helm

NAME                             READY   STATUS    RESTARTS   AGE
tiller-deploy-8557598fbc-4ljt2   1/1     Running   0          10d

查看版本

[root@kubm-01 ~]# helm version
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}

删除或重新安装 Tiller

由于 Tiller 将其数据存储在 Kubernetes ConfigMaps 中,因此可以安全地删除并重新安装 Tiller,而无需担心丢失任何数据。
推荐删除 Tiller 的方法是使用

kubectl delete deployment tiller-deploy --namespace kube-system 

或更简洁使用 

helm reset

然后可以从客户端重新安装 Tiller:

rm -rf .helm

helm init --history-max 200

参考文档:

https://helm.sh/docs/
https://jimmysong.io/kubernetes-handbook/practice/helm.html
http://www.voidcn.com/article/p-hhtdortf-bxq.html
https://www.jianshu.com/p/ab26b5762cf5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值