
쿠버네티스에서 애플리케이션을 실행할 때 필요한 환경변수나 설정 값을 코드에 직접 넣는 건 좋지 않다.
이럴 때 사용하는 것이 ConfigMap이다.
ConfigMap은 환경 변수, 설정 파일 경로, 디버그 모드 같은 민감하지 않은 설정 값을 분리해서 관리할 수 있도록 도와준다.
중요: 비밀번호나 인증 키 같은 민감한 정보는 ConfigMap이 아니라 Secret 리소스를 사용해야 한다.
ConfigMap은 암호화되지 않고 etcd에 평문으로 저장된다.
아래처럼 test-config.yaml 파일을 만든다.
apiVersion: v1
kind: ConfigMap
metadata:
name: test-config
data:
DB_USER: webadm
DB_PASS: abcd1234
DB_URL: localhost
DEBUG_INFO: debug
작성 후 EC2 마스터 노드에서 다음 명령어를 실행한다.
kubectl apply -f test-config.yaml
생성된 ConfigMap을 확인해보자.
kubectl get configmap test-config -o yaml

굳이 yaml 파일을 만들지 않고 한 줄로도 생성 가능하다.
kubectl create configmap test-config \
--from-literal=DB_USER=webadm \
--from-literal=DB_PASS=abcd1234 \
--from-literal=DB_URL=localhost \
--from-literal=DEBUG_INFO=debug
Pod를 만들 때 아래처럼 ConfigMap을 주입할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: configmap-pod
spec:
containers:
- name: test-container
image: centos
command: ["/bin/sh", "-c", "env; sleep 3600"]
envFrom:
- configMapRef:
name: test-config
이 파일을 configmap-pod.yaml로 저장한 뒤 실행한다.
kubectl apply -f configmap-pod.yaml
컨테이너에 접속해서 환경 변수를 확인해보자.
kubectl exec -it configmap-pod -- /bin/sh
env | grep DB_
이렇게 하면 ConfigMap에 있던 값들이 잘 들어온 것을 확인할 수 있다.

ConfigMap을 파일로 사용하고 싶으면 다음처럼 마운트할 수도 있다.
volumes:
- name: config-volume
configMap:
name: test-config
containers:
- name: test-container
image: centos
volumeMounts:
- name: config-volume
mountPath: /etc/config
컨테이너 안 /etc/config 경로에 파일 형태로 저장된다.
