
Kubernetes에서 ConfigMap은 환경 변수와 설정값을 외부에서 관리할 수 있는 객체로, 유지보수성과 환경별 설정 관리 효율성을 높여줍니다. Deployment에 환경 변수를 직접 작성하는 대신 ConfigMap으로 분리하면 코드와 설정이 분리되어 관리가 편리해집니다.
설정값을 변경할 때 애플리케이션의 매니페스트 파일을 수정할 필요 없이 ConfigMap만 업데이트하면 됩니다.
개발, 테스트, 프로덕션 등 각 환경에 맞는 설정값을 쉽게 변경할 수 있습니다.
여러 리소스에서 동일한 설정값을 공유할 수 있습니다.
spring-config.yaml 파일을 생성합니다. Key-Value 형식으로 설정값을 저장합니다.
apiVersion: v1
Kind: ConfigMap
# ConfigMap 기본 정보
metadata:
name: spring-config # ConfigMap 이름
# Key-Value 형식으로 설정값 저장
data:
my-account: artp123 # Key-Value 형식의 데이터
my-password: pwd123
my-account와 my-password는 스프링 부트 애플리케이션에서 환경 변수로 사용됩니다.spring-deployment.yaml 파일에서 환경 변수 설정 부분을 ConfigMap과 연결하도록 수정합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-deployment
spec:
replicas: 5 # 생성할 Pod의 복제본 개수
selector:
matchLabels:
app: backend-app
template:
metadata:
labels:
app: backend-app
spec:
containers:
- name: spring-container
image: spring-server
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
env: # ConfigMap을 참조하는 환경 변수 설정
- name: MY_ACCOUNT
valueFrom:
configMapKeyRef:
name: spring-config # 참조할 ConfigMap 이름
key: my-account # ConfigMap에서 가져올 Key
- name: MY_PASSWORD
valueFrom:
configMapKeyRef:
name: spring-config # 참조할 ConfigMap 이름
key: my-password # ConfigMap에서 가져올 Key
valueFrom.configMapKeyRef: ConfigMap의 특정 Key 값을 환경 변수로 가져옵니다.spring-config)과 Key 값(my-account, my-password)을 명시합니다.ConfigMap과 Deployment 매니페스트 파일을 쿠버네티스 클러스터에 적용합니다.
# ConfigMap 생성
kubectl apply -f spring-config.yaml
# Deployment 생성 또는 업데이트
kubectl apply -f spring-deploymen.yaml
# 변경 사항 저장을 위해 Deployment 재시작
# kubectl rollout restart deployment [디플로이먼트명]
$ kubectl rollout restart deployment spring-deployment # 디플로이먼트 재시작
