7

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

helm init

我可以看到分蘖豆荚正在 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

并使用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

我可以看到分蘖 pod 在其中一个节点而不是 master 上运行,该节点上没有运行 api 服务器,为什么它连接到 127.0.0.1 而不是我的 master ip?

4

3 回答 3

10

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

kubectl config view --raw > ~/.kube/config
于 2019-12-31T17:30:47.463 回答
1

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

kubectl delete deployment tiller-deploy --namespace=kube-system
kubectl delete service tiller-deploy --namespace=kube-system
rm -rf $HOME/.helm/

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

kubectl create clusterrolebinding tiller-cluster-admin \
    --clusterrole=cluster-admin \
    --serviceaccount=kube-system:default

然后使用以下命令安装 helm server (Tiller):

helm init
于 2017-11-09T12:27:47.567 回答
1

因此,自从在我的工作站上几周以来,我就遇到了这个问题,并且提供的答案(此处或 Github 中)都没有对我有用。

它的作用是:

sudo kubectl proxy --kubeconfig ~/.kube/config --port 80

请注意,我使用的是 80 端口,因此我需要使用 sudo 才能在此处绑定代理,但如果您使用的是 8080,则不需要。

请注意这一点,因为上面命令指向的 kubeconfig 文件位于/root/.kube/config而不是您通常的 $HOME 中。您可以使用绝对路径指向要使用的配置,也可以在根目录中创建一个(或使用此 sudo 标志来保留原始 HOME env var --preserve-env=HOME)。

现在,如果您自己使用 helm,我想就是这样。为了让我的设置正常工作,当我通过 GKE 上的 Terraform 提供程序使用 Helm 时,调试起来很痛苦,因为我收到的消息甚至没有提到 Helm,而且它在计划时由 Terraform 返回。对于可能处于类似情况的任何人:

在任何具有 Helm 版本的集群中,在 Terraform 中执行计划/应用操作时的错误:

Error: error installing: Post "http://localhost/apis/apps/v1/namespaces/kube-system/deployments": dial tcp [::1]:80: connect: connection refused
Error: Get "http://localhost/api/v1/namespaces/system/secrets/apigee-secrets": dial tcp [::1]:80: connect: connection refused

集群中每个 helm 版本或类似的错误之一。在这种情况下,对于 GKE 集群,我必须确保 env var GOOGLE_APPLICATION_CREDENTIALS 指向具有有效凭据的密钥文件(应用程序默认值,除非您没有使用应用程序身份验证的默认设置):

  gcloud auth application-default login 
  export GOOGLE_APPLICATION_CREDENTIALS=/home/$USER/.config/gcloud/application_default_credentials.json

有了 kube 代理和正确的凭据,我可以再次像往常一样使用 Terraform(和 Helm)。我希望这对任何遇到这种情况的人都有帮助。

于 2021-06-06T22:06:16.340 回答