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 없이 환경 변수만 쓰면 노출 가능