Repository: apecloud/kubeblocks

Issue:
[BUG] cluster convert to v1 error: no matched componentDefinition for componentDef
**Describe the bug**
```
kbcli version
Kubernetes: v1.28.15-vke.18
KubeBlocks: 1.0.0-beta.32,0.9.3
kbcli: 1.0.0-beta.15
```

**To Reproduce**
Steps to reproduce the behavior:
1. install KB 0.9.3
```
kbcli kubeblocks install --create-namespace --version v0.9.3 --namespace kb-system
```
2. create cluster
```
kubectl get cluster 
NAME               CLUSTER-DEFINITION   TERMINATION-POLICY   STATUS    AGE
asm-upkb910                             WipeOut              Running   177m
chouse-upkb910     clickhouse           WipeOut              Running   32m
kafka-upkb910      kafka                WipeOut              Running   38m
mongo-upkb910                           WipeOut              Running   170m
mysql-upkb910                           WipeOut              Running   172m
postgres-upkb910                        WipeOut              Running   172m
qdrant-upkb910     qdrant               WipeOut              Running   33m
redis-upkb910                           WipeOut              Running   171m
zkeeper-upkb910                         WipeOut              Running   31m

``` 
3. installer KB 1.0
```
echo "yes" | kbcli kubeblocks install --namespace kb-system-new --create-namespace --set webhooks.conversionEnabled=true --version 1.0.0-beta.32 
```
4. cluster convert to v1
5. see error
```
kbcli cluster convert-to-v1 asm-upkb910
error: no matched componentDefinition for componentDef mysql-8.0
```
```
kbcli cluster convert-to-v1 chouse-upkb910
error: no matched componentDefinition for componentDef clickhouse-24
```
```
kbcli cluster convert-to-v1 kafka-upkb910
error: no matched componentDefinition for componentDef kafka-combine
```
```
kbcli cluster convert-to-v1 mongo-upkb910
error: no matched componentDefinition for componentDef mongodb
```
```
kbcli cluster convert-to-v1 mysql-upkb910
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐    ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│apiVersion: apps.kubeblocks.io/v1alpha1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       │    │apiVersion: apps.kubeblocks.io/v1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             │
│kind: Cluster                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 │    │kind: Cluster                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 │
│metadata:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     │    │metadata:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     │
│  annotations:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                │    │  annotations:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                │
│    kubectl.kubernetes.io/last-applied-configuration: |                                                                                                                                                                                                                                                                                                                                                                                                                                                                       │    │    kubeblocks.io/crd-api-version: apps.kubeblocks.io/v1                                                                                                                                                                                                                                                                                                                                                                                                                                                                      │
│      {"apiVersion":"apps.kubeblocks.io/v1alpha1","kind":"Cluster","metadata":{"annotations":{},"name":"mysql-upkb910","namespace":"default"},"spec":{"componentSpecs":[{"componentDef":"apecloud-mysql","name":"mysql","replicas":3,"resources":{"limits":{"cpu":"100m","memory":"0.5Gi"},"requests":{"cpu":"100m","memory":"0.5Gi"}},"volumeClaimTemplates":[{"name":"data","spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"20Gi"}},"storageClassName":null}}]}],"terminationPolicy":"WipeOut"}}│    │    kubectl.kubernetes.io/last-applied-configuration: |                                                                                                                                                                                                                                                                                                                                                                                                                                                                       │
│  creationTimestamp: "2025-03-11T03:10:13Z"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   │    │      {"apiVersion":"apps.kubeblocks.io/v1alpha1","kind":"Cluster","metadata":{"annotations":{},"name":"mysql-upkb910","namespace":"default"},"spec":{"componentSpecs":[{"componentDef":"apecloud-mysql","name":"mysql","replicas":3,"resources":{"limits":{"cpu":"100m","memory":"0.5Gi"},"requests":{"cpu":"100m","memory":"0.5Gi"}},"volumeClaimTemplates":[{"name":"data","spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"20Gi"}},"storageClassName":null}}]}],"terminationPolicy":"WipeOut"}}│
│  finalizers:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 │    │  creationTimestamp: "2025-03-11T03:10:13Z"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   │
│  - cluster.kubeblocks.io/finalizer                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           │    │  finalizers:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 │
│  generation: 4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               │    │  - cluster.kubeblocks.io/finalizer                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           │
│  name: mysql-upkb910                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         │    │  generation: 4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               │
│  namespace: default                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │    │  name: mysql-upkb910                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         │
│  resourceVersion: "74139108"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 │    │  namespace: default                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │
│  uid: 83c70b8e-912c-4798-84a1-473c12c95c16                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   │    │  resourceVersion: "74139108"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 │
│spec:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         │    │  uid: 83c70b8e-912c-4798-84a1-473c12c95c16                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   │
│  componentSpecs:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             │    │spec:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         │
│  - componentDef: apecloud-mysql                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              │    │  componentSpecs:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             │
│    name: mysql                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               │    │  - componentDef: <yourComponentDef>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │
│    replicas: 3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               │    │    name: mysql                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               │
│    resources:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                │    │    replicas: 3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               │
│      limits:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 │    │    resources:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                │
│        cpu: 100m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             │    │      limits:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 │
│        memory: 512Mi                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         │    │        cpu: 100m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             │
│      requests:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               │    │        memory: 512Mi                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         │
│        cpu: 100m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             │    │      requests:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               │
│        memory: 512Mi                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         │    │        cpu: 100m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             │
│    serviceVersion: 8.0.30                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    │    │        memory: 512Mi                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         │
│    volumeClaimTemplates:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     │    │    serviceVersion: 8.0.30                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    │
│    - name: data                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              │    │    volumeClaimTemplates:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     │
│      spec:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   │    │    - name: data                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              │
│        accessModes:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │    │      spec:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   │
│        - ReadWriteOnce                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       │    │        accessModes:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │
│        resources:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            │    │        - ReadWriteOnce                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       │
│          requests:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           │    │        resources:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            │
│            storage: 20Gi                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     │    │          requests:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           │
│  resources:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  │    │            storage: 20Gi                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     │
│    cpu: "0"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  │    │  terminationPolicy: WipeOut                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  │
│    memory: "0"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               │    │status: {}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    │
│  storage:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    │    │                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              │
│    size: "0"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 │    └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
│  terminationPolicy: WipeOut                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  │
│status: {}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    │
│                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
error: cluster "mysql-upkb910" has unknown clusterVersion or componentDefinition, you can replace with accorrding ComponentDefinition with 1.0 api
```
```
kbcli cluster convert-to-v1 postgres-upkb910
error: no matched componentDefinition for componentDef postgresql-16
```
```
kbcli cluster convert-to-v1 qdrant-upkb910
error: no matched componentDefinition for componentDef qdrant
```
```
kbcli cluster convert-to-v1 redis-upkb910
error: no matched componentDefinition for componentDef redis-7
```

