We are pleased to announce the release of KubeStash v2025.6.30 , packed with new features. You can check out the full changelog HERE .
New Features
We’re excited to introduce some new features in this release. Some features can be enabled during the installation or upgrade of KubeStash & some will comes default, we’ll discuss each of this feature below.
Enhanced Filtering in Backup Task
The manifest-backup task in the kubedump-addon now supports fine-grained filtering, providing precise control over which Kubernetes resources are included in a backup.
This feature helps you optimize storage usage, reduce restore noise, and back up only the components that matter most to your application.
Newly Introduced Parameters
- ANDedLabelSelectors
Usage: A set of labels, all of which need to be matched
to filter the resources.
Default: ""
Required: false
Example: "app:my-app,tier:frontend"
- ORedLabelSelectors
Usage: A set of labels, at least one of which need to
be matched to filter the resources.
Default: ""
Required: false
Example: "app:nginx,app:redis"
- IncludeClusterResources
Usage: Specify whether to restore
cluster scoped resources.
Default: "false"
Required: false
Example: "true"
- IncludeNamespaces
Usage: Namespaces to include in backup.
Default: "*"
Required: false
Example: "demo,kubedb,kubestash"
- ExcludeNamespaces
Usage: Namespaces to exclude from backup.
Default: ""
Required: false
Example: "default,kube-system"
- IncludeResources
Usage: Resource types to include in backup.
Default: "*"
Required: false
Example: "secrets,configmaps,deployments"
- ExcludeResources
Usage: Resource types to exclude from backup
Default: ""
Required: false
Example: "persistentvolumeclaims,persistentvolumes"
Example BackupConfiguration:
apiVersion: core.kubestash.com/v1alpha1
kind: BackupConfiguration
---
addon:
name: kubedump-addon
tasks:
- name: manifest-backup
params:
IncludeNamespaces: "demo,kubedb,kubestash"
IncludeResources: "secrets,configmaps,deployments"
ORedLabelSelectors: "environment:prod,tier:db"
jobTemplate:
spec:
serviceAccountName: cluster-resource-reader-writter
Introducing KubeDump manifest-restore
We’re excited to introduce the manifest-restore feature in the kubedump-addon, which brings full manifest-based restore support to KubeStash.
Why manifest-restore?
Disaster can strike at any time — whether due to accidental deletion or infrastructure failure. The new manifest-restore task can bring your Kubernetes cluster back to its previous state, using the manifests captured in the backup snapshots.
Restore Task
The newly introduced manifest-restore task in the kubedump-addon brings powerful restore capabilities to KubeStash. It allows you to restore previously backed-up Kubernetes manifests and apply them with fine-grained control over which resources to restore.
This feature is especially valuable in disaster recovery scenarios, where restoring cluster state accurately and efficiently is critical.
Supported Parameters
- ANDedLabelSelectors
Usage: A set of labels, all of which need to be matched
to filter the resources.
Default: ""
Required: false
Example: "app:my-app,tier:frontend"
- ORedLabelSelectors
Usage: A set of labels, at least one of which need to
be matched to filter the resources.
Default: ""
Required: false
Example: "app:nginx,app:redis"
- IncludeClusterResources
Usage: Specify whether to restore
cluster scoped resources.
Default: "false"
Required: false
Example: "true"
- IncludeNamespaces
Usage: Namespaces to include in backup.
Default: "*"
Required: false
Example: "demo,kubedb,kubestash"
- ExcludeNamespaces
Usage: Namespaces to exclude from backup.
Default: ""
Required: false
Example: "default,kube-system"
- IncludeResources
Usage: Resource types to include in backup.
Default: "*"
Required: false
Example: "secrets,configmaps,deployments"
- ExcludeResources
Usage: Resource types to exclude from backup
Default: ""
Required: false
Example: "persistentvolumeclaims,persistentvolumes"
- OverrideResources
Usage: Specify whether to override resources while restoring
Default: "false"
Required: false
Example: "false"
- RestorePVs
Usage: Specify whether to restore PersistentVolumes
Default: "false"
Required: false
Example: "true"
- StorageClassMappings
Usage: Mapping of old to new storage classes
Default: ""
Required: false
Example: "gp2=ebs-sc,standard=fast-storage"
Example RestoreSession:
apiVersion: core.kubestash.com/v1alpha1
kind: RestoreSession
---
addon:
name: kubedump-addon
tasks:
- name: manifest-restore
params:
IncludeNamespaces: "*"
ExcludeNamespaces: "kube-system,default"
RestorePVs: "true"
StorageClassMappings: "longhorn=openebs-hostpath"
jobTemplate:
spec:
serviceAccountName: cluster-resource-reader-writter
Introducing TaskQueue in KubeStash
We’re excited to introduce another new feature in this release: TaskQueue.
This feature can be enabled during the installation or upgrade of KubeStash.
What is TaskQueue?
TaskQueue acts as a centralized controller that manages the execution of BackupSessions based on a defined maximum concurrency limit. It queues incoming BackupSessions and ensures they are processed in order—either one at a time or concurrently up to the specified limit.
Why is TaskQueue Important?
In environments where multiple BackupConfigurations share the same schedule, all corresponding BackupSessions may be triggered simultaneously. Without TaskQueue, this can overwhelm the system, leading to resource contention and backup failures.
By enforcing a controlled execution flow, TaskQueue ensures:
- The number of active
BackupSessionsnever exceeds the defined concurrency limit. BackupSessionsare processed in order—queued and executed one after another or concurrently, as allowed.- Prevents simultaneous creation of backup jobs, reducing resource spikes.
- Efficient utilization of cluster resources based on the concurrency limit.
- Spreads backup execution over time, optimizing overall cluster resource usage.
- Increases reliability by minimizing failures caused by resource exhaustion.
How to Enable TaskQueue?
You can enable TaskQueue during installation or upgrade of KubeStash using the following Helm flags:
Example:
helm upgrade kubestash oci://ghcr.io/appscode-charts/kubestash
--version v2025.6.30 \
--namespace stash --create-namespace \
--set features.enterprise=true \
--set global.taskQueue.enabled=true \
--set global.taskQueue.maxConcurrentSessions=<max_concurrent_sessions> \
--set-file global.license=/path/to/the/license.txt \
--wait --burst-limit=10000 --debug
Here,
global.taskQueue.enabledis set totrueto enable theTaskQueuefeature.global.taskQueue.maxConcurrentSessionsis set to define the maximum number of concurrentBackupSessionsthat can be executed at a time.
How KubeStash Utilizes TaskQueue
Once enabled, KubeStash uses a dedicated controller called the TaskQueueController.
It works as follows:
- Instead of triggering
BackupSessionsdirectly, theKubeStashoperator creates a resource calledPendingTaskfor eachBackupSession. - Each PendingTask contains the actual
BackupSessionand is monitored by theTaskQueueController. - The
TaskQueueControllerprocesses thesePendingTaskresources based on the defined maximum concurrency limit.
Example of TaskQueue YAML
apiVersion: batch.k8s.appscode.com/v1alpha1
kind: TaskQueue
metadata:
name: appscode-kubestash-task-queue
spec:
maxConcurrentTasks: 10
tasks:
- rules:
failed: has(self.status.phase) && self.status.phase == 'Failed'
inProgress: has(self.status.phase) && self.status.phase == 'Running'
success: has(self.status.phase) && self.status.phase == 'Succeeded'
type:
group: core.kubestash.appscode.com
kind: BackupSession
Here,
maxConcurrentTasksis set to10, meaning a maximum of 10BackupSessionscan be executed concurrently.- If you need to reconfigure the
TaskQueueafter enabling it, you can modify themaxConcurrentTasksvalue according to your cluster’s capacity.
Example of PendingTask YAML
apiVersion: batch.k8s.appscode.com/v1alpha1
kind: PendingTask
metadata:
name: backupconfiguration-demo-s3-pvc-backup
spec:
resource:
metadata:
name: s3-pvc-backup-2-1751630401
namespace: demo
ownerReferences:
- apiVersion: core.kubestash.appscode.com/v1alpha1
blockOwnerDeletion: true
controller: true
kind: BackupConfiguration
name: s3-pvc-backup-2
uid: c00376b7-1baf-4b7a-98df-c55f848e936c
spec:
invoker:
apiGroup: core.kubestash.appscode.com
kind: BackupConfiguration
name: s3-pvc-backup
status: {}
taskType:
group: core.kubestash.appscode.com
kind: BackupSession
status:
taskQueueName: appscode-kubestash-task-queue
What Next?
Please try the latest release and give us your valuable feedback.
- If you want to install KubeStash in a clean cluster, please follow the installation instruction from HERE .
- If you want to upgrade KubeStash from a previous version, please follow the upgrade instruction from HERE .
Support
To speak with us, please leave a message on our website .
