
Velero 前身 Heptio Ark v0.7.1 云提供商接入指南配置备份存储、PV 快照与灾难恢复验证【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero导读本文基于仓库 site/content/docs/v0.7.1/cloud-common.md系统讲解 ArkVelero 的前身彼时项目名为 Heptio Ark如何接入 AWS、GCP、Azure 三大云提供商完成服务器部署、对象存储与云盘快照配置并给出无需 PV 与带 PV 两套完整的「备份—灾难—恢复」验证流程。读完本文你将掌握 Ark 服务器在云环境下的完整配置骨架、Config自定义资源的参数语义以及用 nginx 示例应用实测备份/恢复的标准化步骤并能在当前 Velero 仓库中对照找到相应的示例与源码依据。一、背景Ark 服务器与云提供商的关系在 Ark v0.7.1 中服务器server以 Kubernetes Deployment 形式运行在集群内负责执行备份、恢复、过期备份清理等任务。要与云提供商协同工作需要为 Ark 服务器指定提供商相关的配置backupStorageProvider备份存储提供商用于存放备份文件的对象存储例如 AWS S3、GCP GCS、Azure BlobpersistentVolumeProvider持久卷提供商可选用于对集群中的 PV 做云盘快照的提供商只有配置了它请求 PV 快照的备份/恢复才有效。官方说明明确指出从 v0.7.0 起Ark 可以运行在任意 namespace 中这需要额外的自定义配置参见 运行在自定义 namespace。仓库文档还强调了一个推荐实践见 namespace.md建议把 Ark 服务器运行在一个 namespace而将备份、调度、恢复和 Config 数据存放在另一个 namespace避免「单 namespace 包含一切」时删除该 namespace 引发问题。Ark 仓库自带一组针对各云提供商的示例 YAML完整的分提供商安装指引见在 AWS 上运行 Ark在 GCP 上运行 Ark在 Azure 上运行 Ark注v0.7.1 时期的文档以examples/aws、examples/gcp、examples/azure、examples/common等目录组织示例文件当前仓库 examples 目录已随版本演进精简为minio、nginx-app等示例历史云提供商示例 YAML 不再随仓库保留下文引用它们时以原文档描述为准。二、各云提供商的配置要点以下分别梳理三个云提供商文档同属 v0.7.1 文档集的完整配置流程作为cloud-common.md指引的直接延伸。2.1 AWS含 S3 兼容存储配置流程见 aws-config.md创建 S3 bucketaws s3api create-bucket \ --bucket YOUR_BUCKET \ --region YOUR_REGION \ --create-bucket-configuration LocationConstraintYOUR_REGION注意us-east-1不支持LocationConstraint该区域需省略配置参数aws s3api create-bucket \ --bucket YOUR_BUCKET \ --region us-east-1创建 IAM 用户并附加策略aws iam create-user --user-name heptio-ark aws iam attach-user-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess \ --user-name heptio-ark aws iam attach-user-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2FullAccess \ --user-name heptio-ark创建访问密钥并生成本地凭据文件credentials-ark[default] aws_access_key_idAWS_ACCESS_KEY_ID aws_secret_access_keyAWS_SECRET_ACCESS_KEY应用公共前置资源并创建 Secret所有云提供商流程一致kubectl apply -f examples/common/00-prereqs.yaml kubectl create secret generic cloud-credentials \ --namespace ARK_SERVER_NAMESPACE \ --from-file cloudcredentials-ark修改示例文件在examples/aws/00-ark-config.yaml中替换YOUR_BUCKET与YOUR_REGION确认examples/common/10-deployment.yaml中环境变量名为AWS_SHARED_CREDENTIALS_FILE。启动服务器kubectl apply -f examples/aws/00-ark-config.yaml kubectl apply -f examples/common/10-deployment.yaml2.2 GCP配置流程见 gcp-config.md创建 GCS bucketgsutil mb gs://YOUR_BUCKET/创建服务账号并绑定角色gcloud iam service-accounts create heptio-ark \ --display-name Heptio Ark service account gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role roles/compute.storageAdmin gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role roles/storage.admin导出服务账号密钥到本地credentials-ark文件。在 GKE 上运行时需要当前 IAM 用户具备 cluster-admin 角色用于创建 RBAC 对象。应用examples/common/00-prereqs.yaml创建cloud-credentialsSecret并修改examples/gcp/00-ark-config.yaml替换YOUR_BUCKET、YOUR_PROJECT与examples/common/10-deployment.yaml环境变量改为GOOGLE_APPLICATION_CREDENTIALS。启动服务器kubectl apply -f examples/gcp/00-ark-config.yaml kubectl apply -f examples/common/10-deployment.yaml2.3 Azure配置流程见 azure-config.md是三家中最复杂的一例要点包括集群前置条件确保 agent pool 的 VM 支持 Managed Disks需要 Kubernetes 1.7.2 才能对托管磁盘做 PV 快照可选用 SSD 背书的 Premium Managed Disks 提升 I/O 性能。创建存储账号与 blob 容器建议将存储账号放到独立资源组Ark_Backups并开启静态加密与仅 HTTPS 访问AZURE_BACKUP_RESOURCE_GROUPArk_Backups az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS AZURE_STORAGE_ACCOUNT_IDarkcat /proc/sys/kernel/random/uuid | cut -d - -f5 az storage account create \ --name $AZURE_STORAGE_ACCOUNT_ID \ --resource-group $AZURE_BACKUP_RESOURCE_GROUP \ --sku Standard_GRS \ --encryption-services blob \ --https-only true \ --kind BlobStorage \ --access-tier Hot az storage container create -n ark --public-access off --account-name $AZURE_STORAGE_ACCOUNT_ID AZURE_STORAGE_KEYaz storage account keys list \ --account-name $AZURE_STORAGE_ACCOUNT_ID \ --resource-group $AZURE_BACKUP_RESOURCE_GROUP \ --query [0].value \ -o tsv创建服务主体共需设置7 个环境变量AZURE_SUBSCRIPTION_ID、AZURE_TENANT_ID、AZURE_RESOURCE_GROUP、AZURE_CLIENT_ID、AZURE_CLIENT_SECRET、AZURE_STORAGE_ACCOUNT_ID、AZURE_STORAGE_KEY。其中特别警告AZURE_RESOURCE_GROUP必须设置为创建集群时自动生成的第二个资源组磁盘所在组而非集群所在组。创建 Secret一次性注入全部 7 个变量kubectl create secret generic cloud-credentials \ --namespace ARK_SERVER_NAMESPACE \ --from-literal AZURE_SUBSCRIPTION_ID${AZURE_SUBSCRIPTION_ID} \ --from-literal AZURE_TENANT_ID${AZURE_TENANT_ID} \ --from-literal AZURE_RESOURCE_GROUP${AZURE_RESOURCE_GROUP} \ --from-literal AZURE_CLIENT_ID${AZURE_CLIENT_ID} \ --from-literal AZURE_CLIENT_SECRET${AZURE_CLIENT_SECRET} \ --from-literal AZURE_STORAGE_ACCOUNT_ID${AZURE_STORAGE_ACCOUNT_ID} \ --from-literal AZURE_STORAGE_KEY${AZURE_STORAGE_KEY}修改 Config 文件在examples/azure/10-ark-config.yaml中替换YOUR_BUCKET、YOUR_LOCATION、YOUR_TIMEOUT。文档给出了一个完整的 Azure Config 示例apiVersion: ark.heptio.com/v1 kind: Config metadata: namespace: heptio-ark name: default persistentVolumeProvider: name: azure config: location: West US apiTimeout: 15m backupStorageProvider: name: azure bucket: ark backupSyncPeriod: 30m gcSyncPeriod: 30m scheduleSyncPeriod: 1m restoreOnlyMode: false启动服务器kubectl apply -f examples/azure/三、Config 对象Ark 的云配置核心Ark 通过自定义资源Config承载所有备份与云提供商设置。服务器首次部署后会等待名为default的 Config 出现在对应 namespace 中才会就绪且一旦defaultConfig 被修改服务器会优雅退出由 kubelet 重启 Pod 后读取新配置详见 config-definition.md。一个通用示例apiVersion: ark.heptio.com/v1 kind: Config metadata: namespace: heptio-ark name: default persistentVolumeProvider: name: aws config: region: us-west-2 backupStorageProvider: name: aws bucket: ark config: region: us-west-2 backupSyncPeriod: 60m gcSyncPeriod: 60m scheduleSyncPeriod: 1m restoreOnlyMode: false3.1 主配置参数表KeyTypeDefaultMeaningpersistentVolumeProviderCloudProviderConfig无可选集群使用的持久卷云提供商用于快照。未指定时请求 PV 快照/恢复的备份与恢复视为无效。Azure 需集群 1.7.2 才支持托管磁盘 PV 快照persistentVolumeProvider/nameString原生支持aws、gcp、azure其他可由外部插件提供无可选持久卷使用的云提供商名称persistentVolumeProvider/configmap[string]string无可选传给云提供商的 PV 配置键值对backupStorageProviderCloudProviderConfig必填实际存放备份的云提供商规格backupStorageProvider/nameString必填存放备份的云提供商名称backupStorageProvider/bucketString必填备份上传的存储桶backupStorageProvider/configmap[string]string无可选传给云提供商的备份存储配置键值对backupSyncPeriodmetav1.Duration60m0s从对象存储同步备份清单的频率确保为已有备份文件创建对应 Backup 资源gcSyncPeriodmetav1.Duration60m0s清理已过 TTL 备份文件的频率scheduleSyncPeriodmetav1.Duration1m0s检查 Schedule 资源是否需要触发备份的频率resourcePriorities[]string[namespaces, persistentvolumes, persistentvolumeclaims, secrets, configmaps]恢复资源对象的顺序支持RESOURCE.GROUP格式未列入的资源在优先资源之后恢复restoreOnlyModeboolfalse开启后备份、调度、过期备份删除功能全部关闭仅能从对象存储中的既有备份文件执行恢复3.2 各提供商专属参数AWS及其他 S3 兼容存储——backupStorageProvider/configKeyTypeDefaultMeaningregionstring必填如us-east-1s3ForcePathStyleboolfalse使用 Minio 等本地存储服务时设为trues3Urlstring非 AWS 托管存储必填如http://minio:9000Ark 可依据region、bucket自动生成 AWS S3 URL此字段主要面向 Minio 类本地服务kmsKeyIdstring空指定 AWS KMS 密钥 id 或别名以启用 S3 备份加密仅 AWS S3可能需要显式授权AWS——persistentVolumeProvider/configregion必填。GCP——backupStorageProvider/config无需参数persistentVolumeProvider/configproject必填如project-example-3jsn23。Azure——backupStorageProvider/config无需参数persistentVolumeProvider/configKeyTypeDefaultMeaninglocationstring必填如Canada East指 Azure 区域apiTimeoutmetav1.Duration2m0sAzure API 请求的超时等待时间四、实战验证无 PV 基础示例服务器就绪后可通过 examples/nginx-app/base.yaml 快速验证备份/恢复闭环。该清单定义一个nginx-example命名空间、2 副本 nginx Deployment 与 LoadBalancer Service见 examples/nginx-app/README.md。启动示例应用kubectl apply -f examples/nginx-app/base.yaml创建备份仅包含指定命名空间ark backup create nginx-backup --include-namespaces nginx-example模拟灾难kubectl delete namespaces nginx-example等待命名空间被删除。恢复丢失的资源ark restore create nginx-backup五、实战验证带 PV 快照示例若需验证 PV 快照能力使用 examples/nginx-app/with-pv.yaml。该清单除 nginx 应用外还创建 PVCnginx-logs50Mi、ReadWriteOncestorageClassName占位符可按云提供商替换AWS 默认gp2、GCP 默认standard并挂载到/var/log/nginx同时通过 Pod 注解配置了备份前后执行 fsfreeze 冻结/解冻文件系统的钩子pre.hook.backup.velero.io/command与post.hook.backup.velero.io/command保证日志目录在快照时处于一致状态——这是当前 Velero hooks 机制的早期实现形态可参考 hooks 文档。注意对于 AzureKubernetes 集群需 1.7.2 才能对托管磁盘做 PV 快照。启动带 PV 的示例应用kubectl apply -f examples/nginx-app/with-pv.yaml创建带 PV 快照的备份ark backup create nginx-backup --include-namespaces nginx-example模拟灾难kubectl delete namespaces nginx-example由于动态供应的 PV 默认回收策略reclaim policy是Delete上述操作会触发云提供商删除 PV 底层的云盘。该删除是异步的可能耗时较长。在继续下一步之前务必先在云提供商控制台确认磁盘已不存在。恢复丢失的资源ark restore create nginx-backup关键提示本示例的完整语义依赖 PV 快照真正生成云端磁盘快照。若Config中未配置persistentVolumeProvider请求 PV 快照的备份会被判定为无效见上文参数表这正是「先配好云提供商、再跑示例」这一顺序的价值所在。六、历史版本说明与仓库对照本文所述 Ark v0.7.1 是当前 Velero 项目的前身彼时文档与 CLI 均以ark命令、ark.heptio.com/v1API 组示人可从 site/content/docs/v0.7.1/_index.md 及其说明中确认Ark 由「集群内运行的服务器」与「本地运行的命令行客户端」两部分组成用途是备份/恢复集群资源与持久卷。当前仓库中的 nginx 示例examples/nginx-app/base.yaml、examples/nginx-app/with-pv.yaml仍延续了「无 PV 版测试基本备份恢复、带 PV 版测试快照能力」的定位见 examples/nginx-app/README.md可直接对照本文第五、六节的操作流程使用本地无云环境时仓库还提供 Minio 部署清单examples/minio/00-minio-deployment.yaml作为 S3 兼容存储的替代方案。v0.7.1 文档中examples/common/00-prereqs.yaml、examples/aws/、examples/gcp/、examples/azure/等历史示例文件已不在当前仓库的 examples 目录中若需复现当年的云提供商安装步骤请以 aws-config.md、gcp-config.md、azure-config.md 中的命令与参数说明为准结合自身集群的实际版本与网络环境进行适配。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考