개발

kubernetes - Configmap

kwony 2022. 6. 8. 23:25

 

쿠버네테스 상에서 Configmap 이라는 오브젝트는 어렵게 생각할 필요 없이 클러스터 내에서 Key-Value 쌍의 데이터를 저장하는데 사용하는 API 오브젝트다. 논리적 컴퓨터에 해당하는 Pod은 같은 클러스터 내의 다른 오브젝트의 볼륨에서 환경변수나 구성 파일을 Key-Value로 지정할 수 있는데 이때 사용하는 Object 가 Configmap 이다. 

 

kubectl get configmaps 로 클러스터내에 존재하는 configmap 오브젝트를 검색할 수 있다. 

 

➜  ~  kubectl get configmaps
NAME                                                        DATA   AGE
aim-configmap                                               7      6s

 

data: 내부에 있는 값이 configmap에서 key-value 로 저장하는 값이다. 아래 코드에서 enemies, enemies.cheat 이런 값이 키 값이고, aliens, "true" 가 Value에 해당한다

 

➜  ~  kubectl get configmap aim-configmap -o yaml
apiVersion: v1
data:
  enemies: aliens
  enemies.cheat: "true"
  enemies.cheat.level: noGoodRotten
  lives: "3"
  secret.code.allowed: "true"
  secret.code.lives: "30"
  secret.code.passphrase: UUDDLRLRBABAS
kind: ConfigMap

 

Configmap은 Container에 환경변수를 주입하는데 주로 사용한다. 클러스터 내부의 컨테이너에게 환경 변수를 넘기고 싶은 경우 "Pod이 생성 될 때 어떤 Configmap 의 어떤 Key 값을 참조해 이것을 환경변수로 써라"는 스크립트를 넣는다. 그러면 Container는 생성 될 때 해당 Configmap 의 value 값을 참조해서 환경변수로 넣어둔다.

 

아래 yaml 파일은 demo라는 컨테이너 생성시 환경 변수 ENEMY_CHEAT_LEVEL이란 값을 만들때 aim-configmap 컨피그 맵에서 enemies.cheat.level 이란 키값을 사용하도록 주문한다. 

 

apiVersion: v1
kind: Pod
metadata:
  name: configmap-demo-pod
spec:
  containers:
    - name: demo
      image: alpine
      command: ["sleep", "3600"]
      env:
        - name: ENEMY_CHEAT_LEVEL # 환경변수의 이름
          valueFrom:
            configMapKeyRef:
              name: aim-configmap           # configmap 이름
              key: enemies.cheat.level      # key 값

 

성공적으로 빌드가 됐다면 컨테이너 상에서 환경변수를 출력했을 때 컨피그맵에 입력한 값이 출력되는 것을 확인 할 수 있다

 

$ printenv | grep ENEMY_CHEAT_LEVEL
ENEMY_CHEAT_LEVEL=noGoodRotten