在 AWS 上部署 Ark(Velero 前身)备份 Kubernetes:S3 存储桶、IAM 权限与云凭证配置完整指南
2026/9/17 5:08:55 网站建设 项目流程

在 AWS 上部署 Ark(Velero 前身)备份 Kubernetes:S3 存储桶、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 上部署 Ark(Velero 的前身),用于备份和迁移 Kubernetes 应用及其持久化卷。读完本文,你将掌握完整的四步部署路径:创建 S3 存储桶 → 创建并授权 IAM 用户 → 配置 Ark 服务器与云凭证 Secret → 启动服务器,并深入理解Config自定义资源中与 AWS/S3 兼容存储相关的全部参数含义。这些知识与今天 Velero 的BackupStorageLocation配置一脉相承,对理解 Velero 的 AWS 与 S3 兼容存储体系依然有直接价值。

部署前置条件

在 AWS 上运行 Ark,需要依次完成四件事:

  1. 创建 S3 存储桶(用于存放备份数据);
  2. 为 Ark 创建 AWS IAM 用户(授予 S3 与 EC2 快照所需权限);
  3. 配置 Ark 服务器(Config 自定义资源 + Deployment 环境变量);
  4. 为云凭证创建 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 LocationConstraint=<YOUR_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-ark

2. 附加策略授予必要权限

将 AWS 托管策略AmazonS3FullAccessAmazonEC2FullAccess附加给该用户:

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> } }

请务必妥善保管输出的AccessKeyIdSecretAccessKey,它们只在创建时展示一次。

4. 生成本地凭证文件

在本地目录创建 Ark 专用凭证文件credentials-ark

[default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_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.yamlexamples/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 cloud=credentials-ark

这里的关键点:

  • --from-file cloud=credentials-ark将本地文件内容以 key 为cloud的形式写入 Secret;
  • <ARK_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.nameAWS_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.yaml

Ark 服务器以 Kubernetes Deployment 形式运行。根据 config-definition.md 的说明,服务器首次部署后会等待名为defaultConfig对象出现在heptio-ark命名空间;如果后续修改了defaultConfig,服务器会优雅关闭,待 kubelet 重启 Pod 后使用新配置。启动完成后即可使用ark命令行客户端执行备份与恢复(ark backup createark 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 原生支持awsgcpazure,其他厂商可经外部插件提供。
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/config(AWS 或 S3 兼容存储)

Key类型默认值含义
regionstring必填存储桶所在区域,例如us-east-1
s3ForcePathStyleboolfalse使用 Minio 等本地存储服务时设为true
s3Urlstring非 AWS 托管存储时必填例如http://minio:9000。AWS S3 场景可省略(Ark 可根据regionbucket自动生成 URL),此字段主要面向 Minio 等本地服务。
kmsKeyIdstring指定 AWS KMS 密钥 ID 或别名(如alias/<KMS-Key-Alias-Name>)以启用 S3 备份加密;仅适用于 AWS S3,可能需要显式授予密钥使用权限。

persistentVolumeProvider/config(仅 AWS)

Key类型默认值含义
regionstring必填PV 快照所在区域,例如us-east-1

上述s3ForcePathStyles3Url两个参数是 Ark 支持“非 AWS 的 S3 兼容对象存储”的关键:在现仓库中,本地快速体验方案正是利用这一点,通过 examples/minio/00-minio-deployment.yaml 在集群内起一个 Minio,再在配置中指向http://minio:9000并开启 path-style 访问,从而在完全离线的环境下走通 Ark/Velero 的备份恢复全流程。

在自定义命名空间中运行

Ark v0.7.0 起支持在任意命名空间运行,操作分两步:

  1. 编辑示例文件指定命名空间:编辑examples/common/00-prereqs.yaml(定义 CRD、Ark 命名空间、服务账号与 RBAC);AWS 场景还需编辑examples/aws/00-ark-config.yamlexamples/common/10-deployment.yaml。各云厂商需要修改的文件清单详见 namespace.md。

  2. 客户端命令指定命名空间:执行

    ark client config set namespace=<NAMESPACE_VALUE>

    即可让所有ark客户端命令指向自定义命名空间,例如ark backup createark restore createark restore getark 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,成功后为CompletedWARNINGSERRORS均为 0;如有告警或错误,可用ark restore describe <RESTORE_NAME>查看细节。完整的无 PV / 有 PV 两套演练流程见 cloud-common.md。

小结

在 AWS 上部署 Ark(Velero 前身)的关键路径清晰且可复现:S3 存储桶提供备份数据的持久化载体,IAM 用户隔离 Ark 对 S3 与 EC2 的访问权限,credentials-ark凭证文件 + Kubernetes Secret +AWS_SHARED_CREDENTIALS_FILE环境变量完成服务器侧的云身份注入,而Config自定义资源中的backupStorageProvider/persistentVolumeProvider及其 AWS 参数(regions3ForcePathStyles3UrlkmsKeyId)决定了备份的存放与快照行为。这套设计奠定了 Velero 后续版本对象存储与快照体系的基石——理解它,也就理解了现代 Velero 在 AWS 与各类 S3 兼容存储上配置的来龙去脉。

【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询