热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

restic安全可靠的备份工具——筑梦之路

支持的后端存储:本地sftp(通过ssh)httprestserver(rest-serverrestic提供的&#x

支持的后端存储:
本地
sftp (通过ssh)
http rest server (rest-server restic提供的 )
s3 (同时支持minio)
openstack swift
backblaze b2
azure blob storage
google cloud storage
以及其他可以通过rclone 访问的后端存储restic+miniominio(docker-compose搭建单机版)cat docker-compose.yml
version: '3.0'
services:tbc-minio:image: minio/minioports:- "9000:9000"- "9001:9001"volumes:- /data/minio/data:/data- /data/minio/config:/root/.minioenvironment:- MINIO_DOMAIN=tbc-minio- MINIO_ACCESS_KEY=admin12345678 #用户- MINIO_SECRET_KEY=admin12345678 #密码command: server /data --console-address ":9001"healthcheck:test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]interval: 30stimeout: 20sretries: 3restart: on-failuremkdir /data/minio/{data,config} -pdocker-compose up -d浏览器访问验证:http://ip:9000配置s3环境变量:export AWS_ACCESS_KEY_ID=admin12345678
export AWS_SECRET_ACCESS_KEY=admin12345678安装resticsudo yum -y install yum-plugin-coprsudo yum copr enable copart/resticsudo yum -y install restic配置自动补全
restic generate --bash-completion restic.bash_completion
source restic.bash_completion初始化备份仓库
restic -r s3:http://ip/backup init查看仓库状态
restic -r s3:http://ip/backup stats【可选】加入环境变量,免去每次输入密码
export RESTIC_PASSWORD=*********
export RESTIC_REPOSITORY=s3:http://ip/backup
查看状态:restic stats执行备份test目录操作
restic -r s3:http://ip/backup backup test#参数说明:
默认备份目录下所有文件
--exclude 排除某些文件
--file-from 指定备份的文件列表对比备份的差异
restic diff 55572d0c f7d5b7c555572d0c 为snapshot id列举所有的snapshot
restic snapshots
restic -r s3:http://ip/backup snapshots查看快照中的文件列表
restic ls f18cccc5 / restic ls -l f18cccc5查找所有文件
restic find hello*查找指定快照指定文件的内容
restic dump f18cccc5 /backup-demo/hello2.txt挂载快照内容到本地
restic mount /mntmount | grep /mntcat /mnt/snapshots/latest/backup-demo/hello2.txtumount /mnt------------------------------------------------------------
数据恢复
restic restore f18cccc5 -t /tmp/restore_data单个文件恢复
restic dump f18cccc5 /backup-demo/hello2.txt >hello2.txt备份删除
--dry-run参数查看指定策略会删除的快照,但实际不会执行删除操作,用于检验参数是否符合预期比如保留最新的3个快照
restic forget --keep-last=3 --dry-run保留前两小时的备份
restic forget --dry-run --keep-hourly 2备份计划:结合crontab命令执行

Velero Kubernetes应用备份容灾,其他工具Stash

./velero install \--provider aws \--plugins xxx/velero-plugin-for-aws:v1.0.0 \--bucket velero \--secret-file ./aws-iam-creds \--backup-location-config region=test,s3Url=http://192.168.0.1,s3ForcePath \--snapshot-location-config region=test \--image xxx/velero:v1.6.3 \--features=EnableCSI \--use-restic \--dry-run -o yaml--plugins以及--image参数指定镜像仓库地址,仅当使用私有镜像仓库时需要配置。
--use-restic参数开启使用restic备份PV数据卷功能。
早期Kubernetes的volume卷不支持快照,因此备份PV卷时需要安装特定的后端存储卷插件,Kubernetes从v1.12开始CSI引入Snapshot后可以利用Snapshot特性实现备份,指定--features=EnableCSI参数开启,开启该模式的底层存储必须支持snapshot,并且配置了snapshot相关的CRD以及volumesnapshotclass(类似storageclass)数据恢复需要依赖velero-restic-restore-helper工具,如果使用私有镜像仓库,可以通过restic configmap配置私有镜像地址:apiVersion: v1
kind: ConfigMap
metadata:name: restic-confignamespace: velerolabels:velero.io/plugin-config: ""velero.io/restic: RestoreItemAction
data:image: xxx/velero-restic-restore-helper:v1.6.3

备份

# nginx-app-demo.yaml
---
apiVersion: v1
kind: Namespace
metadata:name: nginx-app
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc-demonamespace: nginx-app
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: ceph-rbd-sata
---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginxnamespace: nginx-app
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxannotations:backup.velero.io/backup-volumes: mypvcspec:containers:- image: nginxname: nginxvolumeMounts:- name: mypvcmountPath: /usr/share/nginx/htmlvolumes:- name: mypvcpersistentVolumeClaim:claimName: pvc-demoreadOnly: false
---
apiVersion: v1
kind: Service
metadata:labels:app: nginxname: nginxnamespace: nginx-app
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:app: nginx

  • 声明了一个PVC,并挂载到nginx pod的/usr/share/nginx/html路径。

  • pod添加了注解backup.velero.io/backup-volumes: mypvc用于指定需要备份的volume。因为并不是所有的volume都必须备份,实际生产中可根据数据的重要性设置合理的备份策略,因此不建议开启--default-volumes-to-restic选项,该选项会默认备份所有的volume。

#进入容器写入一些测试数据kubectl exec -t -i nginx-86f99c968-sj8ds -- /bin/bashcd /usr/share/nginx/html/
echo "HelloWorld" >index.html
echo "hello1" >hello1.html
echo "hello2" >hello2.html#创建备份
velero backup create nginx-backup-1 --include-namespaces nginx-app#查看备份信息
velero describe backups nginx-backup-1备份状态为Completed,说明备份完成,记录中会有备份开始时间和完成时间。
备份的资源数和完成数。
备份的volume数(Restic Backups)。------------------------------------------------
备份数据管理、迁移
#s3中查看
aws s3 ls velero/backups/nginx-backup-1/#下载备份
velero backup download nginx-backup-1如上数据只包含Kubernetes声明资源的yaml文件,不包含最重要的volume业务数据。这些数据保存在s3的velero/restic/nginx-app/路径下,而这些数据是加密存储的restic的仓库密码:
kubectl get secrets velero-restic-credentials \-o jsOnpath='{.data.repository-password}' | base64 -d对备份数据的查看
restic -r s3:http://192.168.0.1/velero/restic/nginx-app snapshotsrestic -r s3:http://192.168.0.1/velero/restic/nginx-app ls 14fc2081restic -r s3:http://192.168.0.1/velero/restic/nginx-app dump 14fc2081 /hello2.html数据恢复模拟场景#删除
kubectl delete -f nginx-app-demo.yaml#检查
kubectl get all -n nginx-appkubectl get ns nginx-app#数据恢复
velero restore create --from-backup nginx-backup-1velero restore get#验证
kubectl get pod -n nginx-appkubectl get svc -n nginx-app#业务检查
kubectl exec -t -i -n nginx-app nginx-86f99c968-8zh6m -- ls /usr/share/nginx/html/kubectl get svc -n nginx-appcurl 10.106.140.195------------------------------------
备份计划和策略,配置支持的如下:备份时间,crontab语法。
备份保留时间,通过ttl指定,默认30天。
备份内容,支持指定namespace或者基于label指定具体的备份资源帮助信息:velero create schedule -h示例:
# Create a backup every 6 hours.
velero create schedule NAME --schedule="0 */6 * * *"# Create a backup every 6 hours with the @every notation.
velero create schedule NAME --schedule="@every 6h"# Create a daily backup of the web namespace.
velero create schedule NAME --schedule="@every 24h" --include-namespaces web# Create a weekly backup, each living for 90 days (2160 hours).
velero create schedule NAME --schedule="@every 168h" --ttl 2160h0m0s

 


  • minio为开源的对象存储,为velero/restic提供备份存储后端,实际生产时调整为企业对象存储系统。

  • 远端存储为异地存储系统,比如异地磁带库、NBU,或者跨region的异地对象存储系统。

备份流程:

(1)Kubernetes的所有资源包括Pod、Deployment、ConfigMap、Secret、PV卷数据等通过Velero备份到对象存储。(2)通过minio-sync实现实时同步数据到远端同城异地存储系统。

恢复流程:

(1)场景一:集群状态无异常,人为误操作导致数据被删。

直接通过velero恢复指定时间的数据进行恢复即可。

(2)场景二:PV底层的存储系统crash导致数据丢失。

恢复存储系统集群或者极端情况下重搭存储集群,然后使用velero从对象存储中恢复数据。

(3)场景三:极端场景下,整个数据中心或者region crash导致数据丢失。

重建环境,业务数据需要从异地数据中复制到本地,然后借助velero从新建对象存储中进行数据恢复。

(4)场景四:K8S环境迁移。

新建Kubernetes集群,通过velero指定备份点迁移数据到新环境中。

(5)场景五:业务从K8S运行迁移到虚拟机或者物理机运行。

通过Restic从对象存储中把业务数据导出到虚拟机的数据卷中即可。

 

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

集群备份Kubernetes证书、kubeadm配置的备份可以直接使用前面介绍的restic工具对整个/etc/kubernetes目录进行备份,而etcd的备份官方也有介绍backing-up-an-etcd-clusterETCDCTL_API=3 etcdctl --endpoints $ENDPOINT snapshot save snapshotdb备份etcd到Minio对象存储#!/bin/sh
# bootstrap.sh
export ETCDCTL_API=3MASTER_ENDPOINT=$(etcdctl --endpoints=$ETCD_ENDPOINTS \--cacert=/etc/ssl/etcd/ca.crt \--cert=/etc/ssl/etcd/etcd.crt \--key=/etc/ssl/etcd/etcd.key \endpoint status \| awk -F ',' '{printf("%s %s\n", $1,$5)}' \| tr -s ' ' | awk '/true/{print $1}')echo "etcd master endpoint is ${MASTER_ENDPOINT}"BACKUP_FILE=etcd-backup-$(date +%Y%m%d%H%M%S).dbetcdctl --endpoints=$MASTER_ENDPOINT \--cacert=/etc/ssl/etcd/ca.crt \--cert=/etc/ssl/etcd/etcd.crt \--key=/etc/ssl/etcd/etcd.key \snapshot save $BACKUP_FILEaws --endpoint $S3_ENDPOINT s3 cp $BACKUP_FILE s3://$BUCKET_NAMEfor f in $(aws --endpoint $S3_ENDPOINT \s3 ls $BUCKET_NAME | head -n "-${KEEP_LAST_BACKUP_COUNT}" \| awk '{print $4}'); doaws --endpoint $S3_ENDPOINT s3 rm s3://$BUCKET_NAME/$f
done首先获取master节点的endpoint,然后通过master endpoint创建etcd快照。快照生成后通过aws s3命令拷贝到远端对象存储中,最后会删除一些老的备份,只保留指定数量的备份数量做成docker镜像:DockerfileFROM python:alpine
ARG ETCD_VERSION=v3.4.3
RUN apk add --update --no-cache ca-certificates tzdata openssl
RUN wget https://github.com/etcd-io/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gz \&& tar xzf etcd-${ETCD_VERSION}-linux-amd64.tar.gz \&& mv etcd-${ETCD_VERSION}-linux-amd64/etcdctl /usr/local/bin/etcdctl \&& rm -rf etcd-${ETCD_VERSION}-linux-amd64*
RUN pip3 install awscli
ENV ETCDCTL_API=3
ADD bootstrap.sh /
RUN chmod +x /bootstrap.sh
CMD ["/bootstrap.sh"]把etcd的证书以及Minio的AKSK存储到Kubernetes Secret中
#!/bin/bash
kubectl create secret generic etcd-tls -o yaml \--from-file /etc/kubernetes/pki/etcd/ca.crt \--from-file /etc/kubernetes/pki/etcd/server.crt \--from-file /etc/kubernetes/pki/etcd/server.key \| sed 's/server/etcd/g'
kubectl create secret generic s3-credentials \-o yaml --from-file ~/.aws/credentials通过Kubernetes自带内置的cronjob实现定时备份apiVersion: batch/v1beta1
kind: CronJob
metadata:name: etcd-backupnamespace: etcd-backup
spec:jobTemplate:metadata:name: etcd-backupspec:template:spec:containers:- image: etcd-backup:v3.4.3imagePullPolicy: IfNotPresentname: etcd-backupvolumeMounts:- name: s3-credentialsmountPath: /root/.aws- name: etcd-tlsmountPath: /etc/ssl/etcd- name: localtimemountPath: /etc/localtimereadOnly: trueenv:- name: ETCD_ENDPOINTSvalue: "192.168.1.1:2379,192.168.1.2:2379,192.168.1.3:2379"- name: BUCKET_NAMEvalue: etcd-backup- name: S3_ENDPOINTvalue: "http://192.168.1.53"- name: KEEP_LAST_BACKUP_COUNTvalue: "7"volumes:- name: s3-credentialssecret:secretName: s3-credentials- name: etcd-tlssecret:secretName: etcd-tls- name: localtimehostPath:path: /etc/localtimerestartPolicy: OnFailureschedule: '0 0 * * *'每天0点对etcd进行备份到Minio对象存储

 参考资料:

restic: https://restic.readthedocs.io/en/latest/010_introduction.html

 https://github.com/restic/restic/releases

Velero: https://velero.io/docs/

Stash: https://stash.run/

backing-up-an-etcd-cluster: https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster


推荐阅读
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • `chkconfig` 命令主要用于管理和查询系统服务在不同运行级别中的启动状态。该命令不仅能够更新服务的启动配置,还能检查特定服务的当前状态。通过 `chkconfig`,管理员可以轻松地控制服务在系统启动时的行为,确保关键服务正常运行,同时禁用不必要的服务以提高系统性能和安全性。本文将详细介绍 `chkconfig` 的各项参数及其使用方法,帮助读者更好地理解和应用这一强大的系统管理工具。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 基于Web的Kafka管理工具Kafkamanager首次访问Web界面的详细配置指南(附图解)
    首次访问Kafkamanager Web界面时,需要对Kafka集群进行配置。这一过程相对简单,用户只需依次点击【Cluster】>【Add Cluster】,按照提示完成相关设置即可。本文将通过图文并茂的方式,详细介绍每一步的配置步骤,帮助用户快速上手Kafkamanager。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • 如何在任意浏览器中轻松安装并使用VSCode——Codeserver简易指南
    code-server 是一款强大的工具,允许用户在任何服务器上部署 VSCode,并通过浏览器进行访问和使用。这一解决方案不仅简化了开发环境的搭建过程,还提供了高度灵活的工作方式。用户只需访问 GitHub 上的官方仓库(GitHub-coder/code-server),即可获取详细的安装和配置指南,快速启动并运行 code-server。无论是个人开发者还是团队协作,code-server 都能提供高效、便捷的代码编辑体验。 ... [详细]
  • 本文介绍了如何在 Windows 系统上利用 Docker 构建一个包含 NGINX、PHP、MySQL、Redis 和 Elasticsearch 的集成开发环境。通过详细的步骤说明,帮助开发者快速搭建和配置这一复杂的技术栈,提升开发效率和环境一致性。 ... [详细]
  • 求助:在CentOS 5.8系统上安装PECL扩展遇到问题
    在 CentOS 5.8 系统上尝试安装 APC 扩展时遇到了问题,具体表现为 PECL 工具无法正常工作。为了确保顺利安装,需要解决 PECL 的相关依赖和配置问题。建议检查 PHP 和 PECL 的版本兼容性,并确保所有必要的库和开发工具已正确安装。此外,可以尝试手动下载 APC 扩展的源代码并进行编译安装,以绕过 PECL 工具的限制。 ... [详细]
author-avatar
8090互助联盟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有