首页 > 其他分享 >使用 velero 备份 K8S

使用 velero 备份 K8S

时间:2024-01-22 15:55:06浏览次数:34  
标签:velero tanzu 备份 yaml https K8S data vmware

背景

近来可能公司会迁移服务器,先对 velero 工具做一个初步的认识

环境

K8S 版本: v1.24.1
velero 版本: v1.11.1
minio 版本:2023.12.14 ,部署在 K8S 集群外(192.168.1.226 服务器上)

官方备份工作流程图


更多详细信息,可参考:https://velero.io/docs/v1.11/how-velero-works/

前期工作

部署 minio

mkdir -p /data/docker-compose/minio
cd /data/docker-compose/minio

cat >> docker-compose.yml << EOF 
version: '3.4'
services:
  minio:
    image: bitnami/minio:2023.12.14
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 2G
    volumes:
      - ./minio_data:/bitnami/minio/data
      - /etc/localtime:/etc/localtime
    container_name: minio
    environment:
      - MINIO_ROOT_USER=minio             
      - MINIO_ROOT_PASSWORD=minio123      
      - LANG=en_US.UTF-8
    restart: always
    network_mode: "host"
EOF

mkdir minio_data
chown 1001.1001 minio_data
docker-compose up -d
docker ps -a

检查
浏览器访问 http://192.168.1.226:9001/ 正常登录

创建一个 bucket velerodata 用来保存 K8S 的备份

部署 velero 服务端

这里采用 helm3 的方式部署

mkdir -p /data/yaml/velero/velero
cd /data/yaml/velero/velero

helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts
helm pull vmware-tanzu/velero --version 5.0.2

# 若无法下载,可以使用下面方式
# wget https://github.com/vmware-tanzu/helm-charts/releases/download/velero-5.0.2/velero-5.0.2.tgz

tar zxvf velero-5.0.2.tgz

cat >> my-values.yaml << EOF 
initContainers:
  - name: velero-plugin-for-aws                      # 使用 Minio,Minio 兼容 aws 的 S3
    image: velero/velero-plugin-for-aws:v1.7.0       
    imagePullPolicy: IfNotPresent
    volumeMounts:
      - mountPath: /target
        name: plugins

configuration:
  backupStorageLocation:
  - name: 
    provider: aws                                   # 存储的提供商 aws
    bucket: velerodata                              # Minio 指定 bucket 的名字,用来存储备份
    config: 
      region: minio
      s3ForcePathStyle: "true"
      s3Url: http://192.168.1.226:9000              # Mino 的地址

credentials:
  secretContents:
    cloud: |
      [default]
      aws_access_key_id=minio                      # Minio 的用户名
      aws_secret_access_key=minio123               # Minio 的密码

snapshotsEnabled: false                            # 不启用快照
EOF

# 部署,注意这里,使用 --dry-run 参数报错
kubect create ns velero
helm -n velero install velero -f my-values.yaml ./velero

检查

部署 velero 客户端

# 客户端需要部署在能使用 kubectl 的机器,我这里是 master 节点
mkdir -p /data/software
cd /data/software
wget https://github.com/vmware-tanzu/velero/releases/download/v1.11.1/velero-v1.11.1-linux-amd64.tar.gz
tar zxvf velero-v1.11.1-linux-amd64.tar.gz
cp velero-v1.11.1-linux-amd64/velero /usr/local/bin/

# 测试
velero --help

创建备份

# 准备例子
kubectl create ns klvchen
mkdir -p /data/yaml/klvchen/nginx
cd /data/yaml/klvchen/nginx

cat >> sts.yaml << EOF
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
  namespace: klvchen
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /var/lib/www/html
  volumeClaimTemplates:
    - metadata:
        name: www
      spec:
        accessModes: [ "ReadWriteOnce" ]
        storageClassName: "nfs-client"
        resources:
          requests:
            storage: 1Gi
EOF

kubectl apply -f sts.yaml

cat >> svc-nodeport.yaml << EOF 
apiVersion: v1
kind: Service
metadata:
  labels:
  name: nginx-nodeport
  namespace: klvchen
spec:
  ports:
  - name: nginx
    port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30070
  selector:
    app: nginx
  type: NodePort
EOF

kubectl apply -f svc-nodeport.yaml

浏览器访问

创建备份

DATE=`date +%Y%m%d-%H%M%S`
velero backup create klvchen-backup-${DATE} --include-namespaces klvchen 

