使用Velero备份、恢复k8s集群上的资源

这篇具有很好参考价值的文章主要介绍了使用Velero备份、恢复k8s集群上的资源。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Velero简介

Velero提供备份和恢复 Kubernetes 集群资源和持久卷的工具。

Velero功能:

  • 对群集进行备份,并在丢失时进行还原。
  • 将集群资源迁移到其他集群。

Velero 包括:

  • 在群集上运行的服务器
  • 在本地运行的命令行客户端
  • 开源地址:https://github.com/vmware-tanzu/velero
  • 官方文档:Velero
velero备份流程
  1. velero客户端调用kubernetes API Server创建backup任务
  2. Backup控制器基于watch机制通过Api Server获取到备份任务
  3. Backup控制器开始执行备份动作,会通过请求Api Server获取到需要备份的数据
  4. Backup 控制器将获取到的数据备份到指定的对象存储server端

二、准备后端存储

Velero支持很多种存储插件,可查看:Velero Docs - Providers获取插件信息,我们这里使用minio作为S3兼容的对象存储提供程序。也可以在任意地方部署Minio对象存储,只需要保证K8S集群可以访问到即可。

这里使用一台独立机器docker部署minio

1、下载minio的docker镜像

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

2、准备数据目录

# mkdri -pv /data/minio

3、docker部署minio

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

两个变量定义minio的用户、密码

MINIO_ROOT_USER

MINIO_ROOT_PASSWORD

一个管理端口9999,一个数据端口9000

容器正常启动后,通过浏览器访问http://IP:9999 输入上面定义的用户、密码即可登录

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

登录之后,创建一个Bucket,命名为velerodata

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

参考文章 Docker 搭建 Minio 容器 (完整详细版)_docker minio-CSDN博客

minio也可部署到 k8s集群里

三、安装velero

velero包含velero客户端和服务端,服务端需要部署在可以使用kubectl命令操作k8s集群的机器上,这里就安装在k8s的master上

从GitHub上搜索下载即可:Releases · vmware-tanzu/velero · GitHub

下载最新的release linux_amd64版本

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

将velero执行程序cp至/usr/local/bin/目录下即可,部署Server之前Server的版本是获取不到的

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

部署Server

先创建认证文件,把minio的用户名、密码写到这个文件

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

使用velero命令部署velero server

velero install \
  --provider aws \
  --image velero/velero:latest \
  --plugins velero/velero-plugin-for-aws:v1.8.2 \
  --bucket velerodata \
  --secret-file /root/credentials-velero \
  --use-node-agent \
  --use-volume-snapshots=false \
  --namespace velero \
  --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://10.49.133.147:9000 \
  --wait

# 执行install命令后会创建一系列清单,包括CustomResourceDefinition、Namespace、Deployment等。

这里遇到一个坑

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

有些节点上的node-agent pod总是起不来,查看日志报没有velero命令(这个是node-agent pod里容器的默认命令),后面通过检查发现报错的节点上的velero image不是最新的,但tag确实是latest,确实是个坑

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

旧版本镜像是45.5MB,新版本镜像是59.7MB,使用crictl重新下载正常的镜像,然后使用nerdctl工具把新版本镜像的tag改成docker.io/velero/velero:latest(与daemonset里的一致),之后pods成功启动

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

卸载velero

kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero

四、备份、恢复k8s上的资源

使用官方案例创建测试应用

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

创建备份

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

到minio上查看备份数据

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

测试恢复

先删除nginx-example名称空间里的所有资源

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

创建恢复,再检查nginx-example名称空间里的资源,可以看到名称空间里的资源恢复回来了

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

备份命令参数

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

恢复命令参数

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

批量备份名称空间脚本,这个脚本定时执行即可达到定时备份所有名称空间的目的

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

五、资源迁移

这个架构里有个巧妙的地方是,如果两个k8s集群上都有velero,并且velero的后端存储指向同一个Bucket,这样这个Bucket可以当做共享存储来用,即从集群A备份出来的数据,可以轻松恢复到集群B上,这样也相当于一个迁移动作。

如上个步骤备份的nginx-backup1220可以在另一个集群上恢复,如下是在集群B上恢复了nginx-backup1220,从svc的cluster-ip可以看到这是另一个集群

从这个过程得知,如果多个集群上的velero的后端存储指向相同的Bucket,velero的备份可以在多个集群上共享使用。

