ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

在 Google Cloud Platform(GCP)上部署 Velero:GCS 存储桶、服务账号与集群备份配置完全指南

2026/9/17 20:34:07 拓冰建站 浏览量
在 Google Cloud Platform(GCP)上部署 Velero:GCS 存储桶、服务账号与集群备份配置完全指南 在 Google Cloud PlatformGCP上部署 VeleroGCS 存储桶、服务账号与集群备份配置完全指南【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero导读本文是 Velero 官方 v1.0.0 文档中 GCP 部署指南对应仓库 site/content/docs/v1.0.0/gcp-config.md的完整技术解读与实战扩展。你将掌握在 Google Compute EngineGCE虚拟机或 Google Kubernetes EngineGKE上运行 Velero 的完整流程从客户端安装、创建 GCS 对象存储桶、创建最小权限服务账号并绑定 IAM 角色到通过velero install一键部署再到BackupStorageLocation与VolumeSnapshotLocation两个 CRD 的 GCP 参数细节。读完本文你可以在自己的 GCP 项目中从零搭建一套可用的 Kubernetes 集群备份与持久化卷快照体系。适用版本说明本文基于仓库中 Velero v1.0.0 文档及其对应命令行实现。较新版本中部分命令如--use-restic已被--use-node-agent取代已有演进实际操作时请以你所使用版本的官方文档为准。前置条件GCP 环境与命令行工具Velero 支持在 GCP 的两种 Kubernetes 运行方式下工作在 Google Compute Engine 虚拟机上自行搭建的 Kubernetes 集群托管的 Google Kubernetes EngineGKE。无论哪种方式本机都需要具备 Google Cloud SDK 提供的两个 CLIgcloud用于管理 IAM、项目与 API 权限和gsutil用于管理 GCS 对象存储。如果尚未安装请按官方 SDK 文档完成安装与gcloud auth login认证初始化。下载并安装 Velero 客户端获取官方发布版 tarball从 Velero 官方 Release 页面下载对应客户端平台的最新官方发布版 tarball。官方文档在此处有一个重要提醒强烈建议使用官方发布版本因为每个发布版的 tarball 都内置了velero命令行客户端而仓库 main 分支上的代码处于活跃开发状态不保证稳定。解压并加入 PATHtar -xvf RELEASE-TARBALL-NAME.tar.gz -C /dir/to/extract/to将解压目录记为Velero 目录。随后把其中的velero二进制移动到 PATH 中的某个目录例如/usr/local/bin即可在任意位置直接调用sudo cp /path/to/velero/velero /usr/local/bin/ velero version从源码结构看客户端入口位于 cmd/velero/velero.govelero install、velero backup等子命令的实现位于 pkg/cmd/cli。创建 GCS 备份存储桶Velero 需要一个对象存储桶来存放备份数据。官方 FAQ 建议最好为单个 Kubernetes 集群使用独立的存储桶/前缀组合多个 Velero 实例写入同一 bucketprefix 可能导致备份失败、备份被覆盖或误删等问题详见 site/content/docs/v1.0.0/faq.md。多个集群共享同一 bucket 也是可行的但每个实例必须使用独立的spec.objectStorage.prefix。创建 GCS 存储桶将YOUR_BUCKET替换为你的桶名BUCKETYOUR_BUCKET gsutil mb gs://$BUCKET/注意GCP 的 bucket 命名是全局唯一的请选用带有项目标识的命名以避免冲突。如果需要在特定区域存储备份可追加-l region例如-l us-central1。创建 Velero 专用服务账号Velero 需要一组与自身绑定的云凭证来访问 GCS 存储桶、创建磁盘快照等资源。官方文档建议为 Velero 创建专用的 Service Account而不是复用你当前登录的账号。第 1 步确认项目 IDgcloud config list将结果中的project值存入环境变量$PROJECT_IDPROJECT_ID$(gcloud config get-value project)第 2 步创建服务账号并获取邮箱gcloud iam service-accounts create velero \ --display-name Velero service account提示如果你要用 Velero 备份多个集群、且每个集群使用不同的 GCS 桶建议为每个集群创建独立的账号如velero-cluster-a而不是统一使用默认的velero便于权限隔离与审计。列出所有服务账号并定位刚创建的velero账号gcloud iam service-accounts list将$SERVICE_ACCOUNT_EMAIL设置为该账号对应的email值SERVICE_ACCOUNT_EMAIL$(gcloud iam service-accounts list \ --filterdisplayName:Velero service account \ --format value(email))第 3 步绑定最小权限 IAM 策略Velero 在 GCP 上做卷备份时需要通过 Compute Engine API 读取磁盘、创建磁盘快照并清理旧快照。官方文档给出的权限集合如下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的自定义 IAM 角色包含磁盘读取、磁盘创建、磁盘快照创建、快照读取/只读使用/删除、区域查询等 8 项权限通过add-iam-policy-binding把该自定义角色授予 Velero 服务账号通过gsutil iam ch将 GCS 桶的objectAdmin权限授予该服务账号使其能对桶内对象执行读写删除操作。这些权限恰好与 Velero 备份卷快照的生命周期一一对应createSnapshot负责创建持久化磁盘快照snapshots.delete负责在备份过期时清理快照objectAdmin负责备份文件在 GCS 中的上传、下载与清理。整体遵循最小权限原则——没有授予任何项目级的高危权限如compute.instances.*、iam.*。第 4 步生成服务账号密钥文件gcloud iam service-accounts keys create credentials-velero \ --iam-account $SERVICE_ACCOUNT_EMAIL该命令会在当前目录生成credentials-veleroJSON 密钥文件后续velero install会把它以 Secret 的形式注入集群。请妥善保管该文件它等同于对云资源的完全访问凭证。安装前检查GKE 的 RBAC 前提如果你运行的是 GKE请确认当前 IAM 用户拥有 cluster-admin 权限。该角色是创建 RBAC 对象ServiceAccount、ClusterRoleBinding 等所必需的相关配置方法可参考 GKE 官方文档中关于 IAM rolebinding bootstrap 的部分。非 GKE自建集群场景通常使用 kubeconfig 中已有的管理员凭据一般不存在此问题。安装并启动 Velero执行velero install会在集群中创建名为velero的命名空间并在其中部署名为velero的 Deploymentvelero install \ --provider gcp \ --bucket $BUCKET \ --secret-file ./credentials-velero这条命令等价于生成BackupStorageLocationprovider 为gcp、bucket 为$BUCKET、创建存放 GCP 服务账号密钥的 Secret、部署 Velero 服务端组件。可选参数与扩展能力参数作用--use-restic启用 restic 文件级备份无需依赖云快照可备份挂载卷中的文件--wait等待 Velero Deployment 就绪后再返回--snapshot-location-config snapshotLocationYOUR_LOCATION指定卷快照存放的可用区/区域详见下文 VolumeSnapshotLocation--backup-location-config为备份存储位置补充配置参数GCP 场景无必填参数--snapshot-location-config为快照存储位置补充配置参数如projectPROJECT_ID--dry-run -o yaml只输出安装 YAML 而不实际部署便于审计与定制--namespace自定义 Velero 运行命名空间默认velero详见 site/content/docs/v1.0.0/namespace.md复杂安装场景对于更复杂的安装需求官方提供了两条路径使用官方 Helm Chart 进行参数化安装使用velero install --dry-run -o yaml先生成完整的 YAML 清单检查后再手动应用kubectl apply -f -便于纳入 GitOps 流程。从安装命令实现pkg/cmd/cli/install/install.go可以看到以下参数约束理解它们有助于避免部署报错--bucket与--provider必填除非使用--no-default-backup-location--secret-file与--no-secret二选一且不可同时出现--provider必填时才创建VolumeSnapshotLocation--use-volume-snapshots默认开启--snapshot-location-config在--use-volume-snapshotsfalse时必须为空。官方示例中还提供了带插件参数的完整用法插件机制说明见 site/content/docs/v1.0.0/plugins.mdvelero install --provider gcp --plugins velero/velero-plugin-for-gcp:v1.0.0 --bucket mybucket --secret-file ./gcp-service-account.json备份存储位置BackupStorageLocation的 GCP 参数Velero 通过BackupStorageLocationCRD 表示备份存放位置集群内至少需要一个默认名称为default可通过velero server --default-backup-storage-location修改详见 site/content/docs/v1.0.0/api-types/backupstoragelocation.md。一个 GCP 场景的示例 YAMLapiVersion: velero.io/v1 kind: BackupStorageLocation metadata: name: default namespace: velero spec: provider: gcp objectStorage: bucket: YOUR_BUCKET # prefix: OPTIONAL_PREFIX # 可选桶内子目录多集群共享桶时务必配置 config: {}BackupStorageLocation通用参数如下Key类型默认值含义providerString必填存储备份的云厂商Velero 原生支持aws、gcp、azure其他厂商通过外部插件支持objectStorage.bucketString必填备份上传到的存储桶objectStorage.prefixString可选存储桶内的子目录configmap[string]string可选传给云厂商的配置键值对GCP 特有说明config下无需任何必填参数。因为 GCP 的认证与寻址信息项目、区域已由服务账号密钥和快照位置隐式提供这是与 AWS需region、s3Url等和 Azure需resourceGroup、storageAccount的最大区别。卷快照位置VolumeSnapshotLocation的 GCP 参数卷快照位置表示备份时创建的持久化卷快照的存放位置通过VolumeSnapshotLocationCRD 表示。Velero 支持同一云厂商配置多个快照位置但每次备份只能为一个厂商选择一个位置每个使用的云厂商至少需要一个快照位置详见 site/content/docs/v1.0.0/api-types/volumesnapshotlocation.md。GCP 场景的示例 YAMLapiVersion: velero.io/v1 kind: VolumeSnapshotLocation metadata: name: gcp-default namespace: velero spec: provider: gcp config: snapshotLocation: us-central1 # 可选 # project: PROJECT_ID # 可选跨项目存储快照时使用GCP 的config参数表Key类型默认值含义snapshotLocationstring空快照存放的区域/可用区例如us-central1不指定时使用 GCP 默认快照位置projectstring空快照存放的另一个项目 ID当需要把快照存到 IAM 账号所在项目之外的项目时使用可选因此若希望把卷快照固定到特定可用区可在velero install时追加velero install \ --provider gcp \ --bucket $BUCKET \ --secret-file ./credentials-velero \ --snapshot-location-config snapshotLocationus-central1与仓库实现的印证GCP 凭证与快照如何落地凭证流转credentials-velero文件由velero install读取并封装为集群内 SecretVelero 服务端启动时由 internal/credentials 模块读取供 GCP 插件初始化 GCS 客户端与 Compute Engine 客户端使用。存储位置抽象BackupStorageLocation与VolumeSnapshotLocation均由 pkg/apis/velero 中的 API 类型定义在 pkg/cmd/cli/backuplocation/create.go 与 pkg/cmd/cli/snapshotlocation/create.go 中实现了通过 CLI 创建这两种资源的能力。云厂商能力由插件承载GCP 的对象存储访问与磁盘快照能力通过外部 GCP 插件实现Velero 通过插件框架pkg/plugin以 gRPC 协议加载安装命令中的--plugins参数正是用于指定所需插件镜像。常见问题与注意事项为什么建议每集群独立 bucket 或独立 prefix多个 Velero 实例写同一 bucketprefix 会造成备份互相覆盖或误删详见 FAQ 原文。GKE 上velero install失败请优先确认当前 IAM 用户具备 cluster-admin 权限否则无法创建 RBAC 资源。快照存错区域未设置snapshotLocation时快照落入 GCP 默认位置需要跨区域/跨项目存储时配置snapshotLocation与project。只想备份资源清单、不做卷快照安装时追加--use-volume-snapshotsfalse需同时满足--provider为空等参数约束可跳过VolumeSnapshotLocation的创建。总结在 GCP 上部署 Velero 的完整链路可概括为四步安装客户端 → 创建 GCS 桶 → 创建并授权最小权限服务账号 → 执行velero install。部署完成后GCP 场景下的两个核心 CRD 均无需额外必填配置BackupStorageLocation直接指向 GCS 桶VolumeSnapshotLocation可选地通过snapshotLocation/project控制快照的区域与项目。结合本文补充的 CLI 参数约束与源码印证你可以在 GCP 上快速搭建一套生产可用的 Kubernetes 备份与迁移体系。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考