# 10장 컨피그맵

Assembled by GimunLee


# 컨피그맵 개념

  • 컨피그맵은 컨테이너에 필요한 환경 설정을 컨테이너와 분리해서 제공하는 기능
  • 다른 설정으로 컨테이너를 실행할 때 사용
  • 컨피그맵을 컨테이너와 분리하면 컨테이너 하나를 개발용, 상용 서비스를 운영하기 전 보안이나 성능 장애 등을 검증하는 스테이지용, 상용 서비스용으로 사용 가능

# 컨피그맵 사용하기

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-dev
  namespace: default
data:
  DB_URL: localhost
  DB_USER: myuser
  DB_PASS: mypass
  DEBUG_INFO: debug
  • .data의 하위 필드로 실제 사용하려는 환경 설정값을 작성

# 컨피그맵 설정 중 일부만 불러와서 사용

  • 컨피그맵의 일부 설정만 불러오는 디플로이먼트와 NodePort 타입 서비스가 포함된 템플릿 예시
apiVersion: apps/v1
kind: Deployment
metadata:
  name: configapp
  labels:
    app: configapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: configapp
  template:
    metadata:
      labels:
        app: configapp
    spec:
      containers:
      - name: testapp
        image: arisu1000/simple-container-app:latest
        ports:
        - containerPort: 8080
        env:
        - name: DEBUG_LEVEL # 환경 변숫값
          valueFrom: # 어디에서 가져올 것인지
            configMapKeyRef: # 어떤 키를 가져올 것인지
              name: config-dev 
              key: DEBUG_INFO # value: 'debug'
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: configapp
  name: configapp-svc
  namespace: default
spec:
  ports:
  - nodePort: 30800
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: configapp
  type: NodePort

# 컨피그맵 설정 전체를 한꺼번에 불러와서 사용하기

  • 컨피그맵 설정 전체를 한꺼번에 컨테이너의 환경 변수로 설정하는 디플로이먼트의 예시
apiVersion: apps/v1
kind: Deployment
metadata:
  name: configapp
  labels:
    app: configapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: configapp
  template:
    metadata:
      labels:
        app: configapp
    spec:
      containers:
      - name: testapp
        image: arisu1000/simple-container-app:latest
        ports:
        - containerPort: 8080
        envFrom: # 환경 변수를 어디에서 가져올 것인지
        - configMapRef: # 어떤 컨피그맵을 참조해서 환경 변수들을 불러올 것인지
            name: config-dev
            # name: config-prod
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: configapp
  name: configapp-svc
  namespace: default
spec:
  ports:
  - nodePort: 30800
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: configapp
  type: NodePort

# 컨피그맵을 볼륨에 불러와서 사용하기

  • 컨테이너의 볼륨 형식으로 컨피그맵을 설정해서 파일로 컨테이너에 제공
apiVersion: apps/v1
kind: Deployment
metadata:
  name: configapp
  labels:
    app: configapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: configapp
  template:
    metadata:
      labels:
        app: configapp
    spec:
      containers:
      - name: testapp
        image: arisu1000/simple-container-app:latest
        ports:
        - containerPort: 8080
        volumeMounts: 
        - name: config-volume # 해당 이름의 볼륨을 만들어서 컨피그맵의 하위 필드를 
          mountPath: /etc/config # 디렉터리에 필드 이름 형태의 파일로 저장 (KEY: 파일 이름 / value: 파일 내용)
      volumes: # 생성한 볼륨을 사용하는 컨피그맵 설정
      - name: config-volume
        configMap:
          name: config-dev
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: configapp
  name: configapp-svc
  namespace: default
spec:
  ports:
  - nodePort: 30800
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: configapp
  type: NodePort

# Referenses

  • 쿠버네티스 입문 - 90가지 예제로 배우는 컨테이너 관리 자동화 표준 / 동양북스
Last Updated: 8/12/2020, 1:33:42 PM