Kubernetes中的job和cronjob可用于批处理和定时任务。这里,我们使用其建立集群级别的文件备份机制。
- 关于Kubernetes中的job和cronjob使用,请参考:
这里使用rsync进行文件的同步。为了远程登录到服务器,使用sshpass(参见 Ubuntu上使用sshpass远程脚本免密安全交互 )进行远程访问。结合了sshpass的rsync命令如下:
SSHPASS='yourPasswordHere' rsync --rsh="sshpass -e ssh -l username" server.example.com:/var/www/html/ /backup/
我们将其写入一个脚本,然后放到Docker容器中去执行,该容器被作为job的执行引擎。为此:
- 部署
- 需要编写一个Dockerfile,安装rsync和sshpass。
- 挂载备份的目标卷。
- 同时,挂载一个配置卷(或者放在Redis之类的存储里面)。
- 将sshpass的password、username@target等放在里面。
- 做一个备份的任务清单,可以顺序执行或者并行地执行。
- 编写一个job的定义文件,从配置卷(或共享数据存储)读取任务信息,然后执行备份。
- 通过rsync和sshpass读取数据,并存储到备份卷上。
- 编写一个job的定义文件,从配置卷(或共享数据存储)和备份数据卷读取任务信息,然后执行备份恢复操作。
- 需要编写一个Dockerfile,安装rsync和sshpass。
- 备份
- 直接运行job进行备份。
- 修改cronjob的执行周期,自动定时备份。
- 恢复
- 读取备份数据卷,恢复到原始位置。
使用上面的机制,可以在多个节点间同步文件。
把上面安装的工具改为wget,也可以用来下载(定期下载、更新)需要的文件。