使用velero去备份k8s集群(代码片段)

author author     2022-12-11     182

关键词:

先决条件:

  1. k8s>1.10,主要考虑restic的兼容性
  2. 集群内部署dns
  3. 已经安装kubectl

velero安装

  1. 下载velero

    wget https://github.com/vmware-tanzu/velero/releases/download/v1.5.2/velero-v1.5.2-linux-amd64.tar.gz
    tar -zxvf velero-v1.5.2-linux-amd64.tar.gz
    mvmv velero-v1.5.2-linux-amd64 velero
    cd velero
    cp velero  /usr/local/bin/
    velero version
    [root@docker1 velero]# velero  version
    Client:
    Version: v1.5.2
    Git commit: e115e5a191b1fdb5d379b62a35916115e77124a4
    Server:
    Version: v1.5.2
  2. 命令补全

    类k8s命令补全。

    source  <(velero completion )

部署velero服务

? 由于默认minion只暴露了clusterip,但是通过velero命令时,实际上会本地主机产生交互,所以我暴露出了velero主机的nodeport。

  1. 修改配置文件。

    进入example/minio,修改minio配置文件。修改type类型为nodePort。(我此处指定了nodePort地址,为了避免冲突最好不要指定)

    kind: Service
    metadata:
     namespace: velero
     name: minio
     labels:
       component: minio
    spec:
     # ClusterIP is recommended for production environments.
     # Change to NodePort if needed per documentation,
     # but only if you run Minio in a test/trial environment, for example with Minikube.
     type: NodePort
     ports:
       - port: 9000
         targetPort: 9000
         protocol: TCP
         nodePort: 30069
     selector:
       component: minio
  2. k8s部署minio服务。

    kubectl apply -f 00-minio-deployment.yaml
    [root@docker1 minio]# kubectl get pod -n velero | grep minio
    minio-d787f4bf7-tltb4     1/1     Running     0          31m
    minio-setup-kjfc7         0/1     Completed   0          31m
    [root@docker1 minio]# kubectl get svc -n velero
    NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    minio   NodePort   10.96.213.187   <none>        9000:30069/TCP   31m
    
  3. 创建velero-specific文件,放在minio目录下。

    cat > credentials-velero << EOF
    [default]
    aws_access_key_id = minio
    aws_secret_access_key = minio123
    EOF
  4. 部署velero服务

    使用publicURL暴露minio服务暴露的nodeport地址。host地址是k8s集群中任意node地址(反正是k8s集群进行解析)。

    velero install    --provider aws    --plugins velero/velero-plugin-for-aws:v1.0.0    --bucket velero    --secret-file ./credentials-velero    --use-volume-snapshots=false    --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio.velero.svc:9000,publicUrl=http://192.168.14.132:30069
  5. 查看velero状态

    Deployment/velero: created
    Velero is installed! ? Use ‘kubectl logs deployment/velero -n velero‘ to view the status.
    
    [root@docker1 minio]# kubectl logs deployment/velero -n velero
    time="2020-10-28T06:25:22Z" level=info msg="setting log-level to INFO" logSource="pkg/cmd/server/server.go:191"
    time="2020-10-28T06:25:22Z" level=info msg="Starting Velero server v1.5.2 (456eb19668f8da603756353d9179b59b5a7bfa04)" logSource="pkg/cmd/server/server.go:193"
    time="2020-10-28T06:25:22Z" level=info msg="1 feature flags enabled []" name=velero.io/add-pvc-from-pod
  6. 访问velero网页 .

    浏览器打开http://192.168.14.132:30069

    技术图片

  7. 部署example nginx 应用

    kubectl apply -f examples/nginx-app/base.yaml
  8. 查看应用状态

    [root@docker1 minio]# kubectl get deployments -l component=velero --namespace=velero
    NAME     READY   UP-TO-DATE   AVAILABLE   AGE
    velero   1/1     1            1           9m16s
    [root@docker1 minio]# kubectl get deployments --namespace=nginx-example
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   2/2     2            2           20h

