在 AWS 上部署 ArkVelero 前身备份 KubernetesS3 存储桶、IAM 权限与云凭证配置完整指南【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero导读本文以当前仓库中 Heptio Ark v0.7.0 的官方部署文档 aws-config.md 为骨架完整讲解如何在 AWS 上部署 ArkVelero 的前身用于备份和迁移 Kubernetes 应用及其持久化卷。读完本文你将掌握完整的四步部署路径创建 S3 存储桶 → 创建并授权 IAM 用户 → 配置 Ark 服务器与云凭证 Secret → 启动服务器并深入理解Config自定义资源中与 AWS/S3 兼容存储相关的全部参数含义。这些知识与今天 Velero 的BackupStorageLocation配置一脉相承对理解 Velero 的 AWS 与 S3 兼容存储体系依然有直接价值。部署前置条件在 AWS 上运行 Ark需要依次完成四件事创建 S3 存储桶用于存放备份数据为 Ark 创建 AWS IAM 用户授予 S3 与 EC2 快照所需权限配置 Ark 服务器Config 自定义资源 Deployment 环境变量为云凭证创建 Kubernetes Secret。如果你的本地机器还没有安装aws命令行工具请先按照 AWS 官方用户指南完成安装与配置。此外本指南基于 Ark v0.7.0 时期的目录结构展开其中 v0.7.0 相关文档位于 site/content/docs/v0.7.0/整个 v0.7.0 版本的 Ark 概览可参考 v0.7.0 文档首页。创建 S3 存储桶Ark 需要一个对象存储桶来存放备份。使用aws s3api create-bucket创建注意替换其中的YOUR_BUCKET与YOUR_REGION占位符aws s3api create-bucket \ --bucket YOUR_BUCKET \ --region YOUR_REGION \ --create-bucket-configuration LocationConstraintYOUR_REGION注意us-east-1区域不支持LocationConstraint参数。如果区域是us-east-1请省略存储桶配置参数直接执行aws s3api create-bucket \ --bucket YOUR_BUCKET \ --region us-east-1创建 IAM 用户并授权Ark 服务器进程需要访问 S3读写备份文件与 EC2创建/恢复卷快照的权限因此需要创建一个专用的 IAM 用户文档中命名为heptio-ark而不是使用根账号或过于宽泛的凭证。1. 创建 IAM 用户aws iam create-user --user-name heptio-ark2. 附加策略授予必要权限将 AWS 托管策略AmazonS3FullAccess与AmazonEC2FullAccess附加给该用户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其中AmazonS3FullAccess负责备份数据的上传与读取AmazonEC2FullAccess负责持久化卷快照的创建与回滚。在实际生产环境中通常建议进一步收敛为最小权限的自定义策略例如仅允许指定桶的s3:PutObject/s3:GetObject以及指定卷的快照操作但 v0.7.0 文档采用 AWS 托管策略以保证开箱即用。3. 创建访问密钥aws iam create-access-key --user-name heptio-ark返回结果形如{ AccessKey: { UserName: heptio-ark, Status: Active, CreateDate: 2017-07-31T22:24:41.576Z, SecretAccessKey: AWS_SECRET_ACCESS_KEY, AccessKeyId: AWS_ACCESS_KEY_ID } }请务必妥善保管输出的AccessKeyId与SecretAccessKey它们只在创建时展示一次。4. 生成本地凭证文件在本地目录创建 Ark 专用凭证文件credentials-ark[default] aws_access_key_idAWS_ACCESS_KEY_ID aws_secret_access_keyAWS_SECRET_ACCESS_KEY其中AWS_ACCESS_KEY_ID与AWS_SECRET_ACCESS_KEY来自上一步create-access-key的返回值。该文件采用 AWS 共享凭证文件的标准 INI 格式字段名与 AWS CLI 使用的凭证文件完全一致。凭证与配置第一步创建命名空间、RBAC 等基础资源在 Ark 根目录下先应用预置文件以创建自定义资源定义CRD、命名空间、服务账号与 RBAC 规则kubectl apply -f examples/common/00-prereqs.yaml关于00-prereqs.yaml具体定义的内容Ark 各类对象的 CRD、Ark 命名空间、服务账号与授权规则可参考 v0.7.0 文档 namespace.md。如果要在自定义命名空间中运行需要先编辑相关 YAML 文件指定命名空间详见下文「在自定义命名空间中运行」小节。需要说明的是当前仓库的examples/目录结构已随 Velero 版本演进做了重组v0.7.0 时代的examples/common/00-prereqs.yaml、examples/aws/00-ark-config.yaml已不再保留现仓库保留了examples/minio/00-minio-deployment.yaml本地 S3 兼容存储与examples/nginx-app/示例应用。因此在现代版本中请以 examples/minio/00-minio-deployment.yaml 与 examples/nginx-app/with-pv.yaml 为参照而本节以下命令为 v0.7.0 文档的原始步骤适用于 checkout 该版本源码的场景。第二步创建云凭证 Secret在刚才创建凭证文件的目录中执行kubectl create secret generic cloud-credentials \ --namespace ARK_NAMESPACE \ --from-file cloudcredentials-ark这里的关键点--from-file cloudcredentials-ark将本地文件内容以 key 为cloud的形式写入 SecretARK_NAMESPACE需替换为 Ark 所在命名空间默认heptio-ark该 Secret 随后会被挂载进 Ark 服务器 Pod供 AWS SDK 读取。第三步修改示例文件中的占位符需要修改三处示例文件1.examples/aws/00-ark-config.yaml将YOUR_BUCKET与YOUR_REGION替换为实际值。该文件对应 Ark 的Config自定义资源其中 AWS 相关参数的完整定义见 config-definition.md。2.examples/common/10-deployment.yaml确认spec.template.spec.containers[*].env.name为AWS_SHARED_CREDENTIALS_FILE。Ark 服务器容器通过该环境变量告诉 AWS SDK 凭证文件即挂载的cloudSecret 内容所在路径这是 Ark 在 AWS 上正确读取credentials-ark凭证的机制核心。3.可选examples/nginx-app/with-pv.yaml如果运行 nginx 示例将YOUR_STORAGE_CLASS_NAME替换为gp2这是 AWS 默认的StorageClass名称。该文件在现仓库中的版本可见 examples/nginx-app/with-pv.yaml其中同时演示了通过pre.hook.backup.velero.io/post.hook.backup.velero.io注解在备份前后执行fsfreeze冻结/解冻文件系统的用法保证卷内数据一致性。启动 Ark 服务器在 Ark 根目录依次执行kubectl apply -f examples/aws/00-ark-config.yaml kubectl apply -f examples/common/10-deployment.yamlArk 服务器以 Kubernetes Deployment 形式运行。根据 config-definition.md 的说明服务器首次部署后会等待名为default的Config对象出现在heptio-ark命名空间如果后续修改了defaultConfig服务器会优雅关闭待 kubelet 重启 Pod 后使用新配置。启动完成后即可使用ark命令行客户端执行备份与恢复ark backup create、ark restore create完整的端到端验证流程含带 PV 的快照备份与灾难恢复演练见 cloud-common.md。深入理解Config 中的 AWS/S3 兼容存储参数AWS 配置的灵魂在 Ark 的Config自定义资源中。一个完整的 AWS 配置示例如下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: false主配置参数Key类型默认值含义persistentVolumeProviderCloudProviderConfigNone可选集群持久化卷所用云厂商的配置用于快照。不设置时请求 PV 快照的备份/恢复将被视为无效。persistentVolumeProvider/nameStringNone可选持久化卷云厂商名称。Ark 原生支持aws、gcp、azure其他厂商可经外部插件提供。persistentVolumeProvider/configmap[string]stringNone可选传递给云厂商的持久化卷配置键值对AWS 仅需region。backupStorageProviderCloudProviderConfig必填实际存放备份文件的云厂商配置。backupStorageProvider/nameString必填备份存储云厂商名称aws/gcp/azure或插件。backupStorageProvider/bucketString必填备份上传的目标存储桶。backupStorageProvider/configmap[string]stringNone可选传递给备份存储云厂商的配置键值对。backupSyncPeriodmetav1.Duration60m0sArk 查询对象存储以同步 Backup 资源对象的频率。gcSyncPeriodmetav1.Duration60m0sArk 查询对象存储以删除已超过 TTL 的备份文件的频率。scheduleSyncPeriodmetav1.Duration1m0sArk 检查 Schedule 资源以判断是否需要触发备份的频率。restoreOnlyModeboolfalse开启后备份、调度与过期备份删除功能全部关闭仅从对象存储中的既有备份执行恢复。backupStorageProvider/configAWS 或 S3 兼容存储Key类型默认值含义regionstring必填存储桶所在区域例如us-east-1。s3ForcePathStyleboolfalse使用 Minio 等本地存储服务时设为true。s3Urlstring非 AWS 托管存储时必填例如http://minio:9000。AWS S3 场景可省略Ark 可根据region、bucket自动生成 URL此字段主要面向 Minio 等本地服务。kmsKeyIdstring空指定 AWS KMS 密钥 ID 或别名如alias/KMS-Key-Alias-Name以启用 S3 备份加密仅适用于 AWS S3可能需要显式授予密钥使用权限。persistentVolumeProvider/config仅 AWSKey类型默认值含义regionstring必填PV 快照所在区域例如us-east-1。上述s3ForcePathStyle与s3Url两个参数是 Ark 支持“非 AWS 的 S3 兼容对象存储”的关键在现仓库中本地快速体验方案正是利用这一点通过 examples/minio/00-minio-deployment.yaml 在集群内起一个 Minio再在配置中指向http://minio:9000并开启 path-style 访问从而在完全离线的环境下走通 Ark/Velero 的备份恢复全流程。在自定义命名空间中运行Ark v0.7.0 起支持在任意命名空间运行操作分两步编辑示例文件指定命名空间编辑examples/common/00-prereqs.yaml定义 CRD、Ark 命名空间、服务账号与 RBACAWS 场景还需编辑examples/aws/00-ark-config.yaml与examples/common/10-deployment.yaml。各云厂商需要修改的文件清单详见 namespace.md。客户端命令指定命名空间执行ark client config set namespaceNAMESPACE_VALUE即可让所有ark客户端命令指向自定义命名空间例如ark backup create、ark restore create、ark restore get、ark restore describe都会自动带上该命名空间。部署后的端到端验证带 PV 快照场景服务器启动成功后可以用带持久化卷的 nginx 示例验证 AWS 场景下“备份 → 灾难 → 恢复”的完整链路# 1. 启动带 PV 的示例应用 kubectl apply -f examples/nginx-app/with-pv.yaml # 2. 创建备份包含 PV 快照 ark backup create nginx-backup --include-namespaces nginx-example # 3. 模拟灾难删除命名空间 kubectl delete namespaces nginx-example由于动态制备 PV 的默认回收策略是 Delete删除命名空间会触发云厂商异步删除底层磁盘务必先确认 AWS 侧磁盘已被删除再执行恢复。# 4. 从备份恢复 ark restore create nginx-backup执行ark restore get可观察恢复状态进行中为InProgress成功后为Completed且WARNINGS、ERRORS均为 0如有告警或错误可用ark restore describe RESTORE_NAME查看细节。完整的无 PV / 有 PV 两套演练流程见 cloud-common.md。小结在 AWS 上部署 ArkVelero 前身的关键路径清晰且可复现S3 存储桶提供备份数据的持久化载体IAM 用户隔离 Ark 对 S3 与 EC2 的访问权限credentials-ark凭证文件 Kubernetes Secret AWS_SHARED_CREDENTIALS_FILE环境变量完成服务器侧的云身份注入而Config自定义资源中的backupStorageProvider/persistentVolumeProvider及其 AWS 参数region、s3ForcePathStyle、s3Url、kmsKeyId决定了备份的存放与快照行为。这套设计奠定了 Velero 后续版本对象存储与快照体系的基石——理解它也就理解了现代 Velero 在 AWS 与各类 S3 兼容存储上配置的来龙去脉。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考