爱数博客

全部 AnyBackup AnyShare AnyRobot AnyDATA AnyFabric DIP

AnyRobot关键数据文件如何实现定期自动备份

2023-12-18 1245 0
       AnyRobot作为一款强大的日志收集分析系统,某些关键配置文件需要定期备份,比如备份到本地、备份到存储,那AnyRobot是如何实现关键配置文件定期备份的呢,大家都知道,AnyRobot采用K8S云原生架构,通过K8s丰富的controller之CronJob来实现关键配置文件的定期备份,接下来我们重点来了解CronJob,了解CronJob,我们必须得了解Job。
一、CronJob
      在 Kubernetes 中,CronJob 控制器是一种非常有用的资源,它可以用来定期执行任务,例如备份数据、清理日志、定时拉取数据等,基于 Cron 定时任务的机制,CronJob主要有以下场景:
  • 定期备份数据库或文件系统;
  • 定时发送通知或警报;
  • 定期清理过期的日志或缓存数据;
  • 定时拉取或更新数据,例如镜像、代码库等。
     Cron 表达式包含 5 个或 6 个字段,分别表示分钟、小时、日期、月份、星期几以及可选的年份。每个字段的取值范围不同,可以使用通配符、逗号、连字符等方式进行配置。 以下是几个 Cron 表达式的示例:
  • 每分钟执行一次任务: * * *
  • 每小时执行一次任务:0 * *
  • 每天凌晨 1 点执行任务:0 1 * * *
  • 每周一凌晨 1 点执行任务:0 1 * * 1
  • 每月 1 号凌晨 1 点执行任务:0 1 1 * *
  • 每年 1 月 1 号凌晨 1 点执行任务:0 1 1 1 *
  • 星号(*)表示匹配任意值,逗号(,)表示列举多个取值,连字符(-)表示指定一个取值范围。需要注意的是,CronJob 控制器只支持最小粒度为分钟,不能配置秒级别的定时任务。
  

二、Job
   Job主要用于负责批量处理短暂的一次性任务,它具备以下特点:

  • 当Job创建的Pod执行成功结束时,Job将记录成功结束的Pod数量;
  • 当成功结束的Pod达到指定的数量时,Job将完成执行。

   Job有几个场景化的关键参数

  • restartPolicy:Never,表示永不重试;
  • restartPolicy:Never, backoffLimit: 4,表示如果失败,最大重试次数是4;
  • activeDeadlineSeconds:100, 表示pod最多可运行100秒;
  • completions:8,parallelism:2,表示完成8次,同时只能有2个job并行运行。

三、CronJob和Job关系
     CronJob控制器以Job控制器为其管控对象,并借助它管理Pod资源对象。Job控制器定义的作业任务在其控制器资源创建之后便会立即执行,但是CronJob以类似Linux操作系统的周期性任务作业计划的方式,控制器运行时间点及重复运行的方式。

              
CronJob资源清单模版如下:
apiVersion: batch/v1beta1                
kind: CronJob                             
metadata:                                     
  name: jon-controller                          # CronJob名称
  namespace: dev                                # CronJob所属的命名空间
  labels:                                              # 给CronJob打标签
    controller: cronjob
spec:                                      
  schedule: "*/5 * * * * "                      # cron格式的Job调度运行时间点,用于控制Job定时运行时间
  concurrencyPolicy: Forbid                     # Job并发执行策略
  failedJobsHistoryLimit: 4                     # 为失败的Job保留的历史记录数,默认为1
  successfulJobsHistoryLimit: 4                 # 为成功的Job保留的历史记录数,默认为3
  jobTemplate:                                  # job控制器模板,用于为cronjob控制器生成job对象
    metadata: {}
    spec:
      completions: 5                            # 指定Job需要成功运行Pod的总次数,默认为1
      parallelism: 23                           # 指定Job在任一时刻能够并发运行Pod的数量,默认为1
      activeDeadlineSeconds: 120                 # 指定Job可以运行的时间期限,超过时间还没结束,系统将会尝试进行终止
      backoffLimit: 5                           # 指定Job失败后进行重试的次数,默认为6
      template:                                 # pod副本创建模板。属性和Pod的属性一样
        spec:
          restartPolicy: Never                  # 重启策略只能设置为Never或OnFailure
          containers:
            - name: busybox
              image: busybox:latest
              command: [ "/bin/sh", "-c", "for i in 1 2 3 ; do echo $i; sleep 3; done" ]
 
    schedule属性说明:Cronjob表达式,用于指定Job的执行时间
    concurrencyPolicy属性说明:Job并发执行策略
  • Allow:允许Job并发运行(默认)
  • Forbid:禁止并发运行,如果上一次运行尚未完成,则跳过下一次运行
  • Replace:替换,取消当前正在运行的作业并使用新作业替换它


四、具体应用示例
      以AnyRobot中kubernetes关键文件进行定期备份为例,可以看到在proton命名空间里面有一个名为proton-cs-backup-arnode的定期Cronjob,并且周期在运行。
1、查看proton-cs-backup-arnode Cronjob任务
[root@arnode ~]# kubectl get cj  -n proton
NAME                      SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
proton-cs-backup-arnode   30 18 * * *   False     0        13h             38d
2、查看proton-cs-backup-arnode详细配置文件
apiVersion: batch/v1
kind: CronJob
metadata:
  generation: 1
  name: proton-cs-backup-arnode
  namespace: proton
