Velero Install CLI 完全指南用velero install一键部署 Kubernetes 备份服务【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本指南以 Velero 官方文档 velero-install.md 为主体系统讲解velero install命令的用法、全部核心参数、典型云厂商示例及其背后的源码实现。读完本文你将能够根据你的对象存储与卷快照 Provider 组合在 Kubernetes 集群中完成一次生产可用的 Velero 服务器部署并掌握资源配额、优先级类、文件系统备份、node-agent 等进阶配置。velero install是什么velero install是 Velero 提供的官方命令行安装工具用于把 Velero 的服务器端组件部署到 Kubernetes 集群中。一条命令即可完成以下资源的生成与应用全部必需的CustomResourceDefinitionCRDVelero Deployment运行velero server主进程关联的node-agent DaemonSet当指定--use-node-agent时名为cloud-credentials的Secret用于存放对象存储/卷快照 Provider 的访问凭据默认的BackupStorageLocation备份存储位置与VolumeSnapshotLocation卷快照位置。这些行为可以在命令的Long描述中得到印证见 pkg/cmd/cli/install/install.go所有命名空间资源默认安装在velero命名空间可通过--namespace指定其他命名空间所有必需 CRD、Velero Deployment 及关联的 node-agent DaemonSet 都会被安装。镜像版本是如何确定的默认情况下velero install使用CLI 自身的版本信息来决定要部署的服务器组件镜像版本。也就是说你下载哪个版本的 CLI 客户端就会默认安装对应版本的服务器组件保证客户端与服务端版本一致。如果你希望覆盖这一行为使用--image标志指定其他镜像即可。例如自定义镜像的构建方式可参考 从源码构建 文档中「构建镜像并更新 Velero」一节。相关实现位于 internal/velero/images.go 的DefaultVeleroImage()函数CLI 的NewInstallOptions()会把该默认镜像写入Options.Image字段见 pkg/cmd/cli/install/install.go。安装前的准备工作获取 CLIvelero install命令由 Velero CLI 客户端提供需要先在本地安装macOSbrew install veleroWindowschoco install veleroLinux / 其他从官方 release 页面下载对应平台的 tarball解压后把velero二进制放到$PATH中如/usr/local/bin。此外还需要一个可访问的 Kubernetes 集群v1.16 或更高且启用 DNS 与容器网络本地安装kubectl已确定的对象存储 Provider必需与可选的块存储/卷快照 Provider。确定你的 Provider 与插件镜像Velero 通过插件plugin系统对接不同的对象存储与卷快照平台无需修改 Velero 代码本身。velero install要求必须通过--plugins标志至少指定一个插件容器镜像该强制校验可在 pkg/cmd/cli/install/install.go 的Validate函数中看到当未指定--no-default-backup-location且未禁用卷快照时--plugins为空会直接报错。维护者维护的主要 Provider 插件如下Provider对象存储卷快照插件镜像前缀AWSS3EBSvelero/velero-plugin-for-awsGCPGoogle Cloud StorageCompute Engine Disksvelero/velero-plugin-for-gcpMicrosoft AzureAzure Blob StorageAzure Managed Disksvelero/velero-plugin-for-microsoft-azureVMware vSphere不支持vSphere Volumesvelero/velero-plugin-for-vsphere社区还维护了 AlibabaCloud、HuaweiCloud、OpenStack、Portworx、Storj 等 Provider 插件完整清单见 supported-providers.md。此外凡是兼容 S3 API 的对象存储如 Minio、IBM Cloud、Tencent Cloud、Ceph RADOS 等都可以复用 AWS 对象存储插件接入 Velero。准备凭据文件大多数云 Provider 需要一组访问凭据如 AWS IAM 用户 Access Key、GCP 服务账号 JSON、Azure 服务主体凭据。velero install通过--secret-file指定存放这些凭据的文件安装时文件内容会被写入名为cloud-credentials的 Secret 中。如果你的环境使用非文件式身份机制如 AWS 上的 kube2iam/kiam、GKE 的 Workload Identity 等可以改用--no-secret标志不创建 Secret。--secret-file与--no-secret二者必须且只能指定其一源码中的校验逻辑如下switch { case o.SecretFile !o.NoSecret: return errors.New(One of --secret-file or --no-secret is required) case o.SecretFile ! o.NoSecret: return errors.New(Cannot use both --secret-file and --no-secret) }命令用法与核心参数完整参数列表可通过velero install --help查看以下是在 pkg/cmd/cli/install/install.go 的BindFlags中注册的核心标志的完整梳理。基本用法velero install \ --plugins PLUGIN_CONTAINER_IMAGE [PLUGIN_CONTAINER_IMAGE] \ --provider YOUR_PROVIDER \ --bucket YOUR_BUCKET \ --secret-file PATH_TO_FILE \ --velero-pod-cpu-request CPU_REQUEST \ --velero-pod-mem-request MEMORY_REQUEST \ --velero-pod-cpu-limit CPU_LIMIT \ --velero-pod-mem-limit MEMORY_LIMIT \ --kubelet-root-dir PATH_TO_KUBELET_ROOT_DIR \ [--use-node-agent] \ [--default-volumes-to-fs-backup] \ [--node-agent-pod-cpu-request CPU_REQUEST] \ [--node-agent-pod-mem-request MEMORY_REQUEST] \ [--node-agent-pod-cpu-limit CPU_LIMIT] \ [--node-agent-pod-mem-limit MEMORY_LIMIT] \ [--maintenance-job-cpu-request CPU_REQUEST] \ [--maintenance-job-mem-request MEMORY_REQUEST] \ [--maintenance-job-cpu-limit CPU_LIMIT] \ [--maintenance-job-mem-limit MEMORY_LIMIT] \ [--server-priority-class-name PRIORITY_CLASS_NAME] \ [--node-agent-priority-class-name PRIORITY_CLASS_NAME]核心参数速查表参数作用说明--provider对象存储/卷快照 Provider 名称如aws、gcp、azure未使用--no-default-backup-location时必填--bucket备份存储桶名称名称不能以-开头未使用--no-default-backup-location时必填--plugins插件容器镜像可多个必填可重复传入或空格分隔--secret-file凭据文件路径与--no-secret二选一--no-secret不创建凭据 Secret用于非文件式身份机制--imageVelero 与 node-agent 使用的镜像覆盖默认的按 CLI 版本推导的镜像--namespace安装目标命名空间默认velero--prefix存储桶内的数据前缀所有 Velero 数据存放在该前缀之下--backup-location-config备份存储位置配置格式key1value1,key2value2--snapshot-location-config卷快照位置配置格式同上--use-volume-snapshots是否自动创建卷快照位置默认true--use-node-agent创建 node-agent DaemonSet启用文件系统备份 / CSI 数据移动的前提--use-node-agent-windows创建 Windows node-agent DaemonSet备份 Windows 工作负载时使用--privileged-node-agentnode-agent 以特权模式运行备份块设备时必需--default-volumes-to-fs-backup所有卷默认使用文件系统备份使用该标志时必须同时使用--use-node-agent--uploader-typePod 卷数据传输的上传器类型当前支持值kopia--kubelet-root-dirnode-agent 挂载的 kubelet 根目录默认/var/lib/kubelet--default-repo-maintain-frequency备份仓库默认维护频率如168h一周--garbage-collection-frequency过期备份垃圾回收频率默认 1 小时--pod-volume-operation-timeoutPod 卷操作超时时间默认 4 小时--restore-only仅以恢复模式运行服务器不执行备份--features启用的特性开关列表逗号分隔会同时传给 Deployment 与 node-agent--dry-run只生成资源不发送到集群常与-o yaml/-o json配合-o/--output输出格式yaml、json--wait等待 Deployment 就绪可选等待 node-agent DaemonSet--apply对已有资源执行服务端应用server-side apply用于更新已有安装--crds-only只生成/更新 CRD用于为已有安装升级 CRD--cacert对象存储 TLS 验证用的证书包文件自签名证书场景--no-default-backup-location不创建默认备份存储位置与--bucket/--provider二选一--pod-annotations/--pod-labels注入到 Velero 与 node-agent Pod 的注解/标签格式key1value1,key2value2--sa-annotations注入到 Velero ServiceAccount 的注解如 GKE Workload Identity 的iam.gke.io/gcp-service-account...--service-account-name指定已有 ServiceAccount设置后不再创建默认的veleroSA--sa-annotations失效--server-priority-class-nameVelero 服务器 Deployment 的优先级类需提前创建--node-agent-priority-class-namenode-agent DaemonSet 的优先级类需提前创建--item-block-worker-count处理 ItemBlock 的工作线程数默认 1--concurrent-backups并发处理的备份数量默认 1--backup-repository-configmap备份仓库配置 ConfigMap 名需提前创建--repo-maintenance-job-configmap仓库维护任务配置 ConfigMap 名需提前创建--node-agent-configmapnode-agent 配置 ConfigMap 名需提前创建--default-resource-modifier-configmap默认恢复资源修改规则 ConfigMap 名需提前创建--keep-latest-maintenance-jobs每个仓库保留的最新维护任务数可选资源 requests/limits 的取值格式--velero-pod-*-request/limit、--node-agent-pod-*-request/limit与--maintenance-job-*-request/limit等标志的值遵循 Kubernetes 资源需求requests/limits的格式例如 CPU 的500m、1内存的128Mi、512Mi。值为0时被视作无上限unbounded。这些值最终会通过kubeutil.ParseCPUAndMemoryResources解析为corev1.ResourceRequirements见 pkg/cmd/cli/install/install.go 的AsVeleroOptions。优先级类Priority Class--server-priority-class-name与--node-agent-priority-class-name分别用于设置 Velero 服务器 Deployment 与 node-agent DaemonSet 的优先级类可帮助在资源受限的集群中确保 Velero Pod 被合理调度、避免被抢占驱逐。注意优先级类必须在你安装 Velero 之前创建否则 Pod 将因找不到优先级类而无法调度。对应字段在 pkg/install/deployment.go 中直接写入 PodSpec 的PriorityClassName并有 pkg/cmd/cli/install/install_test.go 中的TestPriorityClassNameFlag用例覆盖验证。实战示例三大云厂商一键安装以下示例来自官方文档可作为自定义安装的起点。GCPvelero install --provider gcp --plugins velero/velero-plugin-for-gcp:v1.0.0 --bucket mybucket --secret-file ./gcp-service-account.jsonAWS含文件系统备份velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.0.0 --bucket backups --secret-file ./aws-iam-creds --backup-location-config regionus-east-2 --snapshot-location-config regionus-east-2 --use-node-agent--backup-location-config与--snapshot-location-config分别传递给 BackupStorageLocation 与 VolumeSnapshotLocation这里分别指定了regionus-east-2。--use-node-agent会额外创建 node-agent DaemonSet是启用文件系统备份FSB与 CSI 快照数据移动的前提。Azurevelero install --provider azure --plugins velero/velero-plugin-for-microsoft-azure:v1.0.0 --bucket $BLOB_CONTAINER --secret-file ./credentials-velero --backup-location-config resourceGroup$AZURE_BACKUP_RESOURCE_GROUP,storageAccount$AZURE_STORAGE_ACCOUNT_ID[,subscriptionId$AZURE_BACKUP_SUBSCRIPTION_ID] --snapshot-location-config apiTimeoutYOUR_TIMEOUT[,resourceGroup$AZURE_BACKUP_RESOURCE_GROUP,subscriptionId$AZURE_BACKUP_SUBSCRIPTION_ID]Azure 示例展示了多个配置键用逗号分隔的写法--backup-location-config需要resourceGroup与storageAccount可选subscriptionId--snapshot-location-config可指定apiTimeout可选resourceGroup、subscriptionId。方括号[...]表示可选键。更多常用组合以下示例同样注册在命令的Example字段中见 pkg/cmd/cli/install/install.go可直接套用# 等待 Velero Deployment 就绪 velero install --provider gcp --plugins velero/velero-plugin-for-gcp:v1.0.0 --bucket gcp-backups --secret-file ./gcp-creds.json --wait # 使用 IAM Role 注解而非凭据文件AWS IRSA / kube2iam 场景 velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.0.0 --bucket backups --backup-location-config regionus-west-2 --snapshot-location-config regionus-west-2 --no-secret --pod-annotations iam.amazonaws.com/rolearn:aws:iam::AWS_ACCOUNT_ID:role/VELERO_ROLE_NAME # 自定义 Velero Pod 资源配额 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 # 自定义 node-agent Pod 资源配额 velero install --provider gcp --plugins velero/velero-plugin-for-gcp:v1.0.0 --bucket gcp-backups --secret-file ./gcp-creds.json --node-agent-pod-cpu-request1000m --node-agent-pod-cpu-limit5000m --node-agent-pod-mem-request512Mi --node-agent-pod-mem-limit1024Mi深入资源配额默认值及其含义官方文档customize-installation.md给出的默认值如下设置Velero Pod 默认值node-agent Pod 默认值CPU request500m无内存 request128Mi无CPU limit1000m1 CPU无内存 limit512Mi无这些默认值定义在 pkg/install/resources.goDefaultVeleroPodCPURequest 500m DefaultVeleroPodMemRequest 128Mi DefaultVeleroPodCPULimit 1000m DefaultVeleroPodMemLimit 512Mi DefaultKubeletRootDir /var/lib/kubeletVelero Pod官方经验表明在备份/恢复 1000 个以内资源时这些默认值表现良好。如果启用了并发备份且备份体量较大建议调高。node-agent Pod默认不设置 CPU/内存的 request 与 limit以避免资源节流导致备份/恢复中断。仓库维护任务repository maintenance job默认同样无资源限制可通过--maintenance-job-*-request/limit设置。临时存储ephemeral-storage安装时不设置临时存储限制插件会占用临时存储官方建议预留约 100MB 用于对象存储插件及数据移动器的缓存。如需限制可在安装后编辑 Deployment/DaemonSet。建议不要盲目修改默认值若确有需要应针对自己的集群与资源规模做压测后确定。深入安装流程与参数校验源码视角velero install的执行链路为Complete → Validate → Run见 pkg/cmd/cli/install/install.go 的NewCommand。参数校验逻辑Validate函数中的关键校验规则包括桶名不能以-开头防止环境变量留空导致的误配置使用--no-default-backup-location时不能再传--bucket、--prefix、--backup-location-config不使用--no-default-backup-location时--provider与--bucket必填--use-volume-snapshotsfalse时--snapshot-location-config必须为空--default-volumes-to-fs-backup必须与--use-node-agent同时使用指定的外部 ConfigMap--node-agent-configmap、--repo-maintenance-job-configmap、--backup-repository-configmap会在安装前被读取并校验 JSON 内容是否合法不合法则直接失败实现「尽早失败」而非运行期报错。资源生成与下发Run函数中若指定了--crds-only则仅生成 CRD 资源否则调用AsVeleroOptions()把命令行参数转换为install.VeleroOptions再由 pkg/install/resources.go 的AllResources生成全部资源清单。随后通过 pkg/install/install.go 的Install函数将资源下发到集群。安装期间你可以观察到所有插件容器镜像是作为InitContainer注入 Velero Deployment 的它们把插件二进制复制到共享的/plugins卷供主容器加载见 pkg/install/deployment.go若提供了凭据文件cloud-credentialsSecret 会以只读卷挂载到/credentials路径并自动设置GOOGLE_APPLICATION_CREDENTIALS、AWS_SHARED_CREDENTIALS_FILE、AZURE_CREDENTIALS_FILE、ALIBABA_CLOUD_CREDENTIALS_FILE等环境变量安装成功后 CLI 会提示Velero is installed! ⛵ Use kubectl logs deployment/velero -n namespace to view the status.进阶安装技巧只生成 YAML 不落集群GitOps 友好velero install --provider gcp --plugins velero/velero-plugin-for-gcp:v1.0.0 --bucket mybucket --secret-file ./gcp-service-account.json --dry-run -o yaml velero-install.yaml这会把所有生成的 Kubernetes 资源以 YAML 输出到文件便于审查、定制或纳入 GitOps 流水线。注意如果你使用的是 Kubernetes 1.14.x 或更早版本应用生成配置时需要给kubectl apply加上--validatefalse。更新已有安装默认velero install会创建新资源若用于更新已有安装请使用--apply标志以服务端应用server-side apply的方式更新已有资源velero install --apply使用--apply时务必把先前安装用到的所有标志一并带上避免引入意外的配置回退。升级场景下可能还需要额外的步骤具体取决于版本间的变更。为已有安装补装文件系统备份如果你之前安装时未加--use-node-agent可以原样重跑安装命令并追加该标志即可为现有安装补齐 node-agent 与文件系统备份能力velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.0.0 --bucket backups --secret-file ./aws-iam-creds --use-node-agent同理备份块设备需要特权模式时可追加--privileged-node-agent。自定义 kubelet 根目录启用 node-agent 后它会以 hostPath 方式挂载默认的 kubelet 路径/var/lib/kubelet/pods与/var/lib/kubelet/plugins。若集群的 kubelet 根目录不同如 Rancher 等发行版用--kubelet-root-dir覆盖velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.0.0 --bucket backups --secret-file ./aws-iam-creds --use-node-agent --kubelet-root-dir /opt/rke/var/lib/kubelet开启特性开关Feature Flags新特性默认以 beta 特性开关形式发布。用--features以逗号分隔的形式开启例如 CSI 快照velero install --featuresEnableCSI特性开关会同时传给 Velero Deployment 与 node-agent DaemonSet若启用。客户端侧的特性可通过velero client config set featuresfeature1,feature2...持久化到$HOME/.config/velero/config.json用velero client config set features可全部关闭。通过外部 ConfigMap 配置高级行为自 v1.17 起CLI 与服务器端都会对以下 ConfigMap 做存在性与合法性校验失败即退出--backup-repository-configmap备份仓库配置--node-agent-configmapnode-agent 并发数等配置--repo-maintenance-job-configmap仓库维护任务配置--default-resource-modifier-configmap所有恢复默认应用的资源修改规则。由于 ConfigMap 需要提前创建推荐的工作流是先kubectl create ns velero创建所需 ConfigMap再执行velero install。相关校验实现在Validate函数中通过kubeutil.VerifyJSONConfigs完成。并发备份与 ItemBlock 处理--concurrent-backups控制同时处于InProgress阶段的备份数量默认 1可显著提升包含大量资源或大量小体积卷的备份吞吐注意同一命名空间重叠的两个备份不能并行执行全集群备份也不会与任何备份并行。--item-block-worker-count控制处理 ItemBlock 的工作线程数默认 1。两者对较大备份收益明显但也会相应增加 Velero 容器的内存与 CPU 消耗。安装后的验证安装完成后按以下顺序确认组件状态# 查看 Velero 服务器日志 kubectl logs deployment/velero -n velero # 检查各组件就绪状态 kubectl get deploy -n velero kubectl get ds -n velero kubectl get crds | grep velero # 检查备份存储位置与卷快照位置状态 velero backup-location get velero snapshot-location get # 验证客户端与服务端版本一致 velero version如需修改已部署 Pod 的资源配额可直接 patch 相应资源例如kubectl patch deployment velero -n velero --patch \ {spec:{template:{spec:{containers:[{name: velero, resources: {limits:{cpu: 1, memory: 512Mi}, requests: {cpu: 1, memory: 128Mi}}}]}}}}更多参考从源码构建 Velero 与构建服务器镜像了解--image标志背后的镜像构建流程支持的存储 Provider 列表查询对象存储与卷快照插件的完整参数自定义安装指南命名空间、身份机制、特性开关、多存储位置等进阶话题基础安装文档CLI 的三种安装方式与服务器组件两种安装方法概览。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
