由于HorizontalPodAutoscaler API版本的更改,升级到Kubernetes 1.25后,Helm升级失败

ars1skjm  于 2023-06-21  发布在  Kubernetes
关注(0)|答案(1)|浏览(178)

Kubernetes升级到1.25后
helm upgrade --install ...失败,出现以下错误:

Error: UPGRADE FAILED: unable to recognize "": no matches for kind "HorizontalPodAutoscaler" in version "autoscaling/v2beta1"

为了解决这个问题,我将HPA从autoscaling/v2beta1更改为autoscaling/v2,并更新了新的API语法。但我不断得到同样的错误时,试图升级 Helm 释放。解决此问题的唯一方法是卸载并重新安装该版本。有人能解释错误的原因,以及如何在不删除和重新安装的情况下修复它吗?

vbopmzt1

vbopmzt11#

helm3将发布状态保密,最后一次发布的helm状态包含旧的API autoscaling/v2beta1,由于某种原因,它会导致升级错误。为了解决这个问题,我编辑了helm secret,将.data.release用base64编码解压缩两次,然后将autoscaling/v2beta1解压缩替换为autoscaling/v2,然后将其压缩编码两次。
在此更改以及新API版本(和语法)的更改之后,问题得到了解决,我可以再次升级图表。
我的解决办法:

  • 将hpa模板更新为最新的API版本
  • 使用以下命令更新(修补)最后一个helm secret(secret/sh.helm.release.v1....):
UPDATE=$(kubectl get secret "${SECRET}" -n "${NAMESPACE}" -otemplate='{{.data.release |base64decode |base64decode }}'|gzip -d|sed 's#autoscaling/v2beta1#autoscaling/v2#'| gzip |base64 -w0 |base64 -w0)
kubectl patch secret "${SECRET}" -n "${NAMESPACE}" --patch="{\"data\": { \"release\": \"$UPDATE\" }}"

我用这个脚本更新了我所有命名空间中的所有helm secret。

#!/bin/bash

SECRET=$1
NAMESPACE=$2

if [[ -z "${SECRET}" ]]
then
    echo "Usage: $0 <secret-name> <namespace>"
    exit
fi

if [[ -z "${NAMESPACE}" ]]
then
    echo "Usage: $0 <secret-name> <namespace>"
    exit
fi

UPDATE=$(kubectl get secret "${SECRET}" -n "${NAMESPACE}" -otemplate='{{.data.release |base64decode |base64decode }}'|gzip -d|sed 's#autoscaling/v2beta1#autoscaling/v2#'| gzip |base64 -w0 |base64 -w0)
kubectl patch secret "${SECRET}" -n "${NAMESPACE}" --patch="{\"data\": { \"release\": \"$UPDATE\" }}"

# Running example:
## Fix single secret
# ./fix-helm-hpa.sh <secret> <namespace>

## Fix all secrets
#kubectl get secret --field-selector=type=helm.sh/release.v1 -otemplate='{{range .items}}{{printf "%s %s\n" .metadata.name .metadata.namespace }}{{end}}' |while read line ; do ./fix-helm-hpa.sh $line; done

相关问题