ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

在 Google Cloud Platform 上部署 Velero(原 Heptio Ark v0.7.1):GCS 存储桶、服务账号与 GCP 配置完整指南

在 Google Cloud Platform 上部署 Velero(原 Heptio Ark v0.7.1):GCS 存储桶、服务账号与 GCP 配置完整指南 在 Google Cloud Platform 上部署 Velero原 Heptio Ark v0.7.1GCS 存储桶、服务账号与 GCP 配置完整指南【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本篇技术指南以 ArkVelero 前身v0.7.1 官方 GCP 部署文档为主体完整讲解如何在 Google Compute Engine 虚拟机或 Google Kubernetes EngineGKE上运行 Ark 服务端从创建 GCS 对象存储桶、创建专用服务账号并绑定 IAM 权限到将凭据以 Kubernetes Secret 形式注入、修改云厂商示例配置直至启动服务端并完成一次带 PV 快照的备份/恢复验证。读完本文你将掌握 Ark/Velero 在 GCP 上从零到一的部署全流程以及Config自定义资源中与 GCP 相关的参数语义。本文依据仓库中的历史版本文档 gcp-config.md 编写其对应的上游项目在当时名为Heptio Ark后更名为 Velero当前仓库 README.md 已明确说明 Velero (formerly Heptio Ark)因此文档中的命令与资源命名均沿用ark/heptio-ark这一历史命名。前置准备确认 Kubernetes 运行方式与 CLI 工具在 GCP 上运行 Kubernetes 有两种常见方式Ark 服务端可以部署在任一方式之上Kubernetes on Google Compute Engine 虚拟机自建集群Google Kubernetes EngineGKE托管集群部署前需在本地安装并配置 Google Cloud 命令行工具gcloud用于创建服务账号、绑定 IAM 权限等身份与项目管理操作gsutil用于创建和管理 GCS 存储桶若本地尚未安装这两个 CLI请先按照 GCP 官方 SDK 安装指南完成设置原文档通过外部链接引用该指南此处不再赘述。创建 GCS 对象存储桶Ark 需要一个对象存储桶用于存放备份数据。备份文件以及后续版本中的备份存储位置相关信息都会以对象的形式写入该桶因此桶是部署的前提条件。创建命令如下gsutil mb gs://YOUR_BUCKET/请将YOUR_BUCKET替换为你实际的桶名。桶名需要符合 GCS 的全局唯一命名规范且建议按用途命名例如ark-backups-project-id这类可读性强的名称。gsutil mb默认会在当前gcloud配置的项目下创建桶如果需要在指定项目中创建可通过gcloud config set project PROJECT_ID或gsutil mb -p PROJECT_ID gs://YOUR_BUCKET/指定。创建 Ark 专用服务账号为了将 Ark 与 GCP 集成需要创建一个Ark 专用的服务账号为其授予操作 GCS 与计算磁盘快照所需的最小权限并生成一个 JSON 格式的密钥文件供 Ark 服务端使用。原文档将该步骤拆分为四个子步骤。1. 查看当前配置并记录项目 IDgcloud config list执行后从输出结果中找到project字段对应的值将其存入环境变量$PROJECT_IDexport PROJECT_ID你的 GCP 项目 ID后续的 IAM 绑定与密钥创建命令都会引用该变量。2. 创建服务账号gcloud iam service-accounts create heptio-ark \ --display-name Heptio Ark service account创建完成后列出所有服务账号找到刚创建的heptio-ark账号gcloud iam service-accounts list将结果中该账号对应的email字段值存入环境变量$SERVICE_ACCOUNT_EMAIL。服务账号邮箱的格式通常为heptio-arkPROJECT_ID.iam.gserviceaccount.com。3. 绑定 IAM 策略授予必要权限执行以下两条命令为heptio-ark服务账号绑定两个预定义角色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这两个角色各司其职对应 Ark 的两类核心能力roles/compute.storageAdmin授予对 Compute Engine磁盘与快照的管理权限。这是 Ark 对集群中 PersistentVolume 执行云原生快照PV Snapshot所必需的——备份时创建磁盘快照、恢复时从快照重建磁盘都依赖该角色。roles/storage.admin授予对 GCSCloud Storage的完整管理权限使 Ark 能够向 GCS 桶上传备份文件、列出既有备份、按 TTL 清理过期备份。权限粒度说明这两个角色均为项目级预定义角色。若你的安全策略要求更细粒度可按 Ark 实际需要收紧为自定义角色但必须同时覆盖快照管理与对象存储两类操作。4. 生成服务账号密钥文件gcloud iam service-accounts keys create credentials-ark \ --iam-account $SERVICE_ACCOUNT_EMAIL该命令会在当前目录生成一个名为credentials-ark的 JSON 密钥文件。请妥善保管该文件它是 Ark 服务端访问 GCP API 的身份凭证后续将以 Kubernetes Secret 的形式注入集群。原文档特别强调之后创建 Secret 时需要在该凭据文件所在目录下执行命令。凭据注入GKE 权限要求与 Secret 创建GKE 用户需具备 cluster-admin 角色如果使用 Google Kubernetes EngineGKE请确认你当前的 IAM 用户具有cluster-admin权限。该角色是创建 RBAC 对象所必需的——接下来要执行的00-prereqs.yaml会创建 ServiceAccount、ClusterRole、ClusterRoleBinding 等 RBAC 资源若当前用户在 GKE 上没有管理员权限这些资源将无法创建。应用基础脚手架在 Ark 仓库根目录下首先应用通用前置资源文件完成命名空间、RBAC 及其他基础组件的初始化kubectl apply -f examples/common/00-prereqs.yaml该文件主要定义Ark 各类对象backups、schedules、restores、configs、downloadrequests的CustomResourceDefinitionCRDArk 服务端运行所在的命名空间备份、调度、恢复及 Config 数据存储所在的命名空间Ark 服务账号授予该服务账号的 RBAC 规则若希望运行在自定义命名空间需要提前编辑相关 YAML 文件中的命名空间字段。从 Ark v0.7.0 起支持在任意命名空间运行详见 自定义命名空间指南。该文档同时给出一个实用建议服务端与备份数据建议分属两个不同命名空间否则在删除包含所有内容的单一 Ark 命名空间时可能遇到资源清理问题。创建 cloud-credentials Secret在刚才生成credentials-ark文件的目录下执行kubectl create secret generic cloud-credentials \ --namespace ARK_SERVER_NAMESPACE \ --from-file cloudcredentials-ark要点说明Secret 名为cloud-credentials其中的键名为cloud值为credentials-ark文件的内容ARK_SERVER_NAMESPACE需要替换为 Ark 服务端实际所在的命名空间即00-prereqs.yaml中定义的服务器命名空间示例默认值为heptio-ark-server这一凭据注入方式在现代 Velero 中依然延续安装代码会把名为cloud-credentials的 Secret 以只读模式DefaultMode: 0444挂载到容器的/credentials目录见 pkg/install/deployment.go。修改示例文件中的占位符在启动服务端之前需要修改以下示例文件文件examples/gcp/00-ark-config.yaml将YOUR_BUCKET和YOUR_PROJECT分别替换为第 2 步创建的 GCS 桶名与你的 GCP 项目 ID。这两个占位符对应 ArkConfig自定义资源中的backupStorageProvider/bucket与persistentVolumeProvider/config/project字段具体含义见下文GCP 相关 Config 参数参考。文件examples/common/10-deployment.yaml将容器环境变量spec.template.spec.containers[*].env.name的值改为GOOGLE_APPLICATION_CREDENTIALS。该环境变量是Google 官方标准的凭据发现机制任何使用 GCP 客户端库的程序在启动时都会读取它指向的 JSON 服务账号密钥文件路径。Ark 服务端正是通过它加载credentials-ark中的凭据。可选文件examples/nginx-app/with-pv.yaml如果你要运行带持久卷的 nginx 示例将storageClassName占位符YOUR_STORAGE_CLASS_NAME替换为standard——这是 GCP 上动态供应 PersistentVolume 时的默认StorageClass名称。当前仓库中该示例文件仍保留着storageClassName的注释占位符见 examples/nginx-app/with-pv.yaml。GCP 相关 Config 参数参考Ark 使用自定义资源Config来描述云厂商与备份行为配置。服务端部署后会在heptio-ark命名空间中等待一个名为default的 Config 出现。关于 Config 的完整字段说明见 Config 定义文档其中与 GCP 直接相关的参数如下backupStorageProvider/configGCP不需要任何参数。GCP 的备份存储基于 GCS其区域、认证信息均可从凭据与桶名推导因此backupStorageProvider/config下无需填写任何键值。persistentVolumeProvider/configGCPKeyTypeDefaultMeaningprojectstring必填字段示例project-example-3jsn23即创建 GCS 桶与服务账号时使用的 GCP 项目 ID。Ark 需要它来确定在哪个项目下创建/恢复磁盘快照。主 Config 参数速览KeyTypeDefaultMeaningpersistentVolumeProviderCloudProviderConfig无可选集群持久卷所属云厂商的配置用于 PV 快照。若未指定请求 PV 快照的 Backup/Restore 会被视为无效。persistentVolumeProvider/nameString无可选云厂商名称Ark 原生支持aws、gcp、azure其他厂商可通过外部插件接入。persistentVolumeProvider/configmap[string]string无可选传给云厂商的配置键值GCP 场景即上文的project。backupStorageProviderCloudProviderConfig必填字段实际存储备份文件的云厂商配置。backupStorageProvider/nameString必填字段存储备份文件的云厂商名称GCP 场景为gcp。backupStorageProvider/bucketString必填字段备份上传的目标存储桶即gsutil mb创建的桶。backupStorageProvider/configmap[string]string无可选传给云厂商备份存储的配置键值GCP 场景无需填写。backupSyncPeriodmetav1.Duration60m0sArk 轮询对象存储、为既有备份文件补齐 Backup 资源的时间间隔。gcSyncPeriodmetav1.Duration60m0sArk 轮询对象存储、删除已过 TTL 的备份文件的时间间隔。scheduleSyncPeriodmetav1.Duration1m0sArk 检查 Schedule 资源、判断是否需要触发备份的时间间隔。resourcePriorities[]string[namespaces, persistentvolumes, persistentvolumeclaims, secrets, configmaps]恢复时资源的还原顺序支持RESOURCE.GROUP格式不在列表中的资源在所有优先资源之后恢复。restoreOnlyModeboolfalse开启后备份、调度与过期备份删除功能全部关闭仅从对象存储中的既有备份执行恢复。启动 Ark 服务端在 Ark 仓库根目录下依次应用 Config 与服务端 Deploymentkubectl apply -f examples/gcp/00-ark-config.yaml kubectl apply -f examples/common/10-deployment.yaml第一步创建defaultConfig 让 Ark 服务端获知云厂商与存储桶信息第二步创建服务端 Deployment。服务端启动后即开始按backupSyncPeriod等周期执行同步任务。一个值得注意的行为原 Config 定义文档的 NOTEArk 服务端在首次部署后会等待defaultConfig 创建完成。若在运行期间修改了该 Config服务端会优雅关闭待 kubelet 重启 Ark 服务端 Pod 后使用更新后的配置值。因此修改 Config 后无需手动干预Pod 重启即生效。端到端验证备份与恢复 nginx 示例应用部署完成后可以参照 云厂商通用设置文档 中的示例完成一次完整的备份/恢复演练。基础示例不含 PersistentVolume# 1. 启动示例 nginx 应用 kubectl apply -f examples/nginx-app/base.yaml # 2. 创建备份 ark backup create nginx-backup --include-namespaces nginx-example # 3. 模拟灾难删除命名空间 kubectl delete namespaces nginx-example # 4. 等待命名空间删除完成后恢复资源 ark restore create nginx-backup带 PV 快照的示例注意若使用 Azure集群需为 1.7.2 才支持托管磁盘的 PV 快照GCP 无此版本限制。# 1. 启动带 PV 的示例应用需先将 with-pv.yaml 中的 storageClassName 改为 standard 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 # 4. 等待磁盘真正被云厂商删除动态供应 PV 的默认回收策略为 Delete # 删除是异步的请先到 GCP 控制台确认磁盘已不存在再继续下一步 # 5. 恢复资源含从快照重建磁盘 ark restore create nginx-backup上述示例对应的 YAML 文件在当前仓库中仍然存在examples/nginx-app/base.yaml 与 examples/nginx-app/with-pv.yaml可对照阅读。从 Ark 到 Velero源码中的 GCP 凭据处理虽然本文基于 v0.7.1 历史文档但GCP 凭据通过GOOGLE_APPLICATION_CREDENTIALS环境变量注入这一机制在现代 Velero 源码中依然保留并持续演进可以从源码中得到印证pkg/repository/config/gcp.go 定义了gcpCredentialsFileEnvVar GOOGLE_APPLICATION_CREDENTIALS常量并提供GetGCPCredentials函数优先从备份存储位置BackupStorageLocation的 config 中读取credentialsFile键否则回退到系统环境变量。这说明现代版本在既有环境变量机制之上还支持通过 BSL 配置逐位置指定凭据文件。pkg/repository/config/config.go 定义了凭据键常量CredentialsFileKey credentialsFile是上述查找逻辑的键名来源。pkg/install/deployment.go 展示了安装器生成的 Deployment 如何将cloud-credentialsSecret 挂载到/credentials目录并同时设置GOOGLE_APPLICATION_CREDENTIALS、AWS_SHARED_CREDENTIALS_FILE、AZURE_CREDENTIALS_FILE等多个云厂商环境变量均指向同一挂载点/credentials/cloud——三朵云共用一份密钥文件的挂载布局正是本文创建cloud-credentialsSecret步骤在现代版本中的落点。另外需要说明的是当前仓库的 examples 目录 已随版本演进重组v0.7.1 时代文档中引用的examples/common/00-prereqs.yaml、examples/gcp/00-ark-config.yaml等文件已不再保留仅剩minio/本地 S3 兼容存储用于快速体验与nginx-app/示例应用两个子目录。因此按本文操作时examples/common、examples/gcp路径仅适用于 v0.7.1 时代的仓库快照若在当前仓库中实操请改用velero install等现代安装方式并将本文的服务账号、GCS 桶与 IAM 权限步骤作为云侧准备工作的核心参考。小结在 GCP 上部署 ArkVelero的关键链路可概括为四步建桶gsutil mb→建号服务账号 compute.storageAdmin/storage.admin双角色→注入凭据cloud-credentialsSecret GOOGLE_APPLICATION_CREDENTIALS环境变量→配置并启动修改00-ark-config.yaml与10-deployment.yaml后 apply。其中project是 GCP 场景下唯一必填的persistentVolumeProvider配置项而备份存储侧则无需任何额外参数。这套凭据与配置模型在 Velero 后续版本中持续沿用理解 v0.7.1 的部署逻辑即可平滑迁移到现代安装流程。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表