[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/