CKA Road Trip: Three Things Called "name" in a ConfigMap Volume Mount¶
This tripped me up. The same word name appears three times in the same yaml block and they all mean different things.
The Yaml¶
spec:
containers:
- name: nginx-container
volumeMounts:
- name: nginx-config # (A) internal label — links to volumes below
mountPath: /etc/nginx/nginx.conf
volumes:
- name: nginx-config # (A) same internal label — must match above
configMap:
name: nginx-configmap # (B) the actual ConfigMap object in Kubernetes
What Each One Is¶
(A) nginx-config — appears twice, in volumeMounts and volumes. This is just an internal label you make up. It's the link between the two blocks. Could be called foo, my-vol, whatever — doesn't matter as long as both sides match each other.
(B) nginx-configmap — this is the actual Kubernetes object name. What you see when you run k get cm. This must match exactly or the pod fails with:
To Make It Clearer¶
Rename the internal label to something obviously different:
spec:
containers:
- name: nginx-container
volumeMounts:
- name: my-internal-label # (A) made up name
mountPath: /etc/nginx/nginx.conf
volumes:
- name: my-internal-label # (A) must match above
configMap:
name: nginx-configmap # (B) real ConfigMap object name
Identical result. The internal label is just plumbing — it exists only to connect volumeMounts to volumes. The ConfigMap name is what actually matters.
The One Rule¶
volumes.name and volumeMounts.name must match each other — they're the same internal label.
configMap.name must match the actual ConfigMap object in the cluster — check with k get cm.
They don't have to look similar. The exercise used nginx-config for the label and nginx-configmap for the object which made them look like the same thing. They're not.