从书籍《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中也可能流行起來。我對基礎設施、網路和輕量級操作系統非常感興趣,當然也對應用程式開發非常感興趣。

过去的帖子

    1. 以下是对原文的一种汉语本地化表达:

初学者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连接编

广告
将在 10 秒后关闭
bannerAds