热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:k8s实践16:使用job控制器备份Mysql容器pod数据库

篇首语:本文由编程笔记#小编为大家整理,主要介绍了k8s实践16:使用job控制器备份Mysql容器pod数据库相关的知识,希望对你有一定的参考价值。job配置和简易测

篇首语:本文由编程笔记#小编为大家整理,主要介绍了k8s实践16:使用job控制器备份Mysql容器pod数据库相关的知识,希望对你有一定的参考价值。



job配置和简易测试

官方文档

1.job简单介绍


job也是种控制器,k8s有两种类型的控制器,一种是服务类控制器,比如deployment,deamonset,replicaset等等.一种是工作任务类控制器,job和cronjon就是工作任务类控制器.

job的简易参数介绍


spec.template格式同Pod
RestartPolicy仅支持Never或OnFailure
单个Pod时,默认Pod成功运行后Job即结束.
spec.completions标志Job结束需要成功运行的Pod个数,默认为1,可以理解pod运行的总数.
spec.parallelism标志并行运行的Pod的个数,默认为1,可以理解为同时运行的Pod数量.
spec.activeDeadlineSeconds标志失败Pod的重试最大时间,超过这个时间不会继续重试.
spec.backoffLimit: 指定job失败后进行重试的次数.

2.job简易实例

[root@k8s-node1 job]#cat job1.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
metadata:
name: pi
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never

[root@k8s-node1 job]# kubectl get job
NAME COMPLETIONS DURATION AGE
pi 1/1 8m37s 15m
[root@k8s-node1 job]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 76 28d
mysql-7c9cbfcdf8-hxlrm 1/1 Running 7 22d
mysql-t-54666b579c-7m5rv 1/1 Running 11 26d
mysql-test-647b8db96b-qdxw6 1/1 Running 10 23d
pi-5gtpz 0/1 Completed 0 15m
wordpress-pod-74c47cd8dd-dlzvc 1/1 Running 7 22d
[root@k8s-node1 job]# kubectl logs pi-5gtpz
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275901
[root@k8s-node1 job]#

修改配置文件,加上参数测试


[root@k8s-node1 job]# cat job1.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
completions: 3
parallelism: 2
template:
metadata:
name: pi
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never

spec.parallelism参数设置了2,因此开始就启动了两个pod


[root@k8s-node1 job]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 76 28d
mysql-7c9cbfcdf8-hxlrm 1/1 Running 7 22d
mysql-t-54666b579c-7m5rv 1/1 Running 11 26d
mysql-test-647b8db96b-qdxw6 1/1 Running 10 23d
pi-jjpm4 0/1 ContainerCreating 0 4s
pi-xffsz 0/1 ContainerCreating 0 4s
wordpress-pod-74c47cd8dd-dlzvc 1/1 Running 7 22d

[root@k8s-node1 job]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 76 28d
mysql-7c9cbfcdf8-hxlrm 1/1 Running 7 22d
mysql-t-54666b579c-7m5rv 1/1 Running 11 26d
mysql-test-647b8db96b-qdxw6 1/1 Running 10 23d
pi-c4qxs 0/1 Completed 0 43s
pi-jjpm4 0/1 Completed 0 55s
pi-xffsz 0/1 Completed 0 55s
wordpress-pod-74c47cd8dd-dlzvc 1/1 Running 7 22d

3.job备份mysql容器数据库


job在什么场景使用呢?

比如数据库备份

最简单的示例,参考见下:

思路是启用一个job,使用的镜像是mysql:5.7(注意密码必须设置),然后执行命令mysqldump --host=mysql-test -uroot -ppassword --databases t1 >t1.sql.备份MySQL容器pod主机名为mysql-test的数据库(注意mysql-test是svc的名字).


[root@k8s-node1 job]# kubectl get svc,pod
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/httpd-svc NodePort 10.254.125.1 80:8400/TCP 31d
service/kubernetes ClusterIP 10.254.0.1 443/TCP 45d
service/mysql ClusterIP 10.254.209.23 3306/TCP 23d
service/mysql-t ClusterIP 10.254.177.63 3306/TCP 27d
service/mysql-test ClusterIP 10.254.177.188 3306/TCP 24d
service/wordpress NodePort 10.254.88.118 8080:8425/TCP 23d
NAME READY STATUS RESTARTS AGE
pod/busybox 1/1 Running 92 29d
pod/mysql-7c9cbfcdf8-hxlrm 1/1 Running 17 23d
pod/mysql-dump-jw5zh 0/1 Completed 0 80s
pod/mysql-t-54666b579c-7m5rv 1/1 Running 21 27d
pod/mysql-test-647b8db96b-qdxw6 1/1 Running 19 24d
pod/t1-55f6c78557-6xxwd 1/1 Running 0 17m
pod/t2-7f459d454c-wk2zb 1/1 Running 0 17m
pod/wordpress-pod-74c47cd8dd-dlzvc 1/1 Running 12 23d

[root@k8s-node1 job]# cat job2.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: mysql-dump
spec:
template:
metadata:
name: mysql-dump
spec:
containers:
- name: mysql-dump
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: abc123
command: ["/bin/sh","-c","mysqldump --host=mysql-test -uroot -ppassword --databases t1 >t1.sql"]
restartPolicy: Never

