KubernetesのJobでgsutilを使ってバックアップ
code:shell
% gsutil help config
(snip)
CONFIGURING SERVICE ACCOUNT CREDENTIALS
Service accounts are useful for authenticating on behalf of a service or
application (as opposed to a user). You can configure credentials for service
accounts using the -e option:
gsutil config -e
Note that if you are using gsutil through the Cloud SDK, you should instead
activate your service account via the gcloud auth activate-service-account
command.
(snip)
だそうなので、先にgcloud auth activate-service-accountをする。
GOOGLE_APPLICATION_CREDENTIALS環境変数でサービスアカウントのキーファイルを指定できるという情報もあったけどうまくいかなかった。
code:shell
% gcloud auth activate-service-account --key-file=path/to/key.json
% gsutil -m rsync -r path/to/data gs://bucket-name/path/to/data
(gsutil rsyncの-dオプションを付けてもいいと思うけど何となく怖いので付けない)
これはPlumeのメディア(アップロード画像)をバックアップする例。 code:jobs/backup-plume-media.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: backup-plume-media
spec:
template:
spec:
containers:
- name: backup-plume-media
image: gcr.io/google.com/cloudsdktool/cloud-sdk
args:
- "-c"
- |
gcloud auth activate-service-account --key-file=/etc/plume-secrets/gcloud_key.json && \
gsutil -m rsync -r /app/static/media gs://${BUCKET_NAME}/media
env:
- name: plume-secrets
mountPath: /etc/plume-secrets
volumes:
- name: plume-secrets
secret:
secretName: plume-secrets
restartPolicy: Never
backoffLimit: 0
GCPのサービスアカウントを作って、鍵JSONファイルをKubernetesのsecretとして登録しておく。
code:shell
% kubectl create secret generic plume-secrets --from-file=./gcloud_key.json
オンデマンドでやるならこれで
code:shell
% kubectl apply -f jobs/backup-plume-media.yaml
だし、実際にはCronJobを作ってこれを日時とかで走らせることになるだろう。