kbcli cluster convert-to-v1 zkeeper-upkb910
error: no matched componentDefinition for componentDef zookeeper
```

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Desktop (please complete the following information):**
 - OS: [e.g. iOS]
 - Browser [e.g. chrome, safari]
 - Version [e.g. 22]

**Additional context**
Add any other context about the problem here.


Hints from issue comments:

Solution patch:
diff --git a/apis/apps/v1alpha1/cluster_types.go b/apis/apps/v1alpha1/cluster_types.go
index 988d5f468..07e12259b 100644
--- a/apis/apps/v1alpha1/cluster_types.go
+++ b/apis/apps/v1alpha1/cluster_types.go
@@ -301,6 +301,11 @@ type ClusterBackup struct {
 	// +optional
 	PITREnabled *bool `json:"pitrEnabled,omitempty"`
 
+	// Specifies the backup method to use, if not set, use the first continuous method.
+	//
+	// +optional
+	ContinuousMethod string `json:"continuousMethod,omitempty"`
+
 	// Specifies whether to enable incremental backup.
 	//
 	// +kubebuilder:default=false
diff --git a/apis/apps/v1alpha1/component_conversion.go b/apis/apps/v1alpha1/component_conversion.go
index 4cd245451..942ad3ccc 100644
--- a/apis/apps/v1alpha1/component_conversion.go
+++ b/apis/apps/v1alpha1/component_conversion.go
@@ -28,6 +28,8 @@ import (
 	appsv1 "github.com/apecloud/kubeblocks/apis/apps/v1"
 )
 
+const clusterUIDKey = "apps.kubeblocks.io/cluster-uid"
+
 // ConvertTo converts this Component to the Hub version (v1).
 func (r *Component) ConvertTo(dstRaw conversion.Hub) error {
 	dst := dstRaw.(*appsv1.Component)
@@ -78,7 +80,14 @@ func (r *Component) incrementConvertTo(dstRaw metav1.Object) (incrementChange, e
 	// changed
 	comp := dstRaw.(*appsv1.Component)
 	comp.Status.Message = r.Status.Message
-
+	if _, ok := r.Annotations[clusterUIDKey]; !ok {
+		if clusterUID, exist := r.Labels[clusterUIDKey]; exist {
+			if r.Annotations == nil {
+				r.Annotations = make(map[string]string)
+			}
+			r.Annotations[clusterUIDKey] = clusterUID
+		}
+	}
 	// deleted
 	return &componentConverter{
 		EnabledLogs:            r.Spec.EnabledLogs,
diff --git a/apis/workloads/v1alpha1/instanceset_conversion.go b/apis/workloads/v1alpha1/instanceset_conversion.go
index 091be8230..6fb6f93e0 100644
--- a/apis/workloads/v1alpha1/instanceset_conversion.go
+++ b/apis/workloads/v1alpha1/instanceset_conversion.go
@@ -176,6 +176,23 @@ func (r *InstanceSet) changesToInstanceSet(its *workloadsv1.InstanceSet) {
 			its.Spec.InstanceUpdateStrategy.RollingUpdate.MaxUnavailable = r.Spec.UpdateStrategy.MaxUnavailable
 		}
 	}
+
+	if len(r.Spec.Roles) > 0 {
+		its.Spec.Roles = make([]workloadsv1.ReplicaRole, len(r.Spec.Roles))
+		highestUpdatePriority := len(r.Spec.Roles)
+		for i, v1alphaRole := range r.Spec.Roles {
+			role := &its.Spec.Roles[i]
+			role.Name = v1alphaRole.Name
+			switch v1alphaRole.AccessMode {
+			case ReadWriteMode:
+				role.UpdatePriority = highestUpdatePriority
+			case ReadonlyMode:
+				role.UpdatePriority = highestUpdatePriority - 1
+			case NoneMode:
+				role.UpdatePriority = 0
+			}
+		}
+	}
 }
 
 func (r *InstanceSet) changesFromInstanceSet(its *workloadsv1.InstanceSet) {
@@ -185,17 +202,17 @@ func (r *InstanceSet) changesFromInstanceSet(its *workloadsv1.InstanceSet) {
 	//   updateStrategy.maxUnavailable -> instanceUpdateStrategy.rollingUpdate.maxUnavailable
 	//   updateStrategy.memberUpdateStrategy -> memberUpdateStrategy
 	r.Spec.MemberUpdateStrategy = (*MemberUpdateStrategy)(its.Spec.MemberUpdateStrategy)
+	if r.Spec.UpdateStrategy == nil {
+		r.Spec.UpdateStrategy = &InstanceUpdateStrategy{
+			MemberUpdateStrategy: r.Spec.MemberUpdateStrategy,
+		}
+	}
 	if its.Spec.InstanceUpdateStrategy == nil {
 		return
 	}
 	if its.Spec.InstanceUpdateStrategy.RollingUpdate == nil {
 		return
 	}
-	if r.Spec.UpdateStrategy == nil {
-		r.Spec.UpdateStrategy = &InstanceUpdateStrategy{
-			MemberUpdateStrategy: r.Spec.MemberUpdateStrategy,
-		}
-	}
 	if its.Spec.InstanceUpdateStrategy.RollingUpdate.Replicas != nil {
 		partition, _ := intstr.GetScaledValueFromIntOrPercent(its.Spec.InstanceUpdateStrategy.RollingUpdate.Replicas, int(*its.Spec.Replicas), false)
 		r.Spec.UpdateStrategy.Partition = pointer.Int32(int32(partition))
diff --git a/config/crd/bases/apps.kubeblocks.io_clusters.yaml b/config/crd/bases/apps.kubeblocks.io_clusters.yaml
index 206a2513d..fdcdf44f2 100644
--- a/config/crd/bases/apps.kubeblocks.io_clusters.yaml
+++ b/config/crd/bases/apps.kubeblocks.io_clusters.yaml
@@ -13394,6 +13394,10 @@ spec:
               backup:
                 description: Specifies the backup configuration of the Cluster.
                 properties:
+                  continuousMethod:
+                    description: Specifies the backup method to use, if not set, use
+                      the first continuous method.
+                    type: string
                   cronExpression:
                     description: The cron expression for the schedule. The timezone
                       is in UTC. See https://en.wikipedia.org/wiki/Cron.
diff --git a/controllers/apps/component/transformer_component_workload.go b/controllers/apps/component/transformer_component_workload.go
index 596c98638..6d4c8b0a0 100644
--- a/controllers/apps/component/transformer_component_workload.go
+++ b/controllers/apps/component/transformer_component_workload.go
@@ -409,6 +409,7 @@ func copyAndMergeITS(oldITS, newITS *workloads.InstanceSet) *workloads.InstanceS
 	itsObjCopy.Spec.MemberUpdateStrategy = itsProto.Spec.MemberUpdateStrategy
 	itsObjCopy.Spec.Paused = itsProto.Spec.Paused
 	itsObjCopy.Spec.Configs = itsProto.Spec.Configs
+	itsObjCopy.Spec.Selector = itsProto.Spec.Selector
 
 	if itsObjCopy.Spec.InstanceUpdateStrategy != nil && itsObjCopy.Spec.InstanceUpdateStrategy.RollingUpdate != nil {
 		// use oldITS because itsObjCopy has been overwritten
diff --git a/controllers/parameters/componentdrivenparameter_controller.go b/controllers/parameters/componentdrivenparameter_controller.go
index b956a2f05..ceec5e11b 100644
--- a/controllers/parameters/componentdrivenparameter_controller.go
+++ b/controllers/parameters/componentdrivenparameter_controller.go
@@ -81,6 +81,9 @@ func (r *ComponentDrivenParameterReconciler) Reconcile(ctx context.Context, req
 	if err := r.Client.Get(reqCtx.Ctx, reqCtx.Req.NamespacedName, comp); err != nil {
 		return intctrlutil.CheckedRequeueWithError(err, reqCtx.Log, "")
 	}
+	if !intctrlutil.ObjectAPIVersionSupported(comp) {
+		return intctrlutil.Reconciled()
+	}
 	return r.reconcile(reqCtx, comp)
 }
 
diff --git a/deploy/helm/crds/apps.kubeblocks.io_clusters.yaml b/deploy/helm/crds/apps.kubeblocks.io_clusters.yaml
index 206a2513d..fdcdf44f2 100644
--- a/deploy/helm/crds/apps.kubeblocks.io_clusters.yaml
+++ b/deploy/helm/crds/apps.kubeblocks.io_clusters.yaml
@@ -13394,6 +13394,10 @@ spec:
               backup:
                 description: Specifies the backup configuration of the Cluster.
                 properties:
+                  continuousMethod:
+                    description: Specifies the backup method to use, if not set, use
+                      the first continuous method.
+                    type: string
                   cronExpression:
                     description: The cron expression for the schedule. The timezone
                       is in UTC. See https://en.wikipedia.org/wiki/Cron.
diff --git a/deploy/helm/templates/rbac/apps_cluster_editor_role.yaml b/deploy/helm/templates/rbac/apps_cluster_editor_role.yaml
index 8268f8dab..602cacc8a 100644
--- a/deploy/helm/templates/rbac/apps_cluster_editor_role.yaml
+++ b/deploy/helm/templates/rbac/apps_cluster_editor_role.yaml
@@ -24,3 +24,5 @@ rules:
   - clusters/status
   verbs:
   - get
+  - patch
+  - update
\ No newline at end of file
diff --git a/deploy/helm/templates/rbac/apps_clusterdefinition_editor_role.yaml b/deploy/helm/templates/rbac/apps_clusterdefinition_editor_role.yaml
index 413b4bfd9..e15dd5258 100644
--- a/deploy/helm/templates/rbac/apps_clusterdefinition_editor_role.yaml
+++ b/deploy/helm/templates/rbac/apps_clusterdefinition_editor_role.yaml
@@ -24,3 +24,5 @@ rules:
   - clusterdefinitions/status
   verbs:
   - get
+  - patch
+  - update
\ No newline at end of file
diff --git a/deploy/helm/templates/rbac/apps_configconstraint_editor_role.yaml b/deploy/helm/templates/rbac/apps_configconstraint_editor_role.yaml
index f26c7e0af..da19b7523 100644
--- a/deploy/helm/templates/rbac/apps_configconstraint_editor_role.yaml
+++ b/deploy/helm/templates/rbac/apps_configconstraint_editor_role.yaml
@@ -24,3 +24,5 @@ rules:
   - configconstraints/status
   verbs:
   - get
+  - patch
+  - update
\ No newline at end of file
diff --git a/deploy/helm/templates/rbac/apps_sidecardefinition_editor_role.yaml b/deploy/helm/templates/rbac/apps_sidecardefinition_editor_role.yaml
index 7018820c0..c306a7101 100644
--- a/deploy/helm/templates/rbac/apps_sidecardefinition_editor_role.yaml
+++ b/deploy/helm/templates/rbac/apps_sidecardefinition_editor_role.yaml
@@ -24,3 +24,5 @@ rules:
   - sidecardefinitions/status
   verbs:
   - get
+  - patch
+  - update
\ No newline at end of file
diff --git a/deploy/helm/templates/rbac/clusterrole.yaml b/deploy/helm/templates/rbac/clusterrole.yaml
index ac46cf7ce..c0e4656ed 100644
--- a/deploy/helm/templates/rbac/clusterrole.yaml
+++ b/deploy/helm/templates/rbac/clusterrole.yaml
@@ -90,4 +90,23 @@ rules:
       - deployments/status
     verbs:
       - get
+  - apiGroups:
+      - rbac.authorization.k8s.io
+    resources:
+      - roles
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+  - apiGroups:
+      - rbac.authorization.k8s.io
+    resources:
+      - roles/status
+    verbs:
+      - get
+      - patch
+      - update
 {{- end }}
diff --git a/deploy/helm/templates/rbac/operations_opsdefinition_role.yaml b/deploy/helm/templates/rbac/operations_opsdefinition_role.yaml
index e10e29b1b..5be9b09b9 100644
--- a/deploy/helm/templates/rbac/operations_opsdefinition_role.yaml
+++ b/deploy/helm/templates/rbac/operations_opsdefinition_role.yaml
@@ -24,3 +24,5 @@ rules:
   - opsdefinitions/status
   verbs:
   - get
+  - patch
+  - update
diff --git a/deploy/helm/templates/rbac/operations_opsrequest_role.yaml b/deploy/helm/templates/rbac/operations_opsrequest_role.yaml
index d477fde00..8dbb9a999 100644
--- a/deploy/helm/templates/rbac/operations_opsrequest_role.yaml
+++ b/deploy/helm/templates/rbac/operations_opsrequest_role.yaml
@@ -24,3 +24,5 @@ rules:
   - opsrequests/status
   verbs:
   - get
+  - patch
+  - update
\ No newline at end of file
diff --git a/deploy/helm/templates/rbac/parameters_componentparameter_role.yaml b/deploy/helm/templates/rbac/parameters_componentparameter_role.yaml
index 5bdc08bef..b40f6b5ed 100644
--- a/deploy/helm/templates/rbac/parameters_componentparameter_role.yaml
+++ b/deploy/helm/templates/rbac/parameters_componentparameter_role.yaml
@@ -24,3 +24,5 @@ rules:
   - componentparameters/status
   verbs:
   - get
+  - patch
+  - update
\ No newline at end of file
diff --git a/deploy/helm/templates/rbac/parameters_paramconfigrenderer_role.yaml b/deploy/helm/templates/rbac/parameters_paramconfigrenderer_role.yaml
index 617305eba..19c0de0bd 100644
--- a/deploy/helm/templates/rbac/parameters_paramconfigrenderer_role.yaml
+++ b/deploy/helm/templates/rbac/parameters_paramconfigrenderer_role.yaml
@@ -24,3 +24,5 @@ rules:
   - paramconfigrenderers/status
   verbs:
   - get
+  - patch
+  - update
\ No newline at end of file
diff --git a/deploy/helm/templates/rbac/parameters_parameter_role.yaml b/deploy/helm/templates/rbac/parameters_parameter_role.yaml
index 4a5f91b1c..f83103ab4 100644
--- a/deploy/helm/templates/rbac/parameters_parameter_role.yaml
+++ b/deploy/helm/templates/rbac/parameters_parameter_role.yaml
@@ -24,3 +24,5 @@ rules:
   - parameters/status
   verbs:
   - get
+  - patch
+  - update
\ No newline at end of file
diff --git a/deploy/helm/templates/rbac/parameters_parametersdefinition_role.yaml b/deploy/helm/templates/rbac/parameters_parametersdefinition_role.yaml
index b62cef55b..b6f2e83d0 100644
--- a/deploy/helm/templates/rbac/parameters_parametersdefinition_role.yaml
+++ b/deploy/helm/templates/rbac/parameters_parametersdefinition_role.yaml
@@ -24,3 +24,5 @@ rules:
   - parametersdefinitions/status
   verbs:
   - get
+  - patch
+  - update
\ No newline at end of file
diff --git a/deploy/helm/templates/rbac/shardingdefinition_editor_role.yaml b/deploy/helm/templates/rbac/shardingdefinition_editor_role.yaml
index 9b1e48422..35c486568 100644
--- a/deploy/helm/templates/rbac/shardingdefinition_editor_role.yaml
+++ b/deploy/helm/templates/rbac/shardingdefinition_editor_role.yaml
@@ -24,3 +24,5 @@ rules:
   - shardingdefinitions/status
   verbs:
   - get
+  - patch
+  - update
\ No newline at end of file
diff --git a/deploy/helm/templates/rbac/workloads_instanceset_editor_role.yaml b/deploy/helm/templates/rbac/workloads_instanceset_editor_role.yaml
index 20dc6a0bf..19ad85499 100644
--- a/deploy/helm/templates/rbac/workloads_instanceset_editor_role.yaml
+++ b/deploy/helm/templates/rbac/workloads_instanceset_editor_role.yaml
@@ -24,3 +24,5 @@ rules:
   - instancesets/status
   verbs:
   - get
+  - patch
+  - update
\ No newline at end of file
diff --git a/docs/developer_docs/api-reference/cluster.md b/docs/developer_docs/api-reference/cluster.md
index 13b8e906b..749f1f3e6 100644
--- a/docs/developer_docs/api-reference/cluster.md
+++ b/docs/developer_docs/api-reference/cluster.md
@@ -15318,6 +15318,18 @@ bool
 </tr>
 <tr>
 <td>
+<code>continuousMethod</code><br/>
+<em>
+string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Specifies the backup method to use, if not set, use the first continuous method.</p>
+</td>
+</tr>
+<tr>
+<td>
 <code>incrementalBackupEnabled</code><br/>
 <em>
 bool
diff --git a/pkg/controller/builder/builder_instance_set.go b/pkg/controller/builder/builder_instance_set.go
index 944fdb3fb..e6fd8210c 100644
--- a/pkg/controller/builder/builder_instance_set.go
+++ b/pkg/controller/builder/builder_instance_set.go
@@ -55,26 +55,13 @@ func (builder *InstanceSetBuilder) SetMinReadySeconds(minReadySeconds int32) *In
 	return builder
 }
 
-func (builder *InstanceSetBuilder) AddMatchLabel(key, value string) *InstanceSetBuilder {
-	labels := make(map[string]string, 1)
-	labels[key] = value
-	return builder.AddMatchLabelsInMap(labels)
-}
-
-func (builder *InstanceSetBuilder) AddMatchLabels(keyValues ...string) *InstanceSetBuilder {
-	return builder.AddMatchLabelsInMap(WithMap(keyValues...))
-}
-
-func (builder *InstanceSetBuilder) AddMatchLabelsInMap(labels map[string]string) *InstanceSetBuilder {
+func (builder *InstanceSetBuilder) SetSelectorMatchLabel(labels map[string]string) *InstanceSetBuilder {
 	selector := builder.get().Spec.Selector
 	if selector == nil {
 		selector = &metav1.LabelSelector{}
 		builder.get().Spec.Selector = selector
 	}
-	matchLabels := builder.get().Spec.Selector.MatchLabels
-	if matchLabels == nil {
-		matchLabels = make(map[string]string, len(labels))
-	}
+	matchLabels := make(map[string]string, len(labels))
 	for k, v := range labels {
 		matchLabels[k] = v
 	}
diff --git a/pkg/controller/factory/builder.go b/pkg/controller/factory/builder.go
index 0da889979..e06dbe5cc 100644
--- a/pkg/controller/factory/builder.go
+++ b/pkg/controller/factory/builder.go
@@ -67,7 +67,7 @@ func BuildInstanceSet(synthesizedComp *component.SynthesizedComponent, component
 		AddAnnotationsInMap(synthesizedComp.StaticAnnotations).
 		AddAnnotationsInMap(getMonitorAnnotations(synthesizedComp, componentDef)).
 		SetTemplate(getTemplate(synthesizedComp)).
-		AddMatchLabelsInMap(constant.GetCompLabels(clusterName, compName)).
+		SetSelectorMatchLabel(constant.GetCompLabels(clusterName, compName)).
 		SetReplicas(synthesizedComp.Replicas).
 		SetVolumeClaimTemplates(getVolumeClaimTemplates(synthesizedComp)...).
 		SetPVCRetentionPolicy(&synthesizedComp.PVCRetentionPolicy).
diff --git a/pkg/controller/instanceset/instance_util.go b/pkg/controller/instanceset/instance_util.go
index 1c0fe0e98..225de15eb 100644
--- a/pkg/controller/instanceset/instance_util.go
+++ b/pkg/controller/instanceset/instance_util.go
@@ -776,7 +776,7 @@ func BuildInstanceTemplateRevision(template *corev1.PodTemplateSpec, parent *wor
 	its := builder.NewInstanceSetBuilder(parent.Namespace, parent.Name).
 		SetUID(parent.UID).
 		AddAnnotationsInMap(parent.Annotations).
-		AddMatchLabelsInMap(parent.Labels).
+		SetSelectorMatchLabel(parent.Labels).
 		SetTemplate(*podTemplate).
 		GetObject()
 
diff --git a/pkg/operations/reconfigure.go b/pkg/operations/reconfigure.go
index a5ef93d80..e8b9fd567 100644
--- a/pkg/operations/reconfigure.go
+++ b/pkg/operations/reconfigure.go
@@ -20,6 +20,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 package operations
 
 import (
+	"fmt"
 	"time"
 
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -88,6 +89,10 @@ func syncReconfigureForOps(reqCtx intctrlutil.RequestCtx, cli client.Client, res
 }
 
 func (r *reconfigureAction) Action(reqCtx intctrlutil.RequestCtx, cli client.Client, resource *OpsResource) (err error) {
+	if !intctrlutil.ObjectAPIVersionSupported(resource.Cluster) {
+		return intctrlutil.NewFatalError(fmt.Sprintf(`api version "%s" is not supported, you can upgrade the cluster to v1 version`, resource.Cluster.APIVersion))
+	}
+
 	if len(resource.OpsRequest.Spec.Reconfigures) == 0 {
 		return intctrlutil.NewErrorf(intctrlutil.ErrorTypeFatal, `invalid reconfigure request: %s`, resource.OpsRequest.GetName())
 	}



Test patch:
diff --git a/controllers/apps/component/component_controller_test.go b/controllers/apps/component/component_controller_test.go
index fad95cc02..aac84fec5 100644
--- a/controllers/apps/component/component_controller_test.go
+++ b/controllers/apps/component/component_controller_test.go
@@ -112,7 +112,7 @@ var _ = Describe("Component Controller", func() {
 		testapps.ClearResourcesWithRemoveFinalizerOption(&testCtx, generics.PersistentVolumeClaimSignature, true, inNS, ml)
 		testapps.ClearResourcesWithRemoveFinalizerOption(&testCtx, generics.ConfigMapSignature, true, inNS, ml)
 		// non-namespaced
-		testapps.ClearResources(&testCtx, generics.StorageClassSignature, ml)
+		testapps.ClearResourcesWithRemoveFinalizerOption(&testCtx, generics.StorageClassSignature, true, ml)
 
 		resetTestContext()
 	}
diff --git a/controllers/parameters/componentdrivenparameter_controller_test.go b/controllers/parameters/componentdrivenparameter_controller_test.go
index 48c542d1a..fb0990605 100644
--- a/controllers/parameters/componentdrivenparameter_controller_test.go
+++ b/controllers/parameters/componentdrivenparameter_controller_test.go
@@ -114,6 +114,7 @@ var _ = Describe("ComponentParameterGenerator Controller", func() {
 		fullCompName := constant.GenerateClusterComponentName(clusterName, defaultCompName)
 		compObj := testapps.NewComponentFactory(testCtx.DefaultNamespace, fullCompName, compDefObj.Name).
 			AddLabels(constant.AppInstanceLabelKey, clusterName).
+			AddAnnotations(constant.CRDAPIVersionAnnotationKey, appsv1.GroupVersion.String()).
 			SetUID(types.UID("test-uid")).
 			SetReplicas(1).
 			SetResources(corev1.ResourceRequirements{Limits: corev1.ResourceList{"memory": resource.MustParse("2Gi")}}).
diff --git a/controllers/parameters/configuration_test.go b/controllers/parameters/configuration_test.go
index 594421419..7cea58f66 100644
--- a/controllers/parameters/configuration_test.go
+++ b/controllers/parameters/configuration_test.go
@@ -120,6 +120,7 @@ func mockReconcileResource() (*corev1.ConfigMap, *parametersv1alpha1.ParametersD
 	By("Creating a cluster")
 	clusterObj := testapps.NewClusterFactory(testCtx.DefaultNamespace, clusterName, "").
 		AddComponent(defaultCompName, compDefObj.GetName()).
+		AddAnnotations(constant.CRDAPIVersionAnnotationKey, appsv1.GroupVersion.String()).
 		AddSharding(shardingCompName, "", compDefObj.GetName()).
 		SetShards(5).
 		Create(&testCtx).
@@ -129,6 +130,7 @@ func mockReconcileResource() (*corev1.ConfigMap, *parametersv1alpha1.ParametersD
 	fullCompName := constant.GenerateClusterComponentName(clusterName, defaultCompName)
 	compObj := testapps.NewComponentFactory(testCtx.DefaultNamespace, fullCompName, compDefObj.Name).
 		AddAnnotations(constant.KBAppClusterUIDKey, string(clusterObj.UID)).
+		AddAnnotations(constant.CRDAPIVersionAnnotationKey, appsv1.GroupVersion.String()).
 		AddLabels(constant.AppInstanceLabelKey, clusterName).
 		SetUID(types.UID(fmt.Sprintf("%s-%s", clusterObj.Name, "test-uid"))).
 		SetReplicas(1).
diff --git a/controllers/trace/util_test.go b/controllers/trace/util_test.go
index bb4c8cbb2..26a4c66fe 100644
--- a/controllers/trace/util_test.go
+++ b/controllers/trace/util_test.go
@@ -243,7 +243,7 @@ var _ = Describe("util test", func() {
 				"label1": "value1",
 				"label2": "value2",
 			}
-			primary := builder.NewInstanceSetBuilder(namespace, name).AddLabelsInMap(labels).AddMatchLabelsInMap(labels).GetObject()
+			primary := builder.NewInstanceSetBuilder(namespace, name).AddLabelsInMap(labels).SetSelectorMatchLabel(labels).GetObject()
 			criteria := &OwnershipCriteria{
 				SelectorCriteria: &FieldPath{
 					Path: "spec.selector.matchLabels",
diff --git a/controllers/workloads/instanceset_controller_test.go b/controllers/workloads/instanceset_controller_test.go
index 7af40c331..bcd6591d4 100644
--- a/controllers/workloads/instanceset_controller_test.go
+++ b/controllers/workloads/instanceset_controller_test.go
@@ -132,7 +132,7 @@ var _ = Describe("InstanceSet Controller", func() {
 				Spec:       pod.Spec,
 			}
 			its := builder.NewInstanceSetBuilder(testCtx.DefaultNamespace, name).
-				AddMatchLabelsInMap(commonLabels).
+				SetSelectorMatchLabel(commonLabels).
 				AddAnnotations(constant.CRDAPIVersionAnnotationKey, workloads.GroupVersion.String()).
 				SetTemplate(template).
 				GetObject()
diff --git a/pkg/controller/builder/builder_instance_set_test.go b/pkg/controller/builder/builder_instance_set_test.go
index 8db937faa..dba180754 100644
--- a/pkg/controller/builder/builder_instance_set_test.go
+++ b/pkg/controller/builder/builder_instance_set_test.go
@@ -49,7 +49,7 @@ var _ = Describe("instance_set builder", func() {
 			podUpdatePolicy              = kbappsv1.PreferInPlacePodUpdatePolicyType
 		)
 		parallelPodManagementConcurrency := &intstr.IntOrString{Type: intstr.String, StrVal: "100%"}
-		selectors := map[string]string{selectorKey4: selectorValue4}
+		selectors := map[string]string{selectorKey1: selectorValue1, selectorKey2: selectorValue2, selectorKey3: selectorValue3, selectorKey4: selectorValue4}
 		role := workloads.ReplicaRole{
 			Name:                 "foo",
 			ParticipatesInQuorum: true,
@@ -123,9 +123,7 @@ var _ = Describe("instance_set builder", func() {
 		its := NewInstanceSetBuilder(ns, name).
 			SetReplicas(replicas).
 			SetMinReadySeconds(minReadySeconds).
-			AddMatchLabel(selectorKey1, selectorValue1).
-			AddMatchLabels(selectorKey2, selectorValue2, selectorKey3, selectorValue3).
-			AddMatchLabelsInMap(selectors).
+			SetSelectorMatchLabel(selectors).
 			SetRoles([]workloads.ReplicaRole{role}).
 			SetTemplate(template).
 			SetVolumeClaimTemplates(vcs...).
diff --git a/pkg/controller/instanceset/in_place_update_util_test.go b/pkg/controller/instanceset/in_place_update_util_test.go
index 695878090..d23fd8f9d 100644
--- a/pkg/controller/instanceset/in_place_update_util_test.go
+++ b/pkg/controller/instanceset/in_place_update_util_test.go
@@ -107,7 +107,7 @@ var _ = Describe("instance util test", func() {
 				AddAnnotations(randStr, randStr).
 				AddLabels(randStr, randStr).
 				SetReplicas(3).
-				AddMatchLabelsInMap(selectors).
+				SetSelectorMatchLabel(selectors).
 				SetTemplate(*podTemplate).
 				SetVolumeClaimTemplates(volumeClaimTemplates...).
 				SetMinReadySeconds(minReadySeconds).
diff --git a/pkg/controller/instanceset/object_builder_test.go b/pkg/controller/instanceset/object_builder_test.go
index 6fe0d9fea..f38919578 100644
--- a/pkg/controller/instanceset/object_builder_test.go
+++ b/pkg/controller/instanceset/object_builder_test.go
@@ -35,7 +35,7 @@ var _ = Describe("object generation transformer test.", func() {
 			SetUID(uid).
 			AddLabels(constant.AppComponentLabelKey, name).
 			SetReplicas(3).
-			AddMatchLabelsInMap(selectors).
+			SetSelectorMatchLabel(selectors).
 			SetRoles(roles).
 			SetTemplate(template).
 			GetObject()
diff --git a/pkg/controller/instanceset/reconciler_assistant_object_test.go b/pkg/controller/instanceset/reconciler_assistant_object_test.go
index d270b1d48..14a8683e3 100644
--- a/pkg/controller/instanceset/reconciler_assistant_object_test.go
+++ b/pkg/controller/instanceset/reconciler_assistant_object_test.go
@@ -33,7 +33,7 @@ var _ = Describe("assistant object reconciler test", func() {
 		its = builder.NewInstanceSetBuilder(namespace, name).
 			SetUID(uid).
 			SetReplicas(3).
-			AddMatchLabelsInMap(selectors).
+			SetSelectorMatchLabel(selectors).
 			SetTemplate(template).
 			SetVolumeClaimTemplates(volumeClaimTemplates...).
 			SetRoles(roles).
diff --git a/pkg/controller/instanceset/reconciler_status_test.go b/pkg/controller/instanceset/reconciler_status_test.go
index 4799f5bf6..b888d9464 100644
--- a/pkg/controller/instanceset/reconciler_status_test.go
+++ b/pkg/controller/instanceset/reconciler_status_test.go
@@ -41,7 +41,7 @@ var _ = Describe("status reconciler test", func() {
 		its = builder.NewInstanceSetBuilder(namespace, name).
 			SetUID(uid).
 			SetReplicas(3).
-			AddMatchLabelsInMap(selectors).
+			SetSelectorMatchLabel(selectors).
 			SetTemplate(template).
 			SetVolumeClaimTemplates(volumeClaimTemplates...).
 			SetMinReadySeconds(minReadySeconds).
diff --git a/pkg/controller/instanceset/reconciler_update_test.go b/pkg/controller/instanceset/reconciler_update_test.go
index 4cfd6da8c..0c93d08f4 100644
--- a/pkg/controller/instanceset/reconciler_update_test.go
+++ b/pkg/controller/instanceset/reconciler_update_test.go
@@ -43,7 +43,7 @@ var _ = Describe("update reconciler test", func() {
 		its = builder.NewInstanceSetBuilder(namespace, name).
 			SetUID(uid).
 			SetReplicas(3).
-			AddMatchLabelsInMap(selectors).
+			SetSelectorMatchLabel(selectors).
 			SetTemplate(template).
 			SetVolumeClaimTemplates(volumeClaimTemplates...).
 			SetMinReadySeconds(minReadySeconds).