镜像备份参考

1、提前准备好备份镜像存放地方
2、根据实际情况使用K8S定时任务还是Linux定时任务
3、根据实际节点数量进行备份

备份脚本

docker 方式

ConfigMap(V1 弃用)

apiVersion: v1
data:
  backup.sh: |-
    #!/usr/bin/env sh

    [ -d ./images ] || mkdir ./images
    echo > ./images/map.txt
    docker images | grep -v REPOSITORY | grep -v rancher | grep -v "<none>" | \
    awk '{print "echo 导出:"$1":"$2";echo "$3" : "$1":"$2" >> ./images/map.txt;[ -f ./images/"$3".tar ] || docker save -o ./images/"$3".tar "$1":"$2}' | sh
kind: ConfigMap
metadata:
  name: pai-image-backup-conf
  namespace: pai-cloud

ConfigMap(V2 推荐)

apiVersion: v1
data:
  backup.sh: |-
    #!/usr/bin/env sh

    [ -d ./images ] || mkdir ./images
    echo > ./images/map.txt
    docker images | grep -v REPOSITORY | grep -v rancher | grep -v "<none>" | \
    awk '{print "name="$1";name=${name##*/}-"$2".tar;echo 导出:"$1":"$2" 为 ./images/$name;docker save -o ./images/$name "$1":"$2}' | sh
kind: ConfigMap
metadata:
  name: pai-image-backup-conf
  namespace: pai-cloud

containerd 方式

ConfigMap(推荐)

apiVersion: v1
data:
  backup.sh: |-
    #!/usr/bin/env sh

    [ -d ./images ] || mkdir ./images
    crictl images | grep -v IMAGE | grep -v rancher | grep -v "<none>" | \
    awk '{print "name="$1";name=${name##*/}-"$2".tar;echo 导出:"$1":"$2" 为 ./images/$name;ctr -n k8s.io i export ./images/$name "$1":"$2}' | sh
kind: ConfigMap
metadata:
  name: pai-image-backup-conf
  namespace: pai-cloud

定时任务

工作负载

apiVersion: batch/v1
kind: CronJob
metadata:
  annotations:
    k8s.kuboard.cn/displayName: 镜像备份
  labels:
    k8s.kuboard.cn/name: pai-image-backup
  name: pai-image-backup
  namespace: pai-cloud
spec:
  concurrencyPolicy: Forbid
  failedJobsHistoryLimit: 1
  jobTemplate:
    metadata:
      creationTimestamp: null
      labels:
        k8s.kuboard.cn/name: pai-image-backup
    spec:
      backoffLimit: 1
      template:
        metadata:
          creationTimestamp: null
        spec:
          containers:
            - command:
                - sh
                - /home/backup.sh
              image: 'centos:centos7.9.2009'
              imagePullPolicy: IfNotPresent
              name: pai-image-backup
              resources: {}
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
              volumeMounts:
                - mountPath: /data
                  name: volume-backup
                - mountPath: /home/backup.sh
                  name: volume-sh
                  subPath: backup.sh
                - mountPath: /etc/localtime
                  name: host-time
                - mountPath: /usr/bin/docker
                  name: docker
                - mountPath: /var/run/
                  name: dockersock
          dnsPolicy: ClusterFirst
          restartPolicy: Never
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
          volumes:
            - name: volume-backup
              nfs:
                path: /data/sdb/nfs/imagebackup
                server: 192.168.1.100
            - configMap:
                defaultMode: 420
                name: pai-image-backup-conf
              name: volume-sh
            - hostPath:
                path: /etc/localtime
                type: ''
              name: host-time
            - hostPath:
                path: /usr/bin/docker
                type: File
              name: docker
            - hostPath:
                path: /var/run/
                type: Directory
              name: dockersock
  schedule: 0 2 * * *
  successfulJobsHistoryLimit: 3
  suspend: false

Kubernets ETCD 数据库备份

可用于集群环境异常时偿试恢复,备份命令如下:

sealos etcd save --name etcd-202310250830.bak

# 默认输出在/opt/sealos/etcd-backup目录下

注意:备份出来的文件存放在安全的异地空间

文档更新时间: 2024-07-19 13:37   作者:管理员