为什么 Tiller 连接到 localhost 8080 以获得 kubernetes api?

Jak*_*kim 7 kubernetes kubernetes-helm

使用 helm 进行 kubernetes 包管理时,安装 helm 客户端后,

helm init
Run Code Online (Sandbox Code Playgroud)

我可以看到分蘖豆荚正在 kubernetes 集群上运行helm ls,然后当我运行时,它给出了一个错误:

Error: Get http://localhost:8080/api/v1/namespaces/kube-system/configmaps?labe 
lSelector=OWNER%3DTILLER: dial tcp 127.0.0.1:8080: getsockopt: connection 
refused
Run Code Online (Sandbox Code Playgroud)

并使用kubectl logs我可以看到类似的消息:

[storage/driver] 2017/08/28 08:08:48 list: failed to list: Get 
http://localhost:8080/api/v1/namespaces/kube-system/configmaps?
labelSelector=OWNER%3DTILLER: dial tcp 127.0.0.1:8080: getsockopt: connection 
refused
Run Code Online (Sandbox Code Playgroud)

我可以看到分蘖吊舱正在节点之一而不是主节点上运行,该节点上没有运行 api 服务器,为什么它连接到 127.0.0.1 而不是我的主 IP?

小智 9

在做之前运行这个helm init。它对我有用。

kubectl config view --raw > ~/.kube/config
Run Code Online (Sandbox Code Playgroud)


小智 1

首先删除tiller部署并停止tiller服务。通过运行以下命令,

kubectl delete deployment tiller-deploy --namespace=kube-system
kubectl delete service tiller-deploy --namespace=kube-system
rm -rf $HOME/.helm/
Run Code Online (Sandbox Code Playgroud)

默认情况下,helm init 将 Tiller pod 安装到 kube-system 命名空间中,并将 Tiller 配置为使用默认服务帐户。使用以下命令为 Tiller 配置集群管理员访问权限:

kubectl create clusterrolebinding tiller-cluster-admin \
    --clusterrole=cluster-admin \
    --serviceaccount=kube-system:default
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令安装 helm 服务器(Tiller):

helm init
Run Code Online (Sandbox Code Playgroud)