🫡
ConfigMap
은 설정 정보를 저장하고쿠버네티스 파드
와 공유하기 위한 리소스입니다. 이를 통해 애플리케이션 코드와 설정을 분리하여, 동일한 코드 베이스를 다양한 환경에서 실행할 수 있습니다.
파드
를 생성할 경우 같은 설정값을 지니게 하고 싶다면configMap
을 생성해서 해당 값을 저장한 후에 위파드
들을configMap
을 이용해서 설정값을 설정해서 사용한다면 파드들은 같은 값을 가지게 됩니다.🤔
컨피그맵
에 저장된 데이터는 1MiB를 초과할 수 없는데 만약 이 이상 필요할 경우 볼륨 마운트를 통해 해결하라고 되어 있네요...
😑
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 파일로도 생성이 가능합니다.
😰
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
을 생성하였고 그 결과 위와 같이 나오게 되었습니다.
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 전체의 값을 넘기는 방법도 있습니다.
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로 인코딩 되어 저장이 됩니다.(실제 사용시 자동으로 원래 값을 사용하도록 디코딩 됩니다.)
이를 통해 보다 더 안전하게 사용할 수 있게 됩니다.