首页 > 其他分享 >k8s备份恢复实践--velero

k8s备份恢复实践--velero

时间:2024-07-15 21:19:21浏览次数:21  
标签:velero minio -- 备份 k8s backup

k8s备份恢复实践--velero

使用Velero备份k8资源到minio,阿里云oss,七牛云Kodo

环境linux + kubectl

#1.velero简介

  • Velero是用于Kubernetes资源备份、恢复、迁移的开源工具
  • 客户端(velero命令行) -> 服务端(部署在k8s) -> 对象储存(s3或兼容s3储存)
  • velero将k8s资源备份为json文件,可以通过namespace、label等进行筛选备份或恢复
  • github地址 https://github.com/vmware-tanzu/velero

#2.velero安装

#2.1 安装velero客户端
#wget https://github.com/vmware-tanzu/velero/releases/download/v1.13.2/velero-v1.13.2-linux-amd64.tar.gz
wget http://files.elvin.vip/k8s/velero-v1.13.2-linux-amd64.tar.gz
tar -zxf velero-v1.13.2-linux-amd64.tar.gz
mv velero-v1.13.2-linux-amd64/velero /usr/local/bin/
velero version

#启用命令补全
velero completion bash > /etc/bash_completion.d/velero
. /etc/bash_completion.d/velero

#查看帮助
velero -h
#2.2 安装velero服务端

在kubernetes集群安装velero 需要配置好​kubectl​​和​​kubeconfig​

#查看k8s node
kubectl get node
#2.2.1 k8s安装velero使用minio储存

docker安装mino

#创建minio
docker rm -f minio
docker run -dit --name minio -u 0 \
  -h minio --net host --restart always \
  -e MINIO_ROOT_USER="minio" \
  -e MINIO_ROOT_PASSWORD="miniow2p0w2r4" \
  -v /data/minio:/data -w /data \
registry.aliyuncs.com/elvin/minio:2022 \
  minio server /data --console-address '0.0.0.0:9001'

#创建bucket velero
docker exec -it minio bash -c 'mc mb velero; mc ls'
#minio储存地址 http://minio-ip:9000

k8s安装minio

kubectl -f https://gitee.com/alivv/elvin-demo/raw/master/k8s/3.data-minio.yml

#volumes使用hostPath: /opt 可根据需求修改pvc部分 
#minio储存地址 http://minio.kube-public.svc:9000

安装velero使用k8s-minio储存


#创建凭证 create auth
mkdir -p /k8s/velero
cat >~/k8s/velero/auth-minio.txt <<EOF
[default]
aws_access_key_id = minio
aws_secret_access_key = miniow2p0w2r4
EOF

#velero install
velero install \
  --image registry.aliyuncs.com/elvin/velero:v1.13.2 \
  --plugins registry.aliyuncs.com/elvin/velero-plugin-for-aws:v1.9.2 \
  --provider aws \
  --bucket velero \
  --use-volume-snapshots=false \
  --secret-file ~/k8s/velero/auth-minio.txt \
  --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio.kube-public.svc:9000 

#自定义镜像地址 --image --plugins

velero version
#2.2.2 k8s安装velero使用阿里云oss

在阿里云oss创建bucket
bucket名称elvin-k8s region为oss-cn-shanghai
oss的region和访问域名 https://help.aliyun.com/zh/oss/user-guide/regions-and-endpoints


#创建凭证 create auth
mkdir -p /k8s/velero/velero
cat >~/k8s/velero/velero/auth-oss.txt <<EOF
[default]
aws_access_key_id = LTAI4FoDtp4y7ENqv9X4emSE
aws_secret_access_key = lVNCxCVGciaJqUa5axxx
EOF

#install
velero install \
  --image registry.aliyuncs.com/elvin/velero:v1.13.2 \
  --plugins registry.aliyuncs.com/elvin/velero-plugin-for-aws:v1.9.2 \
  --provider aws \
  --use-volume-snapshots=false \
  --bucket elvin-k8s \
  --secret-file ~/k8s/velero/auth-oss.txt \
  --backup-location-config region=oss-cn-shanghai,s3ForcePathStyle="false",s3Url=http://oss-cn-shanghai.aliyuncs.com 

