Skip to content

Upd Velero v1.17.0 - #1484

Merged
Andrei Kvapil (kvaps) merged 1 commit into
mainfrom
velero-upd
Oct 6, 2025
Merged

Upd Velero v1.17.0#1484
Andrei Kvapil (kvaps) merged 1 commit into
mainfrom
velero-upd

Conversation

@kvaps

@kvaps Andrei Kvapil (kvaps) commented Oct 2, 2025

Copy link
Copy Markdown
Member

Signed-off-by: Andrei Kvapil kvapss@gmail.com

What this PR does

Release note

[]

Summary by CodeRabbit

  • New Features

    • Per-repository maintenance via ConfigMap with global and repo-specific settings.
    • PodVolumeBackup/Restore: cancel requests, progress reporting, node/uploader visibility, expanded phases.
    • New volumeGroupSnapshotLabelKey on Backups and Schedules.
    • DataUpload: specify CSI driver.
    • Metrics Service: ipFamilyPolicy and ipFamilies support.
    • Optional container resizePolicy.
  • Changes

    • Upgraded to Velero 1.17.0; Helm chart v11.0.0.
    • Deployment name standardized to “velero”.
    • Node agent enabled by default.
    • Templates now block deprecated options with clear error messages.
  • Documentation

    • Expanded README on repository maintenance, deprecations, and upgrade guidance.

@coderabbitai

coderabbitai Bot commented Oct 2, 2025

Copy link
Copy Markdown
Contributor

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Helm Velero chart bumped to appVersion 1.17.0 / chart 11.0.0. CRDs updated (new fields: cancel, progress, acceptedTimestamp, node, volumeGroupSnapshotLabelKey, csiSnapshot.driver; adjusted required fields). Helm templates/values/schema/docs add repo maintenance ConfigMap wiring, resizePolicy, dual-stack service options, and template/variable tweaks.

Changes

