目录
- 一、背景:
- 二、设计思路:
- 三、编写启动脚本
- 四、构建镜像
- 五、添加边车容器
- 5.1 创建配置文件
- 5.2 创建有状态服务部署文件
- 六、测试
一、背景:一开始的初衷是 , 想写一个脚本来监控服务器的高占用率进程并通过邮件发送给我 , 然后突发奇想 , 可以使用这种方式来备份我的数据库 , 开始动手!
二、设计思路:通过编写shell脚本 , 调用linux的mail工具 , mysqldump的方式来保存数据库的sql文件 , 通过mail工具添加到附件 , 最后发送到我的邮箱 。
三、编写启动脚本首先我们来编写一个启动脚本
为了方便以后的个性化配置 , 我们将脚本中的变量都提取到一个application.yml文件中 , 文件如下:
RUNTIME: 084900 ##启动时间 , 因为容器时区问题 , 需要当前时间减去8小时HOST: 172.17.0.3 ##数据库IP地址USER: root ##数据库用户PASSWORD: 123456 ##数据库密码DATABASE: solo ##数据库名TARGETMAIL: 1849539179@qq.com ##发送的邮箱地址接下来我们来写一下shell脚本 , 逻辑也很简单 , 当前时间与启动时间相同时 , 则调用sendmail函数发送邮件
#!/bin/bash#author: chentengRUNTIME=$(cat ./application.yml | grep RUNTIME| awk '{print $2}')HOST=$(cat ./application.yml | grep HOST| awk '{print $2}')USER=$(cat ./application.yml | grep USER| awk '{print $2}')PASSWORD=$(cat ./application.yml | grep PASSWORD| awk '{print $2}')DATABASE=$(cat ./application.yml | grep DATABASE| awk '{print $2}')TARGETMAIL=$(cat ./application.yml | grep TARGETMAIL| awk '{print $2}')functionsendmail(){mysqldump -h$HOST-u$USER -p$PASSWORD--complete-insert --skip-add-drop-table--hex-blob $DATABASE> $DATABASE.sqlecho -e "mysqlbak_$CURRENT_TIME" |mail -s "mysqlbak_$CURRENT_TIME" -a $DATABASE.sql $TARGETMAILsleep 1}while truedoCURRENT_TIME=$(date +%H%M%S)if [ $CURRENT_TIME = $RUNTIME ];thenecho "starting bak mysql database"sendmailcontinueelseecho $CURRENT_TIMEsleep 1fidone
四、构建镜像因为我们最后要放到k8s平台上的 , 所以我们要构建一个镜像 , 在构建镜像之前 , 请先把application.yml demo.sh Dockerfile放在同一目录下
Dockerfile如下:
PS:添加了mysql的客户端 , 邮件mail客户端
FROM centosRUN mkdir /app && yum install -y mysql.x86_64 sendmailmailx libreport-plugin-mailx WORKDIR /appCOPY demo.sh .COPY application.yml .CMD ["/bin/sh","demo.sh"]使用docker build命令构建镜像,要记得加一下最后的点
docker build -t mysqlmail-bak:1.0.1 .
五、添加边车容器边车容器(sidecar):边车容器就是与主容器一起在一个pod中运行的容器 , 为业务容器赋能 , 共享一个网络空间 , 所以可以用127.0.0.1:3306连接主容器的数据库 。
5.1 创建配置文件为了方便调试 , 我把里面的shell脚本也挂载出来 。
创建两个configmap , 分别对应容器内的配置文件与shell脚本 , 后面如果不需要调试可以取消mysqlshell的挂载 。
apiVersion: v1kind: ConfigMapmetadata:name: mysqlmail-confnamespace: solodata:application.yml: |RUNTIME: 105800HOST: 127.0.0.1USER: rootPASSWORD: 123456DATABASE: soloTARGETMAIL: 1849539179@qq.com---apiVersion: v1kind: ConfigMapmetadata:name: mysqlmail-shellnamespace: solodata:demo.sh: |#!/bin/bash#author: chentengRUNTIME=$(cat ./application.yml | grep RUNTIME| awk '{print $2}')HOST=$(cat ./application.yml | grep HOST| awk '{print $2}')USER=$(cat ./application.yml | grep USER| awk '{print $2}')PASSWORD=$(cat ./application.yml | grep PASSWORD| awk '{print $2}')DATABASE=$(cat ./application.yml | grep DATABASE| awk '{print $2}')TARGETMAIL=$(cat ./application.yml | grep TARGETMAIL| awk '{print $2}')functionsendmail(){mysqldump -h$HOST-u$USER -p$PASSWORD--complete-insert --skip-add-drop-table--column-statistics=0 --hex-blob $DATABASE> $DATABASE.sqlecho -e "mysqlbak_$CURRENT_TIME" |mail -s "mysqlbak_$CURRENT_TIME" -a $DATABASE.sql $TARGETMAILsleep 1}while truedoCURRENT_TIME=$(date +%H%M%S)if [ $CURRENT_TIME = $RUNTIME ];thenecho "starting bak mysql database"sendmailcontinueelseecho $CURRENT_TIMEsleep 1fidone
推荐阅读
- 提升设计审美的六种方法,如何评论设计审美
- 基于Docker、Nginx和Jenkins实现前端自动化部署,前端服务器自动化部署Docker、Nginx和Jenkins
- docker 搭建Mysql集群的方法示例,Mysql集群的搭建实例教程
- 用docker部署RabbitMQ环境的详细介绍,RabbitMQ环境的搭建教程方法
- 在docker中部署k8s的方法,k8s的搭建部署方法
- 如何完全清理你的Docker数据,删除docker数据的操作教程
- Docker搭建部署Node项目的方法步骤,Node服务部署搭建方法
- 一主二从 Docker部署MySQL8集群的实现步骤,MySQL8部署集群教程方法
- 锤子T3曝光:外观惊艳,设计独特,这次不卖情怀了!
- 网上接设计,提升原型设计能力