备份应用

  1. 根据标签选择器创建备份。

    velero backup create nginx-backup --selector app=nginx
  2. 查看备份结果

    技术图片

    [root@docker1 minio]# velero backup describe nginx-backup
    Name:         nginx-backup
    Namespace:    velero
    Labels:       velero.io/storage-location=default
    Annotations:  velero.io/source-cluster-k8s-gitversion=v1.17.0
                 velero.io/source-cluster-k8s-major-version=1
                 velero.io/source-cluster-k8s-minor-version=17
    
    Phase:  Completed
    
    Errors:    0
    Warnings:  0
    
    Namespaces:
     Included:  *
     Excluded:  <none>
    
  3. 恶意删除nginx-example:

    kubectl delete namespace nginx-example
  4. 检查nginx deployment状态:

    [root@docker1 minio]# kubectl get deployments --namespace=nginx-example
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   2/2     2            2           20h
    [root@docker1 minio]# kubectl get services --namespace=nginx-example
    NAME       TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
    my-nginx   LoadBalancer   10.96.129.10   192.168.14.162   80:32741/TCP   20h
    [root@docker1 minio]# kubectl get namespace/nginx-example
    NAME            STATUS   AGE
    nginx-example   Active   20h

故障恢复

  1. 运行恢复命令

    velero restore create --from-backup nginx-backup
  2. 查看恢复状态

    [root@docker1 minio]# velero restore get
    NAME                          BACKUP         STATUS      STARTED                         COMPLETED                       ERRORS   WARNINGS   CREATED                         SELECTOR
    nginx-backup-20201028145528   nginx-backup   Completed   2020-10-28 14:55:28 +0800 CST   2020-10-28 14:55:28 +0800 CST   0        7          2020-10-28 14:55:28 +0800 CST   <none>

    NOTE: 恢复期间, STATUS 栏的状态为 InProgress.

  3. 查看集群状态:

    [root@docker1 minio]# kubectl get services --namespace=nginx-example
    NAME       TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)        AGE
    my-nginx   LoadBalancer   10.96.177.151   192.168.14.162   80:30813/TCP   2m8s
    [root@docker1 minio]# kubectl get namespace/nginx-example
    NAME            STATUS   AGE
    nginx-example   Active   2m9s

清理velero

  1. 删除velero备份

    velero backup delete nginx-backup 
  2. 查看备份情况

    velero backup get nginx-backup 
  3. 清除velro集群

    kubectl delete namespace/velero clusterrolebinding/velero
    kubectl delete crds -l component=velero
    kubectl delete -f examples/nginx-app/base.yaml

报错记录

velero是安装到本地命令行的,本地的dns解析是公司内部域IP。所以当velero备份的时候,没有找k8s集群的dns。velero安装指定publicURL即可。

技术图片

参考

Using Velero to backup and restore applications that use vSAN File Service RWX file shares

Quick start evaluation install with Minio

关于k8s集群备份和恢复工具velero的一些笔记整理(代码片段)

...Velero服务器)在本地运行的命令行客户端(velerocli)什么时候使用Velero代替etcd的内置备份/恢复是合适的?关于Velero和etcd的快照备份如何选择?我个人认为etcd快照备份适用于比较严重的集群灾难。比如所有etcd集群所有节点宕... 查看详情

velero安装及测试

velero安装及测试与Etcd备份相比,直接备份Etcd是将集群的全部资源备份起来。而velero是可以对k8s集群内对象级别进行备份。除了对k8s集群进行整体备份外,velero还可以通过对Type、NameSpace、Label等对象进行分类备份或者恢复。<!--br... 查看详情

基于velero+minio对k8s进行备份和恢复

velero介绍​​Velero是由vmware公司团队研发开源工具,用于安全地备份、恢复和迁移Kubernetes集群和持久卷。它可以在本地和公共云中运行。Velero由一个在您的Kubernetes集群中作为部署运行的服务器进程和一个命令行界面(CLI)组成,De... 查看详情

详解kubernetes备份恢复利器velero-深入了解carina系列第三期

...一个集群迁移到另一个集群,这也是velero一个非常成功的使用场景。Velero主要包括连个核心组件,分别为服务端和客户端。服务端运行在具 查看详情

使用velero+minio+restic实现kubernetes业务数据备份与恢复

概述:Velero(以前称为HeptioArk)为您提供了备份和恢复Kubernetes集群资源和持久卷的工具,可以安全的备份、恢复和迁移Kubernetes集群资源和持久卷。Velero主要提供以下能力备份群集并在丢失时进行还原。将群集资源迁移到其他群集... 查看详情

k8s(v1.25.1)高可用集群(3master+5node)ansible剧本部署(cri使用docker,cri-docker)(代码片段)

写在前面分享一个k8s高可用集群部署的Ansible剧本以及涉及到的一些工具的安装博文内容涉及:从零开始一个k8s高可用集群部署Ansible剧本编写,编写后搭建k8s高可用集群一些集群常用的监控,备份工具安装,包括&#... 查看详情

