【发布时间】:2017-07-10 16:39:18
【问题描述】:
备份在Google Cloud Container Engine 上运行的 Postgres 数据库的最佳做法是什么?
我的想法是将备份存储在Google Cloud Storage,但我不确定如何将磁盘/Pod 连接到存储桶。
我正在使用以下配置在 Kubernetes 集群中运行 Postgres:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: postgres-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: postgres
spec:
containers:
- image: postgres:9.6.2-alpine
imagePullPolicy: IfNotPresent
env:
- name: PGDATA
value: /var/lib/postgresql/data
- name: POSTGRES_DB
value: my-database-name
- name: POSTGRES_PASSWORD
value: my-password
- name: POSTGRES_USER
value: my-database-user
name: postgres-container
ports:
- containerPort: 5432
volumeMounts:
- mountPath: /var/lib/postgresql
name: my-postgres-volume
volumes:
- gcePersistentDisk:
fsType: ext4
pdName: my-postgres-disk
name: my-postgres-volume
我已尝试创建 Job 来运行备份:
apiVersion: batch/v1
kind: Job
metadata:
name: postgres-dump-job
spec:
template:
metadata:
labels:
app: postgres-dump
spec:
containers:
- command:
- pg_dump
- my-database-name
# `env` value matches `env` from previous configuration.
image: postgres:9.6.2-alpine
imagePullPolicy: IfNotPresent
name: my-postgres-dump-container
volumeMounts:
- mountPath: /var/lib/postgresql
name: my-postgres-volume
readOnly: true
restartPolicy: Never
volumes:
- gcePersistentDisk:
fsType: ext4
pdName: my-postgres-disk
name: my-postgres-volume
(据我了解)这应该运行pg_dump 命令并将备份数据输出到标准输出(应该出现在kubectl logs 中)。
顺便说一句,当我检查 Pod(使用 kubectl get pods)时,它显示 Pod 永远不会退出“待定”状态,我认为这是因为没有足够的资源来启动 Job。
将此进程作为作业运行是否正确? 如何将作业连接到 Google Cloud Storage? 还是我应该做一些完全不同的事情?
我猜由于性能下降,在数据库容器中运行pg_dump(带有kubectl exec)是不明智的,但也许这在开发/登台服务器中可以吗?
【问题讨论】:
-
这正是我的情况。您找到可以分享的可行解决方案了吗?
标签: postgresql google-cloud-storage kubernetes google-kubernetes-engine