# ConfigMap

⚡️ 목표

쿠버네티스에서 설정파일과 환경변수를 관리하는 방법을 알아봅니다.

컨테이너에서 설정 파일을 관리하는 방법은 이미지를 빌드할 때 복사하거나, 컨테이너를 실행할 때 외부 파일을 연결하는 방법이 있습니다. 쿠버네티스는 ConfigMap으로 설정을 관리합니다.

# ConfigMap 만들기

파일을 통째로 ConfigMap으로 만든 다음 컨테이너에서 사용하는 방법을 알아봅니다.

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: prometheus
    metrics_path: /prometheus/metrics
    static_configs:
      - targets:
          - localhost:9090
guide/configmap/config-file.yml (opens new window)

먼저, ConfigMap을 만듭니다. --from-file 옵션을 이용하여 file을 설정으로 만듭니다.

# ConfitMap 생성 configmap -> cm
kubectl create cm my-config --from-file=config-file.yml

# ConfitMap 조회
kubectl get cm

# ConfigMap 내용 상세 조회
kubectl describe cm/my-config

생성한 ConfigMap을 /etc/config 디렉토리에 연결합니다.

apiVersion: v1
kind: Pod
metadata:
  name: alpine
spec:
  containers:
    - name: alpine
      image: alpine
      command: ["sleep"]
      args: ["100000"]
      volumeMounts:
        - name: config-vol
          mountPath: /etc/config
  volumes:
    - name: config-vol
      configMap:
        name: my-config
guide/configmap/alpine.yml (opens new window)

volume을 연결하여 배포하고 확인합니다.

kubectl apply -f alpine.yml

# 접속 후 설정 확인
kubectl exec -it alpine -- ls /etc/config
kubectl exec -it alpine -- cat /etc/config/config-file.yml

# env 파일로 만들기

env 포멧을 그대로 사용합니다.

hello=world
haha=hoho
guide/configmap/config-env.yml (opens new window)

env-config로 만듭니다.

# env 포멧으로 생성
kubectl create cm env-config --from-env-file=config-env.yml

# env-config 조회
kubectl describe cm/env-config

# YAML 선언하기

ConfigMap을 YAML파일로 정의합니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  hello: world
  kuber: netes
  multiline: |-
    first
    second
    third
guide/configmap/config-map.yml (opens new window)

config-map.yml 적용 후 마운트 된 내용을 확인합니다.

# 기존 configmap 삭제
kubectl delete cm/my-config

# configmap 생성
kubectl apply -f config-map.yml

# alpine 적용
kubectl apply -f alpine.yml

# 적용내용 확인
kubectl exec -it alpine -- cat /etc/config/multiline

# ConfigMap을 환경변수로 사용하기

ConfigMap을 volume이 아닌 환경변수로 설정합니다.

apiVersion: v1
kind: Pod
metadata:
  name: alpine-env
spec:
  containers:
    - name: alpine
      image: alpine
      command: ["sleep"]
      args: ["100000"]
      env:
        - name: hello
          valueFrom:
            configMapKeyRef:
              name: my-config
              key: hello
guide/configmap/alpine-env.yml (opens new window)

환경변수를 확인합니다.

kubectl apply -f alpine-env.yml

# env 확인
kubectl exec -it alpine-env -- env

# 마무리

ConfigMap은 쿠버네티스에서 각종 설정을 관리하는 가장 좋은 방법입니다. 실제 운영에서 자주 접하게 되므로 어떻게 사용하는지 확실하게 익혀두세요.

# 참고

ConfigMap v1 core (opens new window)