Cohort / File(s) Summary
Chart metadata bump
packages/system/velero/charts/velero/Chart.yaml
Bumped appVersion to 1.17.0 and chart version to 11.0.0.
Documentation updates
packages/system/velero/charts/velero/README.md
Added Repository Maintenance Configuration section, examples, deprecation notes, and upgrade guidance for v1.15/v1.16→v1.17.
CRDs — repositories / backups / schedules / datauploads
packages/system/velero/charts/velero/crds/backuprepositories.yaml, .../backups.yaml, .../datauploads.yaml, .../schedules.yaml
BackupRepository: resticIdentifier description clarified and removed from required list. Backups & Schedules: added volumeGroupSnapshotLabelKey (string). DataUploads: added spec.csiSnapshot.properties.driver (string).
CRDs — PodVolumeBackup
packages/system/velero/charts/velero/crds/podvolumebackups.yaml
Added spec.cancel (bool) and spec.uploader (string). Added status.acceptedTimestamp, status.node, status.progress (bytesDone, totalBytes). Extended status.phase enum with Accepted/Prepared/Canceling/Canceled. Removed spec.pod, spec.volume, spec.uploaderType. Updated printer columns/timestamps.
CRDs — PodVolumeRestore
packages/system/velero/charts/velero/crds/podvolumerestores.yaml
Parallel changes to PodVolumeRestore: added spec.cancel; status.acceptedTimestamp, status.node, status.progress; extended phase enum; updated printer columns (Started, Bytes Done/Total, Storage Location, Node, Uploader Type, Age).
Helm templates — NOTES and validation
packages/system/velero/charts/velero/templates/NOTES.txt
Added checks that surface breaking messages/fail the install when removed/unsupported options are present (e.g., uploaderType: restic, repositoryMaintenanceJob old keys).
Helm templates — deployment / node-agent
packages/system/velero/charts/velero/templates/deployment.yaml, .../node-agent-daemonset.yaml
Deployment name fixed to velero; conditional revisionHistoryLimit gating tightened; hostAliases/runtimeClassName moved under nodeAgent values; added resizePolicy blocks for deployment and nodeAgent container; repo-maintenance-job-configmap flag injected when repository config present.
Helm templates — repo maintenance ConfigMap
packages/system/velero/charts/velero/templates/repo-maintenance-configmap.yaml
New template rendering a ConfigMap from configuration.repositoryMaintenanceJob.repositoryConfigData (global + per-repository JSON sections), gated by presence of config.
Helm templates — service
packages/system/velero/charts/velero/templates/service.yaml
Conditional rendering of metrics.service.ipFamilyPolicy and metrics.service.ipFamilies (supports dual-stack settings).
Helm templates — namespace labeling
packages/system/velero/charts/velero/templates/label-namespace/labelnamespace.yaml
Switched label iteration to explicit $key, $value usage in template.
Values schema updates
packages/system/velero/charts/velero/values.schema.json
Type/required adjustments: initContainers broadened, many provider/bucket fields made non-nullable, removed some config from required lists; added repositoryConfigData schema under configuration.repositoryMaintenanceJob.latestJobsCount; removed pluginVolumePath from nodeAgent required list.
Chart values adjustments
packages/system/velero/charts/velero/values.yaml
Velero image/tag updated to v1.17.0; init plugin image bumped; added resizePolicy examples; added metrics.ipFamilyPolicy/ipFamilies; repositoryMaintenanceJob repositoryConfigData examples; kubectl image repo change.
Top-level package values
packages/system/velero/values.yaml
deployNodeAgent enabled (true); removed kubectl image block.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant Helm as Helm (install/upgrade)
  participant Chart as Velero Chart
  participant K8s as Kubernetes API

  User->>Helm: helm upgrade --install
  Helm->>Chart: render templates with values
  alt repositoryConfigData present
    Chart->>K8s: create ConfigMap repo-maintenance-config
    Chart->>K8s: Deployment velero w/ --repo-maintenance-job-configmap=<name>
  else
    Note right of Chart: omit ConfigMap & flag
  end
  opt metrics.ipFamily settings
    Chart->>K8s: Service with ipFamilyPolicy/ipFamilies
  end
  opt resizePolicy provided
    Chart->>K8s: Deployment/DaemonSet include resizePolicy
  end
  Chart->>K8s: apply CRDs (updated schemas)
Loading
sequenceDiagram
  autonumber
  participant Controller as Velero Controller
  participant PVB as PodVolumeBackup CR
  participant Worker as Node Agent
  participant Store as Backup Storage

  Controller->>PVB: create/update (phase -> Accepted)
  PVB-->>Controller: status.acceptedTimestamp set
  Controller->>Worker: assign backup (status.node)
  Worker->>PVB: phase -> Prepared -> InProgress
  Worker->>PVB: update status.progress(bytesDone/totalBytes)
  alt user requests cancel
    User->>PVB: set spec.cancel = true
    Worker->>PVB: phase -> Canceling -> Canceled
  else complete
    Worker->>Store: upload data
    Worker->>PVB: phase -> Completed
  end
Loading
sequenceDiagram
  autonumber
  participant Controller as Velero Controller
  participant PVR as PodVolumeRestore CR
  participant Worker as Node Agent
  participant Store as Backup Storage

  Controller->>PVR: create/update (phase -> Accepted)
  PVR-->>Controller: status.acceptedTimestamp set
  Controller->>Worker: assign restore (status.node)
  Worker->>PVR: phase -> Prepared -> InProgress
  Worker->>Store: read data
  alt user requests cancel
    User->>PVR: set spec.cancel = true
    Worker->>PVR: phase -> Canceling -> Canceled
  else complete
    Worker->>PVR: phase -> Completed
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Suggested labels

release

Suggested reviewers

  • lllamnyp
  • klinch0

Poem

