영구 볼륨만 선언했다면 어플리케이션에는 어찌됐든 하드 코딩을 통해 경로를 알려줄 수 밖에 없습니다.
이 때 deployment.yaml
에서 환경 변수를 선언하여 컨테이너 내부에서 사용 가능하도록 설정이 가능합니다.
# [deployment.yaml]
.
.
containers:
- name: <container_name>
image: <image_name> # ex. Sonjh/testimage:1
env:
- name: STORY_FOLDER
valueFrom:
configMapKeyRef:
name: <configmap-name> ex. data-store-env
key: <KEY> ex. folder
volumeMounts:
- mountPath: <mount-path> # ex. /app/story
name: <volume-name>
위처럼 환경 변수를 선언할 수 있고, 컨테이너 내부의 앱에서는 환경변수를 사용해 코드를 짤 수 있습니다.
만약 앱의 저장소가 /app/story
였다면,
/app/{환경변수를 불러오는 코드.STORY_FOLDER}
를 사용해볼수 있게 됩니다.
키-값 쌍을 ConfigMap이라는 yaml파일로 한 yaml파일에 정리해볼수 있습니다.
configmap
유형의 yaml파일은 클러스터의 엔티티에 대한 별도의 파일이나 리소스에 키-값 쌍을 가질 수 있게 해줍니다.
# [environment.yaml]
apiVersion: v1
kind: ConfigMap
metadata:
name: <configmap-name> # ex. data-store-env
data:
key1: value1
key2: value2
folder: 'story'
.
.
.
이 파일도 마찬가지로 kubectl apply -f environment.yaml
을 통해 적용이 가능합니다.
이후 deployment.yaml
에서 env 설정에서 다음으로 바꿔줍니다.
# [deployment.yaml]
.
.
containers:
- name: <container_name>
image: <image_name> # ex. Sonjh/testimage:1
env:
- name: <KEY> # ex. STORY_FOLDER
value: <VALUE> # ex. 'story'
volumeMounts:
- mountPath: <mount-path> # ex. /app/story
name: <volume-name>
왜 사용하는가?
작성해야 할 부분이 더 많아져서 별로인 듯 보일 수 있습니다.
만약 위에서 환경변수가 바뀌게 된다면
deployment.yaml
이 수정되므로 Pod가 재실행됩니다.
하지만 이제 환경변수를 수정할 때environment.yaml
만 수정하고 적용하므로deployment
를 재실행하지 않고 환경변수 수정이 이뤄질 수 있습니다!