我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

在 GCP 上运行 Velero:GCS 存储桶、服务账号与卷快照的完整配置指南

在 GCP 上运行 Velero:GCS 存储桶、服务账号与卷快照的完整配置指南 在 GCP 上运行 VeleroGCS 存储桶、服务账号与卷快照的完整配置指南【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero导读本文是 Velero 在 Google Cloud PlatformGCP上部署与配置的实战指南覆盖 Kubernetes on Compute EngineGCE与 Google Kubernetes EngineGKE两种运行方式。文章以 site/content/docs/v1.1.0/gcp-config.md 为骨架完整继承其下载、建桶、创建服务账号、安装启动的全流程并结合仓库中velero install命令源码与BackupStorageLocation/VolumeSnapshotLocation的 GCP 专属配置进行纵深展开。读完本文你将掌握如何在 GCP 上为 Velero 准备对象存储与最小权限凭证、如何安装部署 Velero 服务器以及如何通过--backup-location-config与--snapshot-location-config精确控制备份存储与快照的地域分布。运行前提与环境准备Velero 在 GCP 上支持两种 Kubernetes 运行环境Kubernetes on Google Compute Engine 虚拟机GCEGoogle Kubernetes EngineGKE在开始之前请确认本机已安装gcloud与gsutil两个 Google Cloud CLI 工具。若尚未安装请参照 Google Cloud SDK 官方文档完成配置包含登录与项目初始化。这两项工具是本指南中所有 GCP 操作建桶、创建服务账号、绑定 IAM 策略的执行基础。若使用 GKE还需要保证当前 IAM 用户具备 cluster-admin 权限因为 Velero 安装过程需要创建 RBAC 对象。该角色的授予方式可参考 GKE 官方关于基于 IAM 角色绑定启用 RBAC 的文档。下载 Velero 客户端从 Velero 官方 release 页面下载与你客户端平台对应的最新官方 release tarball。官方强烈建议使用官方 release 版本——每个 release 的 tarball 中都包含velero命令行客户端仓库主分支main上的代码处于活跃开发状态不保证稳定。解压 tarball 到指定目录tar -xvf RELEASE-TARBALL-NAME.tar.gz -C /dir/to/extract/to后续步骤中将解压出的目录称为Velero 目录。将 Velero 目录中的velero二进制移动或软链到 PATH 中的某个目录使其在任何路径下均可直接调用。创建 GCS 存储桶Velero 需要一个对象存储桶来存放备份数据官方建议每个 Kubernetes 集群使用独立的存储桶详见 FAQ。使用gsutil创建 GCS 存储桶并将YOUR_BUCKET替换为你的桶名BUCKETYOUR_BUCKET gsutil mb gs://$BUCKET/创建完成后$BUCKET环境变量将在后续创建服务账号与安装 Velero两个环节继续使用因此请确保它在同一个终端会话中保持有效。BackupStorageLocation 中的 GCP 配置要点从 API 类型定义site/content/docs/v1.1.0/api-types/backupstoragelocation.md可以看到BackupStorageLocation的核心字段包括provider必填备份存储使用的云厂商名称Velero 原生支持aws、gcp、azure其他厂商可通过外部插件提供objectStorage/bucket必填备份上传的目标存储桶objectStorage/prefix可选存储桶内备份数据存放的子目录config可选传给云厂商的键值配置accessMode默认ReadWriteVelero 访问备份存储位置的方式可选ReadWrite或ReadOnly。值得注意的是GCP 作为 backup storage 时无需任何额外config参数AWS 需要region、Azure 需要resourceGroup/storageAccountGCS 本身即是一个全局命名空间的对象存储区域信息隐含在桶的创建位置中。因此在velero install中为 GCP 指定--backup-location-config并非必需若你确实需要追加配置可参考该文档中 GCP 小节与对应版本的 API 定义。创建 Velero 专用服务账号为将 Velero 与 GCP 集成需要创建一个 Velero 专用的服务账号Service Account并为其授予备份卷快照 读写 GCS 对象所需的最小权限集合。以下是完整流程1. 确认项目 ID查看当前 gcloud 配置并把结果中的project值存入环境变量$PROJECT_IDgcloud config list PROJECT_ID$(gcloud config get-value project)2. 创建服务账号gcloud iam service-accounts create velero \ --display-name Velero service account如果你会用 Velero 备份多个集群、对应多个 GCS 桶建议为每个集群创建独立的账号名而不是统一使用默认的velero以便于审计与权限隔离。列出所有服务账号找到刚创建的velero账号并将其email值存入$SERVICE_ACCOUNT_EMAILgcloud iam service-accounts list SERVICE_ACCOUNT_EMAIL$(gcloud iam service-accounts list \ --filterdisplayName:Velero service account \ --format value(email))3. 附加 IAM 策略最小权限角色为velero服务账号创建自定义 IAM 角色并绑定。该角色的权限列表对应 Velero 执行 GCE 持久化磁盘快照备份卷所需的全部计算操作ROLE_PERMISSIONS( compute.disks.get compute.disks.create compute.disks.createSnapshot compute.snapshots.get compute.snapshots.create compute.snapshots.useReadOnly compute.snapshots.delete compute.zones.get ) gcloud iam roles create velero.server \ --project $PROJECT_ID \ --title Velero Server \ --permissions $(IFS,; echo ${ROLE_PERMISSIONS[*]}) gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role projects/$PROJECT_ID/roles/velero.server gsutil iam ch serviceAccount:$SERVICE_ACCOUNT_EMAIL:objectAdmin gs://${BUCKET}这段脚本做了三件事职责清晰定义角色velero.server聚合了磁盘读取/创建、快照创建/读取/只读使用/删除、区域读取等 8 项compute.*权限这是 Velero 执行原生卷快照所需的能力集绑定角色到服务账号通过add-iam-policy-binding将该自定义角色授予$SERVICE_ACCOUNT_EMAIL授予 GCS 桶的 objectAdmin通过gsutil iam ch让该账号对$BUCKET拥有对象级管理权限上传、读取、删除备份对象。4. 生成服务账号密钥创建服务账号密钥文件credentials-velero输出到当前本地目录该文件即为后续velero install --secret-file所引用的凭证gcloud iam service-accounts keys create credentials-velero \ --iam-account $SERVICE_ACCOUNT_EMAIL从凭证管理角度该文件包含了服务账号的私钥信息应妥善保管并避免提交到版本库生产环境可进一步考虑 GKE Workload Identity 方案见下文结合源码看安装参数。安装并启动 Velero执行velero install即可将 Velero 连同全部前置资源安装进集群并启动部署。该命令会创建名为velero的命名空间并在其中放置名为velero的 Deploymentvelero install \ --provider gcp \ --bucket $BUCKET \ --secret-file ./credentials-velero命令的可选参数--use-restic启用 restic 文件级备份能力针对卷的文件系统级备份而非磁盘快照--wait等待 Velero 部署就绪后再返回--snapshot-location-config snapshotLocationYOUR_LOCATION可选将卷快照存放在指定区域。若不指定快照会存放在 GCE 的默认位置--backup-location-config可选追加备份存储位置的自定义配置--snapshot-location-config可选追加卷快照位置的自定义配置CPU/内存资源 requests 与 limits可选为 Velero 与 resticnode-agentPod 设定资源配额。结合源码看velero install的参数体系在 pkg/cmd/cli/install/install.go 中可以看到这些参数的源码级定义此处节选与 GCP 部署直接相关的部分--providerProvider name for backup and volume storageinstall.go--bucketName of the object storage bucket where backups should be storedinstall.go--secret-fileFile containing credentials for backup and volume provider若未指定则必须使用--no-secret确认install.go--backup-location-config/--snapshot-location-config均为key1value1,key2value2格式的键值配置install.go--use-volume-snapshots是否自动创建快照位置默认开启若你不打算通过存储厂商做卷快照可设为falseinstall.go--plugins要注入 Velero Deployment 的插件容器镜像install.go--wait等待 Velero Deployment 就绪install.go--prefix桶内 Velero 数据统一存放的前缀目录install.go。源码的Example注释给出了 GCP 场景的完整参考用法install.go例如# 基础 GCP 安装 velero install --provider gcp --plugins velero/velero-plugin-for-gcp:v1.0.0 \ --bucket mybucket --secret-file ./gcp-service-account.json # 带 --wait 的 GCP 安装 velero install --provider gcp --plugins velero/velero-plugin-for-gcp:v1.0.0 \ --bucket gcp-backups --secret-file ./gcp-creds.json --wait # 为 Velero Pod 指定 CPU/内存配额 velero install --provider gcp --plugins velero/velero-plugin-for-gcp:v1.0.0 \ --bucket gcp-backups --secret-file ./gcp-creds.json \ --velero-pod-cpu-request1000m --velero-pod-cpu-limit5000m \ --velero-pod-mem-request512Mi --velero-pod-mem-limit1024Mi同时源码的校验逻辑对参数组合有明确约束install.go--backup-location-config与--no-default-backup-location不能同时使用未指定--provider时报错--provider is required当--use-volume-snapshotstrue时--provider必填当--use-volume-snapshotsfalse时--snapshot-location-config必须为空。从源码结构可以推断GCP 的卷快照能力由独立的 GCP 插件如velero/velero-plugin-for-gcp提供因此在新版本中 GCP 安装通常需要搭配--plugins参数指定插件镜像而 v1.1.0 时代文档中原生支持 gcp provider的表述指的是provider: gcp的内置存储驱动。VolumeSnapshotLocation 的 GCP 专属配置VolumeSnapshotLocation的 GCP 配置定义在 site/content/docs/v1.1.0/api-types/volumesnapshotlocation.md可用键值如下Key类型默认含义snapshotLocationstring空快照存放的 GCP 区域例如us-central1不指定时快照存放在 GCE 默认位置projectstring空快照存放的目标项目 ID仅当与当前 IAM 账号所在项目不同时才需要指定对应到安装命令即velero install \ --provider gcp \ --bucket $BUCKET \ --secret-file ./credentials-velero \ --snapshot-location-config snapshotLocationus-central1project参数在跨项目存储快照、或使用共享 GCS 桶 独立快照项目等场景下非常实用。两个参数均通过--snapshot-location-config以逗号分隔的键值对传入。资源配额与更复杂的安装场景为 Velero 与 restic Pod 设定资源根据 site/content/docs/v1.1.0/install-overview.md 中的 Velero resource requirements 章节默认情况下 Velero 与 restic Pod 不设置 requests/limitsrestic 的 CPU/内存消耗高度依赖被备份卷的大小。如需定制可在velero install中追加以下参数--velero-pod-cpu-request CPU_REQUEST \ --velero-pod-cpu-limit CPU_LIMIT \ --velero-pod-mem-request MEMORY_REQUEST \ --velero-pod-mem-limit MEMORY_LIMIT \ [--restic-pod-cpu-request CPU_REQUEST] \ [--restic-pod-mem-request MEMORY_REQUEST] \ [--restic-pod-cpu-limit CPU_LIMIT] \ [--restic-pod-mem-limit MEMORY_LIMIT]这些参数的值遵循 Kubernetes 资源配额格式如1000m、512Mi。注意当前仓库新版本已将 restic 相关命名演进为 node-agent--node-agent-pod-cpu-request等v1.1.0 文档中的--restic-pod-*系当时版本的参数名使用时请以你所部署的 Velero 版本的帮助输出为准。复杂场景Helm 与 dry-run对于更复杂的安装需求官方提供了两条路径使用 Helm chart进行参数化安装为velero install追加--dry-run -o yaml仅生成 YAML 清单而不实际下发到集群。这在需要审计安装内容、将清单纳入 GitOps 流程、或手工微调后再kubectl apply的场景下非常实用。此外若你的存储平台不支持原生卷快照可在安装时使用--use-volume-snapshotsfalse阻止创建无用的VolumeSnapshotLocation同时结合 restic 集成做文件级备份详见 restic 说明。小结与后续验证完成以上步骤后你的 GCP 集群中应当出现velero命名空间、veleroDeployment、以credentials-velero为数据源的 Secret、默认的BackupStorageLocation指向$BUCKET以及默认开启时的VolumeSnapshotLocation。可执行velero get backup-storage-locations与velero get volume-snapshot-locations验证资源状态随后即可创建第一个备份velero backup create BACKUP-NAME本文的全部实操流程均可在 gcp-config.md 原文档中找到出处相关 API 字段定义与安装参数源码分别见 backupstoragelocation.md、volumesnapshotlocation.md 与 pkg/cmd/cli/install/install.go。部署完成后建议将 GCS 桶的生命周期策略、跨区域复制以及服务账号密钥轮换纳入运维规划以保障备份数据的持久可用性。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表