Helm: Error: no available release name found

Helm: Error: no available release name found

我在使用 Helm 时遇到了一些错误,我在其他地方找不到解释。两个错误如下。

Error: no available release name found
Error: the server does not allow access to the requested resource (get configmaps)

这两个错误的更多详细信息在下面的代码块中。

我已经在 Ubuntu 16.04 上安装了一个 Kubernetes 集群。我有一个 Master (K8SMST01) 和两个节点 (K8SN01 & K8SN02)。

这是使用 kubeadm 创建的,使用 1.6+ 的 Weave 网络。

就部署、服务、Pods 等而言,一切似乎 运行 都很好...DNS 似乎工作正常,这意味着 pods 可以使用 DNS 访问服务姓名 (myservicename.default).

使用 "helm create" 和 "helm search" 工作,但与 tiller 部署交互似乎不起作用。根据 Helm 安装文档安装并 运行ning 了 Tiller。

root@K8SMST01:/home/blah/charts# helm version

Client: &version.Version{SemVer:"v2.3.0", 
GitCommit:"d83c245fc324117885ed83afc90ac74afed271b4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.3.0", GitCommit:"d83c245fc324117885ed83afc90ac74afed271b4", GitTreeState:"clean"}

root@K8SMST01:/home/blah/charts# helm install ./mychart

Error: no available release name found

root@K8SMST01:/home/blah/charts# helm ls

Error: the server does not allow access to the requested resource (get configmaps)

这里是运行宁pods:

root@K8SMST01:/home/blah/charts# kubectl get pods -n kube-system -o wide
NAME                                      READY     STATUS    RESTARTS   AGE       IP             NODE
etcd-k8smst01                             1/1       Running   4          1d        10.139.75.19   k8smst01
kube-apiserver-k8smst01                   1/1       Running   3          19h       10.139.75.19   k8smst01
kube-controller-manager-k8smst01          1/1       Running   2          1d        10.139.75.19   k8smst01
kube-dns-3913472980-dm661                 3/3       Running   6          1d        10.32.0.2      k8smst01
kube-proxy-56nzd                          1/1       Running   2          1d        10.139.75.19   k8smst01
kube-proxy-7hflb                          1/1       Running   1          1d        10.139.75.20   k8sn01
kube-proxy-nbc4c                          1/1       Running   1          1d        10.139.75.21   k8sn02
kube-scheduler-k8smst01                   1/1       Running   3          1d        10.139.75.19   k8smst01
tiller-deploy-1172528075-x3d82            1/1       Running   0          22m       10.44.0.3      k8sn01
weave-net-45335                           2/2       Running   2          1d        10.139.75.21   k8sn02
weave-net-7j45p                           2/2       Running   2          1d        10.139.75.20   k8sn01
weave-net-h279l                           2/2       Running   5          1d        10.139.75.19   k8smst01

我认为这是一个 RBAC 问题。 helm 似乎还没有为 1.6.1 的 RBAC 准备好。

Helm 的 Github 上有一个未解决的问题。

https://github.com/kubernetes/helm/issues/2224

"When installing a cluster for the first time using kubeadm v1.6.1, the initialization defaults to setting up RBAC controlled access, which messes with permissions needed by Tiller to do installations, scan for installed components, and so on. helm init works without issue, but helm list, helm install, and so on all do not work, citing some missing permission or another."

已建议临时解决方法:

"We "disable" RBAC using the command kubectl create clusterrolebinding permissive-binding --clusterrole=cluster-admin --user=admin --user=kubelet --group=system:serviceaccounts;"

但我不能保证它的有效性。好消息是这是一个已知问题,正在努力修复它。希望这有帮助。

我在 CentOS 7 上设置 kubeadm 时遇到了同样的问题。

当您 "helm init" 时,Helm 不会创建服务帐户,而默认帐户没有从配置映射中读取的权限 - 因此它将无法 运行检查它要使用的部署名称是否唯一。

这让我过去了:

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

但这给了默认帐户大量的权力,我这样做只是为了继续我的工作。 Helm 需要在 "helm init" 代码中添加创建自己的服务帐户。

The solution given by kujenga from the GitHub issue 在没有任何其他修改的情况下工作:

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"}}}}'

根据 https://github.com/kubernetes/helm/issues/2224#issuecomment-356344286,以下命令也为我解决了错误:

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"}}}}'

https://github.com/kubernetes/helm/issues/3055

helm init --service-account default

当 RBAC (serviceaccount) 命令不起作用时,这对我有用。

kubernetes 中的所有插件都使用 "defaults" 服务帐户。 所以 Helm 也使用 "default" 服务帐户运行。您应该为其提供权限。为其分配角色绑定。

对于只读权限:

kubectl create rolebinding default-view --clusterrole=view \ --serviceaccount=kube-system:default --namespace=kube-system

对于管理员权限:例如:安装包。

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

您还可以使用以下命令在不同的命名空间中安装 tiller 服务器。

  1. 首先创建命名空间
  2. 为命名空间创建服务帐户
  3. 使用以下命令在相应的命名空间中安装 tiller。

helm init --tiller-namespace test-namespace

这个解决方案对我有用:https://github.com/helm/helm/issues/3055#issuecomment-397296485

$ kubectl create serviceaccount --namespace kube-system tiller

$ kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

$ helm init --service-account tiller --upgrade

$ helm update repo

$ helm install stable/redis --version 3.3.5

但在那之后,情况发生了变化;我必须在我的 kubectl 命令中添加 --insecure-skip-tls-verify=true 标志!知道我正在与 gcloud 容器集群交互,我不知道如何解决这个问题。

这是一个 RBAC 问题。您需要有一个具有 cluster-admin 角色的服务帐户。并且您应该在 HELM 初始化期间传递此服务帐户。

例如,如果您创建了一个名为 tiller 的服务帐户,您的 heml 命令将如下所示。

helm init --service-account=tiller

我关注了这个博客来解决这个问题。 https://scriptcrunch.com/helm-error-no-available-release/

检查您的 Tiller 容器的日志:

kubectl logs tiller-deploy-XXXX --namespace=kube-system

如果您发现这样的东西:

Error: 'dial tcp 10.44.0.16:3000: connect: no route to host'

然后可能 firewall/iptables 描述 here 解决方案是删除一些规则:

sudo iptables -D  INPUT -j REJECT --reject-with icmp-host-prohibited
sudo iptables -D  FORWARD -j REJECT --reject-with icmp-host-prohibited