쿠버네티스 configMap

greenTea·2023년 9월 1일
0

쿠버네티스 configMap

🫡ConfigMap은 설정 정보를 저장하고 쿠버네티스 파드와 공유하기 위한 리소스입니다. 이를 통해 애플리케이션 코드와 설정을 분리하여, 동일한 코드 베이스를 다양한 환경에서 실행할 수 있습니다.

파드를 생성할 경우 같은 설정값을 지니게 하고 싶다면 configMap을 생성해서 해당 값을 저장한 후에 위 파드들을 configMap을 이용해서 설정값을 설정해서 사용한다면 파드들은 같은 값을 가지게 됩니다.

🤔컨피그맵에 저장된 데이터는 1MiB를 초과할 수 없는데 만약 이 이상 필요할 경우 볼륨 마운트를 통해 해결하라고 되어 있네요...

configMap 사용 방법

😑configMap을 사용하기 위해서는 먼저 configMap을 생성해야 합니다.
생성 방법은 아래와 같습니다.

명령어

kubectl create configmap my-config --from-literal=key1=value1 --from-file=my-txt.file

  • --from-literal=key1=value1 : key1을 키로 value1을 값으로 갖는 키-쌍을 저장합니다.
  • --from-file=my-txt.file : 해당 파일의 값을 저장합니다. 이 때 키값은 file의 이름으로 저장이 됩니다.
    만약 --from-file=/dir/로 한다면 디렉토리 밑에 있는 모든 파일을 저장합니다.
apiVersion: v1
kind: ConfigMap
metadata:
  name: yaml-config
data:
  key1: value1
  key2: value2

😓위와 같이 yaml 파일로도 생성이 가능합니다.

config확인

😰kubectl get configmaps를 통해 configmap이 생성이 되었는지 확인해 줍니다.

더욱 자세하게 보고 싶으시다면 get -> describe로 변경하여 확인해보시면 됩니다.

kubectl describe configmaps [config 이름] 실행 결과

Name:         my-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
version:
----
3.14

BinaryData
====

Events:  <none>

🤗저는 key가 version이고 값은 3.14를 갖는 configmap을 생성하였고 그 결과 위와 같이 나오게 되었습니다.


configmap 사용 예시

configMapKeyRef

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: my-nginx
  name: my-nginx
spec:
  containers:
  - image: nginx
    name: my-nginx
    resources: {}
    env:
    - name: version
      valueFrom:
        configMapKeyRef:
          name: my-config
          key: version

🤓환경 변수에 넣는 방법입니다. configMapKeyRef을 통해 값을 넣을 수 있는데 이 때 name에는 위에서 만든 configmap의 이름을 넣어주시면 되고 key의 경우에도 my-config의 키중에서 존재하는 값을 넣어주면 됩니다.
위의 파일을 실행하게 된다면 my-nginx 컨테이너 안에는 version이라는 환경변수의 값이 my-config 안에 version 값으로 변경되게 됩니다.

위의 파일을 실행하고 나서 정말 환경변수에 version값이 3.14를 갖는지 확인해보겠습니다.

🧐kubectl create -f [파일이름]을 실행해주시고 나서 해당 pod의 env를 출력해보면 (출력 명령어 : kubectl exec -it my-nginx -- env)
다양한 값들이 나오는데 그 중 version=3.14라는 값이 존재하는 것을 확인 할 수 있습니다.

위에서는 단 하나의 값을 넘겨주었지만 configmap 전체의 값을 넘기는 방법도 있습니다.

configMapRef

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: my-image
    envFrom:
    - configMapRef:
        name: my-config

envFrom.configMapRef를 통해 configmap 값을 전부 넘겨줄 수 있습니다.

추가

만약 config를 변경할 수 없도록 하고 싶다면 yaml 파일에 immutable: true를 넣어주시면 됩니다.

참고

🥳configMap과 매우 유사한 api 오브젝트인 secret이 존재합니다. configmap의 경우 정의한 값 그대로 저장이 되지만 secret의 경우 base64로 인코딩 되어 저장이 됩니다.(실제 사용시 자동으로 원래 값을 사용하도록 디코딩 됩니다.)
이를 통해 보다 더 안전하게 사용할 수 있게 됩니다.

profile
greenTea입니다.

0개의 댓글