[k8s] ConfigMap

config map은 다른 pod들에서 사용할 환경 변수 같은 값을 관리하기 위한 용도의 컨트롤러 단위다.

이를테면 데이터베이스 접속용 호스트, username, 패스워드 같은 것들이 있겠다.




ConfigMap 만들기

먼저 yaml을 맛깔나게 말아준다.
간단하게 앱 이름과, DB 유저/패스워드 정보만 넣어봤다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: test-configmap
data:
  database_username: "myyrakle"
  database_password: "q1w2e3r4"
  app_name: "asdf"

그리고 apply로 띄우면 끝이다.

그리고 describe해보면 다음과 같은 형태로 컨트롤러 정보가 뜬다.

딱히 뭐 암호화를 해주는건 아니라서, 정말 민감한 정보가 있다면 암호화/복호화를 직접 해줘야 한다.




ConfigMap에서 가져오기

ConfigMap이 떴다면, 다른 yaml에서 값을 꺼내갈 수 있다.
대충 이런식으로 들어가면, ConfigMap에서 값을 가져와서 저 자리를 대체하는 것이다.

valueFrom: 
  configMapKeyRef: 
    name: [configmap 이름]
    key: [키 이름]

저걸 응용해서 ConfigMap의 값 3개를 컨테이너 환경변수에 주입하는 서버 구성을 만들어봤다.
거의 이런 형태로 사용할 것이다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-deploy
spec:
  replicas: 3
  selector: 
    matchLabels: 
      app: test-server
  template: 
    metadata: 
      labels: 
        app: test-server
    spec: 
      containers: 
        - name: test-server
          image: myyrakle/node-server-for-test
          env: 
            - name: app_name
              valueFrom: 
                configMapKeyRef: 
                  name: test-configmap
                  key: app_name
            - name: database_username
              valueFrom: 
                configMapKeyRef: 
                  name: test-configmap
                  key: database_username
            - name: database_password
              valueFrom: 
                configMapKeyRef: 
                  name: test-configmap
                  key: database_password

그리고 띄우면

그걸 참조한 deployment 단위에서도 매칭이 된 것을 확인할 수 있고

조회해보면 주입한대로 들어가있을 것이다.

이런 식으로 써먹으면 된다.

그리고 configmap의 yaml 내 값 치환은 kube apply로 읽어들일 때만 발생하는거라서, configmap에서 값을 바꾼다고 기존 배포에 영향이 가지는 않는다.



참조
https://kubernetes.io/ko/docs/concepts/configuration/configmap/