迁移工具安装
Velero是开源的 Kubernetes 集群备份、迁移工具,集成了Restic工具对PV数据的备份能力,可以通过Velero工具将原集群中的K8s资源对象(如Deployment、Job、Service、ConfigMap等)和Pod挂载的持久卷数据保存备份上传至对象存储。在发生灾难或需要迁移时,目标集群可使用Velero从对象存储中拉取对应的备份,按需进行集群资源的还原。
根据迁移方案所述,在迁移开始前需准备临时的对象存储用于存放资源的备份文件,Velero支持使用OBS或者MinIO对象存储。对象存储需要准备足够的存储空间用于存放备份文件,请根据您的集群规模和数据量自行估算存储空间。建议您使用OBS进行备份存储,可直接参考安装Velero进行Velero的部署。
CCE支持使用E-Backup插件做备份恢复,E-Backup兼容Velero,且使用OBS作为后端存储。您可以在自建集群使用Velero,在CCE中使用E-Backup。
- 不选择E-Backup:源自建集群和CCE中目标集群都需要安装Velero,请按照本章节内容安装。迁移请按照集群内资源迁移(Velero)操作。
- 选择E-Backup:源自建集群安装Velero,且使用OBS作为后端存储,按照安装Velero操作;CCE中目标集群安装E-Backup,安装E-Backup和迁移按照集群内资源迁移(E-Backup)操作。
前提条件
- 原始自建集群Kubernetes版本需1.10及以上,且集群可正常使用DNS与互联网服务。
- 若您使用OBS存放备份文件,需已有OBS操作权限用户的AK/SK,请参考获取访问密钥(AK/SK)。
- 若您使用MinIO存放备份文件,则安装MinIO的服务器需要绑定EIP并在安全组中开放MinIO的API端口和Console端口。
- 已创建迁移的目标CCE集群。
- 原集群和目标集群中需要至少各拥有一个空闲节点,节点规格建议为4U8G及以上。
安装MinIO
MinIO 是一个兼容S3接口协议的高性能对象存储开源工具。若使用MinIO进行存放集群迁移的备份文件,您需要一台临时服务器用于部署MinIO并对外提供服务。若您使用OBS存放备份文件,请忽略此步骤,前往安装Velero。
MinIO的安装位置选择有如下几种:
- 集群外临时ECS
- 集群内的空闲节点
您可以远程登录节点安装MinIO服务端,也可以选择容器化安装MinIO,请参考Velero官方文档https://velero.io/docs/v1.7/contributions/minio/#set-up-server。
如使用容器化安装MinIO:
- Velero官方文档提供的YAML文件中存储类型为empty dir,建议将其修改为HostPath或Local类型,否则容器重启后将永久丢失备份文件。
- 您需将MinIO服务对外提供访问,否则将无法在集群外下载备份文件,可选择将Service修改为NodePort类型或使用其他类型的公网访问服务。
无论使用何种方法进行部署,安装MinIO的服务器需要有足够的存储空间,且均需要绑定EIP并在安全组中开放MinIO的服务端口,否则将无法上传(下载)备份文件。
本示例选择在一台集群外的临时ECS上安装MinIO,步骤如下。
- 下载MinIO对象存储。
mkdir /opt/minio mkdir /opt/miniodata cd /opt/minio wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod +x minio
- 设置MinIO的用户名及密码。
此方法设置的用户名及密码为临时环境变量,在服务重启后需要重新设定,否则会使用默认root凭据minioadmin:minioadmin来创建服务。
export MINIO_ROOT_USER=minio export MINIO_ROOT_PASSWORD=minio123
- 创建服务,其中/opt/miniodata/为MinIO 存储数据的本地磁盘路径。
MinIO的API端口默认为9000,console端口默认为随机生成,您可使用--console-address参数指定console访问端口。
./minio server /opt/miniodata/ --console-address ":30840" &
安装MinIO工具的服务器需开放防火墙、安全组中对应的API和console端口,否则将无法访问对象桶。
- 浏览器访问http://{minio所在节点的eip}:30840,可进入MinIO console界面。
安装Velero
首先前往OBS控制台或MinIO console界面,创建存放备份文件的桶并命名为velero。此处桶名称可自定义,但安装Velero时必须指定此桶名称,否则将无法访问导致备份失败,参见4。
- 原集群和目标集群中均需要安装部署Velero实例,安装步骤一致,分别用于备份和恢复。
- CCE集群的Master节点不对外提供远程登录端口,您可通过kubectl操作集群完成Velero安装。
- 如果备份资源量较大,请调整Velero及Restic工具的cpu和内存资源(建议调整至1U1G及以上)。
- 用于存放备份文件的对象存储桶需要是空桶。
从Velero官方发布路径https://github.com/vmware-tanzu/velero/releases下载最新的稳定版二进制文件,本文以Velero 1.7.0版本为例。原集群和目标集群中的安装过程一致,请参考如下步骤。
- 下载Velero 1.7.0版本的二进制文件。
wget https://github.com/vmware-tanzu/velero/releases/download/v1.7.0/velero-v1.7.0-linux-amd64.tar.gz
- 安装Velero客户端。
tar -xvf velero-v1.7.0-linux-amd64.tar.gz cp ./velero-v1.7.0-linux-amd64/velero /usr/local/bin
- 创建备份对象存储访问密钥文件credentials-velero。
vim credentials-velero
文件内容如下,其中的AK/SK请根据实际情况进行替换。使用OBS时,可参考获取访问密钥(AK/SK)获取AK/SK。如使用MinIO,此处AK/SK则为2中所创建的用户名及密码。[default] aws_access_key_id = {AK} aws_secret_access_key = {SK}
- 部署Velero服务端。注意其中--bucket参数需要修改为已创建的对象存储桶名称,本例中为velero。关于更多自定义安装参数,请参考自定义安装Velero。
velero install \ --provider aws \ --plugins velero/velero-plugin-for-aws:v1.2.1 \ --bucket velero \ --secret-file ./credentials-velero \ --use-restic \ --use-volume-snapshots=false \ --backup-location-config region=cn-north-4,s3ForcePathStyle="true",s3Url=http://obs.cn-north-4.myhuaweicloud.com
表1 Velero安装参数说明 安装参数
参数说明
--provider
声明使用“aws”提供的插件类型。
--plugins
使用AWS S3兼容的API组件,本文使用的OBS和MinIO对象存储均支持该S3协议。
--bucket
用于存放备份文件的对象存储桶名称,需提前创建。
--secret-file
访问对象存储的密钥文件,即3中创建的“credentials-velero”文件。
--use-restic
使用Restic工具支持PV数据备份,建议开启,否则将无法备份存储卷资源。
--use-volume-snapshots
是否创建 VolumeSnapshotLocation 对象进行PV快照,需要提供快照程序支持。该值设为false。
--backup-location-config
对象存储桶相关配置,包括region、s3ForcePathStyle、s3Url等。
region
对象存储桶所在区域。
- OBS:请根据实际区域填写,如“cn-north-4”。
- MinIO:参数值为minio。
s3ForcePathStyle
参数值为“true”,表示使用S3文件路径格式。
s3Url
对象存储桶的API访问地址。
- OBS:该参数值需根据对象存储桶地域决定,参数值为“http://obs.{region}.myhuaweicloud.com”。例如区域为北京四(cn-north-4),则参数值为“http://obs.cn-north-4.myhuaweicloud.com”。
- MinIO:该参数值需根据MinIO安装节点的IP及暴露端口确定,参数值为“http://{minio所在节点的eip}:9000”。
说明:
- s3Url中的访问端口需填写MinIO的API端口,而非console端口。MinIO API端口默认为9000。
- 访问集群外安装的MinIO时,需填写其公网IP地址。
- Velero实例将默认创建一个名为velero的namespace,执行以下命令可查看pod状态。
$ kubectl get pod -n velero NAME READY STATUS RESTARTS AGE restic-rn29c 1/1 Running 0 16s velero-c9ddd56-tkzpk 1/1 Running 0 16s
为防止在实际生产环境中备份时出现内存不足的情况,建议您修改Restic和Velero分配的CPU和内存大小。
- 查看Velero工具与对象存储的对接情况,状态需要为available。
$ velero backup-location get NAME PROVIDER BUCKET/PREFIX PHASE LAST VALIDATED ACCESS MODE DEFAULT default aws velero Available 2021-10-22 15:21:12 +0800 CST ReadWrite true