[Kubernetes] ConfigMap

pingping·2021년 2월 18일
0

Kubernetes

목록 보기
9/10
post-thumbnail

Concept

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

[1] 기본 사용법

  • 기본적인 configmap에 필요한 Template을 확인해보자.
apiVersion: v1
kind: ConfigMap
metadata:
  name: config-dev
  namespace: default
data:
  DB_URL: localhost
  DB_USER: testuser
  DB_PASS: dkagh1.
  DEBUG_INFO: debug
  • Check
root@instance-1:~/kubernetes-sample/configmap# kubectl describe configmaps config-dev 
Name:         config-dev
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
DB_PASS:
----
dkagh1.
DB_URL:
----
localhost
DB_USER:
----
testuser
DEBUG_INFO:
----
debug
Events:  <none>

일부만 불러와서 사용하기

config-dev 라는 컨피그맵에는 .data의 하위 필드에 4가지의 키와 밸류가 있었다. 우리는 그 중 DEBUG_INFO란 변수를 가져와서 사용할 것이다. (일부만 가져옴)

# Deployment
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**
---
# Service
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

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

  • envFrom[] 필드를 사용
  • configMapRef.name 필드에 컨피그맵인 config-dev를 연결하였다. 만약 prod 환경이라면 아래 주석처럼 config-prod를 사용할 수도 있다.

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

  • ConfigMap을 컨테이너의 환경 변수로 설정하는 것이 아닌 다른 방식, 즉 컨테이너의 볼륨 형식으로 컨피그맵을 설정해서 파일로 컨테이너에 제공할 수 있다.
  • config-volume 이라는 볼륨을 생성하여 config-dev 컨피그맵의 .data 하위 필드 4개를 컨테이너 내부의 /etc/config 디렉터리에 key 이름으로 파일을 저장한다.
  • config-volume 볼륨을 사용하는 컨피그맵 config-dev를 설정한다.
  • kubectl exec -it 명령으로 컨테이너 내부의 /etc/config 디렉터리에 파일이 생성되었는지 확인한다.

profile
Cloud Infra Engineer & interested in python, IaC, k8s

0개의 댓글