k8s集群安装helm包管理器

摘要:
介绍Helm是一个kubernetes应用的包管理工具,用来管理预先配置好的安装包资源。Release:使用helminstall命令在Kubernetes集群中部署的Chart称为Release。Helm将指定的Chart结构和Values信息通过gRPC传递给Tiller。Tiller生成Release并更新指定名称的Release的History。Helm和charts的主要作用:应用程序封装版本管理依赖检查便于应用程序分发安装helm包管理器Kubernetes1.8以上版本;集群可访问到的镜像仓库;k8s集群可以正常工作,执行helm命令的主机可以访问到kubernetes集群。

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

架构
k8s集群安装helm包管理器第1张

解释

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.8以上版本;
集群可访问到的镜像仓库;
k8s集群可以正常工作,执行helm命令的主机可以访问到kubernetes集群。

1.下载脚本

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

2.执行安装

[root@master1 ~]# ./get_helm.sh                                                                                                                                                                                           
Downloading https://get.helm.sh/helm-v2.17.0-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@master1 ~]# 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://charts.helm.sh/stable 

3.创建tiller命名空间 注意:Helm 的服务器端部分 Tiller 通常运行在 Kubernetes 集群内部。但是对于开发,它也可以在本地运行,并配置为与远程 Kubernetes 群集通信。
创建tiller的serviceaccount和clusterrolebinding

[root@master1 ~]# kubectl create serviceaccount --namespace kube-system tiller
serviceaccount/tiller created

[root@master1 ~]# kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
clusterrolebinding.rbac.authorization.k8s.io/tiller-cluster-rule created

4.快捷群集内安装
安装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 安装

5.更新helm镜像仓库地址 (helm镜像仓库地址如果不能用根据自己的仓库地址更换)

[root@master1 ~]# helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.17.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
Creating /root/.helm/repository/repositories.yaml 
Adding stable repo with URL: https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 
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.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://v2.helm.sh/docs/securing_installation/

6.将Tiller安装到Kubernetes集群中

[root@master1 ~]# helm init --history-max 200          # --history-max 设置最大历史记录,大限制清除,如果没有设置最大历史记录,则无限期地保留历史记录.
$HELM_HOME has been configured at /root/.helm.
Warning: Tiller is already installed in the cluster.
(Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.)

7.应用程序设置serviceAccount 注意:默认情况下,部署舵柄与一个不安全的“允许未经身份验证的用户”政策。

[root@master1 ~]# kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
deployment.apps/tiller-deploy patched

8.验证并查看版本 注意:helm init以后,可以运行kubectl get pods --namespace kube-system并看到Tiller正在运行。tiller默认被部署在k8s集群中的kube-system这个namespace下。一旦安装了除非设置--tiller-namespace或TILLER_NAMESPACE参数,否则Helm将在命名空间kube-system中查找 Tiller

[root@master1 ~]# kubectl get pod -n kube-system -l app=helm
NAME                            READY   STATUS    RESTARTS   AGE
tiller-deploy-c44c77cfb-kln4s   1/1     Running   0          21s

[root@master1 ~]# helm version
Client: &version.Version{SemVer:"v2.17.0", GitCommit:"a690bad98af45b015bd3da1a41f6218b1a451dbe", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.17.0", GitCommit:"a690bad98af45b015bd3da1a41f6218b1a451dbe", GitTreeState:"clean"}

免责声明:文章转载自《k8s集群安装helm包管理器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名 zhuanhttp请求 url 传递参数(特殊字符)解决方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HighChart 实现从后台取数据来实时更新柱状和折线组图

前段时间公司让弄图表,给我说有HighCharts这个js插件,于是上网上搜,由于本人是写后端的,对于JavaScript和jQuery不是很熟悉,虽然找到了模板,但是还是不明白,所以一点一点的改,但好的结果是最后还是搞出来,所以写个随笔,记录和总结下 var id =${id}; $.ajax({ url: '${base}/ac...

第六篇 kubernetes helm部署harbor镜像仓库

1.harbor镜像仓库简介 Harbor 是为企业用户设计的容器镜像仓库开源项目,包括了权限管理(RBAC)、LDAP、审计、安全漏洞扫描、 镜像验真、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。 2.harbor 组件简介 从安装组件我们可以看出harbor主要依靠以下几个组件: Nginx...

GitHub上优秀的Go开源项目

2014年11月,Golang官方博客发布Go语言核心开发组成员Andrew Gerrand文章 《Half a decade with Go》,以纪念Go语言发布5周年。Andrew Gerrand在文章中称,Go语言在工业界向云计算转型时代找到了自己的位置,目前一些重量级的云计算项目比如有名的Docker等都是用Go语言开发的,并预言“2015年将是G...

k8s--04 部署harbor作为k8s镜像仓库

目录 k8s实战 部署harbor作为k8s镜像仓库 1.实验目标 2.在node1上安装harbor 3.编辑harbor配置文件 4.执行安装 5.浏览器访问 6.建立镜像仓库 7. 所有节点都配置docker信任harbor仓库并重启docker 注意:所有节点 8.docker登陆harbor ( 所有节点 都执行 ) 9.下载镜像修改tag...

Kubernetes进阶实战读书笔记:StatefulSet控制器(资源升级)

一、滚动更新 1、将myapp控制器下的pod资源镜像升级为:"ikubernetes/myapp:v6" [root@master ~]# kubectl set image sts myapp myapp=ikubernetes/myapp:v6 statefulset.apps/myapp image updated 2、实时监控更新操作过程 [ro...

使用kubeadm部署K8S v1.17.0集群

环境信息 操作系统:CentOS Linux release 7.7.1908 (Core) docker:19.03.8 kubernetes:v1.17.0 集群信息 hostname IP k8s-master 192.168.87.10 k8s-node01 192.168.87.11 一、准备工作(所有节点执行) 1.1、...