Files
postgres/templates/configmap.yaml

81 lines
2.3 KiB
YAML

apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "postgresql.fullname" . }}-config
labels:
{{- include "postgresql.labels" . | nindent 4 }}
data:
{{- if .Values.replication.enabled }}
primary-init.sh: |
#!/bin/bash
set -e
# レプリケーションユーザーの作成
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE USER {{ .Values.postgres.replicationUser }} WITH REPLICATION ENCRYPTED PASSWORD '${REPLICATION_PASSWORD}';
EOSQL
# pg_hba.confの設定
echo "host replication {{ .Values.postgres.replicationUser }} 0.0.0.0/0 md5" >> ${PGDATA}/pg_hba.conf
# postgresql.confの設定
cat >> ${PGDATA}/postgresql.conf <<EOF
wal_level = replica
max_wal_senders = 10
max_replication_slots = 10
hot_standby = on
synchronous_commit = {{ .Values.replication.synchronousCommit }}
synchronous_standby_names = 'ANY {{ .Values.replication.numSynchronousReplicas }} (*)'
EOF
# PostgreSQLの再起動
pg_ctl reload
replica-init.sh: |
#!/bin/bash
set -e
# データディレクトリが空の場合のみレプリケーションを初期化
if [ ! -s "${PGDATA}/PG_VERSION" ]; then
echo "Initializing replica from primary..."
rm -rf ${PGDATA}/*
PGPASSWORD=${REPLICATION_PASSWORD} pg_basebackup \
-h {{ include "postgresql.fullname" . }}-primary \
-D ${PGDATA} \
-U {{ .Values.postgres.replicationUser }} \
-v -P -W -R
# standby.signalの作成
touch ${PGDATA}/standby.signal
echo "Replica initialization completed"
fi
{{- end }}
{{- if .Values.backup.enabled }}
backup.sh: |
#!/bin/bash
set -e
BACKUP_DIR="/backup"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/backup_${TIMESTAMP}.sql.gz"
RETENTION_DAYS={{ .Values.backup.retention }}
echo "Starting backup at ${TIMESTAMP}"
# バックアップの実行
pg_dumpall -U ${POSTGRES_USER} | gzip > ${BACKUP_FILE}
# 古いバックアップの削除
find ${BACKUP_DIR} -name "backup_*.sql.gz" -mtime +${RETENTION_DAYS} -delete
echo "Backup completed: ${BACKUP_FILE}"
# バックアップサイズの確認
ls -lh ${BACKUP_FILE}
{{- end }}