안녕하세요! 👋 오늘은 쿠버네티스에서 애플리케이션의 설정 관리를 한 단계 업그레이드해 줄 핵심 오브젝트, ConfigMap에 대해 알아보겠습니다.
애플리케이션을 개발하다 보면 데이터베이스 접속 정보, 기능 활성화 플래그, 외부 서비스 API 엔드포인트 등 다양한 설정 값들을 다루게 되는데요. 이런 설정들을 이미지 안에 직접 넣거나 코드에 하드코딩하면 어떻게 될까요? 끔찍하죠. 😱 설정 하나 바꾸려고 매번 이미지를 새로 빌드하고 배포해야 할 겁니다.

ConfigMap은 바로 이 문제를 해결하기 위해 등장했습니다. 설정 데이터를 코드와 컨테이너 이미지로부터 완전히 분리하여, 애플리케이션의 이식성과 유연성을 극대화하는 열쇠입니다! 🔑
🤔 ConfigMap이란? 설정 데이터를 위한 전용 보관함
ConfigMap은 말 그대로 설정(Configuration)을 담는 맵(Map)입니다. Key-Value 쌍의 형태로 비-기밀(non-confidential) 데이터를 저장하는 쿠버네티스 API 오브젝트입니다.
- 역할: 애플리케이션 코드와 설정 데이터를 분리하여 관리.
- 저장 형식: Key-Value 쌍. Value는 간단한 문자열부터 설정 파일 전체 내용까지 담을 수 있습니다.
- 주의사항: ConfigMap은 Base64로 인코딩되긴 하지만, 암호화된 것은 아닙니다. 따라서 DB 비밀번호나 TLS 인증서 같은 민감한 정보는 Secret 오브젝트에 저장해야 합니다!
ConfigMap을 사용하면, 개발 환경과 운영 환경에서 다른 설정 값을 사용해야 할 때 이미지를 다시 빌드할 필요 없이 ConfigMap만 교체하여 파드(Pod)에 주입하면 됩니다. 정말 편리하죠?
🛠️ ConfigMap 생성하기: 3가지 방법 정복!
ConfigMap을 만드는 방법은 크게 세 가지가 있습니다. 상황에 맞게 가장 편한 방법을 사용하면 됩니다.
1. 리터럴(Literal)로부터 생성하기: 간단한 Key-Value 쌍
가장 간단한 방법으로, kubectl create configmap 명령어에 --from-literal 옵션을 사용하여 직접 Key-Value를 지정합니다.
# kubectl create configmap [ConfigMap이름] --from-literal=[Key]=[Value]
kubectl create configmap my-config \
--from-literal=app.name=my-app \
--from-literal=feature.enabled=true
위 명령어를 실행하면 다음과 같은 ConfigMap이 만들어집니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
app.name: my-app
feature.enabled: "true"
2. 파일(File)로부터 생성하기: 설정 파일 통째로 저장
app.properties, config.json 처럼 이미 작성된 설정 파일이 있다면, --from-file 옵션으로 파일 내용을 ConfigMap에 담을 수 있습니다.
app.properties 파일 내용: Properties
db.host=mysql.example.com
db.port=3306
명령어: Bash
# 키 이름은 기본적으로 파일명이 됩니다.
kubectl create configmap app-config-from-file \
--from-file=app.properties
생성 결과: YAML
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config-from-file
data:
app.properties: |
db.host=mysql.example.com
db.port=3306
Tip: --from-file=[Key이름]=[파일경로] 형식으로 파일명을 Key로 사용하지 않고 원하는 Key를 지정할 수도 있습니다.
3. 디렉토리(Directory)로부터 생성하기: 여러 설정 파일 한번에!
특정 디렉토리 안에 있는 모든 파일을 각각의 Key-Value 데이터로 사용하여 ConfigMap을 만들 수도 있습니다. 디렉토리 내의 각 파일 이름이 Key가 되고, 파일 내용이 Value가 됩니다.
config-dir/ 디렉토리 구조:
config-dir/
├── db.host
└── db.port
- db.host 파일 내용: postgres.example.com
- db.port 파일 내용: 5432
명령어: Bash
kubectl create configmap app-config-from-dir \
--from-file=./config-dir
생성 결과: YAML
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config-from-dir
data:
db.host: postgres.example.com
db.port: "5432"
🚀 Pod에서 ConfigMap 사용하기: 2가지 주입 전략
자, 이제 만들어진 ConfigMap을 파드 안의 컨테이너가 사용할 수 있도록 '주입'해 보겠습니다. 주입 방법은 크게 두 가지가 있습니다.
1. 환경 변수(Environment Variables)로 주입하기
ConfigMap의 데이터를 컨테이너의 환경 변수로 전달하는 가장 일반적인 방법입니다.
env-pod.yaml 예시: YAML
apiVersion: v1
kind: Pod
metadata:
name: env-pod
spec:
containers:
- name: my-container
image: busybox
command: [ "/bin/sh", "-c", "env" ]
env:
# 1. 특정 Key의 값을 환경 변수로 주입
- name: APP_NAME # 컨테이너 내에서 사용할 환경 변수 이름
valueFrom:
configMapKeyRef:
name: my-config # 사용할 ConfigMap 이름
key: app.name # 사용할 Key
# 2. ConfigMap의 모든 Key-Value를 통째로 환경 변수로 주입
envFrom:
- configMapRef:
name: my-config
위 YAML 파일을 적용(kubectl apply -f env-pod.yaml)하고 로그를 확인하면, ConfigMap의 데이터가 환경 변수로 설정된 것을 볼 수 있습니다.
- APP_NAME=my-app
- app.name=my-app
- feature.enabled=true
2. 볼륨(Volume)으로 마운트하기
ConfigMap의 데이터를 파일 형태로 컨테이너의 특정 경로에 마운트하는 방법입니다. 설정 파일 전체를 주입해야 할 때 매우 유용합니다.
volume-pod.yaml 예시: YAML
apiVersion: v1
kind: Pod
metadata:
name: volume-pod
spec:
containers:
- name: my-container
image: busybox
command: [ "/bin/sh", "-c", "ls -l /etc/config && cat /etc/config/app.properties" ]
volumeMounts:
- name: config-volume
mountPath: /etc/config # 컨테이너 내부에 마운트할 경로
volumes:
- name: config-volume
configMap:
name: app-config-from-file # 사용할 ConfigMap 이름
items: # 특정 키만 선택하여 다른 파일 이름으로 마운트 가능
- key: app.properties
path: app.properties # 마운트될 파일 이름
이 파드를 실행하면, 컨테이너의 /etc/config 디렉토리 아래에 app.properties 파일이 생성되고, 그 내용은 app-config-from-file ConfigMap의 app.properties 키 값과 동일합니다.
한 가지 놀라운 점은, 볼륨으로 마운트된 ConfigMap은 파드를 재시작하지 않아도 내용이 업데이트되면 자동으로 컨테이너 내 파일에 반영된다는 것입니다! (약간의 지연 시간은 있습니다.) 이를 통해 무중단 설정 변경도 가능해집니다. ✨
✨ 정리하며
오늘은 애플리케이션의 설정을 유연하게 관리하는 비결, ConfigMap에 대해 알아보았습니다.
- ConfigMap은 설정 데이터를 Key-Value 쌍으로 저장하여 코드와 분리합니다.
- 리터럴, 파일, 디렉토리 등 다양한 소스로부터 쉽게 생성할 수 있습니다.
- 파드에 주입할 때는 환경 변수 방식과 볼륨 마운트 방식을 사용할 수 있습니다.
- 민감한 정보는 반드시 Secret을 사용해야 합니다.
ConfigMap을 잘 활용하면 12-Factor App 방법론의 '설정(Config)' 원칙을 준수하며, 어떤 환경에서든 빠르고 유연하게 배포할 수 있는 클라우드 네이티브 애플리케이션을 만들 수 있습니다. 이제 여러분의 설정 파일들을 ConfigMap으로 멋지게 관리해보세요!
태그: Kubernetes, ConfigMap, K8s, 쿠버네티스, 설정 관리, DevOps, MSA, 환경 변수, 볼륨, YAML
'클라우드 > 쿠버네티스' 카테고리의 다른 글
| ⚖️ Kubernetes Requests & Limits: 우리 앱 안정성 지키는 최소한의 약속 (4) | 2025.09.02 |
|---|---|
| 🔐 Kubernetes Secret: API 키와 DB 비밀번호, 이제 안전하게 관리하세요! (1) | 2025.09.02 |
| Kubernetes의 심장, 파드(Pod)의 모든 것: 개념부터 생명주기까지 (3) | 2025.09.02 |
| 🚀 Dockerfile 다이어트 비법: 가볍고 빠른 이미지를 위한 멀티스테이지 빌드 전략 (2) | 2025.09.02 |
| 🚀 12-Factor App: 클라우드 네이티브로 가는 가장 확실한 안내서 (2) | 2025.09.02 |