导航

Kubernetes 定时备份etcd数据

Posted on 2025-10-06 20:54  清欢也野  阅读(3)  评论(0)    收藏  举报

个人笔记、与各位的环境不同、自行修改

编写dockfile镜像

1、首先我利用的是k8s自带的基础容器镜像
[root@qinghuanyeye ~]# grep 'image:' /etc/kubernetes/manifests/etcd.yaml 
    image: registry.aliyuncs.com/google_containers/etcd:3.5.6-0
2、 编写镜像
[root@qinghuanyeye ~]# cat Dockerfile 
FROM  registry.aliyuncs.com/google_containers/etcd:3.5.6-0

MAINTAINER qinghuanyeye

 
CMD ["/bin/sh","-c","etcdctl --endpoints=${ETCD_HOST}:${ETCD_PORT} --cacert=/certs/ca.crt --cert=/certs/peer.crt --key=/certs/peer.key snapshot save /backup/etcd-`date +%F-%T`.backup"]

3、编译镜像
[root@qinghuanyeye ~]# docker build -t qinghuanyeye.com/backup-etcd/tools:v1 .

4、你自行导入镜像

编写资源清单

[root@qinghuanyeye ~]# cat backup-etc.yaml
apiVersion: v1
kind: Secret
metadata:
  name: ceph-admin-secret
  namespace: etcd-backup
stringData:
  key: **********************==

---
apiVersion: batch/v1
kind: CronJob
metadata:
  name: backup-etcd
  namespace: etcd-backup
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          volumes:
          - name: certs
            cephfs:
              monitors:
              - ceph-1-1:6789
              - ceph-1-2:6789
              - ceph-1-3:6789
              path: /etcd-certs
              user: admin
              secretRef:
                name: ceph-admin-secret
              readOnly: true
          - name: bak
            cephfs:
              monitors:
               - ceph-1-1:6789
               - ceph-1-2:6789
               - ceph-1-3:6789
              path: /backup
              user: admin
              secretRef:
                name: ceph-admin-secret
          containers:
          - name: etcd-backup
            image: qinghuanyeye.com/backup-etcd/tools:v1
            imagePullPolicy: IfNotPresent
            volumeMounts:
            - name: certs
              mountPath: /certs
            - name: bak
              mountPath: /backup
            env:
            - name: ETCD_HOST
              value: ceph-1-1
            - name: ETCD_PORT
              value: "2379"
          restartPolicy: OnFailure
[root@qinghuanyeye ~]# kubectl apply -f  backup-etc.yaml 

自行测试查看

------------------------------------------------------------------------

------------------------------------------------------------------------

------------------------------------------------------------------------

常见问题解答:K8s 定时备份

1. 什么是 Kubernetes 定时备份?

Kubernetes 定时备份是一种确保 Kubernetes 集群中的数据和配置的持续性和可恢复性的方法。它涉及到定期备份集群中的资源状态、持久化卷数据、配置文件等,以便在出现故障或数据丢失时能够快速恢复。定时备份通常包括对集群中的 etcd 数据库、应用程序数据、以及各种配置文件和持久化存储的备份。

Kubernetes 定时备份可以通过多种方式实现,包括使用 Kubernetes 原生工具、第三方备份解决方案以及自定义备份脚本。选择合适的备份工具和策略取决于集群的规模、数据的重要性以及恢复要求。

2. 如何设置 Kubernetes 定时备份?

设置 Kubernetes 定时备份的步骤包括:

  1. 选择备份工具
    许多备份解决方案可以帮助自动化备份过程,包括 Velero、Stash 和 Kasten K10 等。这些工具提供了丰富的功能,如增量备份、恢复点创建和跨集群备份。

  2. 配置备份计划
    根据选择的工具,配置备份计划通常涉及编写 YAML 配置文件来定义备份策略和计划。例如,Velero 允许用户创建备份计划对象(BackupSchedule),通过指定备份的频率、存储位置等。

  3. 验证备份
    配置完成后,应定期验证备份的有效性。可以通过恢复操作来测试备份的完整性,确保在实际需要时可以成功恢复数据。

  4. 监控和管理
    设置适当的监控和警报机制,以便及时了解备份状态和可能出现的问题。许多备份工具提供了集成的监控功能,也可以通过集成的日志管理工具来跟踪备份活动。

3. Kubernetes 定时备份的最佳实践是什么?

  • 确保备份覆盖所有关键数据
    定时备份不仅要涵盖 etcd 数据库,还要包括持久化卷(PV)、ConfigMap、Secrets 和其他集群资源。确保所有重要的数据都有备份,以防止数据丢失。

  • 使用多种存储位置
    为了提高数据的安全性,建议将备份存储在多个位置。例如,可以将备份存储在云存储服务和本地存储中,以防止单点故障。

  • 定期测试恢复过程
    备份的最终目的是能够在发生故障时快速恢复数据。因此,定期进行恢复测试,以验证备份的有效性和恢复过程的顺利进行是非常重要的。

  • 自动化备份管理
    利用自动化工具和脚本来管理备份过程,减少人为操作错误的风险。自动化工具可以定期执行备份任务,并提供备份状态的实时报告。

  • 遵循合规要求
    确保备份策略符合行业和法规的要求,例如数据保留政策和隐私保护标准。这可以帮助避免法律和合规问题,并确保数据在合规框架内得到保护。