36

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

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

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

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

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

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

使用“helm create”和“helm search”工作,但与分蘖部署交互似乎不起作用。Tiller 根据 Helm 安装文档安装和运行。

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)

以下是正在运行的 pod:

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
4

9 回答 9

74

来自 GitHub 问题的 kujenga 给出的解决方案无需任何其他修改即可工作:

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"}}}}'
于 2017-07-25T14:27:52.767 回答
26

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

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

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

“第一次使用 kubeadm v1.6.1 安装集群时,初始化默认设置 RBAC 控制访问,这与 Tiller 进行安装、扫描已安装组件等所需的权限混淆了。helm init 可以正常工作,但 helm list、helm install 等都不起作用,理由是缺少一些权限或其他。”

建议临时解决:

“我们使用命令 kubectl create clusterrolebinding permissive-binding --clusterrole=cluster-admin --user=admin --user=kubelet --group=system:serviceaccounts“禁用”RBAC;”

但我不能说它的有效性。好消息是这是一个已知问题,并且正在努力解决它。希望这可以帮助。

于 2017-04-20T07:42:22.890 回答
11

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

当您“helm init”时,Helm 不会创建服务帐户,并且默认帐户没有从 configmap 读取的权限 - 因此它将无法运行检查以查看它是否想要的部署名称用途是独一无二的。

这让我过去了:

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

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

于 2017-05-15T18:27:47.747 回答
3

Kubernetes 中的所有插件都使用“默认”服务帐户。 因此 Helm 也使用“默认”服务帐户运行。您应该为其提供权限。为其分配角色绑定。

对于只读权限:

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

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

  1. 首先创建命名空间
  2. 为命名空间创建 serviceaccount
  3. 使用以下命令在各自的命名空间中安装分蘖。

helm init --tiller-namespace 测试命名空间

于 2018-07-16T18:58:33.803 回答
3

这个解决方案对我有用: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 容器集群交互,我不知道如何解决这个问题。

于 2019-03-18T15:48:23.547 回答
2

根据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"}}}}'
于 2018-01-09T16:54:26.643 回答
2

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

helm init --service-account default

当 RBAC(服务帐户)命令不起作用时,这对我有用。

于 2018-04-30T06:00:10.313 回答
1

这是一个 RBAC 问题。您需要有一个具有集群管理员角色的服务帐户。您应该在 HELM 初始化期间传递此服务帐户。

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

helm init --service-account=tiller

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

于 2019-06-20T18:40:39.910 回答
0

检查您的分蘖容器的日志:

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

如果你发现这样的事情:

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

那么可能这里描述的防火墙/iptables解决方案是删除一些规则:

sudo iptables -D  INPUT -j REJECT --reject-with icmp-host-prohibited
sudo iptables -D  FORWARD -j REJECT --reject-with icmp-host-prohibited
于 2020-02-05T14:35:23.243 回答