Spring Boot · 2026-01-02

Kubernetes에 Spring Boot 배포와 ConfigMap 설정

Kubernetes 환경에서 Spring Boot 애플리케이션을 배포하고 ConfigMap으로 설정을 관리하는 단계별 예제와 Helm chart 예제

작성일 : 2026-01-02 ㆍ 작성자 : 관리자
post
목차

소개

Spring Boot 애플리케이션을 Kubernetes에 배포할 때 설정 관리는 중요하다. ConfigMap을 이용하면 환경별 설정을 코드와 분리해 관리할 수 있다. 이 글은 처음 접하는 개발자도 이해할 수 있도록 Deployment와 ConfigMap 작성, 그리고 간단한 Helm chart 예제까지 순서대로 설명한다.

사전 준비

  • Docker 이미지로 빌드된 Spring Boot 애플리케이션
  • Kubernetes 클러스터 또는 Minikube
  • kubectl과 Helm 설치

Spring Boot 도커라이즈

간단한 Dockerfile 예시다. 자바 애플리케이션을 빌드한 JAR을 컨테이너에 복사해 실행한다.

FROM eclipse-temurin:17-jdk-alpine
ARG JAR_FILE=build/libs/app.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

ConfigMap으로 설정 분리

ConfigMap을 사용하면 application.properties나 외부 설정을 주입할 수 있다. 아래 예제는 애플리케이션의 일부 설정을 ConfigMap으로 관리하는 방법이다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: spring-boot-config
data:
  application.properties: |
    spring.datasource.url=jdbc:mysql://db:3306/mydb
    spring.datasource.username=myuser
    spring.datasource.password=mypassword
    logging.level.root=INFO

Deployment 작성

Deployment는 ConfigMap을 볼륨으로 마운트하거나 환경 변수로 주입할 수 있다. 아래 예시는 properties 파일을 /config/application.properties로 마운트하고, Spring Boot가 해당 위치를 읽도록 설정한 경우다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-boot-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: spring-boot
  template:
    metadata:
      labels:
        app: spring-boot
    spec:
      containers:
      - name: app
        image: your-repo/spring-boot:latest
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: config-volume
          mountPath: /config
      volumes:
      - name: config-volume
        configMap:
          name: spring-boot-config

환경 변수로 설정 주입

특정 속성만 환경 변수로 주입하려면 아래처럼 설정한다.

env:
- name: SPRING_DATASOURCE_URL
  valueFrom:
    configMapKeyRef:
      name: spring-boot-config
      key: spring.datasource.url

Service로 노출

클러스터 내부 또는 외부에 애플리케이션을 노출할 Service 예시다.

apiVersion: v1
kind: Service
metadata:
  name: spring-boot-service
spec:
  selector:
    app: spring-boot
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  type: ClusterIP

Helm chart 예제

Helm을 사용하면 재사용 가능한 템플릿으로 배포를 단순화한다. 간단한 values.yaml과 templates/deployment.yaml 스니펫을 확인한다.

values.yaml

replicaCount: 2
image:
  repository: your-repo/spring-boot
  tag: latest
service:
  port: 80
config:
  spring.datasource.url: jdbc:mysql://db:3306/mydb
  spring.datasource.username: myuser
  spring.datasource.password: mypassword

templates/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-deployment
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}
    spec:
      containers:
      - name: {{ .Release.Name }}
        image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
        ports:
        - containerPort: 8080
        envFrom:
        - configMapRef:
            name: {{ .Release.Name }}-config

Helm으로 ConfigMap 생성

Helm 템플릿으로 ConfigMap을 만들면 values.yaml의 설정을 자동으로 주입할 수 있다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-config
data:
{{- range $key, $value := .Values.config }}
  {{ $key }}: "{{ $value }}"
{{- end }}

배포 절차 요약

  • 이미지 빌드 및 레지스트리에 푸시
  • ConfigMap 생성 또는 Helm values 설정
  • Deployment와 Service 적용
  • 로그와 이벤트 확인으로 문제 점검

문제 해결 팁

  • 로그: kubectl logs로 컨테이너 로그 확인
  • 설정 확인: kubectl describe configmap로 내용 검토
  • 환경 변수: 컨테이너 내부에서 env 출력으로 주입 여부 확인

결론

ConfigMap으로 설정을 분리하고 Deployment에서 적절히 마운트하거나 env로 주입하면 환경별 관리가 쉬워진다. Helm을 도입하면 반복되는 배포가 단순해진다. 위 예제를 따라하면 spring boot kubernetes 배포와 kubernetes configmap spring boot 적용, spring boot helm chart 예제 사용에 도움이 된다.

spring boot kubernetes 배포 kubernetes configmap spring boot spring boot helm chart 예제 kubernetes deployment spring boot docker configmap 예제 helm chart k8s 배포