A hop, a bump—to one-one-seven-oh,
New fields sprout where CRDs grow.
ConfigMaps hum for tidy care,
Canceled jobs stop mid-air.
Dual-stack winds and resize cheer—🥕✨

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Linked Issues Check ⚠️ Warning The PR updates chart metadata, CRDs, templates, and default values but does not include changes to the velero upgrade hook job or the init container that would resolve the “exec /tmp/sh: no such file or directory” error described in issue #1442. There is no adjustment of the init container command path or image to ensure /tmp/sh exists. To resolve issue #1442, add or correct the init container’s shell path or use a proper shell image in the velero-upgrade-crds job so that the upgrade hook can execute successfully and avoid the /tmp/sh not found error.
Out of Scope Changes Check ⚠️ Warning The PR introduces extensive schema changes, new CRD fields, updated templates, values schema adjustments, and additional repository maintenance and metrics configuration features that go beyond the stated objectives of bumping Velero’s version, enabling the nodeAgent by default, and fixing the upgrade hook error from issue #1442. These modifications are unrelated to the version bump or the specific startup failure fix. Isolate the version bump, nodeAgent default activation, and upgrade job fix into a focused PR and move the additional CRD extensions, template overhauls, and schema expansions into separate, dedicated change sets.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title succinctly conveys the primary change of upgrading Velero to version 1.17.0 and is concise enough for teammates to understand the main update. Although it uses the abbreviation “Upd,” the intent remains clear and directly related to the changeset.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch velero-upd

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ed9fdd2 and 4afda63.

📒 Files selected for processing (17)
  • packages/system/velero/charts/velero/Chart.yaml (2 hunks)
  • packages/system/velero/charts/velero/README.md (1 hunks)
  • packages/system/velero/charts/velero/crds/backuprepositories.yaml (1 hunks)
  • packages/system/velero/charts/velero/crds/backups.yaml (1 hunks)
  • packages/system/velero/charts/velero/crds/datauploads.yaml (1 hunks)
  • packages/system/velero/charts/velero/crds/podvolumebackups.yaml (4 hunks)
  • packages/system/velero/charts/velero/crds/podvolumerestores.yaml (4 hunks)
  • packages/system/velero/charts/velero/crds/schedules.yaml (1 hunks)
  • packages/system/velero/charts/velero/templates/NOTES.txt (1 hunks)
  • packages/system/velero/charts/velero/templates/deployment.yaml (5 hunks)
  • packages/system/velero/charts/velero/templates/label-namespace/labelnamespace.yaml (1 hunks)
  • packages/system/velero/charts/velero/templates/node-agent-daemonset.yaml (3 hunks)
  • packages/system/velero/charts/velero/templates/repo-maintenance-configmap.yaml (1 hunks)
  • packages/system/velero/charts/velero/templates/service.yaml (1 hunks)
  • packages/system/velero/charts/velero/values.schema.json (7 hunks)
  • packages/system/velero/charts/velero/values.yaml (11 hunks)
  • packages/system/velero/values.yaml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (9)
  • packages/system/velero/charts/velero/crds/backuprepositories.yaml
  • packages/system/velero/charts/velero/crds/backups.yaml
  • packages/system/velero/charts/velero/crds/schedules.yaml
  • packages/system/velero/values.yaml
  • packages/system/velero/charts/velero/templates/service.yaml
  • packages/system/velero/charts/velero/Chart.yaml
  • packages/system/velero/charts/velero/templates/label-namespace/labelnamespace.yaml
  • packages/system/velero/charts/velero/README.md
  • packages/system/velero/charts/velero/templates/NOTES.txt
🧰 Additional context used
🪛 YAMLlint (1.37.1)
packages/system/velero/charts/velero/templates/repo-maintenance-configmap.yaml

[error] 1-1: syntax error: expected the node content, but found '-'

(syntax)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Build

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello Andrei Kvapil (@kvaps), I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request performs a significant upgrade of the Velero application and its Helm chart to version 1.17.0. The primary goal is to incorporate the latest features and improvements from Velero, including a more robust and configurable system for managing repository maintenance jobs. It also updates several Custom Resource Definitions to support new functionalities and provides various Helm chart enhancements for better deployment and operational flexibility.