#oss使用virtual hosting访问方式,配置s3ForcePathStyle="false"

velero version
#2.2.3 k8s安装velero使用七牛云

在七牛云创建储存https://portal.qiniu.com/kodo/bucket
获取S3空间域名,打开创建的储存,空间概述,S3 域名,点击查询
七牛云储存region和访问域名 https://developer.qiniu.com/kodo/4088/s3-access-domainname


#创建凭证 create auth
mkdir -p /k8s/velero/velero
cat >~/k8s/velero/auth-qiniu.txt <<EOF
[default]
aws_access_key_id = foqsLZBJSr7yF59_3sB5RguezMh0l223s2NcC9Kz
aws_secret_access_key = BTBwrrCE7TLKjztpsBZX2GA45Cb3yR9Fxxxx
EOF

#install
velero install \
  --image registry.aliyuncs.com/elvin/velero:v1.13.2 \
  --plugins registry.aliyuncs.com/elvin/velero-plugin-for-aws:v1.9.2 \
  --provider aws \
  --use-volume-snapshots=false \
  --bucket 817nb3 \
  --secret-file ~/k8s/velero/auth-qiniu.txt \
  --backup-location-config region=cn-east-1,s3ForcePathStyle="false",s3Url=http://s3.cn-east-1.qiniucs.com

#七牛云bucket使用S3空间域名前部分

velero version

#3. 使用velero备份和恢复

#3.1 备份和恢复测试

#部署nginx-demo
kubectl apply -f https://gitee.com/alivv/elvin-demo/raw/master/k8s/2.1.nginx-demo.yml
kubectl get pod

#备份namespaces为default的所有资源
velero backup create k8s-backup-test --include-namespaces default

#查看备份
velero backup get

#删除nginx-demo
kubectl delete -f https://gitee.com/alivv/elvin-demo/raw/master/k8s/2.1.nginx-demo.yml
kubectl get pod

#使用velero恢复nginx-demo
velero restore create nginx-demo \
  --from-backup k8s-backup-test \
  --include-namespaces default \
  --selector name=nginx-demo 

#查看恢复
velero restore get

#查看pod nginx-demo
kubectl get pod -n default
#卸载velero后重新安装以验证备份正常
velero uninstall
#查看备份
velero backup get

#3.2 备份和定时任务

#备份所有资源保留72小时
velero backup create k8s-bakcup-all-$(date +%F) --ttl 72h
#查看备份
velero backup get
#周期性任务
velero schedule create -h

#定时任务,每天16点(UTC时区)备份,保留7天(168h)
velero create schedule k8s-bakcup-all --schedule="0 16 * * *" --ttl 168h

#查看定时任务
velero get schedule

#3.3 velero备份和迁移

  • 创建velero使用的储存
  • 在k8s-A集群安装velero并备份
  • 在k8s-B集群安装velero并恢复,即完成k8s迁移

#4 velero其它实例

#velero基本命令
velero get backup #查看备份
velero get schedule #查看定时备份
velero get restore #查看已有的恢复
velero get plugins #查看插件

#备份所有
velero backup create k8s-bakcup-all --ttl 72h
#恢复集群所有备份,对已经存在的服务不会覆盖
velero restore create --from-backup k8s-bakcup-all
#仅恢复default的namespace,包括集群资源
velero restore create --from-backup k8s-bakcup-all --include-namespaces default --include-cluster-resources=true
#恢复储存pv,pvc
velero restore create pvc --from-backup k8s-bakcup-all --include-resources persistentvolumeclaims,persistentvolumes
#恢复指定资源deployments,configmaps 
velero restore create deploy-test --from-backup k8s-bakcup-all --include-resources deployments,configmaps 
#筛选备份name=nginx-demo -l, --selector:通过指定label来匹配要backup的资源
velero backup create nginx-demo --from-backup k8s-bakcup-all --selector name=nginx-demo

#筛选备份恢复对象
--include-namespaces  筛选命名空间所有资源,不包括集群资源
--include-resources   筛选的资源类型
--exclude-resources   排除的资源类型
--include-cluster-resources=true 包括集群资源