测试执行成功.见下:


[root@k8s-node1 storage]# kubectl get job
NAME COMPLETIONS DURATION AGE
mysql-dump 1/1 2s 28m

[root@k8s-node1 storage]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 81 29d
mysql-7c9cbfcdf8-hxlrm 1/1 Running 7 22d
mysql-dump-p4wn7 0/1 Completed 0 28m
mysql-t-54666b579c-7m5rv 1/1 Running 11 27d
mysql-test-647b8db96b-qdxw6 1/1 Running 10 23d
nfs-client-provisioner-5bd47b7669-lzv6j 0/1 ContainerCreating 0 6m38s
wordpress-pod-74c47cd8dd-dlzvc 1/1 Running 7 22d

完美点的示例,把备份的数据解耦出来,加上pvc.

配置pv和pvc,参考见下:


pv

[root@k8s-node1 storage]# cat job-pv1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: jobpv1
spec:
capacity:
storage: 100Mi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /mnt/data/jobpv1
server: 192.168.174.130
[root@k8s-node1 storage]# kubectl apply -f job-pv1.yaml
persistentvolume/jobpv1 created
[root@k8s-node1 storage]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
jobpv1 100Mi RWX Retain Available nfs 7s

pvc

[root@k8s-node1 storage]# cat job-pvc1.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jobpvc1
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Mi
storageClassName: nfs
[root@k8s-node1 storage]# kubectl apply -f job-pvc1.yaml
persistentvolumeclaim/jobpvc1 created
[root@k8s-node1 storage]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
jobpvc1 Bound jobpv1 100Mi RWX nfs 4s

把pvc使用到job上


[root@k8s-node1 job]# cat job2.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: mysql-dump
spec:
template:
metadata:
name: mysql-dump
spec:
containers:
- name: mysql-dump
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: abc123
command: ["/bin/sh","-c","mysqldump --host=mysql-test -uroot -ppassword --databases t1 >/mnt/t1.sql"]
volumeMounts:
- name: job-pvc
mountPath: "/mnt"
restartPolicy: Never
volumes:
- name: job-pvc
persistentVolumeClaim:
claimName: jobpvc1

[root@k8s-node1 job]# kubectl apply -f job2.yaml
job.batch/mysql-dump created
[root@k8s-node1 job]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 92 29d
mysql-7c9cbfcdf8-hxlrm 1/1 Running 17 23d
mysql-dump-jw5zh 0/1 Completed 0 3s
mysql-t-54666b579c-7m5rv 1/1 Running 21 27d
mysql-test-647b8db96b-qdxw6 1/1 Running 19 24d
t1-55f6c78557-6xxwd 1/1 Running 0 16m
t2-7f459d454c-wk2zb 1/1 Running 0 15m
wordpress-pod-74c47cd8dd-dlzvc 1/1 Running 12 23d

可以去保存pvc的目录下查看,数据已经备份成功,见下


[root@k8s-node3 jobpv1]# pwd
/mnt/data/jobpv1
[root@k8s-node3 jobpv1]# ls
t1.sql

4.使用cronjob备份


上面用job备份只是一次性执行结束,对于很多备份是需要持续性备份操作的,持续性备份操作,k8s有cronjob.

就用上面的示例修改,未完待续.



推荐阅读
  • 前言: 网上搭建k8s的文章很多,但很多都无法按其说明在阿里云ecs服务器成功搭建,所以我就花了些时间基于自己成功搭建k8s的步骤写了个操作手册,希望对想搭建k8s环境的盆友有所帮 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 检查 Kubernetes 系统命名空间中的 Pod 状态时,发现 Metric Server Pod 虽然处于运行状态,但存在异常:日志显示 'it doesn’t contain any IP SANs'。 ... [详细]
  • 在Kubernetes上部署多个Mitmproxy代理服务器以实现高效流量管理 ... [详细]
  • Envoy 流量分配策略优化
    在本研究中,我们对Envoy的流量分配策略进行了优化,旨在提高系统的稳定性和性能。实验环境包括一个前端代理服务(Envoy,IP地址为172.31.57.10)和五个后端服务。通过调整Envoy的配置,实现了更高效的流量分发和负载均衡,显著提升了整体系统的响应速度和可靠性。 ... [详细]
  • 如何使用Maven将依赖插件一并打包进JAR文件
    本文详细介绍了在使用Maven构建项目时,如何将所需的依赖插件一同打包进最终的JAR文件中,以避免手动部署依赖库的麻烦。 ... [详细]
  • 本文深入探讨了MySQL中的高级特性,包括索引机制、锁的使用及管理、以及如何利用慢查询日志优化性能。适合有一定MySQL基础的读者进一步提升技能。 ... [详细]
  • Android 开发技巧:使用 AsyncTask 实现后台任务与 UI 交互
    本文详细介绍了如何在 Android 应用中利用 AsyncTask 来执行后台任务,并及时将任务进展反馈给用户界面,提高用户体验。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
author-avatar
紫藤老君的八卦炉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有