为了给您提供更优质的服务,请您先完善以下信息:
确认提交

扫码关注

爱数技术支持中心公众号

请选择:

请选择咨询类型

AnyShare
AnyBackUp
AnyRobot

扫码关注

爱数技术支持中心公众号

contact us

提交成功!

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

性能爆表
AnyShare
如何购买
我想先试用
我已是Anyshare 客户
AnyRobot
如何购买
购买 AnyRobot 订阅服务
我已是 AnyRobot 客户
一对一在线咨询
我是 AnyRobot 新客户
一对一在线咨询

爱数博客

全部 AnyBackup AnyShare AnyRobot AnyDATA AnyFabric DIP

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

2023-12-18 1078 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相结合,实现关键数据文件的自动周期性备份。

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

标签

产品技术

相关文章

热门标签

版本发布 在线教学
ai-assistant
chat
support
trial
需求助手 (内容由 AI 大模型生成,请仔细甄别)