I am using helm charts to deploy pods with a "ConfigMap" managing the configurations.
I edit ConfigMap directly to make changes to configuration files and then delete pods using kubectl delete, for the new configuration to take effect.
Is there any easy way using helm to replace a running pod with the new configuration without executing "kubectl delete" command
You can run
to do this.
We have found that using
--recreate-pods
will immediately terminate all running pods of that deployment, meaning some downtime for your service. In other words, there will be no rolling update of your pods.The issue to address this in Helm is still open: https://github.com/kubernetes/helm/issues/1702
Instead helm suggests adding a checksum of your configuration files to the deployment in an annotation. That way the deployment will have a different hash and essentially look 'new' to helm, causing it to update correctly.
From the docs here: https://github.com/kubernetes/helm/blob/master/docs/charts_tips_and_tricks.md#automatically-roll-deployments-when-configmaps-or-secrets-change
If you need a rolling update instead of immediatly terminating pods, add
into the spec/template/metadata/labels.
The release will then have a config change, which triggers a rolling update if set as spec/stategy/type.
In case you just changed a ConfigMap or Secret, have a look at https://helm.sh/docs/developing_charts/#automatically-roll-deployments-when-configmaps-or-secrets-change