Kubernetes

ConfigMap이란?

재심 2022. 12. 6. 20:10

[ConfigMap이란?]

Key-Value 형태로 기밀이 아닌 데이터를 저장하는 데 사용하는 API오브젝트.

앱을 배포하다보면 DEV, PROD와 같이 환경별로 다른 변수값을 사용하는 경우가 있다.

앱의 이미지는 같지만 이러한 변수값이 차이가 나는 경우 다른 컨테이너 설정을 통해 배포하는 것은 매우 비효율적일 수 있다.

이럴 때 ConfigMap을 사용해서 값을 넣어놓고, 환경별로 다른 설정정보를 읽어오도록 처리할 수 있다.

 

즉, 컨테이너에서 필요한 환경 설정 내용을 컨테이너와 분리해서 제공해주기 위한 기능.

 

[ConfigMap의 종류]

Literal

ConfigMap을 yml파일에 정의하거나 CLI를 통해 직접 생성하는 방법

kubectl create configmap [configmap 이름] --from-literal=[key]=[value] 

ex) kubectl create configmap jaeshim-cm --from-literal=jaeshim=handsome

#확인
kubectl describe configmaps [jaeshim]

File

 파일 형태로 생성해서 ConfigMap을 설정하는 방법

 

파일명: config.properties

myname=jaeshim
birthday=1900.10.01
city=seoul
kubectl create configmap file-cm --from-file=config.properties

파일명인 config.properties가 key가 되고 value는 파일내용 그 자체가 된다.

 

파일로 ConfigMap을 만들 때 Key-Value

[ConfigMap 적용하기]

ConfigMap에서 정의한 값을 사용하는 방법은 여러가지가 있다.

 

환경변수로 값을 전달하기

Deployment에 env로 추가해서 정의해놓는다.

CLI로 생성한 ConfigMap을 사용하기

apiVersion: v1
kind: Deployment
metadata:
  name: cm-pod
spec:
  containers:
  - name: container
    image: example/test
    envFrom:
    - configMapRef:
        name: jaeshim-cm

File로 생성한 ConfigMap 사용하기

apiVersion: v1
kind: Deployment
metadata:
  name: pod1
spec:
  containers:
  - name: container
    image: example/test
    env:
    - name: config-env
      valueFrom:
        configMapKeyRef:
          name: file-cm
          key: config.properties

ConfigMap을 디스크 볼륨 마운트 시키기

volumes에 configmap을 명시해주고, container에서 volueMounts를 정의해서 지정한 경로 (ex: mount)에 마운트 시킨다.

apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
  - name: container
    image: example/test
    volumeMounts:
    - name: volume1
      mountPath: /mount
  volumes:
  - name: volume1
    configMap:
      name: file-cm

 

[예제: Apache Flink]

Apache Flink 클러스터를 kubernetes에 올려볼 수 있다. 이 때 사용한 ConfigMap과 Deployment에 볼륨마운트 형태로 사용하는 예시

가이드: Kubernetes | Apache Flink

 

Kubernetes

Kubernetes Setup # Getting Started # This Getting Started guide describes how to deploy a Session cluster on Kubernetes. Introduction # This page describes deploying a standalone Flink cluster on top of Kubernetes, using Flink’s standalone deployment. We

nightlies.apache.org

ConfigMap

flink 관련 설정값과 log4j 설정값을 ConfigMap에 정의하고 있다.

flink-conf.yaml 파일과 log4j-console.properties 파일로 나뉠 수 있는 구조인듯 하다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: flink-config
  labels:
    app: flink
data:
  flink-conf.yaml: |+
    jobmanager.rpc.address: flink-jobmanager
    taskmanager.numberOfTaskSlots: 2
    blob.server.port: 6124
    jobmanager.rpc.port: 6123
    taskmanager.rpc.port: 6122
    queryable-state.proxy.ports: 6125
    jobmanager.memory.process.size: 1600m
    taskmanager.memory.process.size: 1728m
    parallelism.default: 2    
  log4j-console.properties: |+
    # This affects logging for both user code and Flink
    rootLogger.level = INFO
    rootLogger.appenderRef.console.ref = ConsoleAppender
    rootLogger.appenderRef.rolling.ref = RollingFileAppender
    ...생략

Deployment

volumes에 위에서 정의한 ConfigMap을 활용하고 있다.

이후 voluimeMounts에서 flink-config-volume을 /opt/flink/conf에 마운트 시켰다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flink-jobmanager
spec:
  replicas: 1
  selector:
    matchLabels:
      app: flink
      component: jobmanager
  template:
    metadata:
      labels:
        app: flink
        component: jobmanager
    spec:
      containers:
      - name: jobmanager
        image: apache/flink:latest
        args: ["jobmanager"]
        ports:
        - containerPort: 6123
          name: rpc
        - containerPort: 6124
          name: blob-server
        - containerPort: 8081
          name: webui
        livenessProbe:
          tcpSocket:
            port: 6123
          initialDelaySeconds: 30
          periodSeconds: 60
        volumeMounts:
        - name: flink-config-volume
          mountPath: /opt/flink/conf
        securityContext:
          runAsUser: 9999  # refers to user _flink_ from official flink image, change if necessary
      volumes:
      - name: flink-config-volume
        configMap:
          name: flink-config
          items:
          - key: flink-conf.yaml
            path: flink-conf.yaml
          - key: log4j-console.properties
            path: log4j-console.properties

 

[참조]

쿠버네티스 #11 - ConfigMap (tistory.com)

 

 쿠버네티스 #11 - ConfigMap

쿠버네티스 #11ConfigMap 조대협 (http://bcho.tistory.com) 애플리케이션을 배포하다 보면, 환경에 따라서 다른 설정값을 사용하는 경우가 있다. 예를 들어, 데이타베이스의 IP, API를 호출하기 위한 API KEY,

bcho.tistory.com

[Kubernetes] ConfigMap (tistory.com)

 

[Kubernetes] ConfigMap

목적 ConfigMap에 대해 알고자함 목차 ConfigMap이란? ConfigMap의 종류 및 양식 1. ConfigMap이란? 컨피그맵은 키-값 쌍으로 기밀이 아닌 데이터를 저장하는 데 사용하는 API 오브젝트 단어 그대로 설정(Config

emgc.tistory.com

쿠버네티스 컨피그맵(kubernetes configmap) :: 아리수 (tistory.com)

 

쿠버네티스 컨피그맵(kubernetes configmap)

컨피그맵(configmap)은 컨테이너에서 필요한 환경설정 내용을 컨테이너와 분리해서 제공해 주기 위한 기능입니다. 클라우드 네이티브 아키텍처에서 컨테이너는 변하지 않는 자원이어야 합니다.

arisu1000.tistory.com

 

'Kubernetes' 카테고리의 다른 글

Istio  (0) 2023.01.31
Service Mesh  (0) 2023.01.31
Service란?  (0) 2022.12.06
Kubernetes Ingress?  (0) 2022.11.02