通过k8s 的定时任务job,我们可以方便的进行定时任务应用的开发,通过minio s3 兼容的cloud native 存储
我们可以方便的通过http 请求进行数据文件的备份,以下简单演示下如何进行集成

环境准备

docker 镜像修改自 https://github.com/Remigius2011/pg-dump ,主要是去除了schema 同时添加了gzip 压缩处理

dockerfile

FROM remigius65/pg-dump
COPY backup.sh /usr/bin/backup.sh
RUN chmod +x /usr/bin/backup.sh

backup.sh

主要修改了dump 逻辑,说明备份使用了.pgpass 进行账户的处理,省去输入密码的问题,mc 客户端账户信息通过
环境变量处理

#!/bin/sh

. /usr/bin/setpwd.sh

export DUMP_FILE="$BACKUP_DIR/$DB_ENV-$(date +"%F-%H%M%S").dump"

if [ ! -d "$BACKUP_DIR" ]; then

  echo mkdir -p "$BACKUP_DIR"
mkdir -p "$BACKUP_DIR" fi echo "pg_dump -h $PG_HOST -p $PG_PORT -U $PG_USER $PG_DB -f $DUMP_FILE"
pg_dump -h $PG_HOST -p $PG_PORT -U $PG_USER $PG_DB | gzip > $DUMP_FILE if [ -n "S3_HOST" ]; then export MC_HOSTS_store="$S3_PROTOCOL://$S3_ACCESS_KEY:$S3_SECRET_KEY@$S3_HOST"
echo "mc cp $DUMP_FILE store/$S3_BUCKET"
mc cp $DUMP_FILE store/$S3_BUCKET fi

docker-compose 文件

通过docker-compose 运行依赖的服务

version: "3"
services:
postgres:
image: postgres:10.7
ports:
- "5432:5432"
environment:
- "POSTGRES_PASSWORD:dalong"
volumes:
- ./db_data:/var/lib/postgresql/data
backup:
image: dalongrong/pg-dump
environment:
- "PG_HOST=postgres"
- "PG_DB=postgres"
- "PG_PASSWORD=dalong"
- "S3_HOST=s3:9000"
- "S3_ACCESS_KEY=dalongdemo"
- "S3_SECRET_KEY=dalongdemo"
- "S3_PROTOCOL=http"
s3:
image: minio/minio
command: server /export
ports:
- "9000:9000"
volumes:
- ./data:/export
- ./config:/root/.minio
environment:
- "MINIO_ACCESS_KEY=dalongdemo"
- "MINIO_SECRET_KEY=dalongdemo"

测试

  • 启动pg && minio
docker-compose up -d s3 postgres
  • 添加以下测试数据
    这个可以根据自己的喜好,自由添加
  • 测试数据备份
docker-compose up backup
  • 测试效果
docker-compose up backup
Starting pg-s3-backup_backup_1 ... done
Attaching to pg-s3-backup_backup_1
backup_1 | pg_dump -h postgres -p 5432 -U postgres postgres -f /pgbackup/prod-2019-03-18-103712.dump
backup_1 | mc cp /pgbackup/prod-2019-03-18-103712.dump store/pgbackup
backup_1 | `/pgbackup/prod-2019-03-18-103712.dump` -> `store/pgbackup/prod-2019-03-18-103712.dump`
backup_1 | Total: 1.03 KB, Transferred: 1.03 KB, Speed: 33.52 KB/s
pg-s3-backup_backup_1 exited with code 0
  • minio 界面

k8s cronjob

  • json 格式文件
{
"kind": "CronJob",
"apiVersion": "batch/v1beta1",
"metadata": {
"name": "pg-backup-job"
},
"spec": {
"schedule": "0 0 1 * *",
"concurrencyPolicy": "Replace",
"suspend": false,
"jobTemplate": {
"metadata": {
"creationTimestamp": null
},
"spec": {
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"apprepositories.kubeapps.com/repo-name": "pg-backup-job"
}
},
"spec": {
"containers": [
{
"name": "gitlab-pg-backup",
"image": "dalongrong/pg-dump-gzip",
"env": [
{
"name": "PG_DB",
"value": "postgres"
},
{
"name": "PG_HOST",
"value": "postgres"
},
{
"name": "PG_PASSWORD",
"value": "dalong"
},
{
"name": "PG_PORT",
"value": "5432"
},
{
"name": "S3_ACCESS_KEY",
"value": "dalongdemo"
},
{
"name": "S3_HOST",
"value": "s3:9000"
},
{
"name": "S3_PROTOCOL",
"value": "http"
},
{
"name": "S3_SECRET_KEY",
"value": "dalongdemo"
}
],
"imagePullPolicy": "IfNotPresent"
}
],
"restartPolicy": "OnFailure"
}
}
}
},
"successfulJobsHistoryLimit": 3,
"failedJobsHistoryLimit": 1
}
}
  • yaml 格式

    yaml 格式因为是使用json-> yaml 的工具,格式很难看