#将test1命名空间资源恢复到test2  
velero restore create test1-test2 --from-backup k8s-bakcup-all --namespace-mappings test1:test2 

#备份hooks
#Velero支持在备份任务执行之前和执行后在容器中执行一些预先设定好的命令

标签:velero,minio,--,备份,k8s,backup
From: https://www.cnblogs.com/elvi/p/18303978

相关文章

  • SQL Server中Upsert的三种方式(转载)
    本文介绍了SQLServer中Upsert的三种常见写法以及他们的性能比较。SQLServer并不支持原生的Upsert语句,通常使用组合语句实现upsert功能。 假设有表table_A,各字段如下所示:int型Id为主键。 方法1:先查询,根据查询结果判断使用insert或者updateIFEXISTS(SELECT1FROMtab......
  • [考试记录] 2024.7.15 csp-s模拟赛4
    2024.7.15csp-s模拟赛4T1传送带题面翻译有一个长度为\(n\)的一维网格。网格的第\(i\)个单元格包含字符\(s_i\),是“<”或“>”。当弹球放在其中一个格子上时,它会按照以下规则移动:如果弹球位于第\(i\)个格子上且\(s_i\)为'<',则弹球在下一秒会向左移动一个单元格;如......
  • 「杂题乱刷2」CF1615C Menorah
    题目链接CF1615CMenorah(luogu)CF1615CMenorah(codeforces)解题思路这题有三个重要的性质:在同一个点做两次操作与不在这个点做操作是等价的。给两个不同的点做操作等价于交换这两个点。给一个字符串做偶数次操作,这个字符串的\(0\)的数量和\(1\)的数量不会改......
  • DDD | 03-什么是实体对象
    二、什么是实体?实体(Entity)是一种核心的领域模型组件,用于表示具有唯一标识符、生命周期和行为的对象。实体是领域中关键概念的具体实例,它们通常对应于现实世界中的事物,比如用户、订单、账户等。主要特点唯一标识符(Identity):每个实体都有一个唯一的标识符,这个标识符是用来区......
  • Day10(栈与队列) | 150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K 个高频元
    150.逆波兰表达式求值给你一个字符串数组tokens,表示一个根据逆波兰表示法表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。注意:有效的算符为'+'、'-'、'*'和'/'。每个操作数(运算对象)都可以是一个整数或者另一个表达式。两个整数之间的除法总是......
  • vite 实现自动导入element plus icons 图标组件
    vite.config.js配置import{fileURLToPath,URL}from"node:url";importComponentsfrom"unplugin-vue-components/vite";importAutoImportfrom"unplugin-auto-import/vite";import{ElementPlusResolver}from"unplugin-v......
  • 洛谷 - P6190
    题目大意给定n点m边带权有向图,从1到\(n\)的路径中,经过一条边时可让其权值变为相反数,再变为原权值,求路径最小权值。分析先用\(Floyd\)求出全源最短路。借用\(Floyd\)数组列出\(dp\)状态,\(f_{i,j}\)表示从\(i\)到\(j\)的最短路权值。但似乎进行不下去了,我们不......
  • DDD | 04-什么是聚合根
    三、什么是聚合根?聚合根(AggregateRoot)是DDD中的一个核心概念,用于组织和管理一组相关的领域对象,确保它们的整体一致性和完整性。聚合根是领域模型中的关键组件,它不仅封装了领域内的复杂业务逻辑,还提供了控制访问和维护数据一致性的机制,是构建可维护、可扩展的软件系统的重要基石......
  • Leetcode.20 有效括号
    题目描述给定一个只包括'(',')','{','}','[',']' 的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。示例输入:s="()"输出:true输入:s="()[]{}"输出:true输入:s=......
  • 第二部分:关键技术领域的开源实践【持续集成和交付Jenkins】
    Jenkins是一款广泛使用的开源持续集成(ContinuousIntegration,CI)和持续交付(ContinuousDelivery,CD)工具,它帮助企业解决了多个关键的痛点需求,主要包括以下几个方面:自动化构建与测试:Jenkins可以自动化执行构建过程,每当代码库中有新的提交时,Jenkins就可以自动运行构建脚本,并......