从书籍《Kubernetes入门指南》(基于实际案例学习)的Job篇中学习Kubernetes入门指南的初学者入门
背景
我个人认为除了基础的基础设施知识之外,我还想创建和部署能够运行未来应用程序的环境,并且想要获得关于未来知识的更多了解。我希望能够进一步更新自己的知识。
在那其中,我遇见了这本书,我希望把我所做的一点一滴记录下来,作为未来的自我留言,并且希望重新审视自己。
本次引用和参考了一些适合我的学习用书籍。
关于实际学习
我希望在阅读书籍的同时,逐章逐章地逐渐进行学习。
我也想通过使用GitHub上的源代码来学习。
这一章的学习可能主要是通过书籍的模仿来进行的…
勉强开始
代码库
请把以下内容翻译成中文,只需要提供一种选项:
https://github.com/kubernetes-practical-guide/examples/tree/master/ch3.8.1/manifests/mattermost
只执行一次的工作
备份脚本
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-backup
data:
backup-db.sh: |
#!/bin/bash
set -e
echo "Execute backup-db.sh"
MYSQLM="mysql -h mysql-0.mysql --user=root --password=${MYSQL_ROOT_PASSWORD}"
MYSQLDUMP="mysqldump -h mysql-0.mysql --user=root --password=${MYSQL_ROOT_PASSWORD}"
$MYSQLM -e 'FLUSH TABLES WITH READ LOCK;'
log_file=$($MYSQLM -e 'SHOW MASTER STATUS\G;' | grep File: | awk '{print $2}')
pos=$($MYSQLM -e 'SHOW MASTER STATUS\G;' | grep Position: | awk '{print $2}')
datestamp=$(date +%Y%m%d)
backupname="/mnt/backup/${MYSQL_DATABASE}-${datestamp}-${log_file}-${pos}.dump"
${MYSQLDUMP} "${MYSQL_DATABASE}" > "${backupname}"
$MYSQLM -e 'UNLOCK TABLES;'
exit 0
运行脚本的作业
apiVersion: batch/v1
kind: Job
metadata:
name: mysql-backup
spec:
completions: 1 # (a)
parallelism: 1 # (b)
template:
spec:
containers:
- name: backup-mysql
image: k8spracticalguide/mysql:5.7.22
envFrom:
- configMapRef:
name: common-env
- secretRef:
name: common-env
command: ["bash", "/mnt/backup-script/backup-db.sh"]
volumeMounts:
- name: backup-script
mountPath: /mnt/backup-script
- name: backup
mountPath: /mnt/backup
restartPolicy: Never # (c)
volumes:
- name: backup-script
configMap:
name: mysql-backup
- name: backup
persistentVolumeClaim:
claimName: backup-mysql
backoffLimit: 3 # (d)
ab. 指定正常終了作业的次数和并行执行数量。
当Pod异常终止时,重新启动策略的指定为restartPolicy Pod。
d. 设置 backoffLimit 参数可以指定 Job 失败时的重试次数。
# ConfigMap と Job をデプロイ
$ kubectl apply -f mysql-cm-backup.yaml
configmap/mysql-backup created
$ kubectl apply -f mysql-job.yaml
job.batch/mysql-backup created
# Pod の状態を確認
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
mattermost-67d4ff7dd-z5zq5 1/1 Running 0 140m
mysql-0 1/1 Running 0 140m
mysql-1 1/1 Running 0 140m
mysql-backup-v4s88 1/1 Running 0 4s
# Jobの状態の確認
$ kubectl get jobs
NAME COMPLETIONS DURATION AGE
mysql-backup 1/1 7s 20s
## 定期実行する CronJob
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cron-mysql-backup
spec:
schedule: "0 * * * *" # (a)
startingDeadlineSeconds: 60 # (b)
concurrencyPolicy: Forbid # (c)
successfulJobsHistoryLimit: 5 # (d)
failedJobsHistoryLimit: 5 # (e)
jobTemplate: # (f)
spec:
template:
spec:
containers:
- name: cron-backup-mysql
image: mysql:5.7.22
envFrom:
- configMapRef:
name: common-env
- secretRef:
name: common-env
command: ["bash", "/mnt/backup-script/backup-db.sh"]
volumeMounts:
- name: backup-script
mountPath: /mnt/backup-script
- name: backup
mountPath: /mnt/backup
restartPolicy: Never
volumes:
- name: backup-script
configMap:
name: mysql-backup
- name: backup
persistentVolumeClaim:
claimName: backup-mysql
restartPolicy: Never
a. 设置日程
b. 设定 startingDeadlineSeconds 为 CronJob 未执行时的执行时间期限。
c. 设置并发策略。
d. 保持成功 Job 的数量。
e. 保持失败 Job 的数量。
f. 执行 jobTemplate 中定义的内容。
# CronJobをデプロイ
$ kubectl apply -f mysql-cronjob.yaml
cronjob.batch/cron-mysql-backup created
# CronJobの状態を確認
$ kubectl get cronjobs
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cron-mysql-backup 0 * * * * False 0 <none> 18s
18:00 执行完批处理后,请确认目录。
$ ls -tlr
total 88
-rw-r--r-- 1 xxxxxxxxxx staff 1259 5 1 14:31 mattermost-20200501-mysql-bin.000003-154.dump
-rw-r--r-- 1 xxxxxxxxxx staff 40070 5 1 17:30 mattermost-20200501-mysql-bin.000004-92675.dump
-rw-r--r-- 1 xxxxxxxxxx staff 40070 5 1 18:00 mattermost-20200501-mysql-bin.000004-117085.dump
下一步我们要进行第六章的学习。
提高应用程序的稳定性。
最后
这次,我尝试了一下工作,将数据库安装到服务器上并进行了备份,但在kubernetes上确认这一点是很好的。
我在閱讀《SoftwareDesign》五月號時,注意到了「osv / unikernel」這個關鍵詞,我認為它在未來的Kubernetes中也可能流行起來。我對基礎設施、網路和輕量級操作系統非常感興趣,當然也對應用程式開發非常感興趣。
过去的帖子
-
- 以下是对原文的一种汉语本地化表达:
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)Pod编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)NameSpace编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)Label编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)ReplicaSet编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)Deployment编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)Service编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)ConfigMap编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)Secret编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)操作编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)体验编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)体验编 Part 2
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)体验编 Part 3(Label操作)
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)体验编 Part 3(OwnerReference操作)
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)清单编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)清单(ConfigMap)编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)通信编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)通信编 Part 2
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)通信编 Part 3
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)通信编 Part 4
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)公开编 Part 1(NodePort)
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)公开编 Part 2(LoadBalancer)
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)公开编 Part 3(Ingress)
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)外部存储编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)外部存储编 Part 2
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)StatefulSet编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)StatefulSet编 Part 2
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)StatefulSet编 Part 3
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)扩展编
初学者Kubernetes入门(从书籍《Kubernetes实践入门》的示例学习)Mattermost连接编