rancher2.0的简单使用(代码片段)

1.RANCHER2.0 能够管理k8s集群也能够用来搭建k8s集群但是因为网络问题只测试了如何去管理集群还没有去测试安装集群.2.创建rancher服务的方法dockerrun-d--restart=unless-stopped-p80:80-p443:443-v/rancher:/var/lib/rancherrancher/rancher:latest来源https:/... 查看详情

记一次虚机强制断电k8s集群etcdpod挂掉快照丢失(没有备份)问题处理(代码片段)

...掉了记录下解决方案断电导致etcd快照数据丢失,没有备份.基本上是没办法处理可以找专业的DBA来处理数据看有没有可能恢复这篇博文的解决办法是删除了etcd数据目录中的部分文件。集群可以启动,但是部署的环境数据... 查看详情

用kubeadm安装k8s集群(代码片段)

...前,需要先做如下准备。三台CentOS主机如下:配置yum源(使用腾讯云的)替换之前先备份旧配置mv/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.backupcentos各版本的源配置列表centos5wget-O/etc/yum.repos.d/CentOS-Base.repoh 查看详情

记一次虚机强制断电k8s集群etcdpod挂掉快照丢失(没有备份)问题处理(代码片段)

...死掉了记录下解决方案断电导致etcd快照数据丢失,没有备份.基本上是没办法处理可以找专业的DBA来处理数据看有没有可能恢复这篇博文的解决办法是删除了etcd数据目录中的部分文件。集群可以启动,但是部署的环境数据都丢失... 查看详情

关于k8s集群centoslinux7节点批量kernel升级的一些笔记(代码片段)

...如果生产环境升级,需要做错误预算哈,最好用Velero备份,做好集群迁移的准备高内核版本支持cgroup2,如果新集群部署需要考虑下这块。理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我... 查看详情

关于k8s中etcd集群备份灾难恢复的一些笔记(代码片段)

...于Go语言实现。完全复制:集群中的每个节点都可以使用完整的存档高可用性:Etcd可用于避免硬件的单点故障或网络问题一致性:每次读取都会返回跨多主机的最新写入简单:包括一个定义良好、面向用户的API(gRP... 查看详情

k8s集群监控(代码片段)

...sServer,在新版本的Metrics当中可以对Node,Pod的cpu,内存的使用指标进行监控我们可以先在k8s集群当中用kubectltop命令去尝试查看资源使用率,如下:可以看到并不能查看资源,这是因为没有安装Metrics[root@masterredis]#kubectltopnodesErrorf... 查看详情

记一次虚机强制断电k8s集群etcdpod挂掉快照丢失(没有备份)问题处理(代码片段)

...掉了记录下解决方案断电导致etcd快照数据丢失,没有备份.基本上是没办法处理可以找专业的DBA来处理数据看有没有可能恢复这篇博文的解决办法是删除了etcd数据目录中的部分文件。集群可以启动,但是部署的环境数据... 查看详情

记一次虚机强制断电k8s集群etcdpod挂掉快照丢失(没有备份)问题处理(代码片段)

...掉了记录下解决方案断电导致etcd快照数据丢失,没有备份.基本上是没办法处理可以找专业的DBA来处理数据看有没有可能恢复这篇博文的解决办法是删除了etcd数据目录中的部分文件。集群可以启动,但是部署的环境数据... 查看详情

如何在本地安装 Velero

】如何在本地安装Velero【英文标题】:HowtoinstallVeleroonpremise【发布时间】:2022-01-0201:56:10【问题描述】:我正在关注thistutorial安装Velero来备份我的集群。我已成功安装Minio部署,但在安装Velero本身时遇到问题。当我运行命令时:v... 查看详情

加入k8s集群(代码片段)

加入k8s集群在使用kubeadm安装k8s中介绍了如何安装k8s主节点,这篇文章我们来介绍如何加入k8s集群。环境要求?同上一篇的环境要求首先,从我们的镜像服务器获取docker镜像获取镜像shell脚本然后,获取加入k8s集群的授权码?在上篇... 查看详情

k8s安装使用kubeasz安装多主多从k8s集群(简单快捷)(代码片段)

使用kubeasz安装多主多从k8s集群一、项目介绍kubeasz为github上开源的一个用于安装k8s集群的项目,目前很多方法安装k8s,但是多是单master多node的安装方式,但是kubeasz可以很方便的实现多主多从,用于实验真的很方便。项目的核心... 查看详情