1. ConfigMaps의 역할:

ConfigMap 은 Pod 의 Container 가 실행할 때 필요한 설정 정보들을 쿠버네티스에서 주입해주기 위해서 사용한다.

 

컨테이너로 주입할 수 있는 설정 정보들의 예시는 다음과 같다:

  • command-line arguments
  • environment variables
  • port numbers
  • other configuration artifacts (e.g 컨테이너에서 사용하는 File) 

 

2. ConfigMaps의 UseCase:

ConfigMap 을 사용하면 좋은 UseCase 는 다음과 같다:

 

1. 환경별 구성 관리:

  • 개발 환경과 프로덕션 환경마다 어플리케이션 설정 값이 달라져야 하는 경우.
    • 환경마다 ConfigMap 을 만들어놓고 이를 사용하도록 하면 된다. 
  • Spring Boot 에서 각 환경마다 application.properties 를 구성하는 것과 유사하다.

다음은 개발 환경과 프로덕션 환경에서 ConfigMap 을 구성하는 예시를 보여준다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: myapp-config-dev
  namespace: dev
data:
  DATABASE_URL: dev-database.example.com
  DEBUG_MODE: "true"
  API_KEY: "dev-api-key"
apiVersion: v1
kind: ConfigMap
metadata:
  name: myapp-config-prod
  namespace: prod
data:
  DATABASE_URL: prod-database.example.com
  DEBUG_MODE: "false"
  API_KEY: "prod-api-key"

 

 

2. 애플리케이션 코드와 설정을 분리하도록 사용할 수 있다:

  • ConfigMap 설정 정보를 볼륨에 올려서 사용하고 있는 경우에는 어플리케이션 재시작 없이 동적으로 설정을 변경시킬 수 있다.
    • ConfigMap 을 Pod 에서 볼륨으로 마운트 시켜서 사용하는 경우에는 ConfigMap 이 업데이트 되면 적용된 볼륨의 내용도 같이 업데이트 된다.

 

3. ConfigMaps 생성 방법:

첫 번째 방법은 직접 key-value 값을 명시하는 것이다.

  • kubectl create configMap [NAME] 을 통해서 생성할 ConfigMap 의 이름을 정했다.
  • --from-literal 을 통해서 설정 정보를 명시했다.
    kubectl create configMap demo --from-literal=lab.difficulity=easy \
      --from-literal=lab.resolution=high

 

 

두 번째 방법은 File 의 path 를 입력하는 것이다.

  • --from-file 을 통해서 File 의 Path 를 입력했다. 그러면 파일에 있는 내용으로 ConfigMap 이 생성된다.

 

 

세 번째 방법은 똑같이 File 의 Path 를 이용하지만 설정 정보에서 Key 이름을 별도로 셋팅하는 방법이다:

  • --from-file=[KEY_NAME] 으로 입력하면 해당 Key 이름을 가지고 설정 정보에 등록된다.

 

네 번째 방법은 디렉토리를 명시해서, 디렉토리 안의 Files 을 통해 설정 정보를 등록하는 방법이다:

 

 

다섯 번째 방법은 Yaml 파일을 통해서 등록하는 방법이다:

 

4. Pod 가 ConfigMaps 를 사용하는 방법:

Pod 가 ConfigMap 을 사용하는 방법은 3가지가 있다:

  • As a Container environment variable
  • In a Pod commands
  • By creating a Volume

 

As a Container environment variable 예시:

  • 컨테이너가 사용할 환경 변수를 ConfigMap 에서 가지고 오는 예시다.
  • spec.containers.env에서 컨테이너가 사용할 환경 변수를 등록해야하고, valueFrom.configMapKeyRef 를 통해서 ConfigMap 에서 읽어온다.

 

 

In a Pod commands 예시:

  • 컨테이너를 실행할 때 사용하는 명령어 (Command) 를 ConfigMap 에서 가지고와서 사용할 수 있다:
  • spec.container.command 에서 ${} 로 지정할 명령어를 넣으면 된다.

 

 

By creating a Volume:

  • ConfigMap 데이터를 Pod 의 Ephemeral Volume 으로 등록해서 컨테이너에서 접근해서 사용할 수 있다.
  • volumeMounts 로 읽어온 ConfigMap 데이터를 어떤 디렉토리에 올릴지 정해야한다.
  • volumes.configMap 을 통해서 지정한 configMap 을 읽어올 수 있다.
  • 중요한 건 Node 의 Kubelet 이 주기적으로 ConfigMap 의 업데이트 되었는지 확인하고 업데이트 되었다면 Volume 에도 업데이트 해준다. 근데 몇 분정도 걸릴 수 있다고 함.
    • (Volume 은 Node 에 매핑된다. Ephemeral Volume 은 Pod 가 배치된 Node 의 Local Dist 를 사용함.) 

+ Recent posts