본문으로 건너뛰기

Env - ConfigMaps

December 16, 2025

개념​

  • Pod yaml 파일 안에 환경 변수를 env로 직접 하나하나 넣으면 파일이 복잡해지고 다른 Pod를 정의할 때 해당 환경 변수를 다시 정의해주어야한다.
  • ConfigMap을 사용하면, 환경 변수로 사용할 key-value 들을 따로 관리할 수 있며, 다른 리소스에서 재사용할 수 있다.
  • ConfigMap은 두 가지 방식으로 사용된다.
    1. 환경변수 주입: 개별 key-value 쌍을 컨테이너의 환경변수로 주입
    2. 볼륨 마운트: ConfigMap을 볼륨으로 마운트하면 각 key가 파일명, value가 파일 내용이 되어 컨테이너 내부에 파일 형태(.conf, .yaml, .properties 등 임의의 텍스트 포맷)로 나타남

ConfigMap 생성​


Imperative(명령형) 방법​

from-literal

kubectl create configmap <name> \
--from-literal=APP_COLOR=blue \
--from-literal=APP_MODE=prod

from-file

kubectl create configmap <name> --from-file=app.properties

Declarative(선언적) 방법 - yaml​

# my-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: <name>
data:
APP_COLOR: blue
APP_MODE: prod
  • data:
    • <key>: <value> (여러 개 가능)
kubectl apply -f my-configmap.yaml

Pod에 삽입​


ConfigMap 전체 (envFrom.configMapRef)​

apiVersion: v1
kind: Pod
metadata:
name: nginx-envfrom
spec:
containers:
- name: nginx
image: nginx
envFrom:
- configMapRef:
name: nginx-config
  • ConfigMap에 있는 key-value 전체를 Pod안에 환경변수로 등록한다.
  • spec.containers.envFrom.configMapRef
    • name: ConfigMap 객체의 이름

특정 변수만 삽입 (env.valueFrom.configMapKeyRef)​

apiVersion: v1
kind: Pod
metadata:
name: nginx-env-key
spec:
containers:
- name: nginx
image: nginx
env:
- name: APP_COLOR
valueFrom:
configMapKeyRef:
name: nginx-config
key: APP_COLOR
- name: APP_MODE
valueFrom:
configMapKeyRef:
name: nginx-config
key: APP_MODE
  • ConfigMap에 있는 특정 key-value만 Pod의 환경변수로 등록한다. (여러 개 가능)
  • spec.containers.env
    • name: Pod에서 사용할 환경변수 이름
    • valueFrom.configMapKeyRef
      • name: ConfigMap 객체의 이름
      • key: ConfigMap 에서 가져올 value의 key

ConfigMap을 Pod 내부 특정 경로에 볼륨 마운트​

apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
data:
nginx.conf: |
server {
listen 80;
server_name localhost;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
apiVersion: v1
kind: Pod
metadata:
name: nginx-volume
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: nginx-config-volume
mountPath: /etc/nginx/conf.d
volumes:
- name: nginx-config-volume
configMap:
name: nginx-config
items:
- key: nginx.conf
path: nginx.conf
  • ConfigMap을 Pod안의 특정 경로에 주입하고 싶을 경우 사용 (환경변수 X)

  • spec

    • containers
      • volumeMounts
        • name: 아래에 설정할 volumes의 이름
        • mountPath: 마운트할 Pod 내부의 경로
    • volumes
      • name: volume의 이름
      • configMap:
        • name: 주입할 ConfigMap 객체의 이름
        • items:
          • key: 주입할 value의 key
          • path: Pod 내부에 만들어질 경로 (mountPath를 /etc/nginx, path를 conf.d/nginx.conf 이렇게 해도 상관없다)

레퍼런스​