diff --git a/charts/tidb-operator/templates/controller-manager-deployment.yaml b/charts/tidb-operator/templates/controller-manager-deployment.yaml index b4cb4df88b..accb03b885 100644 --- a/charts/tidb-operator/templates/controller-manager-deployment.yaml +++ b/charts/tidb-operator/templates/controller-manager-deployment.yaml @@ -33,14 +33,10 @@ spec: {{ toYaml .Values.controllerManager.resources | indent 12 }} command: - /usr/local/bin/tidb-controller-manager - - -default-storage-class-name={{ .Values.defaultStorageClassName }} {{- if .Values.tidbBackupManagerImage }} - -tidb-backup-manager-image={{ .Values.tidbBackupManagerImage }} - -tidb-discovery-image={{ .Values.operatorImage }} {{- end }} - {{- if .Values.defaultBackupStorageClassName }} - - -default-backup-storage-class-name={{ .Values.defaultBackupStorageClassName }} - {{- end }} - -cluster-scoped={{ .Values.clusterScoped }} - -auto-failover={{ .Values.controllerManager.autoFailover | default true }} - -pd-failover-period={{ .Values.controllerManager.pdFailoverPeriod | default "5m" }} diff --git a/charts/tidb-operator/values.yaml b/charts/tidb-operator/values.yaml index 14d54809e0..c8ae766021 100644 --- a/charts/tidb-operator/values.yaml +++ b/charts/tidb-operator/values.yaml @@ -15,11 +15,8 @@ timezone: UTC operatorImage: pingcap/tidb-operator:v1.1.0-beta.1 imagePullPolicy: IfNotPresent -defaultStorageClassName: local-storage - # tidbBackupManagerImage is tidb backup manager image # tidbBackupManagerImage: pingcap/tidb-backup-manager:latest -# defaultBackupStorageClassName: local-storage # # Enable or disable tidb-operator features: diff --git a/cmd/controller-manager/main.go b/cmd/controller-manager/main.go index 3f083d9eeb..5477a2c746 100644 --- a/cmd/controller-manager/main.go +++ b/cmd/controller-manager/main.go @@ -67,8 +67,6 @@ func init() { flag.BoolVar(&printVersion, "version", false, "Show version and quit") flag.IntVar(&workers, "workers", 5, "The number of workers that are allowed to sync concurrently. Larger number = more responsive management, but more CPU (and network) load") flag.BoolVar(&controller.ClusterScoped, "cluster-scoped", true, "Whether tidb-operator should manage kubernetes cluster wide TiDB Clusters") - flag.StringVar(&controller.DefaultStorageClassName, "default-storage-class-name", "standard", "Default storage class name") - flag.StringVar(&controller.DefaultBackupStorageClassName, "default-backup-storage-class-name", "standard", "Default storage class name for backup and restore") flag.BoolVar(&autoFailover, "auto-failover", true, "Auto failover") flag.DurationVar(&pdFailoverPeriod, "pd-failover-period", time.Duration(5*time.Minute), "PD failover period default(5m)") flag.DurationVar(&tikvFailoverPeriod, "tikv-failover-period", time.Duration(5*time.Minute), "TiKV failover period default(5m)") diff --git a/manifests/crd.yaml b/manifests/crd.yaml index ea1b930873..9b1e2e2d45 100644 --- a/manifests/crd.yaml +++ b/manifests/crd.yaml @@ -1853,10 +1853,8 @@ spec: type: string type: object storageClassName: - description: 'The storageClassName of the persistent volume for - PD data storage, empty string means not explicitly set and use - the cluster default set by admission controller. Optionals: Defaults - to the default-storage-class-name set in the tidb-operator' + description: The storageClassName of the persistent volume for PD + data storage. Defaults to Kubernetes default storage class. type: string tolerations: description: 'Tolerations of the component. Override the cluster-level @@ -2693,10 +2691,8 @@ spec: one if present Optional: Defaults to cluster-level setting' type: string storageClassName: - description: 'The storageClassName of the persistent volume for - Pump data storage, empty string means not explicitly set and use - the cluster default set by admission controller. Optionals: Defaults - to the default-storage-class-name set in the tidb-operator' + description: The storageClassName of the persistent volume for Pump + data storage. Defaults to Kubernetes default storage class. type: string tolerations: description: 'Tolerations of the component. Override the cluster-level @@ -6001,10 +5997,8 @@ spec: one if present Optional: Defaults to cluster-level setting' type: string storageClassName: - description: 'The storageClassName of the persistent volume for - TiKV data storage, empty string means not explicitly set and use - the cluster default set by admission controller. Optionals: Defaults - to the default-storage-class-name set in the tidb-operator' + description: The storageClassName of the persistent volume for TiKV + data storage. Defaults to Kubernetes default storage class. type: string tolerations: description: 'Tolerations of the component. Override the cluster-level @@ -6316,8 +6310,8 @@ spec: - secretName type: object storageClassName: - description: StorageClassName is the storage class for backup job's - PV. + description: The storageClassName of the persistent volume for Backup + data storage. Defaults to Kubernetes default storage class. type: string storageSize: description: StorageSize is the request storage size for backup job @@ -6448,8 +6442,8 @@ spec: - secretName type: object storageClassName: - description: StorageClassName is the storage class for backup job's - PV. + description: The storageClassName of the persistent volume for Restore + data storage. Defaults to Kubernetes default storage class. type: string storageSize: description: StorageSize is the request storage size for backup job @@ -6479,7 +6473,6 @@ spec: type: object required: - to - - storageClassName - storageSize type: object type: object @@ -6694,8 +6687,8 @@ spec: - secretName type: object storageClassName: - description: StorageClassName is the storage class for backup job's - PV. + description: The storageClassName of the persistent volume for Backup + data storage. Defaults to Kubernetes default storage class. type: string storageSize: description: StorageSize is the request storage size for backup @@ -6718,8 +6711,9 @@ spec: description: Schedule specifies the cron string used for backup scheduling. type: string storageClassName: - description: StorageClassName is the storage class for backup job's - PV. + description: The storageClassName of the persistent volume for Backup + data storage if not storage class name set in BackupSpec. Defaults + to Kubernetes default storage class. type: string storageSize: description: StorageSize is the request storage size for backup job diff --git a/pkg/apis/pingcap/v1alpha1/openapi_generated.go b/pkg/apis/pingcap/v1alpha1/openapi_generated.go index 92a6748926..1184dceb9a 100644 --- a/pkg/apis/pingcap/v1alpha1/openapi_generated.go +++ b/pkg/apis/pingcap/v1alpha1/openapi_generated.go @@ -661,7 +661,7 @@ func schema_pkg_apis_pingcap_v1alpha1_BackupScheduleSpec(ref common.ReferenceCal }, "storageClassName": { SchemaProps: spec.SchemaProps{ - Description: "StorageClassName is the storage class for backup job's PV.", + Description: "The storageClassName of the persistent volume for Backup data storage if not storage class name set in BackupSpec. Defaults to Kubernetes default storage class.", Type: []string{"string"}, Format: "", }, @@ -714,7 +714,7 @@ func schema_pkg_apis_pingcap_v1alpha1_BackupSpec(ref common.ReferenceCallback) c }, "storageClassName": { SchemaProps: spec.SchemaProps{ - Description: "StorageClassName is the storage class for backup job's PV.", + Description: "The storageClassName of the persistent volume for Backup data storage. Defaults to Kubernetes default storage class.", Type: []string{"string"}, Format: "", }, @@ -2082,7 +2082,7 @@ func schema_pkg_apis_pingcap_v1alpha1_PDSpec(ref common.ReferenceCallback) commo }, "storageClassName": { SchemaProps: spec.SchemaProps{ - Description: "The storageClassName of the persistent volume for PD data storage, empty string means not explicitly set and use the cluster default set by admission controller. Optionals: Defaults to the default-storage-class-name set in the tidb-operator", + Description: "The storageClassName of the persistent volume for PD data storage. Defaults to Kubernetes default storage class.", Type: []string{"string"}, Format: "", }, @@ -2529,7 +2529,7 @@ func schema_pkg_apis_pingcap_v1alpha1_PumpSpec(ref common.ReferenceCallback) com }, "storageClassName": { SchemaProps: spec.SchemaProps{ - Description: "The storageClassName of the persistent volume for Pump data storage, empty string means not explicitly set and use the cluster default set by admission controller. Optionals: Defaults to the default-storage-class-name set in the tidb-operator", + Description: "The storageClassName of the persistent volume for Pump data storage. Defaults to Kubernetes default storage class.", Type: []string{"string"}, Format: "", }, @@ -2666,7 +2666,7 @@ func schema_pkg_apis_pingcap_v1alpha1_RestoreSpec(ref common.ReferenceCallback) }, "storageClassName": { SchemaProps: spec.SchemaProps{ - Description: "StorageClassName is the storage class for backup job's PV.", + Description: "The storageClassName of the persistent volume for Restore data storage. Defaults to Kubernetes default storage class.", Type: []string{"string"}, Format: "", }, @@ -2679,7 +2679,7 @@ func schema_pkg_apis_pingcap_v1alpha1_RestoreSpec(ref common.ReferenceCallback) }, }, }, - Required: []string{"to", "storageClassName", "storageSize"}, + Required: []string{"to", "storageSize"}, }, }, Dependencies: []string{ @@ -5281,7 +5281,7 @@ func schema_pkg_apis_pingcap_v1alpha1_TiKVSpec(ref common.ReferenceCallback) com }, "storageClassName": { SchemaProps: spec.SchemaProps{ - Description: "The storageClassName of the persistent volume for TiKV data storage, empty string means not explicitly set and use the cluster default set by admission controller. Optionals: Defaults to the default-storage-class-name set in the tidb-operator", + Description: "The storageClassName of the persistent volume for TiKV data storage. Defaults to Kubernetes default storage class.", Type: []string{"string"}, Format: "", }, diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go index ccb1644f3d..113e130821 100644 --- a/pkg/apis/pingcap/v1alpha1/types.go +++ b/pkg/apis/pingcap/v1alpha1/types.go @@ -222,9 +222,8 @@ type PDSpec struct { // +optional Service *ServiceSpec `json:"service,omitempty"` - // The storageClassName of the persistent volume for PD data storage, empty string means not explicitly set - // and use the cluster default set by admission controller. - // Optionals: Defaults to the default-storage-class-name set in the tidb-operator + // The storageClassName of the persistent volume for PD data storage. + // Defaults to Kubernetes default storage class. // +optional StorageClassName *string `json:"storageClassName,omitempty"` @@ -261,9 +260,8 @@ type TiKVSpec struct { // +optional MaxFailoverCount *int32 `json:"maxFailoverCount,omitempty"` - // The storageClassName of the persistent volume for TiKV data storage, empty string means not explicitly set - // and use the cluster default set by admission controller. - // Optionals: Defaults to the default-storage-class-name set in the tidb-operator + // The storageClassName of the persistent volume for TiKV data storage. + // Defaults to Kubernetes default storage class. // +optional StorageClassName *string `json:"storageClassName,omitempty"` @@ -343,9 +341,8 @@ type PumpSpec struct { // +optional BaseImage string `json:"baseImage"` - // The storageClassName of the persistent volume for Pump data storage, empty string means not explicitly set - // and use the cluster default set by admission controller. - // Optionals: Defaults to the default-storage-class-name set in the tidb-operator + // The storageClassName of the persistent volume for Pump data storage. + // Defaults to Kubernetes default storage class. // +optional StorageClassName *string `json:"storageClassName,omitempty"` @@ -744,8 +741,10 @@ type BackupSpec struct { Type BackupType `json:"backupType,omitempty"` // StorageProvider configures where and how backups should be stored. StorageProvider `json:",inline"` - // StorageClassName is the storage class for backup job's PV. - StorageClassName string `json:"storageClassName,omitempty"` + // The storageClassName of the persistent volume for Backup data storage. + // Defaults to Kubernetes default storage class. + // +optional + StorageClassName *string `json:"storageClassName,omitempty"` // StorageSize is the request storage size for backup job StorageSize string `json:"storageSize,omitempty"` // BRConfig is the configs for BR @@ -866,8 +865,10 @@ type BackupScheduleSpec struct { MaxReservedTime *string `json:"maxReservedTime,omitempty"` // BackupTemplate is the specification of the backup structure to get scheduled. BackupTemplate BackupSpec `json:"backupTemplate"` - // StorageClassName is the storage class for backup job's PV. - StorageClassName string `json:"storageClassName,omitempty"` + // The storageClassName of the persistent volume for Backup data storage if not storage class name set in BackupSpec. + // Defaults to Kubernetes default storage class. + // +optional + StorageClassName *string `json:"storageClassName,omitempty"` // StorageSize is the request storage size for backup job StorageSize string `json:"storageSize,omitempty"` } @@ -944,8 +945,10 @@ type RestoreSpec struct { Type BackupType `json:"backupType,omitempty"` // StorageProvider configures where and how backups should be stored. StorageProvider `json:",inline"` - // StorageClassName is the storage class for backup job's PV. - StorageClassName string `json:"storageClassName"` + // The storageClassName of the persistent volume for Restore data storage. + // Defaults to Kubernetes default storage class. + // +optional + StorageClassName *string `json:"storageClassName,omitempty"` // StorageSize is the request storage size for backup job StorageSize string `json:"storageSize"` } diff --git a/pkg/apis/pingcap/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/pingcap/v1alpha1/zz_generated.deepcopy.go index a44a1a0826..6558a24abf 100644 --- a/pkg/apis/pingcap/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/pingcap/v1alpha1/zz_generated.deepcopy.go @@ -218,6 +218,11 @@ func (in *BackupScheduleSpec) DeepCopyInto(out *BackupScheduleSpec) { **out = **in } in.BackupTemplate.DeepCopyInto(&out.BackupTemplate) + if in.StorageClassName != nil { + in, out := &in.StorageClassName, &out.StorageClassName + *out = new(string) + **out = **in + } return } @@ -260,6 +265,11 @@ func (in *BackupSpec) DeepCopyInto(out *BackupSpec) { *out = *in out.From = in.From in.StorageProvider.DeepCopyInto(&out.StorageProvider) + if in.StorageClassName != nil { + in, out := &in.StorageClassName, &out.StorageClassName + *out = new(string) + **out = **in + } if in.BR != nil { in, out := &in.BR, &out.BR *out = new(BRConfig) @@ -1832,6 +1842,11 @@ func (in *RestoreSpec) DeepCopyInto(out *RestoreSpec) { *out = *in out.To = in.To in.StorageProvider.DeepCopyInto(&out.StorageProvider) + if in.StorageClassName != nil { + in, out := &in.StorageClassName, &out.StorageClassName + *out = new(string) + **out = **in + } return } diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go index a8760d8fd5..63bfada8ec 100644 --- a/pkg/backup/backup/backup_manager.go +++ b/pkg/backup/backup/backup_manager.go @@ -327,10 +327,6 @@ func (bm *backupManager) ensureBackupPVCExist(backup *v1alpha1.Backup) (string, } // not found PVC, so we need to create PVC for backup job - storageClassName := controller.DefaultBackupStorageClassName - if backup.Spec.StorageClassName != "" { - storageClassName = backup.Spec.StorageClassName - } pvc := &corev1.PersistentVolumeClaim{ ObjectMeta: metav1.ObjectMeta{ Name: backupPVCName, @@ -338,7 +334,6 @@ func (bm *backupManager) ensureBackupPVCExist(backup *v1alpha1.Backup) (string, Labels: label.NewBackup().Instance(backup.GetInstanceName()), }, Spec: corev1.PersistentVolumeClaimSpec{ - StorageClassName: &storageClassName, AccessModes: []corev1.PersistentVolumeAccessMode{ corev1.ReadWriteOnce, }, @@ -347,6 +342,7 @@ func (bm *backupManager) ensureBackupPVCExist(backup *v1alpha1.Backup) (string, corev1.ResourceStorage: rs, }, }, + StorageClassName: backup.Spec.StorageClassName, }, } diff --git a/pkg/backup/backupschedule/backup_schedule_manager.go b/pkg/backup/backupschedule/backup_schedule_manager.go index 2c2e7e1547..9725ac21e5 100644 --- a/pkg/backup/backupschedule/backup_schedule_manager.go +++ b/pkg/backup/backupschedule/backup_schedule_manager.go @@ -203,12 +203,8 @@ func (bm *backupScheduleManager) createBackup(bs *v1alpha1.BackupSchedule, times backupSpec := *bs.Spec.BackupTemplate.DeepCopy() if backupSpec.BR == nil { - if backupSpec.StorageClassName == "" { - if bs.Spec.StorageClassName != "" { - backupSpec.StorageClassName = bs.Spec.StorageClassName - } else { - backupSpec.StorageClassName = controller.DefaultBackupStorageClassName - } + if backupSpec.StorageClassName == nil || *backupSpec.StorageClassName == "" { + backupSpec.StorageClassName = bs.Spec.StorageClassName } if backupSpec.StorageSize == "" { diff --git a/pkg/backup/restore/restore_manager.go b/pkg/backup/restore/restore_manager.go index 3431d354d0..26d4d3f323 100644 --- a/pkg/backup/restore/restore_manager.go +++ b/pkg/backup/restore/restore_manager.go @@ -222,10 +222,6 @@ func (rm *restoreManager) ensureRestorePVCExist(restore *v1alpha1.Restore) (stri if err != nil { // get the object from the local cache, the error can only be IsNotFound, // so we need to create PVC for restore job - storageClassName := controller.DefaultBackupStorageClassName - if restore.Spec.StorageClassName != "" { - storageClassName = restore.Spec.StorageClassName - } pvc := &corev1.PersistentVolumeClaim{ ObjectMeta: metav1.ObjectMeta{ Name: restorePVCName, @@ -233,7 +229,6 @@ func (rm *restoreManager) ensureRestorePVCExist(restore *v1alpha1.Restore) (stri Labels: label.NewRestore().Instance(restore.GetInstanceName()), }, Spec: corev1.PersistentVolumeClaimSpec{ - StorageClassName: &storageClassName, AccessModes: []corev1.PersistentVolumeAccessMode{ corev1.ReadWriteOnce, }, @@ -242,6 +237,7 @@ func (rm *restoreManager) ensureRestorePVCExist(restore *v1alpha1.Restore) (stri corev1.ResourceStorage: rs, }, }, + StorageClassName: restore.Spec.StorageClassName, }, } if err := rm.pvcControl.CreatePVC(restore, pvc); err != nil { diff --git a/pkg/backup/util/util.go b/pkg/backup/util/util.go index a7aea37e9a..ee373dd088 100644 --- a/pkg/backup/util/util.go +++ b/pkg/backup/util/util.go @@ -294,9 +294,6 @@ func ValidateBackup(backup *v1alpha1.Backup) error { if backup.Spec.From.SecretName == "" { return fmt.Errorf("missing tidbSecretName config in spec of %s/%s", ns, name) } - if backup.Spec.StorageClassName == "" { - return fmt.Errorf("missing storageClassName config in spec of %s/%s", ns, name) - } if backup.Spec.StorageSize == "" { return fmt.Errorf("missing StorageSize config in spec of %s/%s", ns, name) } diff --git a/pkg/controller/backup/backup_controller_test.go b/pkg/controller/backup/backup_controller_test.go index bcb33b974a..692002dddb 100644 --- a/pkg/controller/backup/backup_controller_test.go +++ b/pkg/controller/backup/backup_controller_test.go @@ -19,10 +19,9 @@ import ( "testing" "time" - "github.com/pingcap/tidb-operator/pkg/backup/constants" - . "github.com/onsi/gomega" "github.com/pingcap/tidb-operator/pkg/apis/pingcap/v1alpha1" + "github.com/pingcap/tidb-operator/pkg/backup/constants" "github.com/pingcap/tidb-operator/pkg/client/clientset/versioned/fake" informers "github.com/pingcap/tidb-operator/pkg/client/informers/externalversions" corev1 "k8s.io/api/core/v1" @@ -31,6 +30,7 @@ import ( kubeinformers "k8s.io/client-go/informers" kubefake "k8s.io/client-go/kubernetes/fake" "k8s.io/client-go/tools/cache" + "k8s.io/utils/pointer" ) func TestBackupControllerEnqueueBackup(t *testing.T) { @@ -262,7 +262,7 @@ func newBackup() *v1alpha1.Backup { SecretName: "demo", }, }, - StorageClassName: "local-storage", + StorageClassName: pointer.StringPtr("local-storage"), StorageSize: "1Gi", }, } diff --git a/pkg/controller/controller_utils.go b/pkg/controller/controller_utils.go index 4038081817..2f6ef3de40 100644 --- a/pkg/controller/controller_utils.go +++ b/pkg/controller/controller_utils.go @@ -52,12 +52,6 @@ var ( // tidbMonitorControllerkind cotnains the schema.GroupVersionKind for TidbMonitor controller type. tidbMonitorControllerkind = v1alpha1.SchemeGroupVersion.WithKind("TidbMonitor") - // DefaultStorageClassName is the default storageClassName - DefaultStorageClassName string - - // DefaultBackupStorageClassName is the default storageClassName for backup and restore job - DefaultBackupStorageClassName string - // TidbBackupManagerImage is the image of tidb backup manager tool TidbBackupManagerImage string diff --git a/pkg/manager/member/pd_member_manager.go b/pkg/manager/member/pd_member_manager.go index 7a7cb99c31..603863edcd 100644 --- a/pkg/manager/member/pd_member_manager.go +++ b/pkg/manager/member/pd_member_manager.go @@ -15,7 +15,6 @@ package member import ( "fmt" - "github.com/pingcap/tidb-operator/pkg/util" "strconv" "strings" @@ -24,6 +23,7 @@ import ( "github.com/pingcap/tidb-operator/pkg/label" "github.com/pingcap/tidb-operator/pkg/manager" "github.com/pingcap/tidb-operator/pkg/pdapi" + "github.com/pingcap/tidb-operator/pkg/util" apps "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" @@ -587,10 +587,6 @@ func getNewPDSetForTidbCluster(tc *v1alpha1.TidbCluster, cm *corev1.ConfigMap) ( setName := controller.PDMemberName(tcName) podAnnotations := CombineAnnotations(controller.AnnProm(2379), basePDSpec.Annotations()) stsAnnotations := getStsAnnotations(tc, label.PDLabelVal) - storageClassName := tc.Spec.PD.StorageClassName - if storageClassName == nil { - storageClassName = &controller.DefaultStorageClassName - } failureReplicas := 0 for _, failureMember := range tc.Status.PD.FailureMembers { if failureMember.MemberDeleted { @@ -688,7 +684,7 @@ func getNewPDSetForTidbCluster(tc *v1alpha1.TidbCluster, cm *corev1.ConfigMap) ( AccessModes: []corev1.PersistentVolumeAccessMode{ corev1.ReadWriteOnce, }, - StorageClassName: storageClassName, + StorageClassName: tc.Spec.PD.StorageClassName, Resources: storageRequest, }, }, diff --git a/pkg/manager/member/tikv_member_manager.go b/pkg/manager/member/tikv_member_manager.go index 92fe48b98b..e860baa11f 100644 --- a/pkg/manager/member/tikv_member_manager.go +++ b/pkg/manager/member/tikv_member_manager.go @@ -408,10 +408,6 @@ func getNewTiKVSetForTidbCluster(tc *v1alpha1.TidbCluster, cm *corev1.ConfigMap) stsAnnotations := getStsAnnotations(tc, label.TiKVLabelVal) capacity := controller.TiKVCapacity(tc.Spec.TiKV.Limits) headlessSvcName := controller.TiKVPeerMemberName(tcName) - storageClassName := tc.Spec.TiKV.StorageClassName - if storageClassName == nil { - storageClassName = &controller.DefaultStorageClassName - } env := []corev1.EnvVar{ { @@ -494,7 +490,7 @@ func getNewTiKVSetForTidbCluster(tc *v1alpha1.TidbCluster, cm *corev1.ConfigMap) Spec: podSpec, }, VolumeClaimTemplates: []corev1.PersistentVolumeClaim{ - volumeClaimTemplate(storageRequest, v1alpha1.TiKVMemberType.String(), storageClassName), + volumeClaimTemplate(storageRequest, v1alpha1.TiKVMemberType.String(), tc.Spec.TiKV.StorageClassName), }, ServiceName: headlessSvcName, PodManagementPolicy: apps.ParallelPodManagement, diff --git a/tests/e2e/e2e.go b/tests/e2e/e2e.go index d53fd2dfec..cf5707ec38 100644 --- a/tests/e2e/e2e.go +++ b/tests/e2e/e2e.go @@ -71,6 +71,9 @@ func setupSuite() { metav1.NamespaceDefault, metav1.NamespacePublic, v1.NamespaceNodeLease, + // kind local path provisioner namespace since 0.7.0 + // https://github.com/kubernetes-sigs/kind/blob/v0.7.0/pkg/build/node/storage.go#L35 + "local-path-storage", }) if err != nil { e2elog.Failf("Error deleting orphaned namespaces: %v", err)