Highlights

  • Velero Version Upgrade: The Velero application version has been updated from v1.16.1 to v1.17.0, and the Helm chart version has been incremented from 10.0.5 to 11.0.0.
  • Enhanced Repository Maintenance Configuration: A new, more flexible system for configuring repository maintenance jobs has been introduced. This now uses a ConfigMap-driven approach, allowing for global and per-repository resource limits, node affinity, and priority class settings, replacing the previous direct requests, limits, and latestJobsCount parameters.
  • CRD Updates for Backup and Restore: Several Custom Resource Definitions (CRDs) have been updated. Notable changes include the addition of volumeGroupSnapshotLabelKey to Backup and Schedule specs, a driver field for CSI snapshots in DataUploads, and new cancel fields, acceptedTimestamp, and expanded phase enums (e.g., Accepted, Prepared, Canceling, Canceled) for PodVolumeBackup and PodVolumeRestore resources. The resticIdentifier is also no longer a required field in BackupRepository.
  • Helm Chart and Deployment Refinements: The Helm chart includes various refinements such as updated conditional logic for revisionHistoryLimit and hostAliases, support for resizePolicy in both the main Velero deployment and the node-agent daemonset, and new checks in NOTES.txt to warn about deprecated configuration parameters. The metrics service now supports ipFamilyPolicy and ipFamilies.
  • Default Node Agent Deployment: The deployNodeAgent setting in the main values.yaml has been uncommented and set to true, indicating that the node agent will now be deployed by default.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment Gemini (@gemini-code-assist) Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on Gemini (@gemini-code-assist) comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates Velero to v1.17.0 and its Helm chart to v11.0.0, introducing several new features and breaking changes. My review focuses on the correctness and maintainability of the Helm chart updates. I've identified a critical issue where a resource name is hardcoded, which prevents multiple chart installations in the same namespace. Additionally, there are several undocumented breaking changes in the values.yaml structure that will negatively impact users upgrading their releases. I've provided suggestions to add validation checks to NOTES.txt to mitigate this. I also found a minor opportunity to improve code readability in one of the templates.

kind: Deployment
metadata:
name: {{ include "velero.fullname" . }}
name: velero

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The deployment name has been hardcoded to velero. This is a critical issue as it prevents installing multiple Velero releases in the same namespace. Each new installation will overwrite the velero deployment of the previous one, breaking existing releases. The name should be unique per release, for example by using {{ include "velero.fullname" . }}. While the pod labels and service selectors also use a hardcoded name: velero label, which is a pre-existing issue, hardcoding the deployment name makes the problem worse by causing direct resource conflicts.

  name: {{ include "velero.fullname" . }}


