Application 기능으로 이해하기 - ConfigMap, Secret

Moongchi·2025년 6월 1일
0

kubernetes

목록 보기
7/14

ConfigMap

ConfigMap은 환경 설정 값이나 설정 파일 등을 Key-Value 형태로 저장하여 애플리케이션이 외부 설정을 동적으로 주입받을 수 있게 해주는 Kubernetes 오브젝트입니다.

설정

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  APP_ENV: production
  LOG_LEVEL: debug

활용방법

전체 설정 사용

envFrom:
  - configMapRef:
      name: my-config

일부 value 가져오기

env:
  - name: APP_ENV
    valueFrom:
      configMapKeyRef:
        name: my-config
        key: APP_ENV

파일로 mount

volumeMounts:
  - name: config-volume
    mountPath: /etc/config
volumes:
  - name: config-volume
    configMap:
      name: my-config

Secret

Secret은 설정값을 Base64 인코딩하여 저장하는 Object입니다.

설정방법

  • stringData: 일반 문자열을 넣으면 Kubernetes가 base64로 자동 인코딩함
  • data: base64로 직접 인코딩한 값을 넣는 필드 (보통 수동 생성 시 사용)
apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
stringData:
  DB_PASSWORD: s3cr3t
  TOKEN: abcdefg1234567

사용방법

환경 변수 주입

env:
  - name: DB_PASSWORD
    valueFrom:
      secretKeyRef:
        name: my-secret
        key: DB_PASSWORD

파일 mount

volumeMounts:
  - name: secret-volume
    mountPath: /etc/secret
volumes:
  - name: secret-volume
    secret:
      secretName: my-secret

pod 환경설정 우선순위

  • 각 단계별로 동일한 설정키를 주입할 때 우선 순위는 아래와 같음
    ※ ConfigMap > Jenkins(CICD) > Dockerfile > Java

만약 Java application.yaml 설정으로 인해 장애가 발생하여 긴급하게 변경이 필요하다면?

ConfigMap 설정만 추가 후 Deployment에 반영하면 pod 재기동 후 변경 설정 반영 가능

ex) Java multipart 파일 용량 제한을 10MB -> 100MB로 변경이 필요하다면

1. ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: myapp-config
data:
  SPRING_SERVLET_MULTIPART_MAX_FILE_SIZE: "100MB"
  SPRING_SERVLET_MULTIPART_MAX_REQUEST_SIZE: "100MB"

2. Deployment

spec:
  template:
    spec:
      containers:
        - name: myapp-container
          image: myapp:latest
          envFrom:
            - configMapRef:
                name: myapp-config

3. 변경 설정 적용

kubectl apply -f myapp-configmap.yaml
kubectl rollout restart deployment myapp

ex) Java application.yaml 설정을 변경 후 반영하려면

1. java 소스코드 변경

2. 상용배포 버전 관리

  • milestone 등 생성

3. Jenkins(자동스크립트)

  • 소스코드 checkout
  • Docker 이미지 생성
  • Jenkins 배포 유효성 검사
  • Jenkins 배포

0개의 댓글