At work, we started using Kubernetes for stateless application. We frequently change the values of configmap/secrets especially in staging environments, however, this is still not baked in to k8s.

How to do it?

You have to replaced a config to update it.

For example, if you create a configmap like this:

kubectl create configmap site-config --from-file=nginx.conf

If you want to update that, you have to add the command above with

  • --dry-run -o yaml | kubectl replace -f -

So it would become like this:

kubectl create configmap site-config --from-file=nginx.conf \
    --dry-run -o yaml | kubectl replace -f -

But we are not done yet, in order for those configs to be visible in the running containers that needs them, we have to do a new deployment.

The easiest way to do that is just patch the container. Say our deployment service is called nginx.

kubectl patch deployment nginx -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"`date +'%s'`\"}}}}}"

This should issue a new deployment rollout and the changes in configmap is now propagated on the new containers.

I hope this helps you on your journey to Kubernetes, it's a different way of thinking than previous ops but it's step forward from my opinion.