kubenetes1.18.6 安装helm报错与解决办法

引言:
Helm(官网地址)这个东西其实早有耳闻,但是一直没有用在生产环境,而且现在对这货的评价也是褒贬不一。正好最近需要再次部署一套测试环境,对于单体服务,部署一套测试环境我相信还是非常快的,但是对于微服务架构的应用,要部署一套新的环境,就有点折磨人了,微服务越多、你就会越绝望的。虽然我们线上和测试环境已经都迁移到了kubernetes环境,但是每个微服务也得维护一套yaml文件,而且每个环境下的配置文件也不太一样,部署一套新的环境成本是真的很高。如果我们能使用类似于yum的工具来安装我们的应用的话是不是就很爽歪歪了啊?Helm就相当于kubernetes环境下的yum包管理工具。

用途
做为 Kubernetes 的一个包管理工具,Helm具有如下功能:

创建新的 chart
chart 打包成 tgz 格式
上传 chart 到 chart 仓库或从仓库中下载 chart
在Kubernetes集群中安装或卸载 chart
管理用Helm安装的 chart 的发布周期

重要概念
Helm 有三个重要概念:
1)chart:包含了创建Kubernetes的一个应用实例的必要信息
2)config:包含了应用发布配置信息
3)release:是一个 chart 及其配置的一个运行实例

Helm组件
Helm Client

Helm Client 是用户命令行工具,其主要负责如下:
1)本地 chart 开发
2)仓库管理
3)与 Tiller sever 交互
4)发送预安装的 chart
5)查询 release 信息
6)要求升级或卸载已存在的 release

Tiller Server
Tiller Server是一个部署在Kubernetes集群内部的 server,其与 Helm client、Kubernetes API server 进行交互。
Tiller server 主要负责如下:
1)监听来自 Helm client 的请求
2)通过 chart 及其配置构建一次发布
3)安装 chart 到Kubernetes集群,并跟踪随后的发布
4)通过与Kubernetes交互升级或卸载 chart
5)简单的说,client 管理 charts,而 server 管理发布 release

安装
下载二进制文件,这里下载的v2.10.0版本,解压后将可执行文件helm拷贝到/usr/local/bin目录下即可,这样Helm客户端就在这台机器上安装完成了。

https://github.com/helm/helm/releases

现在我们可以使用Helm命令查看版本了,会提示无法连接到服务端Tiller:

$ helm version
Client: &version.Version{SemVer:"v2.10.0", GitCommit:"9ad53aac42165a5fadc6c87be0dea6b115f93090", GitTreeState:"clean"}
Error: could not find tiller

要安装 Helm 的服务端程序,我们需要使用到kubectl工具,所以先确保kubectl工具能够正常的访问 kubernetes 集群的apiserver哦。

然后我们在命令行中执行初始化操作:

$ helm init --upgrade --tiller-image cnych/tiller:v2.10.0 --stable-repo-url https://cnych.github.io/kube-charts-mirror/

正常情况下执行 helm init xxx即可,
但是在kubernetes 1.16.0及之后的版本上执行却报如下错误:
在这里插入图片描述
原因是因为1.16.0之后的deployment 的apiversion的endpoint发生了变化需要做如下处理:
输出tiller的定义文件

> helm init --output yaml > tiller.yaml
#修改定义文件 apiVersion改为apps/v1,并新增selector信息 如下:
>vim tiller.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: helm
    name: tiller
  name: tiller-deploy
  namespace: kube-system
spec:
  replicas: 1
  strategy: {}
  selector:
    matchLabels:
      app: helm
      name: tiller
...
     image: cnych/tiller:v2.10.0   镜像地址修改为国内
     imagePullPolicy: IfNotPresent
 ....
#修改后执行定义文件
> kubectl apply -f tiller.yaml

执行后使用helm version查看,发现server已经安装成功:

>  helm version
Client: &version.Version{SemVer:"v2.14.1", GitCommit:"5270352a09c7e8b6e8c9593002a73535276507c0", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.1", GitCommit:"5270352a09c7e8b6e8c9593002a73535276507c0", GitTreeState:"clean"}

执行helm list发现仍有报错如下:

> helm list   
Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list resource "configm

执行如下命令:

kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'      
helm init --service-account tiller --upgrade
helm init --service-account tiller --override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's@apiVersion: extensions/v1beta1@apiVersion: apps/v1@' | kubectl apply -f -

执行后tiller安装成功。

注:关于这个报错Error: error installing: the server could not find the requested resource
可以直接使用以下命令解决,就不会再报rbacx相关的错误了。

helm init --service-account tiller --override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's@apiVersion: extensions/v1beta1@apiVersion: apps/v1@' | kubectl apply -f -

ps:
如果出现本地通过helm安装组件失败:
在这里插入图片描述
执行如下命令即可:

helm init --client-only --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值