k8s集群使用velero数据迁移
Velero(以前称为 Heptio Ark)为您提供了备份和恢复 Kubernetes 集群资源和持久卷的工具。您可以通过云提供商或本地运行 Velero。备份集群并在丢失时进行恢复。将集群资源迁移到其他集群。将生产集群复制到开发和测试集群。本文使用本地集群之前进行迁移,s3存储使用minio存储,也可以使用公有aws,阿里。
概述
Velero(以前称为 Heptio Ark)为您提供了备份和恢复 Kubernetes 集群资源和持久卷的工具。 您可以通过云提供商或本地运行 Velero。
Velero 功能:
- 备份集群并在丢失时进行恢复。
- 将集群资源迁移到其他集群。
- 将生产集群复制到开发和测试集群。
本文使用本地k8s集群进行迁移,s3存储使用minio存储,也可以使用公有aws,阿里。
部署规划
cluster-name | 组件-verison |
cluster1 | k8s1.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
更多推荐
所有评论(0)