안녕하세요! 오늘은 쿠버네티스 운영의 핵심 요소 중 하나인 ConfigMap(컨피그맵)에 대해 깊이 있게 알아보겠습니다. 애플리케이션을 배포할 때 환경에 따라 달라지는 설정값들을 어떻게 스마트하게 관리할 수 있을까요? 지금 바로 시작합니다! 🚀

1. ConfigMap이란 무엇인가요? 🤔
ConfigMap은 기밀성이 없는 데이터를 키-값 쌍(key-value pairs)으로 저장하는 데 사용하는 쿠버네티스 API 리소스입니다.
애플리케이션 소스 코드 내에 데이터베이스 접속 정보나 API 엔드포인트 같은 설정값을 하드코딩하면, 환경이 바뀔 때마다 이미지를 새로 빌드해야 하는 번거로움이 있죠. ConfigMap을 사용하면 설정 정보를 컨테이너 이미지에서 분리하여 이 문제를 해결할 수 있습니다.
💡 핵심 요약:
분리: 코드와 구성을 분리하여 이식성을 높입니다.
- 유연성: 애플리케이션을 다시 컴파일하지 않고도 설정을 변경할 수 있습니다.
- 용도: 환경 변수, 커맨드 라인 인수, 또는 볼륨 내의 설정 파일로 사용됩니다.
2. ConfigMap 생성하기 🛠️
ConfigMap을 만드는 방법은 크게 두 가지가 있습니다. kubectl 명령어를 직접 사용하는 방법과 YAML 파일을 정의하는 방법입니다.
A. kubectl 명령어로 생성 (Imperative)
명령어 한 줄로 파일, 디렉토리, 혹은 특정 값을 바로 ConfigMap으로 만들 수 있습니다.
# 리터럴 값으로 생성
kubectl create configmap my-config --from-literal=ui_color="blue" --from-literal=log_level="info"
# 파일로부터 생성
kubectl create configmap app-config --from-file=config.properties
B. YAML 파일로 정의 (Declarative)
가장 권장되는 방식입니다. 버전 관리가 용이하고 명확합니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: game-demo
data:
# 속성 스타일의 키; 각 키는 간단한 값으로 매핑됨
player_initial_lives: "3"
ui_properties_file_name: "user-interface.properties"
# 파일 스타일의 키
game.properties: |
enemy.types=aliens,monsters
player.maximum-lives=5
3. ConfigMap을 컨테이너에 연결하기 🔗
생성한 ConfigMap을 실제 Pod 내부의 컨테이너에 적용하는 방법은 크게 세 가지입니다.
① 환경 변수로 주입하기
컨테이너의 환경 변수로 특정 키의 값을 가져옵니다.
apiVersion: v1
kind: Pod
metadata:
name: configmap-pod
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "/bin/sh", "-c", "env" ]
env:
# 'player_initial_lives'라는 키의 값을 'INITIAL_LIVES' 환경변수로 할당
- name: INITIAL_LIVES
valueFrom:
configMapKeyRef:
name: game-demo
key: player_initial_lives
② ConfigMap의 모든 데이터를 환경 변수로 주입
envFrom을 사용하면 ConfigMap 안의 모든 데이터를 한 번에 가져올 수 있습니다.
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
envFrom:
- configMapRef:
name: game-demo
③ 볼륨(Volume)으로 마운트하기
설정 파일 자체를 특정 경로에 파일 형태로 심어주는 방식입니다. 대규모 설정 파일(nginx.conf 등)을 다룰 때 유용합니다.
apiVersion: v1
kind: Pod
metadata:
name: configmap-volume-pod
spec:
containers:
- name: test-container
image: nginx
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: game-demo
4. 주의사항 ⚠️
- 크기 제한: ConfigMap은 1MiB를 초과할 수 없습니다. 대용량 데이터는 다른 저장소를 고려해야 합니다.
- 보안: ConfigMap은 평문으로 저장됩니다. 비밀번호나 API 키 같은 민감한 정보는 반드시 Secret 리소스를 사용하세요.
- 업데이트: 볼륨으로 마운트된 ConfigMap은 값이 변경되면 컨테이너 내부 파일도 자동으로 업데이트되지만, 환경 변수로 주입된 값은 Pod를 재시작해야 반영됩니다.
마무리하며 🎁
ConfigMap은 클라우드 네이티브 애플리케이션을 구축할 때 없어서는 안 될 도구입니다. 환경별 설정을 유연하게 관리하여 더 안전하고 효율적인 배포 파이프라인을 만들어 보세요!
'클라우드 > 쿠버네티스' 카테고리의 다른 글
| Kustomize를 활용한 쿠버네티스 애플리케이션 설정 관리 가이드 (0) | 2026.02.16 |
|---|---|
| 🔐 Kubernetes Secret: 민감한 정보를 안전하게 관리하는 법 (과 그 한계) (0) | 2026.02.09 |
| 🚀 [K8s 심화] 쿠버네티스 확장하기: CRD(Custom Resource Definition) 완벽 가이드 (feat. CKAD) (0) | 2026.02.09 |
| [K8s 보안] 실전 CKAD 대비: NetworkPolicy로 마스터하는 포드 통신 제어 전략 (0) | 2026.02.07 |
| 🏆 쿠버네티스 트래픽 제어의 진화: Ingress에서 Gateway API, 그리고 Traefik CRD까지 (0) | 2026.02.07 |