본문 바로가기

카테고리 없음

차트 전달

myapp-chart/
├── Chart.yaml
├── values.yaml
├── values-dev.yaml
├── values-staging.yaml
├── values-prod.yaml
└── templates/
    └── update-manual-link-job.yaml

values.yaml

manualLink: "https://default.example.com/manual"

db:
  host: "postgres.default.svc.cluster.local"
  port: 5432
  name: "mydb"
  user: "myuser"
  password: "mypassword"

templates/update-manual-link-job.yaml (inline 쉘)

apiVersion: batch/v1
kind: Job
metadata:
  name: {{ include "myapp.fullname" . }}-update-manual-link
spec:
  template:
    spec:
      restartPolicy: OnFailure
      containers:
        - name: db-update
          image: postgres:15-alpine
          env:
            - name: MANUAL_LINK
              value: "{{ .Values.manualLink }}"
            - name: DB_HOST
              value: "{{ .Values.db.host }}"
            - name: DB_PORT
              value: "{{ .Values.db.port }}"
            - name: DB_NAME
              value: "{{ .Values.db.name }}"
            - name: DB_USER
              value: "{{ .Values.db.user }}"
            - name: DB_PASSWORD
              value: "{{ .Values.db.password }}"
          command:
            - /bin/sh
            - -c
            - |
              set -e
              echo "Updating manual link to $MANUAL_LINK"

              : "${DB_HOST:?Need DB_HOST}"
              : "${DB_PORT:?Need DB_PORT}"
              : "${DB_NAME:?Need DB_NAME}"
              : "${DB_USER:?Need DB_USER}"
              : "${DB_PASSWORD:?Need DB_PASSWORD}"
              : "${MANUAL_LINK:?Need MANUAL_LINK}"

              export PGPASSWORD=$DB_PASSWORD

              psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c "
              UPDATE settings
              SET value = '$MANUAL_LINK'
              WHERE key = 'manual_link';
              "

              echo "Manual link updated to $MANUAL_LINK"

장점 정리

  • 배포 시 Job가 자동으로 DB 매뉴얼 링크 업데이트
  • values.yaml로 유연하게 환경 관리
  • 동일 구조를 모든 환경에 재사용 가능
  • 쉘 스크립트가 Job template 안에 inline 처리되어 파일 관리 최소화

단점 정리

  • 복잡한 DB 업데이트나 로직 처리에는 한계
  • inline이라 수정하면 Helm 재배포 필요
  • Secret 없이 환경 변수만 쓰면 노출 가능