kind: CronJob
apiVersion: batch/v1beta1
metadata:
name: gitlab-backup-job
spec:
schedule: "0 0 1 * *"
concurrencyPolicy: Replace
suspend: false
jobTemplate:
metadata:
creationTimestamp: null
spec:
template:
metadata:
creationTimestamp: null
labels:
apprepositories.kubeapps.com/repo-name: gitlab-backup-job
spec:
containers:
- name: gitlab-pg-backup
image: dalongrong/pg-dump-gzip
env:
- name: PG_DB
value: postgres
- name: PG_HOST
value: postgres
- name: PG_PASSWORD
value: dalong
- name: PG_PORT
value: "5432"
- name: S3_ACCESS_KEY
value: dalongdemo
- name: S3_HOST
value: "s3:9000"
- name: S3_PROTOCOL
value: http
- name: S3_SECRET_KEY
value: dalongdemo
imagePullPolicy: IfNotPresent
restartPolicy: OnFailure
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 1
  • 运行效果

    因为k8s 定时备份的不是应用全部通过k8s 部署的,只有备份程序,pg 以及s3 都是外部的

容器日志

说明

结合k8s 的定时任务以及minio 的s3 能力,我们可以方便的制作一个备份以及恢复的方案,而且很简单

参考资料

https://github.com/Remigius2011/pg-dump
https://github.com/rongfengliang/pg-s3-backup
https://cloud.docker.com/repository/docker/dalongrong/pg-dump-gzip

 

使用k8s && minio 进行 postgres 数据库自动备份的更多相关文章

  1. 好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)

    转载:http://www.cnblogs.com/lyhabc/p/3322437.html 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 这个工具主要就是 ...

  2. SQL Server2008数据库自动备份步骤

    一,  在电脑开始菜单中选择“SQL Server Management Studio”双击.在出现的界面中点击“连接”按钮. 二,  在出现的“ Microsoft SQL Server Manag ...

  3. 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)

    原文:挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 这个工具主要就是自 ...

  4. SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)

    挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 这个工具主要就是自动备份数据库,一键还原数据库,发送备份数据库日志报告到邮箱,自动压缩备份好的数据库 定期执行数 ...

  5. sql server数据库自动备份

    SqlServer 数据库自动备份的两种解决方案 SQL Server中的角色(服务器级别和数据库级别角色) SqlServer服务器角色和数据库角色相关操作

  6. C#编写强大的SQL Server数据库自动备份服务

    数据库自动备份服务,带配置,还算可以吧 周末抽时间,编写了一个这样的工具,可以让,对数据库不了解或不熟悉的人,直接学会使用备份,省时省力,同样,我也将一份,通过脚本进行备份的,也奉献上来, 通过sql ...

  7. Windows下Oracle数据库自动备份批处理脚本

    expdb命令版本 @echo off REM ########################################################### REM # Windows Se ...

  8. Sql_server_2014创建数据库自动备份

    Sql_server_2014创建数据库自动备份 程序员的基础教程:菜鸟程序员

  9. C# 编写的SqlServer 数据库自动备份服务,带配置,功能强大

    数据库自动备份服务,带配置,还算可以吧 周末抽时间,编写了一个这样的工具,可以让,对数据库不了解或不熟悉的人,直接学会使用备份,省时省力,同样,我也将一份,通过脚本进行备份的,也奉献上来, 通过sql ...

随机推荐

  1. C++面向对象实现封装线程池

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  2. hustoj 管理员和后台设置

    之前用过hustoj 的livecd版本,觉得有一些小问题,所以从头到尾搭建.主要包含的过程包括: 安装ubuntu系统 搭建hustoj 管理员和后台资源建设 本文介绍如何在搭建好hustoj的基础 ...

  3. 怎样在Ubuntu 14.04中安装Java(转)

    想知道如何在Ubuntu 14.04中安装Java?安装Java肯定是安装Ubuntu 14.04后首先要做的几件事情之一(见http://www.linuxidc.com/Linux/2014-04 ...

  4. DevExpress WinForms使用教程:图表控件 - 内置深入查询

    [DevExpress WinForms v18.2下载] 在最新发布的DevExpress WinForms v18.2中,DevExpress WinForms和ASP.NET图表控件引入嵌套系列 ...

  5. DevExpress WPF v18.2新版亮点(四)

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress WPF v18.2的新功 ...

  6. iframe 常见问题 解析

    1. jquery在iframe子页面获取父页面元素代码如下: $("#objid",parent.document) 2. jquery在父页面获取iframe子页面的元素代码如 ...

  7. day 46 前端基础 基本框架

    注意一点 使用绝对路径的时候 在pxm里 打开显示不了图片 可以直接找到那个实际的网页去打开 还可能是图片的格式尽量用jpg一 详细解释 <!DOCTYPE html>声明为HTML5文档 ...

  8. count函数详细介绍

    select count(字段) from 表名; #得到字段中is not null的行数 select count(*)from 表名; #任何列,只要有一个非null就会被统计上.全为null( ...

  9. Python 网络通信协议 tcp udp区别

    网络通信的整个流程 在这一节就给大家讲解,有些同学对网络是既熟悉又陌生,熟悉是因为我们都知道,我们安装一个路由器,拉一个网线,或者用无限路由器,连上网线或者连上wifi就能够上网购物.看片片.吃鸡了, ...

  10. HDU 6055 17多校 Regular polygon(计算几何)

    Problem Description On a two-dimensional plane, give you n integer points. Your task is to figure ou ...