{{- if hasKey .Values.configuration.repositoryMaintenanceJob "latestJobsCount" }}
{{- $breaking = print $breaking "\n\nREMOVED: configuration.repositoryMaintenanceJob.latestJobsCount has been removed, please use the configmap" }}
{{- end }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Several breaking changes have been introduced to the values.yaml structure but are not validated here. This can lead to silent failures or unexpected behavior for users upgrading their release. Please add checks for the following breaking changes:

  • .Values.namespace.labels changed from a list of objects to a map of strings.
  • .Values.hostAliases for the node-agent is now under .Values.nodeAgent.hostAliases.
  • .Values.runtimeClassName for the node-agent is now under .Values.nodeAgent.runtimeClassName.

I suggest adding checks for these to fail the deployment with a clear error message.

{{- end }}

{{- if .Values.namespace.labels }}
{{- if not (kindIs "map" .Values.namespace.labels) }}
{{- $breaking = print $breaking "\n\nERROR: .Values.namespace.labels must be a map of key-value pairs. The list format is no longer supported." }}
{{- end }}
{{- end }}
{{- if and .Values.deployNodeAgent .Values.hostAliases }}
{{- $breaking = print $breaking "\n\nREMOVED: .Values.hostAliases for node-agent has been moved to .Values.nodeAgent.hostAliases" }}
{{- end }}
{{- if and .Values.deployNodeAgent .Values.runtimeClassName }}
{{- $breaking = print $breaking "\n\nREMOVED: .Values.runtimeClassName for node-agent has been moved to .Values.nodeAgent.runtimeClassName" }}
{{- end }}

Comment on lines +183 to 186
{{- if and .repositoryConfigData (or .repositoryConfigData.global .repositoryConfigData.repositories) }}
- --repo-maintenance-job-configmap={{ default "velero-repo-maintenance" .repositoryConfigData.name }}
{{- else }}
{{- end }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The {{- else }} block is empty. For better readability and conciseness, you can remove the empty else block.

            {{- if and .repositoryConfigData (or .repositoryConfigData.global .repositoryConfigData.repositories) }}
            - --repo-maintenance-job-configmap={{ default "velero-repo-maintenance" .repositoryConfigData.name }}
            {{- end }}

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 945887f and ed9fdd2.

📒 Files selected for processing (17)
  • packages/system/velero/charts/velero/Chart.yaml (2 hunks)
  • packages/system/velero/charts/velero/README.md (1 hunks)
  • packages/system/velero/charts/velero/crds/backuprepositories.yaml (1 hunks)
  • packages/system/velero/charts/velero/crds/backups.yaml (1 hunks)
  • packages/system/velero/charts/velero/crds/datauploads.yaml (1 hunks)
  • packages/system/velero/charts/velero/crds/podvolumebackups.yaml (4 hunks)
  • packages/system/velero/charts/velero/crds/podvolumerestores.yaml (4 hunks)
  • packages/system/velero/charts/velero/crds/schedules.yaml (1 hunks)
  • packages/system/velero/charts/velero/templates/NOTES.txt (1 hunks)
  • packages/system/velero/charts/velero/templates/deployment.yaml (5 hunks)
  • packages/system/velero/charts/velero/templates/label-namespace/labelnamespace.yaml (1 hunks)
  • packages/system/velero/charts/velero/templates/node-agent-daemonset.yaml (3 hunks)
  • packages/system/velero/charts/velero/templates/repo-maintenance-configmap.yaml (1 hunks)
  • packages/system/velero/charts/velero/templates/service.yaml (1 hunks)
  • packages/system/velero/charts/velero/values.schema.json (7 hunks)
  • packages/system/velero/charts/velero/values.yaml (11 hunks)
  • packages/system/velero/values.yaml (1 hunks)
🧰 Additional context used
🪛 YAMLlint (1.37.1)
packages/system/velero/charts/velero/templates/repo-maintenance-configmap.yaml

[error] 1-1: syntax error: expected the node content, but found '-'

(syntax)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Build
🔇 Additional comments (1)
packages/system/velero/charts/velero/templates/label-namespace/labelnamespace.yaml (1)

34-35: Key/value binding fix looks good

The explicit $key/$value binding keeps the template robust across Helm versions; no issues spotted.

Comment thread packages/system/velero/charts/velero/README.md
kind: Deployment
metadata:
name: {{ include "velero.fullname" . }}
name: velero

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Revert to templated Deployment name

Hard-coding metadata.name to velero breaks existing releases that rely on fullnameOverride/nameOverride and prevents installing two releases in the same namespace. Helm will treat this as a resource rename during upgrade, delete the old Deployment, and create a new one, causing downtime and leaving other resources (e.g., RBAC) under the old name. Please restore the templated name (e.g., {{ include "velero.fullname" . }}) to preserve backward compatibility.

🤖 Prompt for AI Agents
In packages/system/velero/charts/velero/templates/deployment.yaml around line 6,
metadata.name is hard-coded to "velero" which breaks
fullnameOverride/nameOverride and prevents multiple releases; change it back to
use the chart fullname template (e.g., replace the hard-coded name with the
template include that returns the chart's full name) so Helm honors
fullnameOverride/nameOverride and avoids resource renames during upgrades.

Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
@kvaps
Andrei Kvapil (kvaps) merged commit 00199a7 into main Oct 6, 2025
19 of 20 checks passed
@kvaps
Andrei Kvapil (kvaps) deleted the velero-upd branch October 6, 2025 19:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] After updating CozyStack to the latest version (0.36.1), velero does not start

1 participant