Files
velero/design/Implemented/supporting-volumeattributes-resource-policy.md
Mayank Aggarwal 074f26539d
Some checks failed
Run the E2E test on kind / build (push) Failing after 10m15s
Run the E2E test on kind / setup-test-matrix (push) Successful in 1m15s
Run the E2E test on kind / run-e2e-test (push) Has been skipped
Main CI / Build (push) Failing after 4m47s
Close stale issues and PRs / stale (push) Failing after 11m58s
Trivy Nightly Scan / Trivy nightly scan (velero, main) (push) Failing after 11m40s
Trivy Nightly Scan / Trivy nightly scan (velero-restore-helper, main) (push) Failing after 14m53s
Adding Support For VolumeAttributes in Resource Policy (#8383)
* Adding VolumeAttributes validations in resource policy

Signed-off-by: mayaggar <mayaggar@microsoft.com>

* adding tests

Signed-off-by: mayaggar <mayaggar@microsoft.com>

* adding tests

Signed-off-by: mayaggar <mayaggar@microsoft.com>

* adding tests

Signed-off-by: mayaggar <mayaggar@microsoft.com>

* added changelog

Signed-off-by: mayaggar <mayaggar@microsoft.com>

* changelog

Signed-off-by: mayaggar <mayaggar@microsoft.com>

* design spec

Signed-off-by: mayaggar <mayaggar@microsoft.com>

* lint fixes

Signed-off-by: mayaggar <mayaggar@microsoft.com>

* doc update

Signed-off-by: mayaggar <mayaggar@microsoft.com>

* doc update

Signed-off-by: mayaggar <mayaggar@microsoft.com>

* Update internal/resourcepolicies/volume_resources_validator.go

Co-authored-by: Tiger Kaovilai <passawit.kaovilai@gmail.com>
Signed-off-by: Mayank Aggarwal <mayankagg9722@gmail.com>

* doc name update

Signed-off-by: mayaggar <mayaggar@microsoft.com>

---------

Signed-off-by: mayaggar <mayaggar@microsoft.com>
Signed-off-by: Mayank Aggarwal <mayankagg9722@gmail.com>
Co-authored-by: Tiger Kaovilai <passawit.kaovilai@gmail.com>
2024-11-28 10:17:07 +05:30

4.0 KiB

Adding Support For VolumeAttributes in Resource Policy

Abstract

Currently Velero Resource policies are only supporting "Driver" to be filtered for CSI volume conditions

If user want to skip certain CSI volumes based on other volume attributes like protocol or SKU, etc, they can't do it with the current Velero resource policies. It would be convenient if Velero resource policies could be extended to filter on volume attributes along with existing driver filter in the resource policies conditions to handle the backup of volumes just by some specific volumes attributes conditions.

Background

As of Today, Velero resource policy already provides us the way to filter volumes based on the driver name. But it's not enough to handle the volumes based on other volume attributes like protocol, SKU, etc.

Example:

  • Provision Azure NFS: Define the Storage class with protocol: nfs under storage class parameters to provision CSI NFS Azure File Shares.
  • User wants to back up AFS (Azure file shares) but only want to backup SMB type of file share volumes and not NFS file share volumes.

Goals

  • We are only bringing additional support in the resource policy to only handle volumes during backup.
  • Introducing support for VolumeAttributes filter along with driver filter in CSI volume conditions to handle volumes.

Non-Goals

  • Currently, only handles volumes, and does not support other resources.

Use-cases/Scenarios

Skip backup volumes by some volume attributes:

Users want to skip PV with the requirements:

  • option to skip specified PV on volume attributes type (like Protocol as NFS, SMB, etc)

Sample Storage Class Used to create such Volumes

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi-nfs
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  protocol: nfs 

High-Level Design

Modifying the existing Resource Policies code for csiVolumeSource to add the new VolumeAttributes filter for CSI volumes and adding validations in existing csiCondition to match with volume attributes in the conditions from Resource Policy config map and original persistent volume.

Detailed Design

The volume resources policies should contain a list of policies which is the combination of conditions and related action, when target volumes meet the conditions, the related action will take effection.

Below is the API Design for the user configuration:

API Design

type csiVolumeSource struct {
	Driver string `yaml:"driver,omitempty"`
	// [NEW] CSI volume attributes
	VolumeAttributes map[string]string `yaml:"volumeAttributes,omitempty"`
}

The policies YAML config file would look like this:

version: v1
volumePolicies:
  - conditions:
      csi:
        driver: disk.csi.azure.com
    action:
      type: skip
  - conditions:
      csi:
        driver: file.csi.azure.com
        volumeAttributes:
          protocol: nfs
    action:
      type: skip`

New Supported Conditions

VolumeAttributes

Existing CSI Volume Condition can now add volumeAttributes which will be key and value pairs.

Specify details for the related volume source (currently only csi driver is supported filter) yaml csi: // match volume using `file.csi.azure.com` and with volumeAttributes protocol as nfs driver: file.csi.azure.com volumeAttributes: protocol: nfs