概述

Velero(以前称为 Heptio Ark)为您提供了备份和恢复 Kubernetes 集群资源和持久卷的工具。 您可以通过云提供商或本地运行 Velero。

Velero 功能:

  • 备份集群并在丢失时进行恢复。
  • 将集群资源迁移到其他集群。
  • 将生产集群复制到开发和测试集群。

本文使用本地k8s集群进行迁移,s3存储使用minio存储,也可以使用公有aws,阿里。

部署规划

cluster-name组件-verison
cluster1k8s1.23,velero1.13,minio
cluster2

k8s1.23,velero1.13

部署Minio(cluster1)

新建一个minio.yaml然后执行apply -f

---
apiVersion: v1
kind: Service
metadata:
  name: minio
  namespace: velero
  labels:
    app: minio
spec:
  selector:
    app: minio
  ports:
  - name: api
    port: 9000
    protocol: TCP
  - name: console
    port: 9000
    protocol: TCP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: minio
  namespace: velero
  labels:
    app: minio
spec:
  replicas: 1
  serviceName: minio
  selector:
    matchLabels:
      app: minio
  template:
    metadata:
      labels:
        app: minio
    spec:
      containers:
      - name: minio
        image: docker.io/bitnami/minio:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9000
          name: api
          protocol: TCP
        - containerPort: 9000
          name: console
          protocol: TCP
        env:
        - name: MINIO_ROOT_USER #minio用户
          value: "minio"
        - name: MINIO_ROOT_PASSWORD #minio密码
          value: "minio123"
        - name: MINIO_DEFAULT_BUCKETS
          value: "velero"
        volumeMounts:
        - name: data
          mountPath: /data
  volumeClaimTemplates: #minio数据存储
    - metadata:
        name: data
      spec:
        accessModes: [ "ReadWriteOnce" ]
        resources:
          requests:
            storage: 50Gi

集群暴露方式使用nodeport

 kubectl patch svc minio -n velero -p '{"spec": {"type": "NodePort"}}'

查看端口

kubectl get svc -n velero

登录minio新建一个叫做velero的Bucket

部署velero(cluster1)

下载velero

下载tar.gz

wget https://github.com/vmware-tanzu/velero/releases/download/v1.13.0/velero-v1.13.0-linux-amd64.tar.gz

解压

tar -zxvf velero-v1.13.0-linux-amd64.tar.gz

安装velero

进入文件夹

cd velero-v1.13.0-linux-amd64.tar.gz/

创建minio密钥

cat > credentials-velero <<EOF

[default]
aws_access_key_id = minio
aws_secret_access_key = minio123
EOF

拷贝velero

cp velero /usr/bin/

快速补全

velero completion bash

安装

velero install \
     --provider aws \
     --plugins velero/velero-plugin-for-aws:v1.13.0 \#版本
     --bucket velero \#Bucket _name
     --secret-file ./credentials-velero \
     --use-volume-snapshots=false \
     --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://10.233.32.105:9000 #minio路径,minio安装在cluser1里,cluster2使用暴露的IP+port

查看安装

kubectl api-versions |grep velero #查看velero安装情况

跨集群迁移(cluster1,2)

cluser2直接安装velero

安装

velero install \
     --provider aws \
     --plugins velero/velero-plugin-for-aws:v1.13.0 \#版本
     --bucket velero \#Bucket _name
     --secret-file ./credentials-velero \
     --use-volume-snapshots=false \
     --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://10.233.32.105:9000 #minio路径,minio安装在cluser1里,cluster2使用暴露的IP+port

cluser1执行备份

velero backup create <backup-test> --include-namespaces <test> :备份名字为backup-test,namespace名字为test

查看备份情况

velero backup get

cluser2执行恢复

注意:cluster2需要1分钟才可以看到cluster1备份的内容

velero restore create --from-backup <backup-test> --wait #:恢复的备份名字为backup-test

Storage Classes更改(cluster1)

Velero 可以在恢复期间更改持久卷的存储类别和持久卷声明。 要配置存储类映射,请在 Velero 命名空间中创建一个配置映射,如下所示:

apiVersion: v1
kind: ConfigMap
metadata:
  # any name can be used; Velero uses the labels (below)
  # to identify it rather than the name
  name: change-storage-class-config
  # must be in the velero namespace
  namespace: velero
  # the below labels should be used verbatim in your
  # ConfigMap.
  labels:
    # this value-less label identifies the ConfigMap as
    # config for a plugin (i.e. the built-in restore item action plugin)
    velero.io/plugin-config: ""
    # this label identifies the name and kind of plugin
    # that this ConfigMap is for.
    velero.io/change-storage-class: RestoreItemAction
data:
  # add 1+ key-value pairs here, where the key is the old
  # storage class name and the value is the new storage
  # class name.
  <old-storage-class>: <new-storage-class>

恢复到不同的namespace(cluster2)

Velero 可以将资源恢复到与备份时不同的命名空间中。 可以使用 --namespace-mappings

velero restore create <RESTORE_NAME> \
  --from-backup <BACKUP_NAME> \
  --namespace-mappings old-ns-1:new-ns-1,old-ns-2:new-ns-2

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