k8s集群备份与迁移

什么是 Velero?

Velero 是一个用Go语言开发的开源工具,用于 Kubernetes 集群的备份、恢复、灾难恢复和迁移。

Velero备份工作流程

当用户发起velero backup create时,会执行如下四个动作:

  1. velero客户端调用Kubernetes API创建自定义资源并存储到etcd;

  2. Backup Controller通过Kubernetes API监听到新创建的backup对象,并验证;

  3. Backup Controller开始执行备份,通过Kubernetes API查询查询和收集需要备份的资源;

  4. Backup Controller调用Minio的S3接口上传备份数据。

图片

安装步骤 

velero在卸载的时候会把所在命名空间的资源清空,所以需要独立部署,在实战中,我们会把minio和velero隔离命名空间进行部署。

下载地址

# velero
wget https://github.com/vmware-tanzu/velero/releases/download/v1.14.1/velero-v1.14.1-linux-amd64.tar.gz
# minio
git clone https://github.com/yilingyi/minio.git

minio安装

  • 修改minio中的values.yaml,有两处storageClass需要根据实际名称进行替换

图片

  • 然后执行helm指令进行部署

helm install minio ./ -f values.yaml -n minio --create-namespace
  • 完成部署后,登录console(默认账号密码是minioadmin)创建bucket,命名为velero

图片

velero安装

  • 在bucket创建后,紧接着解压velero,并在目录下创建S3存储桶凭证credentials-velero,示例如下

[default]
aws_access_key_id=minioadmin
aws_secret_access_key=minioadmin
  • 然后执行如下指令进行安装,需要注意的是,在首次备份期间需要关注集群的IO负载情况,如果负载较高,可以适当调低node agent的cpu和内存资源:

cd velero-v1.14.1-linux-amd64

cp velero /usr/bin/

velero install \
    # 指定存储提供商,minio用的是s3,所以这里是aws
    --provider aws \
    # 指定aws插件
    --plugins registry.cn-hangzhou.aliyuncs.com/yilingyi/velero-plugin-for-aws:v1.10.1 \
    # 指定velero镜像
    --image registry.cn-hangzhou.aliyuncs.com/yilingyi/velero:v1.14.1 \
    # 限制agent CPU和内存资源
    --node-agent-pod-cpu-limit 2 \
    --node-agent-pod-mem-limit 2048Mi \
    # 指定命名空间
    --namespace velero \
    # 指定bucket名称
    --bucket velero \
    # 默认以文件形式备份持久化卷
    --default-volumes-to-fs-backup \
    # 启用node agent 进行备份和恢复操作,--use-restic已启用,从v1.10开始默认使用kopia备份
    --use-node-agent \
    # 指定S3存储桶凭证
    --secret-file ./credentials-velero \
    # 禁用卷快照功能,只使用文件系统级别的备份
    --use-volume-snapshots=false \
    # 配置备份存储位置的详细信息,其中<minio-api-url>填写minio的api地址,如172.33.0.2:9000
    --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://<minio-api-url>

常用指令

备份

  • 备份所有资源

velero backup create <BACKUP_NAME>

示例

velero backup create my-buckup
  • 常用参数

--include-namespaces 备份指定的命名空间
--include-resources  备份指定的资源,常用的有deployment,pods,services,secrets,configmaps
--exclude-namespace  排除命名空间
--exclude-resources  排除资源
--ttl                备份过期时间,默认为720h,即30天
  • 如果想要排除更细粒度的资源,可以给资源打上标签velero.io/exclude-from-backup=true排除备份,如

kubectl label pv my-pv velero.io/exclude-from-backup=true
  • 查看备份列表

velero get backups
  • 查看备份任务详情/进度

velero backup describe <BACKUP_NAME> --detail

还原

  • 还原所有资源

velero restore create --from-backup <BACKUP_NAME>
  • 常用参数

--include-namespaces 备份指定的命名空间
--include-resources  备份指定的资源,常用的有deployment,pods,services,secrets,configmaps
--exclude-namespace  排除命名空间
--exclude-resources  排除资源
  • 查看还原列表

velero get restores
  • 查看还原详情/进度

velero restore describe <RESTORE_NAME> --detail

定时任务

  • 可以设置定时备份任务

velero schedule create <SCHEDULE_NAME> --schedule="0 1 * * *" --include-namespaces <NAMESPACES> --ttl 240

示例

velero schedule create daily-backup --schedule="0 1 * * *" --include-namespaces argocd,blackbox,chaosblade --ttl 240
  • 查看定时任务

velero get schedules

其他指令

  • velero卸载

velero uninstall

k8s集群迁移 

在目标集群安装velero,安装参数的s3url(“s3Url=http://<minio-api-url>”)指向源集群的minio,在完成部署后,方可进行备份浏览和还原,但需要注意以下两个细节:

  1. 还原到目标集群的备份数据中不要包含kube-system命名空间的资源,避免冲突

  2. 如果storageClass的名称发生变更,需要进行映射

将下面文件保存为velero-sc.yaml,将<target-sc>修改为目标集群的storageClass名称,并通过kubectl apply -f velero-sc.yaml执行映射,然后再进行数据还原。

apiVersion: v1
kind: ConfigMap
metadata:
  name: change-storage-class-config
  namespace: velero
  labels:
    velero.io/plugin-config: ""
    velero.io/change-storage-class: RestoreItemAction
data:
  cfs-v4: <target-sc>

结语

velero使kubernetes的备份、还原和迁移更加灵活和简单,本次分享就到这里,谢谢!

参考链接

https://min.io/docs/minio/linux/index.html

https://cloudcasa.io/blog/getting-to-know-velero-backup-and-important-velero-resources-that-you-can-utilise/

欢迎订阅我的公众号「SRE运维手记」

将一个Kubernetes集群的数据迁移到另一个集群可以通过以下步骤来实现: 1. 备份数据:在源集群中,首先需要备份您要迁移的数据,包括持久卷数据、配置文件和数据库等。您可以使用Kubernetes提供的工具或第三方工具来进行备份。 2. 创建目标集群:在目标集群中创建新的Kubernetes集群。确保目标集群的版本和配置与源集群兼容。 3. 导入配置文件:将源集群的配置文件导入到目标集群中,包括Pod、Deployment、Service等资源的定义。 4. 迁移持久卷数据:如果您使用了持久卷存储(Persistent Volume)来存储数据,需要将持久卷的数据迁移至目标集群中。您可以使用工具如Velero、Restic等来进行数据迁移。 5. 迁移数据库:如果您的应用使用了数据库,需要将数据库中的数据迁移到目标集群中。这可能涉及将数据库备份并还原到新的数据库实例中,或使用数据库复制机制进行数据同步。 6. 验证迁移:在迁移完成后,确保新的目标集群中的应用程序正常运行,并且数据已经成功迁移。进行一些基本的测试和验证,确保应用程序在新集群中的表现与源集群一致。 请注意,具体的数据迁移过程可能因您的应用程序、数据存储和集群配置而有所不同。在进行数据迁移前,建议先进行充分的测试和规划,以确保数据的完整性和一致性。同时,确保目标集群的资源足够支持迁移后的应用程序运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值