Estamos implementando microservicios de Java en AWS 'ECR > EKS' utilizando helm3 y canalización CI/CD de Jenkins. Sin embargo, lo que vemos es que, si volvemos a ejecutar el trabajo de Jenkins para volver a instalar la implementación/el pod, entonces el pod no se vuelve a instalar si no hay cambios en el código. Todavía mantiene la antigua cápsula de funcionamiento como está. El caso de uso considerado aquí es que la configuración de AWS Secrets Manager para el secreto de base de datos extraído durante la implementación ha cambiado, por lo que el servicio debe volver a implementarse volviendo a activar el trabajo de Jenkins.
Intenté usar 'helm upgrade --install --force ....' como se sugiere en la documentación de actualización de helm3 pero falla con el siguiente error en el registro de Jenkins
"Error: ACTUALIZACIÓN FALLIDA: no se pudo reemplazar el objeto: el servicio "dbservice" no es válido: spec.clusterIP: valor no válido: "": el campo es inmutable"
Con 'helm upgrade --install --recreate-pods ....', recibo la siguiente advertencia en el registro de Jenkins
"La bandera --recreate-pods ha quedado obsoleta, la funcionalidad ya no se actualizará. Consulte la documentación para conocer otros métodos para recrear pods"
Sin embargo, la cápsula se vuelve a crear. Pero como sabemos --recreate-pods no es un reinicio suave. Por lo tanto, tendríamos tiempo de inactividad, lo que rompe el principio de microservicio.
versión.BuildInfo{Versión:"v3.4.0", GitCommit:"7090a89efc8a18f3d8178bf47d2462450349a004", GitTreeState:"limpio", GoVersion:"go1.14.10"}
Esto se describe muy bien en la documentación de Helm: https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
A continuación se muestra cómo lo configuré: gracias a @vasili-angapov por redirigir a la sección de documentación correcta.
En deployment.yaml , agregué anotaciones y rollme
kind: Deployment spec: template: metadata: annotations: rollme: {{ randAlphaNum 5 | quote }} Según la documentación, cada invocación de la función de plantilla randAlphaNum generará una cadena aleatoria única. Por lo tanto, la cadena aleatoria siempre cambia y hace que la implementación avance.
La otra forma descrita en el documento es con respecto a un valor SHA cambiante para un archivo.
En el pasado, helm recomendaba usar la marca --recreate-pods como otra opción. Esta bandera se ha marcado como deprecated in Helm 3 a favor del método más declarativo anterior.