使用Velero备份、恢复k8s集群上的资源,Kubernetes,还原,kubernetes,容器,云原生

更多自定义的备份恢复,后面再补充。。。

参考文章 https://www.cnblogs.com/wubolive/p/17345716.html文章来源地址https://www.toymoban.com/news/detail-762981.html

到了这里,关于使用Velero备份、恢复k8s集群上的资源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 统计k8s集群的资源使用情况

    kubectl top 命令可以很方便地查看 k8s 集群中部署应用的实际资源使用情况。 使用 kubectl top 命令需要先部署 metrics 组件,metrics 的部署请参考下面文章: helm部署metrics-server 查看指定命名空间资源使用情况 查看所有命名空间的资源使用情况

    2024年02月11日
    浏览(30)
  • k8s外接etcd集群服务异常,使用snapshot恢复etcd集群

    master节点 主机 IP 版本 master01 192.168.66.50 k8s-1.23.17 master02 192.168.66.55 k8s-1.23.17 master03 192.168.66.56 k8s-1.23.17 etcd集群节点 主机 IP 版本 etcd01 192.168.66.58 3.5.6 etcd02 192.168.66.59 3.5.6 etcd03 192.168.66.57 3.5.6 生产环境中我们为了避免出现误操作或者是服务器硬件出见异常导致宕机,我们的虚拟

    2024年01月17日
    浏览(27)
  • 批量备份k8s资源的脚本

    使用方式:执行时传入参数namespace,则会将该namespace下所有资源通过yaml方式备份

    2024年02月11日
    浏览(23)
  • k8s集群异常恢复

    前提、我自己的k8s采用的是单master节点+两个从节点部署,我针对单master情况进行恢复说明 场景一:正常开关虚拟机,可直接重启kubelet进行恢复 1、1、一般重启后三个节点都需要检查,输入命令检查kubelet: 2、状态不正常,输入命令启动kubelet: 3、正常情况下,启动kubelet后,

    2024年01月23日
    浏览(33)
  • K8s主机IP地址变更集群恢复

    k8s版本 v1.23.6 docker版本 20.10.6 节点名称 原IP 新IP k8s-master 192.168.6.100 192.168.6.200 k8s-node01 192.168.6.110 192.168.6.210 k8s-node02 192.168.6.120 192.168.6.220 未调整IP前集群信息如下: 调整k8s-master节点IP后,重启机器,显示如下: 1. 所有机器修改hosts解析文件  2. 把/etc/kubernetes/*.conf中所有的旧

    2024年04月28日
    浏览(32)
  • yum部署kubernetes(k8s)集群、k8s常用资源管理

    目录 一、环境搭建 1、准备环境 1)计算机说明,建议系统版本7.4或者7.6 2)修改所有主机的计算机名设置host文件  2、安装master节点 1)安装etcd配置etcd 2)安装k8s-master节点 3)配置apiserver 4)配置controller和scheduler 5)启动k8s服务 3、安装k8s-master上的node 1)安装node 2)配置kube

    2024年02月13日
    浏览(47)
  • flink集群与资源@k8s源码分析-集群

    本文是flink集群与资源@k8s源码分析系列的第二篇-集群 下面详细分析各用例 k8s集群支持session和application模式,job模式将会被废弃,本文分析session模式集群 Configuration作为配置容器,几乎所有的构建需要从配置类获取配置项,这里不显示关联关系 1. 用户命令行执行kubernates-ses

    2024年02月07日
    浏览(33)
  • K8s集群重启与恢复-Master节点启停

    1 应用场景 场景 :在实际工作中,可能某个 Master 节点需要维护,迁移,我们需要平滑的停止、启动该节点,尽量减少启停中对集群造成的影响 注意 : 为了确保 K8s 集群能够安全恢复,请在操作前对 K8s 数据进行备份 为了确保重启 Master 节点期间 K8s 集群能够使用,集群中

    2023年04月08日
    浏览(32)
  • k8s配置ingress访问集群外部资源

    使用ingress访问外部资源,首先需要创建service指向我们需要访问的资源 而每个service包含一个endpoint endpoint是k8s集群中的一个资源对象,存储在etcd中,用来记录一个service对应的所有pod的访问地址。service配置selector,endpoint controller才会自动创建对应的endpoint对象;否则,不会生

    2024年02月09日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包