ConfigMap 은 key-value 들을 저장하는 리소스이다. value 에는 바이너리 데이터나 nginx.conf 같은 설정 내용도 저장할 수 있다. 하나의 ConfigMap에는 1MB 까지 저장 가능하다. 생성하는 방법은 Generic 타입의 Secret 과 거의 동일하며, 3가지 생성하는 방법을 설명한다.
1. 매니페스트에서 생성
일반적인 리소스 생성 방식과 동일하게 kubectl apply -f <매니페스트파일명> 또는 kubectl create -f <매니페스트파일명> --save-config 으로 생성하는 방식이다. 시크릿과는 달리 base64 인코딩되지 않는다. value 를 여러 행으로 저장하는 경우(nginx 설정파일 내용 등) YAML 문법대로 <key>: | 로 시작하여 여러 행에 정의한다. 숫자는 큰따옴표로 둘러쌓아야 한다. 아래 예시를 참고한다.
apiVersion: v1
kind: ConfigMap
metadata:
name: sample-configmap
data:
thread: "16"
connection.max: "100"
connection.min: "10"
sample.properties: |
property.1=value-1
property.2=value-2
property.3=value-3
nginx.conf: |
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
test.sh: |
#!/bin/bash
echo "Hello, kubernetes"
sleep infinity
아래 커맨드로 저장된 key-value 를 확인해본다.
$ kubectl get configmaps sample-configmap -o yaml
apiVersion: v1
data:
connection.max: "100"
connection.min: "10"
nginx.conf: |
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
sample.properties: |
property.1=value-1
property.2=value-2
property.3=value-3
test.sh: |
#!/bin/bash
echo "Hello, kubernetes"
sleep infinity
thread: "16"
kind: ConfigMap
...
2. 리터럴 값을 전달하여 생성
kubectl 커맨드로 시크릿을 생성하되, --from-literal 옵션으로 직접 key-value 쌍을 전달하는 방식이다. 아래처럼 생성한다.
# 생성
$ kubectl create configmap --save-config web-config \
--from-literal=connection.max=100 --from-literal=connection.min=10
# 확인
$ kubectl get cm web-config -o json | jq '.data'
{
"connection.max": "100",
"connection.min": "10"
}
3. 파일의 내용을 value 로 생성
kubectl 커맨드로 생성하되, --from-file 옵션으로 key-value 로 사용될 파일들을 지정하는 방식이다. 파일명이 key 가 되고, 파일 내용이 value 가 된다. 만약 파일명 대신 다른 key 를 사용하고자 한다면 --from-file=<사용할key>=<파일명> 형식으로 입력한다.
# 생성
$ kubectl create configmap --save-config sample-configmap-file \
> --from-file=./nginx.conf
# 확인
$ kubectl get configmaps sample-configmap-file -o json | jq '.data'
{
"nginx.conf": "user nginx;\nworker_processes auto;\nerror_log /var/log/nginx/error.log warn;\npid /var/run/nginx.pid;\n"
}
# describe 확인
$ kubectl describe configmaps sample-configmap-file
Name: sample-configmap-file
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
nginx.conf:
----
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
BinaryData
====
Events: <none>
k8s 에 실제 등록하지 않고 매니페스트 파일로 출력하려면 --dry-run=client -o yaml 옵션을 주어 실행한다. UTF-8 이외의 데이터를 저장하면 자동으로 binaryData 필드로 base64 인코딩 되어 저장된다.
$ kubectl create configmap sample-configmap-binary-2 \
--from-file=image.png \
--from-literal=index.html="Hello, Kubernetes" \
--dry-run=client -o yaml \
> sample-configmap-binary-2.yaml
# sample-configmap-binary-2.yaml 매니페스트
apiVersion: v1
binaryData:
image.png: iVBORw0KGgoAAAANSUhEUgAAAs...<생략>
data:
index.html: Hello, Kubernetes
kind: ConfigMap
metadata:
creationTimestamp: null
name: sample-configmap-binary-2
이제 이를 기반으로 ConfigMap 을 생성한 후, 아래 매니페스트로 ConfigMap 을 볼륨 마운트 한 파드를 생성한 후, curl 로 호출해보자
apiVersion: v1
kind: Pod
metadata:
name: sample-configmap-binary-webserver
spec:
containers:
- name: nginx-container
image: nginx:1.27
volumeMounts:
- name: config-volume
mountPath: /usr/share/nginx/html
volumes:
- name: config-volume
configMap:
name: sample-configmap-binary-2
# ConfigMap 생성
$ kubectl apply -f sample-configmap-binary-2.yaml
# Pod 생성
$ kubectl apply -f sample-configmap-binary-webserver.yaml
# 확인을 위한 포트 포워딩
$ kubectl port-forward sample-configmap-binary-webserver 8080:80
# 호출 확인
$ curl http://localhost:8080/index.html
Hello, Kubernetes
# 볼륨 마운트 경로에 파일 생성 확인
$ kubectl exec -it sample-configmap-binary-webserver -- ls /usr/share/nginx/html
image.png index.html
'Kubernetes' 카테고리의 다른 글
| [Kubernetes] ConfigMap 사용법 2가지(환경 변수로 설정, 볼륨으로 마운트) (0) | 2026.01.11 |
|---|---|
| [Kubernetes] 운영중에 Secret 을 업데이트하기 (0) | 2026.01.11 |
| [Kubernets] Secret 사용법 2가지(환경 변수로 설정, 볼륨으로 마운트) (0) | 2026.01.10 |
| [Kubernetes] TLS, Docker 레지스트리, Basic, SSH 시크릿 생성 (0) | 2026.01.10 |
| [Kubernetes] 범용 Secret 을 생성하는 4가지 방법(Opaque) (0) | 2026.01.07 |