模拟删除

kubectl delete -f svc-nodeport.yaml -f sts.yaml


备份还原

可以在 Minio 中找到当时的备份

velero restore create --from-backup klvchen-backup-20240122-151000

检查

参考文档

https://github.com/vmware-tanzu/velero -- K8S 版本对应关系
https://github.com/vmware-tanzu/velero-plugin-for-aws -- 存储插件版本和 Velero 版本对应关系
https://vmware-tanzu.github.io/helm-charts/

标签:velero,tanzu,备份,yaml,https,K8S,data,vmware
From: https://www.cnblogs.com/klvchen/p/17980143

相关文章

  • windows dos 脚本(mysql)自动备份
    @echooff::以下1~8参数请按自己的情况修改;其他的不需要修改::=======================视各环境情况修改=================::1,备份目标主机setdbhost=127.0.0.1::2,数据库端口setdbport=3306::3,本地MYSQL的bin路径setmysqlbin="C:\ProgramFiles\MySQL\MySQLServe......
  • k8s_client-go 构建客户端的几种方式
    kubernetesclient-go构建客户端的几种方式packagecallk8simport( "context" "log" metav1"k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" "k8s.io/client-go/t......
  • gitlab数据备份、恢复和迁移
    自建的Gitlab服务器常常会因为使用时间的增长,其空间容量等硬件需求都需要升级,或者迁移至更高配置的服务器上。备份、迁移、恢复、升级过程如下一、gitlab备份备份前gitlab的项目如图所示 1.1修改仓库存储位置gitlab通过rpm包安装后,默认存储位置在/var/opt/gitlab/git-data......
  • 如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 3
    在本教程的前两部分,我们分别了解和学习了Prometheus和Grafana的基本概念和使用的前提条件,以及使用Helm在Kubernetes上安装Prometheus。 在今天的教程中,我们将为你介绍以下内容: 安装Grafana;集成Prometheus和Grafana,Grafana将使用Prometheus作为数据源;使用......
  • Mysql日志审计自动备份日志(按天)
    echooffecho------------------开始备份日志文件------------------setymd=%Date:~0,4%%Date:~5,2%%Date:~8,2%setbackup-dir=C:\tools\mysql-server-auditsetpwd=%你自己的数据库密码%echo备份目录:%backup-dir%echo--------------------------------------------------if......
  • day38 K8S管理平台-Lens - K8S管理平台-Kuboard (11.1-11.2)
    11.1、K8S管理平台-Lens(两节)Lens简介lens是一款开源的KubenretesIDE,也可以作为桌面客户端,官方网站https://k8slens.dev,具有以下特性:完全开源,GitHub地址https://github.com/lensapp/lens实时展示集群状态内置Prometheus监控多集群,多个namespace管理原生K......
  • k8s之基于metallb实现LoadBalancer型Service
    一、实验说明1、实验目的基于metallb实现kubernetes的LoadBalancer型Service。2、环境说明VMwareWorkstation安装三台虚拟机,安装K8S集群,网络模式NAT模式。master11.0.1.131node0111.0.1.132node0211.0.1.133oot@master:/home/user#kubectlgetnodesNAMESTATU......
  • k8s之configmap应用
    一、创建configmap1、基于命令创建configmaproot@k8s-master01:~#kubectlcreateconfigmapdemoapp-cfg--from-literal=listen.port=8080--from-literal=listen.address='127.0.0.1'configmap/demoapp-cfgcreatedroot@k8s-master01:~#kubectlgetcmNAME......
  • k8s之构建Mysql和Wordpress集群
    一、实验目的基于Kubernetes集群实现多负载的WordPress应用。将WordPress数据存储在后端Mysql,Mysql实现主从复制读写分离功能。1、准备Kubernetes集群环境root@k8s-master01:~#kubectlgetnodesNAMESTATUSROLESAGEVERSIONk8s-master01Re......
  • k8s之存储卷OpenEBS
    一、OpenEBS简介OpenEBS是一种开源云原生存储解决方案,托管于CNCF基金会,目前该项目处于沙箱阶段。OpenEBS能够将Kubernetes工作节点上可用的住何存储转换为术卷或分布式复制卷。OpenEBS支持两大类卷——本地卷和复制卷。本地卷本地卷,即节点级卷,仅支持在卷所在的节点本地......