본문 바로가기
문서 목차
QKS · 설정

ConfigMaps

ConfigMap 은 민감하지 않은 설정 데이터를 키 값 쌍으로 저장하는 Kubernetes 오브젝트입니다. 컨테이너 이미지에 설정값을 직접 포함하지 않고, ConfigMap을 통해 외부에서 주입함으로써 이미지를 다시 빌드하지 않고 설정을 변경할 수 있습니다.

QUANTUM C&S

개요

ConfigMap은 민감하지 않은 설정 데이터를 키-값 쌍으로 저장하는 Kubernetes 오브젝트입니다. 컨테이너 이미지에 설정값을 직접 포함하지 않고, ConfigMap을 통해 외부에서 주입함으로써 이미지를 다시 빌드하지 않고 설정을 변경할 수 있습니다.

사용 예시:

  • 환경별(개발/스테이징/프로덕션) 설정 분리
  • 애플리케이션 설정 파일
  • 환경 변수 값

QKS 콘솔에서 ConfigMap 확인

  1. 왼쪽 메뉴에서 설정 > ConfigMaps를 선택합니다.
  2. 네임스페이스를 선택하면 ConfigMap 목록이 표시됩니다.
  3. ConfigMap 이름을 클릭하면 저장된 키-값 데이터를 확인합니다.

ConfigMap 사용 방법

1. 환경 변수로 주입 (단일 키)

containers:
  - name: my-app
    image: my-app:latest
    env:
      - name: APP_ENV
        valueFrom:
          configMapKeyRef:
            name: my-config
            key: environment
      - name: LOG_LEVEL
        valueFrom:
          configMapKeyRef:
            name: my-config
            key: log_level

2. 환경 변수로 전체 주입 (모든 키)

containers:
  - name: my-app
    envFrom:
      - configMapRef:
          name: my-config

ConfigMap의 모든 키가 컨테이너 환경 변수로 자동 주입됩니다.

3. 볼륨으로 마운트 (파일 형태)

ConfigMap 데이터를 파일 시스템에 마운트합니다. 각 키가 파일 이름, 값이 파일 내용이 됩니다.

volumes:
  - name: config-vol
    configMap:
      name: my-config
containers:
  - name: my-app
    volumeMounts:
      - name: config-vol
        mountPath: /etc/config

마운트 결과: /etc/config/environment, /etc/config/log_level 파일이 생성됩니다.


kubectl로 관리

# ConfigMap 목록
kubectl get configmaps -n <namespace>

# ConfigMap 상세 내용 확인
kubectl describe configmap <name> -n <namespace>
kubectl get configmap <name> -n <namespace> -o yaml

# ConfigMap 생성 (literal 값)
kubectl create configmap my-config \
  --from-literal=environment=production \
  --from-literal=log_level=info \
  -n <namespace>

# ConfigMap 생성 (파일에서)
kubectl create configmap my-config \
  --from-file=app.properties \
  -n <namespace>

# ConfigMap 생성 (디렉토리 전체)
kubectl create configmap my-config \
  --from-file=./config-dir/ \
  -n <namespace>

# ConfigMap 수정
kubectl edit configmap <name> -n <namespace>

# ConfigMap 삭제
kubectl delete configmap <name> -n <namespace>

ConfigMap YAML 예시

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app-config
  namespace: production
data:
  environment: "production"
  log_level: "info"
  max_connections: "100"
  app.properties: |
    server.port=8080
    spring.datasource.url=jdbc:postgresql://db:5432/mydb
    spring.cache.type=redis

주의사항

  • ConfigMap은 민감한 정보(비밀번호, 토큰 등)를 저장하면 안 됩니다. 민감한 정보는 Secret을 사용하세요.
  • 볼륨으로 마운트된 ConfigMap은 변경 사항이 자동으로 파드에 반영됩니다 (약간의 지연 있음). 환경 변수로 주입한 경우는 파드 재시작 필요합니다.