Introducción
En Helm, la helm upgrade [release-name] [chart]
El comando le permite actualizar su lanzamiento a una nueva versión. Sin embargo, intentar actualizar su versión a veces puede generar el mensaje “helm no tiene versiones implementadas ” error.
En este tutorial, cubriremos las causas del "helm no tiene versiones implementadas ” así como varias posibles soluciones.
Requisitos previos
- Acceso a la terminal/línea de comando
- Un clúster de Kubernetes configurado y en ejecución
- Helm instalado y configurado
¿Qué causa el error "helm no tiene versiones implementadas"?
A partir de Helm 2.7.1, se ejecuta la helm upgrade [release-name] [chart]
comando en una versión fallida anteriormente produce el siguiente error:
Error: UPGRADE FAILED: [release-name] has no deployed releases
Helm 2 compara el manifiesto de implementación actual con el nuevo para aplicar los parches necesarios. Sin embargo, no compara el estado de los recursos entre los manifiestos.
Si una implementación anterior falló, es probable que al clúster le falten algunos recursos. Antes de Helm 2.7.1, Helm intentará actualizar la implementación sin instalar los recursos faltantes. Para evitar esto, a partir de la versión 2.7.1, Helm usa la última implementación correcta como base para la actualización. Si no se encuentra una implementación exitosa, el sistema devuelve el mensaje "el timón no tiene versiones implementadas ” mensaje de error.
Reparación del error "el timón no tiene lanzamientos implementados"
Hay varias formas de solucionar el problema “el timón no tiene versiones implementadas” error, la mayoría de ellos centrados en cambiar el estado de la implementación fallida que causa el problema:
Solución 1:cambiar el estado de implementación
En Helm 2, cambiar el estado de lanzamiento a implementado le permite evitar el problema:
kubectl -n kube-system patch configmap [release name].[release version] --type=merge -p '{"metadata":{"labels":{"STATUS":"DEPLOYED"}}}'
donde:
[release name]
es el nombre de la versión que desea actualizar.[release version]
es la versión actual de su lanzamiento.
Dado que Helm 3 almacena el historial de implementación como secretos de Kubernetes. Compruebe los secretos de implementación:
kubectl get secrets
Encuentre el secreto que se refiere a la implementación fallida, luego use el siguiente comando para cambiar el estado de la implementación:
kubectl patch secret [name-of-secret-related-to-deployment] --type=merge -p '{"metadata":{"labels":{"status":"deployed"}}}'
Solución 2:Limpiar implementaciones fallidas
Eliminar la versión actual y comenzar una nueva desde cero soluciona el problema. Para hacer esto con Helm 2, use:
helm delete --purge [release name]
donde:
[release name]
es el nombre de la versión que desea eliminar.
A partir de Helm 3, la eliminación de una versión requiere la uninstall
comando:
helm uninstall [release name]
1. Otra forma de eliminar una versión fallida es verificar primero el estado de su implementación:
helm list -a
2. Si el estado de su lanzamiento no es deployed
, verifique los secretos de implementación:
kubectl get secrets
3. Describa el último elemento de la lista de secretos para comprobar su estado:
kubectl describe secret [secret name]
donde:
[secret name]
es el nombre del secreto que desea comprobar.
4. Si el secreto tiene el mismo estado que la implementación fallida, elimínelo usando:
kubectl delete secret [secret name]
5. Actualice su versión con:
helm upgrade [release name]
Solución 3:forzar una actualización
Otra forma de resolver el problema es forzar una actualización usando:
helm upgrade [release name] --force
donde:
[release name]
es el nombre de la versión que desea actualizar.
Detrás de escena, esto hace un trabajo similar a helm delete --purge
, eliminando la versión anterior antes de instalar una nueva. Esto puede conducir a la pérdida del servicio, haciéndolo inadecuado para ciertas versiones.