spec:
  concurrencyPolicy: Forbid
  failedJobsHistoryLimit: 1
  jobTemplate:
    metadata:
      creationTimestamp: null
    spec:
      template:
        metadata:
          creationTimestamp: null
        spec:
          containers:
          - command:
            - proton-cs-backup
            - backup
            - --limit=7
            - --directory=/var/lib/proton-cs/backup
            - --prefix=
            image: registry.aishu.cn:15000/proton/proton-cs-backup:v1.1.3
            imagePullPolicy: IfNotPresent
            name: backup
            resources: {}
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            volumeMounts:
            - mountPath: /var/lib/proton-cs/backup
              name: backup-directory
            - mountPath: /etc/kubernetes
              name: k8s-dir
            - mountPath: /var/lib/kubelet
              name: kubelet-run-directory
            - mountPath: /usr/share/zoneinfo
              name: zoneinfo
            - mountPath: /etc/localtime
              name: localtime
          dnsPolicy: ClusterFirst
          hostNetwork: true
          nodeName: arnode
          restartPolicy: OnFailure
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
          volumes:
          - hostPath:
              path: /var/lib/proton-cs/backup
              type: ""
            name: backup-directory
          - hostPath:
              path: /etc/kubernetes
              type: ""
            name: k8s-dir
          - hostPath:
              path: /var/lib/kubelet
              type: ""
            name: kubelet-run-directory
          - hostPath:
              path: /usr/share/zoneinfo
              type: ""
            name: zoneinfo
          - hostPath:
              path: /etc/localtime
              type: ""
            name: localtime
  schedule: 30 18 * * *
  startingDeadlineSeconds: 3600
  successfulJobsHistoryLimit: 3
  suspend: false
3、查看对应的job
[root@arnode ~]# kubectl  get job -n proton
NAME                               COMPLETIONS   DURATION   AGE
proton-cs-backup-arnode-28377750   1/1           6s         2d14h
proton-cs-backup-arnode-28379190   1/1           7s         38h
proton-cs-backup-arnode-28380630   1/1           7s         14h
4、目录定期生成配置文件备份
[root@arnode ~]# ls /var/lib/proton-cs/backup
2023-12-12-02-30-01.tar.gz  2023-12-13-02-30-01.tar.gz  2023-12-14-02-30-01.tar.gz  2023-12-15-02-30-01.tar.gz  2023-12-16-02-30-01.tar.gz  2023-12-17-02-30-01.tar.gz  2023-12-18-02-30-01.tar.gz
5、解压其中一个配置文件,发现均为kubernetes相关配置文件备份
etcd-snapshot.db
rootfs/
rootfs/etc/
rootfs/etc/kubernetes/
rootfs/etc/kubernetes/admin.conf
rootfs/etc/kubernetes/controller-manager.conf
rootfs/etc/kubernetes/kubelet.conf
rootfs/etc/kubernetes/manifests/
rootfs/etc/kubernetes/manifests/etcd.yaml
rootfs/etc/kubernetes/manifests/kube-apiserver.yaml
rootfs/etc/kubernetes/manifests/kube-controller-manager.yaml
rootfs/etc/kubernetes/manifests/kube-scheduler.yaml
rootfs/etc/kubernetes/pki/
rootfs/etc/kubernetes/pki/apiserver-etcd-client.crt
rootfs/etc/kubernetes/pki/apiserver-etcd-client.key
rootfs/etc/kubernetes/pki/apiserver-kubelet-client.crt
rootfs/etc/kubernetes/pki/apiserver-kubelet-client.key
rootfs/etc/kubernetes/pki/apiserver.crt
rootfs/etc/kubernetes/pki/apiserver.key
rootfs/etc/kubernetes/pki/ca.crt
rootfs/etc/kubernetes/pki/ca.key
rootfs/etc/kubernetes/pki/etcd/
rootfs/etc/kubernetes/pki/etcd/ca.crt
rootfs/etc/kubernetes/pki/etcd/ca.key
rootfs/etc/kubernetes/pki/etcd/healthcheck-client.crt
rootfs/etc/kubernetes/pki/etcd/healthcheck-client.key
rootfs/etc/kubernetes/pki/etcd/peer.crt
rootfs/etc/kubernetes/pki/etcd/peer.key
rootfs/etc/kubernetes/pki/etcd/server.crt
rootfs/etc/kubernetes/pki/etcd/server.key
rootfs/etc/kubernetes/pki/front-proxy-ca.crt
rootfs/etc/kubernetes/pki/front-proxy-ca.key
rootfs/etc/kubernetes/pki/front-proxy-client.crt
rootfs/etc/kubernetes/pki/front-proxy-client.key
rootfs/etc/kubernetes/pki/sa.key
rootfs/etc/kubernetes/pki/sa.pub
rootfs/etc/kubernetes/scheduler.conf
rootfs/var/
rootfs/var/lib/
rootfs/var/lib/kubelet/
rootfs/var/lib/kubelet/config.yaml
rootfs/var/lib/kubelet/kubeadm-flags.env
rootfs/var/lib/kubelet/pki/
rootfs/var/lib/kubelet/pki/kubelet-client-2023-11-09-19-14-34.pem
rootfs/var/lib/kubelet/pki/kubelet-client-current.pem
rootfs/var/lib/kubelet/pki/kubelet.crt
rootfs/var/lib/kubelet/pki/kubelet.key
metadata.yaml
正如上述文章说述,AnyRobot通过K8S Cronjob和Job相结合,实现关键数据文件的自动周期性备份。

请就本文对您的益处进行评级:

标签

产品技术

相关文章

热门标签

版本发布 在线教学
chat
support
trial
为了给您提供更优质的服务,请您先完善以下信息:
确认提交

扫码关注

爱数技术支持中心公众号

请选择:

请选择咨询类型

AnyShare
AnyBackUp
AnyRobot

扫码关注

爱数技术支持中心公众号

contact us

提交成功!

我们将在 24 小时之内联系你。