Kubernetes ConfigMap

컨피그맵(ConfigMap)

컨미그맵은 키-값 쌍으로 기밀이 아닌 데이터를 저장하는데 사용하는 API 오브젝트이다. Pod는 볼륨에서 환경 변수, 커맨드-라인 인수 또는 구성 파일로 컨피그맵을 사용할 수 있다.
컨피그맵을 사용하면 컨테이너 이미지에서 환경별 구성을 분리하여, 애플리케이션을 쉽게 이식할 수 있다.
컨피그맵은 보안 또는 암호화를 제공하지 않기 때문에 저장하려는 데이터를 보호하기 위해서는 Secret을 사용하는 것이 좋다.

컨피그맵 오브젝트

컨피그맵은 다른 오브젝트가 사용할 구성을 저장할 수 있는 API 오브젝트이다. spec이 있는 대부분의 쿠버네티스 오브젝트와 달리, 컨피그맵에는 data, binaryData 필드가 있다. 이러한 필드는 키-값 쌍을 값으로 허용한다. data필드와 binaryData는 모두 선택 사항이다. data 필드는 UTF-8 바이트 시퀀스를 포함하도록 설계되었으며 binaryData 필드는 바이너리 데이터를 base64로 인코딩된 문자열로 포함하도록 설계되었다.
컨피그맵의 이름은 유효한 DNS 서브도메인 이름이어야 한다.
data, binaryData 필드 아래의 각 키는 영숫자 문자, - _ . 으로 구성되어야 한다. data에 저장된 키는 binaryData 필드의 키와 겹치지 않아야 한다.

컨피그맵 만들기

$ kubectl create cm myconfig1 --from-literal=key1=value1
configmap/myconfig1 created

$ kubectl get cm myconfig1
NAME        DATA   AGE
myconfig1   1      57s

$ kubectl describe cm myconfig1
Name:         myconfig1
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data              ## 데이터에 key1 value1이 들어가 있다.
====
key1:
----
value1
Events:  <none>

데이터를 2개 넣어서 만들 수도 있다.

$ kubectl create cm myconfig2 --from-literal=key2=value2 --from-literal=key22=value22
configmap/myconfig2 created

$ kubectl describe cm myconfig2
Name:         myconfig2
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data        ## 데이터에 key2 value2, key22 value22가 있다.
====
key2:
----
value2
key22:
----
value22
Events:  <none>

키 값을 파일 내용으로 지정할 수 도 있다.

$ cat > message.txt
hello world

$ kubectl create cm myconfig3 --from-file=message.txt
configmap/myconfig3 created

$ kubectl describe cm myconfig3
Name:         myconfig3
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data           ## 키값이 message.txt   value 값이 message.txt의 내용인 것을 확인할 수 있다.
====
message.txt:
----
hello world

Events:  <none>

## 키 값을 변경해서 넣는 방법

$ kubectl create cm myconfig4 --from-file=msg=message.txt 
configmap/myconfig4 created

$ kubectl describe cm myconfig4
Name:         myconfig4
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data                 ## 키 값이 message.txt가 아니라 msg 인 것을 확인할 수 있다.
====
msg:
----
hello world

Events:  <none>

yaml 파일로 ConfigMap 만들기

$ kubectl create cm myconfig5 --from-literal=key5=value5 --from-literal=key55=value55 --dry-run -o yaml > myconfig5.yaml
W0508 00:33:44.755649   44390 helpers.go:535] --dry-run is deprecated and can be replaced with --dry-run=client.

$ cat myconfig5.yaml 
apiVersion: v1
data:
  key5: value5
  key55: value55
kind: ConfigMap
metadata:
  creationTimestamp: null
  name: myconfig5
  
$ kubectl create -f myconfig5.yaml 
configmap/myconfig5 created

$ kubectl describe cm myconfig5
Name:         myconfig5
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
key5:
----
value5
key55:
----
value55
Events:  <none>

응용

컨피그맵을 사용하여 파드 내부에 컨테이너를 구성할 수 있는 네 가지 방법이 있다.

	1. 컨테이너 커맨드와 인수 내에서
    2. 컨테이너에 대한 환경 변수
    3. 애플리케이션이 읽을 수 있도록 읽기 전용 볼륨에 파일 추가
    4. 쿠버네티스 API를 사용하여 컨피그맵을 읽는 파드 내에서 실행할 코드 작성
    

아래 코드는 컨테이너에 대한 환경 변수를 지정하는 방법이다.

apiVersion: v1
kind: Pod
metadata:
  name: cmtest
spec:
  containers:
  - name: web
    image: httpd
    env:
    - name: MESSAGE
      valueFrom:
        configMapKeyRef:
          key: msg
          name: myconfig4
    volumeMounts:
    - name: mycon
      mountPath: /tmp
  volumes:
  - name: mycon
    configMap:
      name: myconfig4

좋은 웹페이지 즐겨찾기