blog/content/posts/2024-12-26/index.md

121 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
author: usbharu
draft: true
categories:
- ボツ記事
date: 2024-12-26T15:05:47+09:00
tags:
- Kubernetes
- Docker
keywords:
- Kubernetes
- Docker
title: ボツ記事 k8s内に構築したPostgreSQLをCronJobでバックアップする
relpermalink: posts/2024-12-26/
url: posts/2024-12-26/
decription: k8s内に構築したPostgreSQLをCronJobでバックアップする
---
[おうちk8sでMisskeyとNowPlayingを動かし始めたよ · usbharu - blog](https://blog.usbharu.dev/posts/2024-12-01/)でCloudNative PostgreSQLをやめ、k8s内で普通のPostgreSQLを動かし始めました。同時にバックアップ手段も失ったので、今回は自動バックアップを構築する記事です。
## やりたいこと
k8sのCronJobでPostgreSQLをバックアップのpg_dumpを作成してオブジェクトストレージにアップロードしたい。
## 出来上がったもの
[usbharu/pg_backup_job - pg_backup_job - Gitea for usbharu](https://git.usbharu.dev/usbharu/pg_backup_job)
今回ほとんどChatGPTに作ってもらいました。これぐらいなら余裕ですね!
コメント等もほぼChatGPTが出力したままです。
```Dockerfile
# ベースイメージにPostgreSQL 15の公式クライアントを使用
FROM postgres:16
# 必要なツールをインストール
RUN apt-get update && apt-get install -y \
curl \
awscli \
&& rm -rf /var/lib/apt/lists/*
# 作業ディレクトリ
WORKDIR /backup
# スクリプトをコピー
COPY backup.sh /backup/backup.sh
# 実行権限を付与
RUN chmod +x /backup/backup.sh
# エントリーポイントを設定
ENTRYPOINT ["/backup/backup.sh"]
```
```bash
#!/bin/bash
set -e
# 必須環境変数リスト
REQUIRED_VARS=(
PG_HOST
PG_PORT
PG_USER
PG_PASSWORD
PG_DATABASE
S3_BUCKET
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
)
# 未設定の環境変数をチェック
for VAR in "${REQUIRED_VARS[@]}"; do
if [ -z "${!VAR}" ]; then
echo "エラー: 必須環境変数 '${VAR}' が設定されていません。" >&2
MISSING_ENV=true
fi
done
if [ "$MISSING_ENV" = true ]; then
exit 1
fi
# 環境変数の設定
export AWS_ACCESS_KEY_ID="${AWS_ACCESS_KEY_ID}"
export AWS_SECRET_ACCESS_KEY="${AWS_SECRET_ACCESS_KEY}"
export AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION:-us-east-1}"
# ダンプファイル名
DUMP_FILE="dump_$(date +%Y%m%d%H%M%S).sql"
# pg_dumpを実行
export PGPASSWORD="${PG_PASSWORD}"
pg_dump -h "${PG_HOST}" -p "${PG_PORT}" -U "${PG_USER}" -d "${PG_DATABASE}" -F c -b -v -f "${DUMP_FILE}"
# S3にアップロード
if [[ -n "${S3_ENDPOINT}" ]]; then
# カスタムエンドポイント指定時
aws --endpoint-url "${S3_ENDPOINT}" s3 cp "${DUMP_FILE}" "s3://${S3_BUCKET}/${DUMP_FILE}"
else
# デフォルトエンドポイント
aws s3 cp "${DUMP_FILE}" "s3://${S3_BUCKET}/${DUMP_FILE}"
fi
# ローカルのダンプファイルを削除
rm -f "${DUMP_FILE}"
echo "バックアップとアップロードが完了しました。"
```
こっちの方もちょっと変わっていて、CronJobとそれに必要なSecretが追加されています。
[usbharu/usbharu-lab at e067db4ea302c3d3ee63c375d5058e1c2c6bedf1](https://github.com/usbharu/usbharu-lab/tree/e067db4ea302c3d3ee63c375d5058e1c2c6bedf1)
---
- ボツ理由ChatGPTで生成したんなら記事各意味なくね?
- 状態:書きかけ