본문 바로가기

Kubernetes(k8s)/ConfigMap

ConfigMap

1.        ConfigMap

 

         1.1.        정의

 

컨피그맵은 키-값 쌍으로 기밀이 아닌 데이터를 저장하는 데 사용하는 API

오브젝트이다. 파드는 볼륨에서 환경 변수, 커맨드-라인 인수 또는 구성 파일로

컨피그맵을 사용할 수 있다. 컨피그맵을 사용하면 컨테이너 이미지에서 환경별

구성을 분리하여, 애플리케이션을 쉽게 이식할 수 있다.

 

컨피그맵은 보안 또는 암호화를 제공하지 않는다. 저장하려는 데이터가 기밀인 경우, 컨피그맵 대신 시크릿(Secret) 또는 추가(써드파티) 도구를 사용해야 한다.

 

 

         1.2.        사용 이유

 

애플리케이션 코드와 별도로 구성 데이터를 설정하려면 컨피그맵을 사용한다.

컨피그맵은 많은 양의 데이터를 보유하도록 설계되지 않았다. 컨피그맵에 저장된

데이터는 1MiB를 초과할 수 있다.

이 제한보다 큰 설정을 저장해야 하는 경우, 볼륨을 마운트하는 것을 고려하거나 별도의 데이터베이스 또는 파일 서비스를 사용할 수 있다.

 

 

         1.3.        컨피그맵 오브젝트

 

컨피그맵은 다른 오브젝트가 사용할 구성을 저장할 수 있는 API 오브젝트이다.

spec이 있는 대부분의 쿠버네티스 오브젝트와 달리, 컨피그맵에는 data 및 binaryData 필드가 있다. 이러한 필드는 키-값 쌍을 값으로 허용한다. data 필드와 binary Data는 모두 선택 사항이다. data 필드는 UTF-8 문자열을 포함하도록 설계되어 있다. binaryData 필드는 바이너리 데이터를 base64로 인코딩된 문자열로 포함하도록 설계되었다.

 

 

         1.4.        생성 방식

 

                        1.4.1.        Literal

Kubectl create configmap <configmap name> --from-literal=<key>=<value>

 

                        1.4.2.        파일

kubectl create configmap  <configmap name> --from-file=<파일 위치>

 

 

         1.5.        예시

 

     configmap 생성

[asd@ubu22-01 ~ (kubernetes-admin@cluster.local:happy)]$ k create configmap env-test --from-literal=my_emotion=happy
configmap/env-test created

 
# neat 모듈로 코드 최소화
[asd@ubu22-01 ~ (kubernetes-admin@cluster.local:happy)]$
k run webserver --image=nginx --dry-run=client -o yaml | k neat > confnginx.yml

 
# 생성된 파일을 확인
[asd@ubu22-01 ~ (kubernetes-admin@cluster.local:happy)]$ vi confnginx.yml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: webserver
  name: webserver
spec:
  containers:
  - image: nginx
    name: webserver
    env:
    - name: EMOTION
      valueFrom:
        configMapKeyRef:
          name: env-test
          key: my_emotion

 

 
# 생성한 파일 적용
[asd@ubu22-01 ~ (kubernetes-admin@cluster.local:happy)]$ k apply -f confnginx.yml
pod/webserver created

 
# 생성된 webserver 확인
[asd@ubu22-01 ~ (kubernetes-admin@cluster.local:happy)]$
kgp -w
NAME        READY   STATUS    RESTARTS   AGE     IP             NODE       NOMINATED NODE   READINESS GATES
nginx       1/1     Running   0          9m44s   10.233.88.70   ubu22-02   <none>           <none>
webserver   1/1     Running   0          8s      10.233.88.66   ubu22-02   <none>           <none>

 
# 상세 확인
[asd@ubu22-01 ~ (kubernetes-admin@cluster.local:happy)]$ k describe pod webserver
Name:             webserver
Namespace:        happy
. . .
    Environment:
      EMOTION:  <set to the key 'my_emotion' of config map 'env-test'>  Optional: false
. . .
[asd@ubu22-01 ~ (kubernetes-admin@cluster.local:happy)]$ k exec -it webserver -- bash
root@webserver:/# env
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=webserver
EMOTION=happy
PWD=/
PKG_RELEASE=1~bookworm
HOME=/root
KUBERNETES_PORT_443_TCP=tcp://10.233.0.1:443
NJS_VERSION=0.7.12
TERM=xterm
SHLVL=1
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=10.233.0.1
KUBERNETES_SERVICE_HOST=10.233.0.1
KUBERNETES_PORT=tcp://10.233.0.1:443
KUBERNETES_PORT_443_TCP_PORT=443
PATH=/usr/
local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NGINX_VERSION=1.25.1
_=/usr/bin/env