본문 바로가기

IT

[k8s] 쿠버네티스 컨피그맵(Kubernetes ConfigMap)

컨피그맵(ConfigMap)

출처: https://cloud.google.com/kubernetes-engine/docs/concepts/configmap

 

Kubernetes에서 컨피그맵(ConfigMap)은 컨테이너와 분리해서 Key-Value 쌍으로 환경설정 값을 저장하는데 사용하는 API 오브젝트이다. 컨피그맵을 사용하면 동일한 컨테이너 이미지에 다른 설정 값을 이식해서 사용가능하다.

 

동일한 컨테이너 이미지에 다른 환경설정 값을 이식하는 경우는 왜 생길까?

같은 애플리케이션이라도 개발용, QA용, 프로덕션용 환경에서 각 환경에 따라 다른 설정이 필요한 경우가 생긴다. 개발용, QA용에서는 log level을 debug로 setting해야하지만 프로덕션용에서는 log level을 error로 setting해야하는 필요성이 생길 수 있다. 이런 경우 컨피그맵을 이용할 수 있다.

 

컨피그맵 만들기

Key-Value 쌍으로 구성된 컨피그맵 예시 파일이다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: alro-config
data:
  port: "10500"
  loglevel: debug 
  dbhost: alro
  dbname: alrodb
  dbport: "3306"

alro-config.yaml 로 저장 후 kubectl apply -f alro-config.yaml command로 실행시킨다.

kubectl get cm command로 실행 중인 컨피그맵을 확인할 수 있다.

kubectl desribe cm alro-config command로 실행 중인 컨피그맵의 설정 값을 확인할 수 있다.

 

Deployment에 컨피그맵 적용하기

컨피그맵 적용을 확인하기 위해 간단한 Deployment 파일을 생성하고 실행한다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: alro-deploy
  labels:
    app: alro
spec:
  replicas: 1
  selector:
    matchLabels:
      app: alro
  template:
    metadata:
      name: alro
      labels:
        app: alro
    spec:
      volumes:
      - name: alro-config
        configMap:
          name: alro-config
      containers:
      - name: alro
        image: nginx:1.14.2
        volumeMounts:
        - name: alro-config
          mountPath: /etc/config

alro.yaml 로 저장 후 kubectl apply -f alro.yaml command로 실행시킨다.

kubectl get deploy command로 실행 중인 Deployment를 확인할 수 있다.

kubectl get pods command로 실행 중인 Pods를 확인할 수 있다.

Pods 내부의 /etc/config 경로에서 alro-config의 설정 값을 확인할 수 있다.

지금은 alro-config.yaml 로 생성한 하나의 컨피그맵만 실행 중이지만

alro-config-dev.yaml, alro-config-qa.yaml 과 같이 용도별로 컨피그맵을 생성하고 컨테이너에 적용하여 사용가능하다.