Velero 安装定制实战:velero install 深度配置、特性开关、资源限制与 CLI 可选配置
【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero
Velero 是用于备份和迁移 Kubernetes 应用及其持久化卷的开源工具。本文基于仓库文档site/content/docs/v1.11/customize-installation.md,完整覆盖velero install的全部定制维度:命名空间、身份认证机制、文件系统备份、特性开关(feature flags)、Pod 资源请求与限制、多存储位置、仅生成 YAML、自签名证书以及 CLI 自动补全等,并结合pkg/cmd/cli/install/install.go、pkg/install/resources.go、pkg/features/feature_flags.go等源码逐条验证参数行为与默认值,帮助你在生产环境中完成一次可复制、可运维的 Velero 定制安装。
安装时强制要求至少一个插件
velero install要求必须通过--plugins标志至少指定一个插件镜像,否则命令会直接校验失败。这一点在源码中有明确依据:install.go 的 Validate 方法 中,只有在同时使用--no-default-backup-location和--use-volume-snapshots=false时才允许不提供--plugins:
if o.NoDefaultBackupLocation && !o.UseVolumeSnapshots { if o.ProviderName != "" { return errors.New("--provider must be empty when using --no-default-backup-location and --use-volume-snapshots=false") } } else { if len(o.Plugins) == 0 { return errors.New("--plugins flag is required") } }插件的选型与使用详见 插件概述。
安装到任意命名空间
默认情况下,Velero 的所有 namespaced 资源都会安装到velero命名空间(install.go 的 NewInstallOptions 中Namespace初始化为velerov1api.DefaultNamespace)。但你可以借助--namespace标志把 Velero 安装到任意命名空间,详细说明见 在自定义命名空间运行。
使用非基于文件的身份认证机制
默认情况下,velero install期望通过--secret-file标志提供你的存储提供商凭据文件,该文件内容会被创建为集群内名为cloud-credentials的 Secret(见 install.go 中 AsVeleroOptions 的凭据读取逻辑)。
如果你使用的是不需要凭据文件的身份机制——例如 AWS 上的 kube2iam/kiam、GKE 的 Workload Identity 等——则改用--no-secret标志。从 Validate 方法 可以看到两者互斥且必须二选一:
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") }install.go 的官方命令示例 给出了一个典型的无凭据文件场景(AWS IRSA,通过 Pod 注解注入 IAM 角色):
velero install --provider aws \ --plugins velero/velero-plugin-for-aws:v1.0.0 \ --bucket backups \ --backup-location-config region=us-west-2 \ --snapshot-location-config region=us-west-2 \ --no-secret \ --pod-annotations iam.amazonaws.com/role=arn:aws:iam::<AWS_ACCOUNT_ID>:role/<VELERO_ROLE_NAME>启用文件系统备份(File System Backup)
默认情况下,velero install不会安装 Velero 的 文件系统备份能力。要启用它,请加上--use-node-agent标志,它会在集群中创建 node-agent DaemonSet(BindFlags 中的定义)。
如果你之前已经运行过不带--use-node-agent的velero install,可以直接再次运行同一条命令并补上--use-node-agent,从而把文件系统备份能力追加到既有安装中,而无需卸载重装。
让 Pod 卷备份默认走文件系统备份
默认情况下,velero install不会启用"所有 Pod 卷默认使用文件系统备份(FSB)"。你必须对每个带卷的 Pod 应用 Opt-in 注解,Velero 才会对该 Pod 的卷使用 FSB。
如果计划只使用 FSB 进行卷备份,可以在安装时加--default-volumes-to-fs-backup标志,从而免逐 Pod 打注解。安装时设置该标志后,服务端 Deployment 会携带--default-volumes-to-fs-backup=true启动参数(见 deployment.go);此后 Velero 会始终优先尝试用 FSB 备份所有卷,即使某个 backup 通过backup create --snapshot-volumes指定了卷快照也是如此。当然,你也可以在单个 backup 上设置--default-volumes-to-fs-backup(backup create 标志定义),只为该次备份强制使用 FSB。
源码中还有一条联动校验:使用--default-volumes-to-fs-backup必须先启用 node-agent(install.go):
if o.DefaultVolumesToFsBackup && !o.UseNodeAgent { return errors.New("--use-node-agent is required when using --default-volumes-to-fs-backup") }启用特性(Feature Flags)
Velero 的新特性以 beta 特性发布,置于特性开关(feature flag)之后,默认不开启。特性的运行时实现见 pkg/features/feature_flags.go:进程级的featureFlags集合通过IsEnabled(name)查询、Enable(...)/Disable(...)增删。特性开关常量(如CSIFeatureFlag = "EnableCSI"、APIGroupVersionsFeatureFlag = "EnableAPIGroupVersions")定义在 pkg/apis/velero/v1/constants.go。
服务端特性
使用velero install --features标志启用服务端特性,取值为逗号分隔的特性开关列表。例如启用 PVC 的 CSI 快照(CSI 快照说明):
velero install --features=EnableCSI另一个例子是启用多 API 组版本支持,见 EnableAPIGroupVersions 特性文档。
在 install.go 中,--features的字符串按逗号切分为列表后写入安装选项;deployment.go 的 WithFeatures 再将其拼接为容器启动参数:
if len(c.features) > 0 { args = append(args, fmt.Sprintf("--features=%s", strings.Join(c.features, ","))) }也就是说:传给velero install的特性开关会同时应用到 Velero Deployment,以及(如果使用了--use-node-agent时)node-agent DaemonSet。要禁用某个特性,把对应开关从--features中移除即可。
开启/关闭特性开关需要修改 Velero Deployment 和 node-agent DaemonSet。可以通过 CLI 卸载并重装 Velero 完成,也可以直接在集群内编辑deploy/velero与daemonset/node-agent资源:
$ kubectl -n velero edit deploy/velero $ kubectl -n velero edit daemonset/node-agent客户端特性
有些特性还需要在 Velero 客户端侧启用。有两种方式:
- 在每次使用 Velero CLI 的命令上附加
--features参数; - 通过
velero client config set一次性写入客户端配置文件:
velero client config set features=EnableCSI配置被存储在$HOME/.config/velero/config.json。从 pkg/cmd/velero/velero.go 的全局持久标志可以看到该文件与命令行参数的合并关系:"Combines with values from$HOME/.config/velero/config.jsonif present"。
要一次性禁用全部客户端特性:
velero client config set features=彩色 CLI 输出
velero describe等命令使用彩色输出。如果运行环境不支持彩色输出,Velero 会自动禁用;也可以手动通过配置文件关闭:
velero client config set colorized=false注意:若命令行显式传入--colorized=true,会覆盖配置文件中的设置(同样来自 velero.go 的持久标志说明:"Overrides 'colorized' value from$HOME/.config/velero/config.jsonif present")。
自定义资源请求与限制
安装时,Velero 会为 Velero Pod 以及(如启用文件系统备份时的)node-agent Pod 设置默认资源请求与限制。文档给出的默认值如下:
| 设置 | Velero pod 默认值 | node-agent pod 默认值 |
|---|---|---|
| CPU request | 500m | 500m |
| Memory request | 128Mi | 512Mi |
| CPU limit | 1000m (1 CPU) | 1000m (1 CPU) |
| Memory limit | 512Mi | 1024Mi |
这些默认值在源码中的定义见 pkg/install/resources.go。需要注意版本差异:当前仓库源码中,Velero pod 默认值与文档一致(500m/128Mi/1000m/512Mi),而 node-agent pod 的默认值已改为"0"——注释明确说明 "0" 表示不设 request/limit,使 QoS 为 BestEffort。如果你使用的是 v1.11 对应的发行版,请以文档表格为准。
维护者通过测试确认:这些默认值在备份与恢复的资源数不超过 1000 个、文件总大小不超过 100GB 时表现良好。如果你的备份/恢复规模超过这个量级,需要调大 CPU 或内存资源。维护者的测试经验是:相比恢复操作,备份操作通常需要更多 CPU 与内存,但耗时更短;具体限额取决于你资源中文件与目录的规模以及硬件条件,建议自行压测确定最佳资源限额。使用文件系统备份时可能还需额外调高资源限制,细节见 文件系统备份文档。
安装时指定自定义资源请求与限制
首次安装时可以通过 velero install 的以下标志定制(对应 install.go 中的标志定义,取值"0"被视为不设限):
velero install \ --velero-pod-cpu-request <CPU_REQUEST> \ --velero-pod-mem-request <MEMORY_REQUEST> \ --velero-pod-cpu-limit <CPU_LIMIT> \ --velero-pod-mem-limit <MEMORY_LIMIT> \ [--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>]安装后调整资源请求与限制
安装后可以直接修改 Velero Deployment 的 spec(以及使用文件系统备份时的 node-agent DaemonSet spec)中的spec.template.spec.containers.resources.limits与requests。
Velero pod
kubectl patch deployment velero -n velero --patch \ '{"spec":{"template":{"spec":{"containers":[{"name": "velero", "resources": {"limits":{"cpu": "1", "memory": "512Mi"}, "requests": {"cpu": "1", "memory": "128Mi"}}}]}}}}'node-agent pod
kubectl patch daemonset node-agent -n velero --patch \ '{"spec":{"template":{"spec":{"containers":[{"name": "node-agent", "resources": {"limits":{"cpu": "1", "memory": "1024Mi"}, "requests": {"cpu": "1", "memory": "512Mi"}}}]}}}}'此外,如果你在使用文件系统备份,可能希望调大默认的 FSB 操作超时时间(默认 240 分钟),给更大的备份留出更多时间完成。方法是给 Velero Deployment 增加--fs-backup-timeout启动参数(该参数是服务端配置项,定义见 pkg/cmd/server/config/config.go;安装侧的--pod-volume-operation-timeout标志也会把它写进 Deployment 的启动参数,见 deployment.go)。
注意:如果你重新运行velero install,手动修改过的该超时会恢复为默认值。
操作方式:
打开 Velero Deployment spec:
kubectl edit deploy velero -n velero在
spec.template.spec.containers中添加- --fs-backup-timeout:spec: template: spec: containers: - args: - --fs-backup-timeout=240m
配置多个备份/卷快照存储位置
Velero 支持任意数量的备份存储位置(BSL)和卷快照位置(VSL),详见 位置说明。
但velero install最多只支持配置一个备份存储位置和一个卷快照位置。运行velero install之后,如需配置更多位置,请使用velero backup-location create和/或velero snapshot-location create命令并附带提供商专属配置;每个命令都支持--help查看用法。
设置默认备份存储位置或默认卷快照位置
执行备份时,Velero 需要知道把数据备份到哪里。因此配置了多个位置后,每次velero backup create都必须显式指定要使用的位置——或者预先设置默认的备份存储位置/卷快照位置。如果某个提供商只配置了一个 BSL 或 VSL,Velero 会自动把它当作默认位置。
创建备份存储位置时通过--default标志将其设为默认:
velero backup-location create backups-primary \ --provider aws \ --bucket velero-backups \ --config region=us-east-1 \ --default也可以在velero server命令上通过--default-volume-snapshot-locations标志为各卷快照提供商设置默认 VSL:
velero server --default-volume-snapshot-locations="<PROVIDER-NAME>:<LOCATION-NAME>,<PROVIDER2-NAME>:<LOCATION2-NAME>"安装时不配置默认备份存储位置
如果需要在安装时不创建默认备份存储位置(即不指定--bucket或--provider),必须附加--no-default-backup-location标志作为确认项。Validate 方法 对它的约束包括:不能同时使用--bucket、--prefix、--backup-location-config;在未指定该标志时,--provider和--bucket均为必填。
安装额外的卷快照提供商
Velero 允许卷快照使用的提供商与对象存储提供商不同——例如对象存储用 AWS S3,块卷快照用 Portworx。但velero install只支持为对象存储和卷快照配置同一个提供商。
要为卷快照使用另一个提供商,按以下步骤操作:
按照你的对象存储提供商的说明安装 Velero 服务端组件;
把卷快照提供商的插件加入 Velero(插件镜像名参见对应提供商文档):
velero plugin add <registry/image:version>按照该提供商文档中的配置,为它创建一个卷快照位置:
velero snapshot-location create <NAME> \ --provider <PROVIDER-NAME> \ [--config <PROVIDER-CONFIG>]
仅生成 YAML
默认情况下,velero install会生成一组定制过的 Kubernetes 配置(YAML)并 apply 到集群。要只生成而不 apply,使用--dry-run -o yaml标志(Run 方法中 DryRun 分支 在打印资源后直接返回,不发送任何请求)。这在需要自定义定制、集成 GitOps 工作流时非常有用。
如果要在 Kubernetes 1.14.x 或更早版本上应用生成的配置,使用kubectl apply时需要加--validate=false选项(对应早期版本记录在 issue 2077 与 issue 2311 中的校验问题)。
使用自签名证书保护的存储提供商
如果你使用的存储提供商由自签名证书保护,可能需要让 Velero 信任该证书。velero install提供了--cacert标志指定证书包文件(BindFlags 中的定义),更多细节见 使用自签名证书保护的存储提供商。
可选的 Velero CLI 配置:Shell 自动补全
Velero CLI为Bash和Zsh提供了自动补全支持,可以显著减少输入量。
Linux 上的 Bash
通过velero completion bash生成补全脚本,并在 shell 中 source 后即可启用。该脚本依赖bash-completion组件(可用type _init_completion检测是否已安装)。
安装 bash-completion:多数包管理器都提供它,例如apt-get install bash-completion或yum install bash-completion。安装后生成/usr/share/bash-completion/bash_completion主脚本;视包管理器而定,你可能需要在~/.bashrc中手动 source:
source /usr/share/bash-completion/bash_completion重新加载 shell 后用type _init_completion验证是否安装成功。
启用 Velero CLI 补全(任选其一):
在
~/.bashrc中 source 补全脚本:echo 'source <(velero completion bash)' >>~/.bashrc把补全脚本写入
/etc/bash_completion.d目录(bash-completion 会自动 source 该目录下所有脚本):velero completion bash >/etc/bash_completion.d/velero如果给 velero 建了别名,可以让补全同样作用于别名:
echo 'alias v=velero' >>~/.bashrc echo 'complete -F __start_velero v' >>~/.bashrc
两种方式等效,重新加载 shell 后补全即生效。
macOS 上的 Bash
macOS 需要注意版本兼容问题:bash-completion 分 v1 和 v2 两个版本,v1 对应 Bash 3.2(macOS 自带),v2 对应 Bash 4.1+。Velero 的补全脚本在 bash-completion v1 + Bash 3.2 下无法正确工作,必须在 macOS 上安装并使用 Bash 4.1+ 以及 bash-completion v2。
安装 bash-completion v2:先用type _init_completion检测是否已有 v2,如没有可用 Homebrew 安装:
brew install bash-completion@2按安装输出提示,把以下内容加入~/.bashrc:
export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d" [[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"重新加载 shell并用type _init_completion验证。
启用 Velero CLI 补全(任选其一):
在
~/.bashrc中 source 补全脚本:echo 'source <(velero completion bash)' >>~/.bashrc把补全脚本写入
/usr/local/etc/bash_completion.d目录:velero completion bash >/usr/local/etc/bash_completion.d/velero别名支持:
echo 'alias v=velero' >>~/.bashrc echo 'complete -F __start_velero v' >>~/.bashrc如果用 Homebrew 安装 velero,补全脚本通常已存在于
/usr/local/etc/bash_completion.d/velero,则无需额外操作(Homebrew 安装的 bash-completion v2 会 sourceBASH_COMPLETION_COMPAT_DIR目录下的所有文件)。
Zsh 自动补全
通过velero completion zsh生成 Zsh 补全脚本。要在所有 shell 会话中生效,把下面一行加入~/.zshrc:
source <(velero completion zsh)如果有别名,可以让补全同样支持:
echo 'alias v=velero' >>~/.zshrc echo 'complete -F __start_velero v' >>~/.zshrc重新加载 shell 后补全即生效。若报错complete:13: command not found: compdef,在~/.zshrc开头加入:
autoload -Uz compinit compinit更多安装选项
运行velero install --help可查看完整的安装选项。从 install.go 的 BindFlags 可以看到,除本文覆盖的选项外,velero install还支持--restore-only(只恢复模式)、--wait(等待 Deployment 就绪)、--image(自定义镜像)、--prefix(桶内前缀)、--backup-location-config/--snapshot-location-config(位置配置键值对)、--pod-annotations/--pod-labels/--sa-annotations、--use-volume-snapshots、--uploader-type(当前支持 Kopia)、--concurrent-backups、--item-block-worker-count、--node-agent-configmap、--schedule-skip-immediately、--server-priority-class-name/--node-agent-priority-class-name等大量选项,可按需组合。
至此,本文完整覆盖了 Velero 安装定制文档的全部主题:插件要求、命名空间、身份认证、文件系统备份、特性开关、资源限制与--fs-backup-timeout、多存储位置与默认位置、无默认 BSL 安装、额外卷快照提供商、仅生成 YAML、自签名证书以及 CLI 自动补全。配合 pkg/cmd/cli/install/install.go 与 pkg/install/resources.go 中的参数定义和默认值,你可以把本文每一条配置命令直接落到实际的velero install调用中,并依据源码校验逻辑预判参数组合的合法性。
【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考