Kubernetes/Kubernetes Advanced

📌 [Job 심화편 #8] Job 리소스와 ConfigMap/Secret 연동 전략: 실행 환경 외부화 구성

ygtoken 2025. 3. 25. 17:06
728x90

1️⃣ 개요

 

Job은 일회성 또는 반복되지 않는 특정 작업을 실행하는 데 활용됩니다.

이러한 작업은 보통 환경 변수, 설정 파일, 인증 정보 등을 필요로 하며,

이를 하드코딩하지 않고 외부 리소스(ConfigMap, Secret) 로 분리하는 것이 좋습니다.

 

이번 글에서는 Job이 ConfigMap, Secret과 연동하여 실행 환경을 외부화하는 구성 전략을 소개합니다.

 


2️⃣ 환경 외부화가 필요한 이유

항목 이유
설정 관리 일관성 Job 외부에서 설정 값을 변경 가능
보안 강화 민감 정보는 Secret으로 관리
재사용성 향상 동일한 Job 템플릿을 다른 설정으로 재사용
운영 안정성 설정 누락이나 오타 방지

✅ 설정을 외부화하면 Job이 더 유연하고 재사용 가능한 리소스가 됩니다.

 


3️⃣ ConfigMap을 환경 변수로 주입하는 예제

apiVersion: v1
kind: ConfigMap
metadata:
  name: job-config                        # 설정을 담은 ConfigMap
data:
  ENV: production
  REGION: ap-northeast-2
---
apiVersion: batch/v1
kind: Job
metadata:
  name: env-config-job
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: print-env
          image: busybox
          command:
            - sh
            - -c
            - |
              echo "환경: $ENV, 지역: $REGION"; sleep 5
          envFrom:
            - configMapRef:
                name: job-config          # ConfigMap의 모든 key-value를 env로 주입

📌 설명 요약

ConfigMap에서 정의한 key들이 환경 변수로 주입됩니다.

$ENV, $REGION 변수는 Job 실행 시 참조됩니다.

 


4️⃣ Secret을 환경 변수로 주입하는 예제

apiVersion: v1
kind: Secret
metadata:
  name: job-secret
type: Opaque
data:
  DB_PASSWORD: c2VjdXJlcGFzc3dvcmQ=       # "securepassword"를 base64 인코딩한 값
---
apiVersion: batch/v1
kind: Job
metadata:
  name: secret-env-job
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: db-job
          image: busybox
          command:
            - sh
            - -c
            - |
              echo "🔐 DB 접속 비밀번호는 $DB_PASSWORD"; sleep 5
          env:
            - name: DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: job-secret
                  key: DB_PASSWORD

📌 설명 요약

DB_PASSWORD는 Secret으로부터 주입되며,

Pod 내에서는 일반 환경 변수처럼 사용할 수 있습니다.

 


5️⃣ ConfigMap을 볼륨으로 마운트하여 사용하는 예제

apiVersion: v1
kind: ConfigMap
metadata:
  name: script-config
data:
  script.sh: |
    echo "📜 Job 실행 스크립트 시작"
    echo "이 스크립트는 ConfigMap으로 관리됩니다."
---
apiVersion: batch/v1
kind: Job
metadata:
  name: script-mount-job
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: run-script
          image: busybox
          command:
            - sh
            - /opt/script/script.sh
          volumeMounts:
            - name: script-volume
              mountPath: /opt/script
      volumes:
        - name: script-volume
          configMap:
            name: script-config
            defaultMode: 0755             # 실행 권한 부여

📌 설명 요약

ConfigMap의 script.sh 파일이 /opt/script/script.sh 경로에 마운트됩니다.

실행 권한을 주어 직접 실행 가능한 스크립트로 사용할 수 있습니다.

 


6️⃣ 운영 팁

목적 적용 방식
실행 환경 통합 관리 모든 환경 변수는 ConfigMap으로 관리
민감 정보 분리 DB 비밀번호, 토큰 등은 Secret으로 이동
Job 템플릿 재사용 설정만 다르게 주입하여 다양한 작업 실행
스크립트 통합 관리 ConfigMap으로 bash 스크립트를 일괄 관리

 

 


🔥 7️⃣ 결론

 

Job은 외부 설정 리소스와 연동함으로써 더욱 유연하고 안전하게 구성할 수 있습니다.

✔ 설정은 ConfigMap, 민감한 값은 Secret, 스크립트는 ConfigMap + volumeMount 방식이 일반적입니다.

✔ 이러한 외부화를 통해 Job 템플릿을 다양한 목적에 재사용할 수 있으며, 보안과 관리 측면에서 효율이 높아집니다.

 

728x90