从一天开始,使用头盔在Kubernetes集群上部署图表,就无法部署新的或升级已有的。

确实,每次使用头盔时,我都会收到一条错误消息,告诉我

如果运行helm install --name foo . -f values.yaml --namespace foo-namespace,我将得到以下输出:


错误:发布foo失败:服务器无法找到请求的资源



如果运行helm upgrade --install foo . -f values.yaml --namespace foo-namespacehelm upgrade foo . -f values.yaml --namespace foo-namespace,则会出现此错误:


错误:升级失败:“ foo “没有部署的发布版本


我不太明白为什么。

这是我的掌舵版本: />
在我的kubernetes集群上,当我运行kubectl describe pods tiller-deploy-84b... -n kube-system时,我已经部署了具有相同版本的分till:

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



UPDATE

下面的答案建议,我已经运行了这两个命令helm upgrade foo . -f values.yaml --namespace foo-namespace --force | helm upgrade --install foo . -f values.yaml --namespace foo-namespace --force仍然出现错误:

Name:               tiller-deploy-84b8...
Namespace:          kube-system
Priority:           0
PriorityClassName:  <none>
Node:               k8s-worker-1/167.114.249.216
Start Time:         Tue, 26 Feb 2019 10:50:21 +0100
Labels:             app=helm
                    name=tiller
                    pod-template-hash=84b...
Annotations:        <none>
Status:             Running
IP:                 <IP_NUMBER>
Controlled By:      ReplicaSet/tiller-deploy-84b8...
Containers:
  tiller:
    Container ID:   docker://0302f9957d5d83db22...
    Image:          gcr.io/kubernetes-helm/tiller:v2.12.3
    Image ID:       docker-pullable://gcr.io/kubernetes-helm/tiller@sha256:cab750b402d24d...
    Ports:          44134/TCP, 44135/TCP
    Host Ports:     0/TCP, 0/TCP
    State:          Running
      Started:      Tue, 26 Feb 2019 10:50:28 +0100
    Ready:          True
    Restart Count:  0
    Liveness:       http-get http://:44135/liveness delay=1s timeout=1s period=10s #success=1 #failure=3
    Readiness:      http-get http://:44135/readiness delay=1s timeout=1s period=10s #success=1 #failure=3
    Environment:
      TILLER_NAMESPACE:    kube-system
      TILLER_HISTORY_MAX:  0
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from helm-token-... (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  helm-token-...:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  helm-token-...
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age   From                   Message
  ----    ------     ----  ----                   -------
  Normal  Scheduled  26m   default-scheduler      Successfully assigned kube-system/tiller-deploy-84b86cbc59-kxjqv to worker-1
  Normal  Pulling    26m   kubelet, k8s-worker-1  pulling image "gcr.io/kubernetes-helm/tiller:v2.12.3"
  Normal  Pulled     26m   kubelet, k8s-worker-1  Successfully pulled image "gcr.io/kubernetes-helm/tiller:v2.12.3"
  Normal  Created    26m   kubelet, k8s-worker-1  Created container
  Normal  Started    26m   kubelet, k8s-worker-1  Started container


请注意,foo-namespace已经存在。因此,错误并非来自命名空间名称。的确,如果我运行helm list,我可以看到foo图表处于FAILED状态。

有人遇到过同样的问题吗?

#1 楼

是的,这在调试头盔发布时经常发生。当先前失败的发行版阻止您对其进行更新时,就会发生此问题。

如果运行helm ls,应该会看到状态为FAILED的发行版。您可能已将其删除,在这种情况下,可能会显示helm ls -a。无法使用将旧Yaml进行比较的头盔来进行常规升级的方法来升级这种发行版,以检测哪些对象需要更改,因为它是失败的发行版。

因为这种情况通常在尝试获取时发生我正在运行一些新的东西,通常是失败的版本。不过,这有点太激烈了,因此您可能要尝试添加helm delete —purge进行升级

https://github.com/helm/helm/pull/2280

评论


请参阅我的第一篇文章的最新动态,但是按照您的建议,我仍然会遇到相同的错误。

– french_dev
19 Mar 4 '19 at 14:39

我遇到过同样的问题。问题在于该版本已被删除但尚未清除。 hes ls没有显示出来,但是hes ls -a显示了。运行helm delete --purge 后,我能够安装该发行版。

–托马斯
19年8月29日在7:21

#2 楼

正如simbo1905在她/他的回答中提到的那样,在FAILED状态下的释放可能会发生这种情况。

另一种情况是,如果以前删除但未清除的发行版具有相同的名称。

使用发行版上的purge选项进行另一个删除将释放该名称,以供重用。

helm ls -a
helm ls -a | grep -e NAME -e name_of_release
helm delete --purge name_of_release


注意:此问题https:// github.com/helm/helm/issues/972建议使用一个参数来强制重用相同的名称,但是也建议不要在生产中使用该参数(即除非知道您在做什么,否则不要自动使用replace)。

> helm install --help
[...]
    --replace    re-use the given name, even if that name is already used. This is unsafe in production
[...]