k8s集群备份与恢复kubenetes
场景:
备份源环境的多节点 KubeSphere 集群 A,在目标环境上恢复此多节点 KubeSphere 集群。
环境:
源集群 A (master,node1,node2):已经部署 KubeSphere-v3.0.0
目标集群 B (master,node1,node2):已经部署 Kubernetes-v1.17.9
独立的对象存储 Minio (虚机)
架构图:
用的工具-velero
velero 备份原理图:
当你运行velero backup create test-backup:
Velero 客户端调用 Kubernetes API 服务器来创建Backup对象。
BackupController通知新对象Backup并执行验证。
BackupController开始备份过程。它通过向 API 服务器查询资源来收集要备份的数据。
调用对象存储服务(BackupController例如 AWS S3)以上传备份文件。
默认情况下,velero backup create创建任何持久卷的磁盘快照。您可以通过指定其他标志来调整快照。运行velero backup create --help以查看可用的标志。可以使用选项禁用快照--snapshot-volumes=false。
velero 简介:
Velero 提供了备份和恢复 Kubernetes 集群资源和持久卷的工具,可以在云上或本地运行。
Velero 可对集群进行备份与恢复,以防数据丢失;也可将集群资源迁移到其他集群,如将生产集
群复制到备份集群
restic
Restic 是 Velero 的开源备份组件,用于备份和恢复 Kubernetes 卷,备份前,卷必须被注释。
备份 pv 数据时,不支持卷类型为 hostpath。
Velero 支持的后端存储
Velero 支持两种关于后端存储的 CRD,分别是 BackupStorageLocation 和
VolumeSnapshotLocation。
BackupStorageLocation 主要用来定义 Kubernetes 集群资源的数据存放位置,即集群对象数据,
不是 PVC 的数据。后端存储主要支持兼容 S3 的存储,比如 Minio 等。
VolumeSnapshotLocation 主要用来给 PV 做快照,需要云厂商提供插件,还需要使用 CSI 等存
储机制。这里我们使用专门的备份工具 Restic,把 PV 数据备份到minio。
Minio 搭建
minio单机部署 :连接
velero分为 客户端和服务端。 其中 velero服务端以pod形式运行在k8s里
第2部分: 安装velero 客户端
1-下载velero二进制命令
wget https://github.com/vmware-tanzu/velero/releases/download/v1.8.1/velero-v1.8.1-linux-amd64.tar.gz
tar xf velero-v1.8.1-linux-amd64.tar.gz
cp velero-v1.8.1-linux-amd64/velero /usr/local/bin/
有限制的话可以尝试:
wget https://gitee.com/wang-huamao/soft/raw/4c70200db06283138a36492c4557ae5ae5d884b4/k8s/velero-v1.8.1-linux-amd64.tar.gz
2-创建访问minio的认证文件
mkdir /data/velero -p
cd /data/velero/
vim velero-auth.txt
[default]
aws_access_key_id = admin
aws_secret_access_key = 12345678
这个地方可以直接是账号密码,不想整key之类的话
就是这样,如果这里是阿里云OSS的话,这里就是ram子账号这样
aws_access_key_id 对应minio 的 Access Key 的值
aws_secret_access_key 对应minio 的 Secret Key 的值
3-安装velero服务端
(1)不备份volume数据
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.2.1 \
--bucket velero \
--secret-file /data/velero/velero-auth.txt \
--use-volume-snapshots=false \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://8.130.78.133:9000
验证:
kubectl -n velero get pod
检查 安装位置: CRD -》 BackupStorageLocation
2)备份volume数据
如果是之前是 安装的部分 存储卷的,可以直接执行下边的卸载:
#卸载velero
kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero
我一般是要备份存储卷内容的。
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.2.1 \
--bucket velero \
--secret-file /data/velero/velero-auth.txt \
--use-volume-snapshots=false \
--default-volumes-to-restic \
--use-restic \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://8.130.78.133:9000
参数说明:
--provider:声明使用的 Velero 插件类型。
--plugins:使用 S3 API 兼容插件 "velero-plugin-for-aws "。
--bucket:在腾讯云 COS 创建的存储桶名。
--secret-file:访问 COS 的访问凭证文件,见上面创建的 "credentials-velero"凭证文件。
--use-restic:使用开源免费备份工具 restic 备份和还原持久卷数据。
--default-volumes-to-restic:使用 restic 来备份所有Pod卷,前提是需要开启 --use-restic 参数。
--backup-location-config:备份存储桶访问相关配置。
--region:兼容 S3 API 的 COS 存储桶地区,例如创建地区是广州的话,region 参数值为"ap-guangzhou"。
--s3ForcePathStyle:使用 S3 文件路径格式。
--s3Url:COS 兼容的 S3 API 访问地址
--use-volume-snapshots=false 来关闭存储卷数据快照备份
其他参数参考:连接
检查 是否安装成功: 日志
kubectl logs deployment/velero -n velero
卸载velero
velero uninstall --force
或者:
kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero
如果是备份volume数据的话,请注意kubelet pod路径是否有修改过路径。默认路径是 /var/lib/kubelet/pods
确认方法:ps -ef | grep kubelet 确认kubelet服务是否有带有 --root-dir 的参数,如有请将restic的 daemonset.spec.template.spec.volumes.hostPath.path 修改对应的路径
验证:
kubectl logs deployment/velero -n velero
发现有错误:
Current backup storage locations available/unavailable/unknown
发现端口是9090 ,而非9000 , 大家这个换一下就可以。
查看pod
kubectl -n velero get pod
我这是单节点的 所以只显示一个
这样,我们的 velero 就安装完成了。
接下来我们使用 velero 的备份与恢复功能。
velero 的备份与恢复 (k8s)
velero 相关命令:
1-查看 备份记录
velero backup get
2- 查看恢复记录
velero restore get
https://www.kancloud.cn/jiaxzeng/kubernetes/3125937
使用对象存储 COS 作为 Velero 存储实现集群资源备份和还原
阿里云oss 方法