在使用helm进行kubernetes包管理后,安装了helm客户端后,
后
helm init
我可以看到tiller pod正在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
我可以看到tiller pod在其中一个节点而不是master上运行,该节点上没有运行api服务器,为什么它连接到127.0.0.1而不是我的主ip?
答案 0 :(得分:1)
自从在我的工作站上几周以来,我就遇到了这个问题,并且所提供的答案(此处或 Github 中)都没有对我有用。
它的作用是这样的:
sudo kubectl proxy --kubeconfig ~/.kube/config --port 80
请注意,我使用的是 80 端口,因此我需要使用 sudo 才能在那里绑定代理,但如果您使用的是 8080,则不需要。
请注意这一点,因为上述命令指向的 kubeconfig 文件位于 /root/.kube/config
中,而不是通常的 $HOME 中。您可以使用绝对路径来指向要使用的配置,也可以在 root 的主目录中创建一个(或使用此 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 集群,我必须确保环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向具有有效凭据的密钥文件(application-default,除非您没有使用应用程序身份验证的默认设置):
gcloud auth application-default login
export GOOGLE_APPLICATION_CREDENTIALS=/home/$USER/.config/gcloud/application_default_credentials.json
有了 kube 代理和正确的凭据,我可以像往常一样再次使用 Terraform(和 Helm)。我希望这对任何遇到这种情况的人都有帮助。
答案 1 :(得分:0)
首先删除分蘖部署并停止分蘖服务。通过命令运行
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
答案 2 :(得分:0)
在执行helm init
之前运行此命令。它对我有用。
kubectl config view --raw > ~/.kube/config