Kubernetes Dynamic Configmapping in StatefulSet

1/20/2020

In Kubernetes you have the ability to dynamically grab the name of a pod and reference it in a yaml file (Pod Field) like so:

env:
- name: POD_NAME
  valueFrom:
    fieldRef:
      fieldPath: metadata.name

and reference it later in the yaml file like so:

- name: FOO
  value: $(POD_NAME)-bar

Where in the case of a StatefulSet the value of foo may be something like "app_thing-0-bar, app_thing-1-bar ... etc". However this doesn't seem to work in dynamically setting the name of a configmap. For example, the following configmap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app_thing-0-config
data:
  FOO: BAR

and this in the StatefulSet deployment yaml:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: app_thing
.
.
.
.
.
    envFrom:
    - configMapRef:
      name: $(POD_NAME)-config

will not reference the configmap correctly as it doesn't seem to like the $() syntax. Is there any way to do this without resorting to init containers and entrypoint scripting?

-- Mick
configmap
environment-variables
kubernetes
minikube

1 Answer

1/21/2020

If I understand you correctly there is a tool that can make it work. It's called RELOADER:

Problem: We would like to watch if some change happens in ConfigMap and/or Secret; then perform a rolling upgrade on relevant DeploymentConfig, Deployment, Daemonset and Statefulset

Solution: Reloader can watch changes in ConfigMap and Secret and do rolling upgrades on Pods with their associated DeploymentConfigs, Deployments, Daemonsets and Statefulsets.

You can find all the necessary info in the link above. Also if you'd need more details than you can check the documentation.

Please let me know if that helped.

-- OhHiMark
Source: StackOverflow