作成手順
1. ビルトインレジストリの有効化(※既に実施している場合はスキップしてください)Microk8sがインストールされているホスト上で以下のコマンドを実行します。
microk8s enable registry:size=50Gi
※registryプラグインが有効化してあるか不明な場合はmicrok8s statusコマンドを実行します。Dockerがインストールしてあるリモートマシン上で以下のコマンドを実行します。192.168.1.1の部分は、Microk8sのホストのIPに変更してください。
cat << EOF | sudo tee /etc/docker/daemon.json
{
"insecure-registries" : ["192.168.1.1:32000"]
}
EOF
sudo systemctl restart docker
2. 以下のDockerfileを使用してPostgreSQLのpg_dumpをインストールしたイメージを作成します。
Dockerfile
FROM alpine:3.15
RUN apk --no-cache add postgresql-client \
&& mkdir /data
WORKDIR /data
VOLUME ["/data"]
ENV PG_HOST=localhost \
PG_USER=postgres \
PGPASSWORD=postgres \
PG_DB=postgres \
PG_PORT=5432 \
BASENAME=backup \
POSTFIX=_
CMD ["/bin/sh", "-c", "/usr/bin/pg_dump -h ${PG_HOST} -p ${PG_PORT} -U ${PG_USER} ${PG_DB} | gzip > /data/${BASENAME}${POSTFIX}.dmp.gz"]
・イメージ作成コマンド ※192.168.1.1の部分はMicrok8sのホストのIPに変更してください。
docker build . -t 192.168.1.1:32000/pgdump:latest
・イメージのタグ付け
docker tag `docker images | grep '192.168.1.1:32000/pgdump' | awk '{print $3}'` 192.168.1.1:32000/pgdump:latest
・イメージをビルトインレジストリにプッシュ
docker push 192.168.1.1:32000/pgdump:latest
・Microk8sのサーバ上で、イメージが登録されたことを確認するには以下のコマンドを実行します。
wget http://192.168.1.1:32000/v2/_catalog -O -
3. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
cat << EOF > local-pgdump-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pgdump-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
storageClassName: local-storage
local:
path: /backup/mydatabase
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。microk8s kubectl apply -f ./local-pgdump-pv.yml
4. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
cat << EOF > local-pgdump-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-pgdump-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-storage
resources:
requests:
storage: 5Gi
volumeName: local-pgdump-pv
EOF
microk8s kubectl apply -f ./local-pgdump-pvc.yml
5. CronJobの作成
以下のファイルでCronJobを構成します。ここでは12:30にバックアップジョブを実行するようにしています。
cronjob-bakcup-mydatabase.yml
apiVersion: batch/v1
kind: CronJob
metadata:
name: pgdump
spec:
schedule: "30 12 * * *"
successfulJobsHistoryLimit: 5
failedJobsHistoryLimit: 5
jobTemplate:
spec:
template:
spec:
containers:
- name: pgdump
image: localhost:32000/pgdump:latest
env:
- name: PG_HOST
value: "192.168.1.1"
- name: PG_USER
value: postgres
- name: PGPASSWORD
value: mypostgres
- name: PG_DB
value: mydatabase
- name: PG_PORT
value: "5432"
- name: BASENAME
value: backup-mydatabase-
volumeMounts:
- name: data
mountPath: /data
command:
- /bin/sh
- -c
- PFIX=`/bin/date '+%Y%m%d-%H%M'` && /usr/bin/pg_dump -h ${PG_HOST} -p ${PG_PORT} -U ${PG_USER} ${PG_DB} | gzip > /data/${BASENAME}${PFIX}.dmp.gz
restartPolicy: Never
volumes:
- name: data
persistentVolumeClaim:
claimName: local-pgdump-pvc
以下のコマンドでCronJobを作成します。microk8s kubectl apply -f ./cronjob-bakcup-mydatabase.yml
関連情報
・Dockerの場合は、以下のページを参照してください。Dockerでpg_dumpをインストールしたイメージ(Alpine3.15ベース)を作成してバックアップを行う
0 件のコメント:
コメントを投稿