From ac935212692cf515a56be43f8345cad179ffab6f Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Mon, 12 Aug 2024 16:03:03 +0800 Subject: [PATCH 01/34] add command --- docs/api-references/docs.md | 24 + manifests/crd.yaml | 12347 ++++++++-------- manifests/crd/v1/pingcap.com_backups.yaml | 3 + .../crd/v1/pingcap.com_backupschedules.yaml | 6 + manifests/federation-crd.yaml | 6268 ++++---- .../pingcap/v1alpha1/openapi_generated.go | 7 + pkg/apis/pingcap/v1alpha1/types.go | 6 + 7 files changed, 9358 insertions(+), 9303 deletions(-) diff --git a/docs/api-references/docs.md b/docs/api-references/docs.md index 6a96a6bbcc..203774ec68 100644 --- a/docs/api-references/docs.md +++ b/docs/api-references/docs.md @@ -245,6 +245,18 @@ Default is current timestamp.
logSubcommand
+
+string
+
+Subcommand is the subcommand for BR, such as start, stop, pause etc.
+logTruncateUntil
string
@@ -4234,6 +4246,18 @@ Default is current timestamp.
logSubcommand
+
+string
+
+Subcommand is the subcommand for BR, such as start, stop, pause etc.
+logTruncateUntil
string
diff --git a/manifests/crd.yaml b/manifests/crd.yaml
index 49fed4d885..e93cdc85e1 100644
--- a/manifests/crd.yaml
+++ b/manifests/crd.yaml
@@ -4,68 +4,41 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
- name: backups.pingcap.com
+ name: backupschedules.pingcap.com
spec:
group: pingcap.com
names:
- kind: Backup
- listKind: BackupList
- plural: backups
+ kind: BackupSchedule
+ listKind: BackupScheduleList
+ plural: backupschedules
shortNames:
- - bk
- singular: backup
+ - bks
+ singular: backupschedule
scope: Namespaced
versions:
- additionalPrinterColumns:
- - description: the type of backup, such as full, db, table. Only used when Mode
- = snapshot.
- jsonPath: .spec.backupType
- name: Type
- type: string
- - description: the mode of backup, such as snapshot, log.
- jsonPath: .spec.backupMode
- name: Mode
- type: string
- - description: The current status of the backup
- jsonPath: .status.phase
- name: Status
- type: string
- - description: The full path of backup data
- jsonPath: .status.backupPath
- name: BackupPath
- type: string
- - description: The data size of the backup
- jsonPath: .status.backupSizeReadable
- name: BackupSize
- type: string
- - description: The real size of volume snapshot backup, only valid to volume snapshot
- backup
- jsonPath: .status.incrementalBackupSizeReadable
- name: IncrementalBackupSize
- priority: 10
- type: string
- - description: The commit ts of the backup
- jsonPath: .status.commitTs
- name: CommitTS
+ - description: The cron format string used for backup scheduling
+ jsonPath: .spec.schedule
+ name: Schedule
type: string
- - description: The log backup truncate until ts
- jsonPath: .status.logSuccessTruncateUntil
- name: LogTruncateUntil
+ - description: The max number of backups we want to keep
+ jsonPath: .spec.maxBackups
+ name: MaxBackups
+ type: integer
+ - description: How long backups we want to keep
+ jsonPath: .spec.maxReservedTime
+ name: MaxReservedTime
type: string
- - description: The time at which the backup was started
- jsonPath: .status.timeStarted
- name: Started
+ - description: The last backup CR name
+ jsonPath: .status.lastBackup
+ name: LastBackup
priority: 1
- type: date
- - description: The time at which the backup was completed
- jsonPath: .status.timeCompleted
- name: Completed
+ type: string
+ - description: The last time the backup was successfully created
+ jsonPath: .status.lastBackupTime
+ name: LastBackupTime
priority: 1
type: date
- - description: The time that the backup takes
- jsonPath: .status.timeTaken
- name: TimeTaken
- type: string
- jsonPath: .metadata.creationTimestamp
name: Age
type: date
@@ -81,841 +54,747 @@ spec:
type: object
spec:
properties:
- additionalVolumeMounts:
- items:
- properties:
- mountPath:
- type: string
- mountPropagation:
- type: string
- name:
- type: string
- readOnly:
- type: boolean
- subPath:
- type: string
- subPathExpr:
- type: string
- required:
- - mountPath
- - name
- type: object
- type: array
- additionalVolumes:
- items:
- properties:
- awsElasticBlockStore:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- readOnly:
- type: boolean
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- azureDisk:
+ backupTemplate:
+ properties:
+ additionalVolumeMounts:
+ items:
properties:
- cachingMode:
- type: string
- diskName:
- type: string
- diskURI:
+ mountPath:
type: string
- fsType:
+ mountPropagation:
type: string
- kind:
+ name:
type: string
readOnly:
type: boolean
- required:
- - diskName
- - diskURI
- type: object
- azureFile:
- properties:
- readOnly:
- type: boolean
- secretName:
+ subPath:
type: string
- shareName:
+ subPathExpr:
type: string
required:
- - secretName
- - shareName
+ - mountPath
+ - name
type: object
- cephfs:
+ type: array
+ additionalVolumes:
+ items:
properties:
- monitors:
- items:
- type: string
- type: array
- path:
- type: string
- readOnly:
- type: boolean
- secretFile:
- type: string
- secretRef:
+ awsElasticBlockStore:
properties:
- name:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
type: string
+ required:
+ - volumeID
type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - monitors
- type: object
- cinder:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
+ azureDisk:
properties:
- name:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
type: string
+ readOnly:
+ type: boolean
+ required:
+ - diskName
+ - diskURI
type: object
- x-kubernetes-map-type: atomic
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- configMap:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- csi:
- properties:
- driver:
- type: string
- fsType:
- type: string
- nodePublishSecretRef:
+ azureFile:
properties:
- name:
+ readOnly:
+ type: boolean
+ secretName:
type: string
+ shareName:
+ type: string
+ required:
+ - secretName
+ - shareName
type: object
- x-kubernetes-map-type: atomic
- readOnly:
- type: boolean
- volumeAttributes:
- additionalProperties:
- type: string
- type: object
- required:
- - driver
- type: object
- downwardAPI:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- fieldRef:
+ cephfs:
+ properties:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - monitors
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
properties:
- apiVersion:
+ key:
type: string
- fieldPath:
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
required:
- - fieldPath
+ - key
+ - path
type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
type: string
- resourceFieldRef:
+ type: object
+ required:
+ - driver
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
required:
- - resource
+ - path
type: object
- x-kubernetes-map-type: atomic
- required:
- - path
- type: object
- type: array
- type: object
- emptyDir:
- properties:
- medium:
- type: string
- sizeLimit:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- ephemeral:
- properties:
- volumeClaimTemplate:
+ type: array
+ type: object
+ emptyDir:
properties:
- metadata:
- type: object
- spec:
+ medium:
+ type: string
+ sizeLimit:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
properties:
- accessModes:
- items:
- type: string
- type: array
- dataSource:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- required:
- - kind
- - name
- type: object
- x-kubernetes-map-type: atomic
- dataSourceRef:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- namespace:
- type: string
- required:
- - kind
- - name
+ metadata:
type: object
- resources:
+ spec:
properties:
- claims:
+ accessModes:
items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
+ type: string
type: array
- x-kubernetes-list-map-keys:
+ dataSource:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ required:
+ - kind
- name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
type: object
- type: object
- selector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
+ x-kubernetes-map-type: atomic
+ dataSourceRef:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
+ type: object
type: object
+ x-kubernetes-map-type: atomic
+ storageClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
+ type: string
type: object
- x-kubernetes-map-type: atomic
- storageClassName:
- type: string
- volumeMode:
- type: string
- volumeName:
- type: string
+ required:
+ - spec
type: object
- required:
- - spec
- type: object
- type: object
- fc:
- properties:
- fsType:
- type: string
- lun:
- format: int32
- type: integer
- readOnly:
- type: boolean
- targetWWNs:
- items:
- type: string
- type: array
- wwids:
- items:
- type: string
- type: array
- type: object
- flexVolume:
- properties:
- driver:
- type: string
- fsType:
- type: string
- options:
- additionalProperties:
- type: string
type: object
- readOnly:
- type: boolean
- secretRef:
+ fc:
properties:
- name:
+ fsType:
type: string
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
type: object
- x-kubernetes-map-type: atomic
- required:
- - driver
- type: object
- flocker:
- properties:
- datasetName:
- type: string
- datasetUUID:
- type: string
- type: object
- gcePersistentDisk:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- pdName:
- type: string
- readOnly:
- type: boolean
- required:
- - pdName
- type: object
- gitRepo:
- properties:
- directory:
- type: string
- repository:
- type: string
- revision:
- type: string
- required:
- - repository
- type: object
- glusterfs:
- properties:
- endpoints:
- type: string
- path:
- type: string
- readOnly:
- type: boolean
- required:
- - endpoints
- - path
- type: object
- hostPath:
- properties:
- path:
- type: string
- type:
- type: string
- required:
- - path
- type: object
- iscsi:
- properties:
- chapAuthDiscovery:
- type: boolean
- chapAuthSession:
- type: boolean
- fsType:
- type: string
- initiatorName:
- type: string
- iqn:
- type: string
- iscsiInterface:
- type: string
- lun:
- format: int32
- type: integer
- portals:
- items:
- type: string
- type: array
- readOnly:
- type: boolean
- secretRef:
+ flexVolume:
properties:
- name:
+ driver:
type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - driver
type: object
- x-kubernetes-map-type: atomic
- targetPortal:
- type: string
- required:
- - iqn
- - lun
- - targetPortal
- type: object
- name:
- type: string
- nfs:
- properties:
- path:
- type: string
- readOnly:
- type: boolean
- server:
- type: string
- required:
- - path
- - server
- type: object
- persistentVolumeClaim:
- properties:
- claimName:
- type: string
- readOnly:
- type: boolean
- required:
- - claimName
- type: object
- photonPersistentDisk:
- properties:
- fsType:
- type: string
- pdID:
- type: string
- required:
- - pdID
- type: object
- portworxVolume:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- volumeID:
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - pdName
+ type: object
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ required:
+ - repository
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - endpoints
+ - path
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ required:
+ - path
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ targetPortal:
+ type: string
+ required:
+ - iqn
+ - lun
+ - targetPortal
+ type: object
+ name:
type: string
- required:
- - volumeID
- type: object
- projected:
- properties:
- defaultMode:
- format: int32
- type: integer
- sources:
- items:
- properties:
- configMap:
- properties:
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- downwardAPI:
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ required:
+ - path
+ - server
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - claimName
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ required:
+ - pdID
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
properties:
- items:
- items:
- properties:
- fieldRef:
+ configMap:
+ properties:
+ items:
+ items:
properties:
- apiVersion:
+ key:
type: string
- fieldPath:
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
required:
- - fieldPath
+ - key
+ - path
type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
- type: string
- resourceFieldRef:
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ downwardAPI:
+ properties:
+ items:
+ items:
properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
required:
- - resource
+ - path
type: object
- x-kubernetes-map-type: atomic
- required:
- - path
- type: object
- type: array
- type: object
- secret:
- properties:
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
+ type: array
+ type: object
+ secret:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ serviceAccountToken:
+ properties:
+ audience:
+ type: string
+ expirationSeconds:
+ format: int64
+ type: integer
+ path:
+ type: string
+ required:
+ - path
+ type: object
type: object
- x-kubernetes-map-type: atomic
- serviceAccountToken:
+ type: array
+ type: object
+ quobyte:
+ properties:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ required:
+ - registry
+ - volume
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - image
+ - monitors
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
+ required:
+ - gateway
+ - secretRef
+ - system
+ type: object
+ secret:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
properties:
- audience:
+ key:
type: string
- expirationSeconds:
- format: int64
+ mode:
+ format: int32
type: integer
path:
type: string
required:
+ - key
- path
type: object
- type: object
- type: array
- type: object
- quobyte:
- properties:
- group:
- type: string
- readOnly:
- type: boolean
- registry:
- type: string
- tenant:
- type: string
- user:
- type: string
- volume:
- type: string
- required:
- - registry
- - volume
- type: object
- rbd:
- properties:
- fsType:
- type: string
- image:
- type: string
- keyring:
- type: string
- monitors:
- items:
- type: string
- type: array
- pool:
- type: string
- readOnly:
- type: boolean
- secretRef:
+ type: array
+ optional:
+ type: boolean
+ secretName:
+ type: string
+ type: object
+ storageos:
properties:
- name:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ volumeName:
+ type: string
+ volumeNamespace:
type: string
type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - image
- - monitors
- type: object
- scaleIO:
- properties:
- fsType:
- type: string
- gateway:
- type: string
- protectionDomain:
- type: string
- readOnly:
- type: boolean
- secretRef:
+ vsphereVolume:
properties:
- name:
+ fsType:
type: string
- type: object
- x-kubernetes-map-type: atomic
- sslEnabled:
- type: boolean
- storageMode:
- type: string
- storagePool:
- type: string
- system:
- type: string
- volumeName:
- type: string
- required:
- - gateway
- - secretRef
- - system
- type: object
- secret:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- optional:
- type: boolean
- secretName:
- type: string
- type: object
- storageos:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
+ storagePolicyID:
type: string
+ storagePolicyName:
+ type: string
+ volumePath:
+ type: string
+ required:
+ - volumePath
type: object
- x-kubernetes-map-type: atomic
- volumeName:
- type: string
- volumeNamespace:
- type: string
- type: object
- vsphereVolume:
- properties:
- fsType:
- type: string
- storagePolicyID:
- type: string
- storagePolicyName:
- type: string
- volumePath:
- type: string
required:
- - volumePath
+ - name
type: object
- required:
- - name
- type: object
- type: array
- affinity:
- properties:
- nodeAffinity:
+ type: array
+ affinity:
properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- preference:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchFields:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- type: object
- x-kubernetes-map-type: atomic
- weight:
- format: int32
- type: integer
- required:
- - preference
- - weight
- type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
+ nodeAffinity:
properties:
- nodeSelectorTerms:
+ preferredDuringSchedulingIgnoredDuringExecution:
items:
properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchFields:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- type: object
- x-kubernetes-map-type: atomic
- type: array
- required:
- - nodeSelectorTerms
- type: object
- x-kubernetes-map-type: atomic
- type: object
- podAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- podAffinityTerm:
- properties:
- labelSelector:
+ preference:
properties:
matchExpressions:
items:
@@ -933,15 +812,7 @@ spec:
- operator
type: object
type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- namespaceSelector:
- properties:
- matchExpressions:
+ matchFields:
items:
properties:
key:
@@ -957,97 +828,135 @@ spec:
- operator
type: object
type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
type: object
x-kubernetes-map-type: atomic
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
+ weight:
+ format: int32
+ type: integer
required:
- - topologyKey
+ - preference
+ - weight
type: object
- weight:
- format: int32
- type: integer
- required:
- - podAffinityTerm
- - weight
- type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ properties:
+ nodeSelectorTerms:
+ items:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchFields:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
type: object
- type: object
- x-kubernetes-map-type: atomic
- namespaceSelector:
+ x-kubernetes-map-type: atomic
+ type: array
+ required:
+ - nodeSelectorTerms
+ type: object
+ x-kubernetes-map-type: atomic
+ type: object
+ podAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
+ podAffinityTerm:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaces:
+ items:
type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
+ type: array
+ topologyKey:
+ type: string
+ required:
+ - topologyKey
type: object
+ weight:
+ format: int32
+ type: integer
+ required:
+ - podAffinityTerm
+ - weight
type: object
- x-kubernetes-map-type: atomic
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
- required:
- - topologyKey
- type: object
- type: array
- type: object
- podAntiAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- podAffinityTerm:
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ items:
properties:
labelSelector:
properties:
@@ -1106,4535 +1015,4462 @@ spec:
required:
- topologyKey
type: object
- weight:
- format: int32
- type: integer
- required:
- - podAffinityTerm
- - weight
- type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- labelSelector:
+ type: array
+ type: object
+ podAntiAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
+ podAffinityTerm:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaces:
+ items:
type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
+ type: array
+ topologyKey:
+ type: string
+ required:
+ - topologyKey
type: object
- type: object
- x-kubernetes-map-type: atomic
- namespaceSelector:
+ weight:
+ format: int32
+ type: integer
+ required:
+ - podAffinityTerm
+ - weight
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ items:
properties:
- matchExpressions:
- items:
- properties:
- key:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
type: string
- operator:
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
+ type: object
type: object
+ x-kubernetes-map-type: atomic
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ required:
+ - topologyKey
type: object
- x-kubernetes-map-type: atomic
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
- required:
- - topologyKey
- type: object
- type: array
+ type: array
+ type: object
type: object
- type: object
- azblob:
- properties:
- accessTier:
- type: string
- container:
- type: string
- path:
- type: string
- prefix:
- type: string
- sasToken:
- type: string
- secretName:
- type: string
- storageAccount:
- type: string
- type: object
- backoffRetryPolicy:
- properties:
- maxRetryTimes:
- default: 2
- type: integer
- minRetryDuration:
- default: 300s
- type: string
- retryTimeout:
- default: 30m
+ azblob:
+ properties:
+ accessTier:
+ type: string
+ container:
+ type: string
+ path:
+ type: string
+ prefix:
+ type: string
+ sasToken:
+ type: string
+ secretName:
+ type: string
+ storageAccount:
+ type: string
+ type: object
+ backoffRetryPolicy:
+ properties:
+ maxRetryTimes:
+ default: 2
+ type: integer
+ minRetryDuration:
+ default: 300s
+ type: string
+ retryTimeout:
+ default: 30m
+ type: string
+ type: object
+ backupMode:
+ default: snapshot
type: string
- type: object
- backupMode:
- default: snapshot
- type: string
- backupType:
- type: string
- br:
- properties:
- checkRequirements:
- type: boolean
- checksum:
- type: boolean
- cluster:
+ backupType:
type: string
- clusterNamespace:
+ br:
+ properties:
+ checkRequirements:
+ type: boolean
+ checksum:
+ type: boolean
+ cluster:
+ type: string
+ clusterNamespace:
+ type: string
+ concurrency:
+ format: int32
+ type: integer
+ db:
+ type: string
+ logLevel:
+ type: string
+ onLine:
+ type: boolean
+ options:
+ items:
+ type: string
+ type: array
+ rateLimit:
+ type: integer
+ sendCredToTikv:
+ type: boolean
+ statusAddr:
+ type: string
+ table:
+ type: string
+ timeAgo:
+ type: string
+ required:
+ - cluster
+ type: object
+ calcSizeLevel:
+ default: all
type: string
- concurrency:
- format: int32
- type: integer
- db:
+ cleanOption:
+ properties:
+ backoffEnabled:
+ type: boolean
+ batchConcurrency:
+ format: int32
+ type: integer
+ disableBatchConcurrency:
+ type: boolean
+ pageSize:
+ format: int64
+ type: integer
+ retryCount:
+ default: 5
+ type: integer
+ routineConcurrency:
+ format: int32
+ type: integer
+ snapshotsDeleteRatio:
+ default: 1
+ type: number
+ type: object
+ cleanPolicy:
type: string
- logLevel:
+ commitTs:
type: string
- onLine:
- type: boolean
- options:
+ dumpling:
+ properties:
+ options:
+ items:
+ type: string
+ type: array
+ tableFilter:
+ items:
+ type: string
+ type: array
+ type: object
+ env:
items:
- type: string
- type: array
- rateLimit:
- type: integer
- sendCredToTikv:
- type: boolean
- statusAddr:
- type: string
- table:
- type: string
- timeAgo:
- type: string
- required:
- - cluster
- type: object
- calcSizeLevel:
- default: all
- type: string
- cleanOption:
- properties:
- backoffEnabled:
- type: boolean
- batchConcurrency:
- format: int32
- type: integer
- disableBatchConcurrency:
- type: boolean
- pageSize:
- format: int64
- type: integer
- retryCount:
- default: 5
- type: integer
- routineConcurrency:
- format: int32
- type: integer
- snapshotsDeleteRatio:
- default: 1
- type: number
- type: object
- cleanPolicy:
- type: string
- commitTs:
- type: string
- dumpling:
- properties:
- options:
- items:
- type: string
- type: array
- tableFilter:
- items:
- type: string
- type: array
- type: object
- env:
- items:
- properties:
- name:
- type: string
- value:
- type: string
- valueFrom:
properties:
- configMapKeyRef:
- properties:
- key:
- type: string
- name:
- type: string
- optional:
- type: boolean
- required:
- - key
- type: object
- x-kubernetes-map-type: atomic
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
- secretKeyRef:
+ name:
+ type: string
+ value:
+ type: string
+ valueFrom:
properties:
- key:
- type: string
- name:
- type: string
- optional:
- type: boolean
- required:
- - key
+ configMapKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ secretKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
type: object
- x-kubernetes-map-type: atomic
+ required:
+ - name
type: object
- required:
- - name
- type: object
- type: array
- federalVolumeBackupPhase:
- type: string
- from:
- properties:
- host:
- type: string
- port:
- format: int32
- type: integer
- secretName:
- type: string
- tlsClientSecretName:
- type: string
- user:
- type: string
- required:
- - host
- - secretName
- type: object
- gcs:
- properties:
- bucket:
- type: string
- bucketAcl:
- type: string
- location:
- type: string
- objectAcl:
- type: string
- path:
- type: string
- prefix:
- type: string
- projectId:
- type: string
- secretName:
- type: string
- storageClass:
- type: string
- required:
- - projectId
- type: object
- imagePullSecrets:
- items:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- type: array
- local:
- properties:
- prefix:
+ type: array
+ federalVolumeBackupPhase:
type: string
- volume:
+ from:
properties:
- awsElasticBlockStore:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- readOnly:
- type: boolean
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- azureDisk:
- properties:
- cachingMode:
- type: string
- diskName:
- type: string
- diskURI:
- type: string
- fsType:
- type: string
- kind:
- type: string
- readOnly:
- type: boolean
- required:
- - diskName
- - diskURI
- type: object
- azureFile:
- properties:
- readOnly:
- type: boolean
- secretName:
- type: string
- shareName:
- type: string
- required:
- - secretName
- - shareName
- type: object
- cephfs:
+ host:
+ type: string
+ port:
+ format: int32
+ type: integer
+ secretName:
+ type: string
+ tlsClientSecretName:
+ type: string
+ user:
+ type: string
+ required:
+ - host
+ - secretName
+ type: object
+ gcs:
+ properties:
+ bucket:
+ type: string
+ bucketAcl:
+ type: string
+ location:
+ type: string
+ objectAcl:
+ type: string
+ path:
+ type: string
+ prefix:
+ type: string
+ projectId:
+ type: string
+ secretName:
+ type: string
+ storageClass:
+ type: string
+ required:
+ - projectId
+ type: object
+ imagePullSecrets:
+ items:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ local:
+ properties:
+ prefix:
+ type: string
+ volume:
properties:
- monitors:
- items:
- type: string
- type: array
- path:
- type: string
- readOnly:
- type: boolean
- secretFile:
- type: string
- secretRef:
+ awsElasticBlockStore:
properties:
- name:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
type: string
+ required:
+ - volumeID
type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - monitors
- type: object
- cinder:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
+ azureDisk:
properties:
- name:
+ cachingMode:
+ type: string
+ diskName:
type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - diskName
+ - diskURI
type: object
- x-kubernetes-map-type: atomic
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- configMap:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- csi:
- properties:
- driver:
- type: string
- fsType:
- type: string
- nodePublishSecretRef:
+ azureFile:
properties:
- name:
+ readOnly:
+ type: boolean
+ secretName:
+ type: string
+ shareName:
type: string
+ required:
+ - secretName
+ - shareName
type: object
- x-kubernetes-map-type: atomic
- readOnly:
- type: boolean
- volumeAttributes:
- additionalProperties:
- type: string
+ cephfs:
+ properties:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - monitors
type: object
- required:
- - driver
- type: object
- downwardAPI:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- fieldRef:
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
properties:
- apiVersion:
+ key:
type: string
- fieldPath:
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
required:
- - fieldPath
+ - key
+ - path
type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
- type: string
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
- required:
- - path
- type: object
- type: array
- type: object
- emptyDir:
- properties:
- medium:
- type: string
- sizeLimit:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- ephemeral:
- properties:
- volumeClaimTemplate:
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ csi:
properties:
- metadata:
- type: object
- spec:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
properties:
- accessModes:
- items:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
+ type: string
+ type: object
+ required:
+ - driver
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
- type: array
- dataSource:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- required:
- - kind
- - name
- type: object
- x-kubernetes-map-type: atomic
- dataSourceRef:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- namespace:
- type: string
- required:
- - kind
- - name
- type: object
- resources:
- properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
- type: object
- type: object
- selector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
+ resource:
type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- storageClassName:
- type: string
- volumeMode:
- type: string
- volumeName:
- type: string
- type: object
- required:
- - spec
- type: object
- type: object
- fc:
- properties:
- fsType:
- type: string
- lun:
- format: int32
- type: integer
- readOnly:
- type: boolean
- targetWWNs:
- items:
- type: string
- type: array
- wwids:
- items:
- type: string
- type: array
- type: object
- flexVolume:
- properties:
- driver:
- type: string
- fsType:
- type: string
- options:
- additionalProperties:
- type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
type: object
- readOnly:
- type: boolean
- secretRef:
+ emptyDir:
properties:
- name:
+ medium:
type: string
+ sizeLimit:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
type: object
- x-kubernetes-map-type: atomic
- required:
- - driver
- type: object
- flocker:
- properties:
- datasetName:
- type: string
- datasetUUID:
- type: string
- type: object
- gcePersistentDisk:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- pdName:
- type: string
- readOnly:
- type: boolean
- required:
- - pdName
- type: object
- gitRepo:
- properties:
- directory:
- type: string
- repository:
- type: string
- revision:
- type: string
- required:
- - repository
- type: object
- glusterfs:
- properties:
- endpoints:
- type: string
- path:
- type: string
- readOnly:
- type: boolean
- required:
- - endpoints
- - path
- type: object
- hostPath:
- properties:
- path:
- type: string
- type:
- type: string
- required:
- - path
- type: object
- iscsi:
- properties:
- chapAuthDiscovery:
- type: boolean
- chapAuthSession:
- type: boolean
- fsType:
- type: string
- initiatorName:
- type: string
- iqn:
- type: string
- iscsiInterface:
- type: string
- lun:
- format: int32
- type: integer
- portals:
- items:
- type: string
- type: array
- readOnly:
- type: boolean
- secretRef:
+ ephemeral:
properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- targetPortal:
- type: string
- required:
- - iqn
- - lun
- - targetPortal
- type: object
- name:
- type: string
- nfs:
- properties:
- path:
- type: string
- readOnly:
- type: boolean
- server:
- type: string
- required:
- - path
- - server
- type: object
- persistentVolumeClaim:
- properties:
- claimName:
- type: string
- readOnly:
- type: boolean
- required:
- - claimName
- type: object
- photonPersistentDisk:
- properties:
- fsType:
- type: string
- pdID:
- type: string
- required:
- - pdID
- type: object
- portworxVolume:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- projected:
- properties:
- defaultMode:
- format: int32
- type: integer
- sources:
- items:
- properties:
- configMap:
- properties:
- items:
- items:
+ volumeClaimTemplate:
+ properties:
+ metadata:
+ type: object
+ spec:
+ properties:
+ accessModes:
+ items:
+ type: string
+ type: array
+ dataSource:
properties:
- key:
+ apiGroup:
type: string
- mode:
- format: int32
- type: integer
- path:
+ kind:
type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- downwardAPI:
- properties:
- items:
- items:
- properties:
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
+ name:
type: string
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
required:
- - path
+ - kind
+ - name
type: object
- type: array
- type: object
- secret:
- properties:
- items:
- items:
+ x-kubernetes-map-type: atomic
+ dataSourceRef:
properties:
- key:
+ apiGroup:
type: string
- mode:
- format: int32
- type: integer
- path:
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
type: string
required:
- - key
- - path
+ - kind
+ - name
type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- serviceAccountToken:
- properties:
- audience:
- type: string
- expirationSeconds:
- format: int64
- type: integer
- path:
- type: string
- required:
- - path
- type: object
- type: object
- type: array
- type: object
- quobyte:
- properties:
- group:
- type: string
- readOnly:
- type: boolean
- registry:
- type: string
- tenant:
- type: string
- user:
- type: string
- volume:
- type: string
- required:
- - registry
- - volume
- type: object
- rbd:
- properties:
- fsType:
- type: string
- image:
- type: string
- keyring:
- type: string
- monitors:
- items:
- type: string
- type: array
- pool:
- type: string
- readOnly:
- type: boolean
- secretRef:
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ storageClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
+ type: string
+ type: object
+ required:
+ - spec
+ type: object
+ type: object
+ fc:
properties:
- name:
+ fsType:
type: string
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - image
- - monitors
- type: object
- scaleIO:
- properties:
- fsType:
- type: string
- gateway:
- type: string
- protectionDomain:
- type: string
- readOnly:
- type: boolean
- secretRef:
+ flexVolume:
properties:
- name:
+ driver:
type: string
- type: object
- x-kubernetes-map-type: atomic
- sslEnabled:
- type: boolean
- storageMode:
- type: string
- storagePool:
- type: string
- system:
- type: string
- volumeName:
- type: string
- required:
- - gateway
- - secretRef
- - system
- type: object
- secret:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
+ fsType:
+ type: string
+ options:
+ additionalProperties:
type: string
- required:
- - key
- - path
- type: object
- type: array
- optional:
- type: boolean
- secretName:
- type: string
- type: object
- storageos:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
+ type: object
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - driver
+ type: object
+ flocker:
properties:
- name:
+ datasetName:
+ type: string
+ datasetUUID:
type: string
type: object
- x-kubernetes-map-type: atomic
- volumeName:
- type: string
- volumeNamespace:
- type: string
- type: object
- vsphereVolume:
- properties:
- fsType:
- type: string
- storagePolicyID:
- type: string
- storagePolicyName:
- type: string
- volumePath:
- type: string
- required:
- - volumePath
- type: object
- required:
- - name
- type: object
- volumeMount:
- properties:
- mountPath:
- type: string
- mountPropagation:
- type: string
- name:
- type: string
- readOnly:
- type: boolean
- subPath:
- type: string
- subPathExpr:
- type: string
- required:
- - mountPath
- - name
- type: object
- required:
- - volume
- - volumeMount
- type: object
- logStop:
- type: boolean
- logTruncateUntil:
- type: string
- podSecurityContext:
- properties:
- fsGroup:
- format: int64
- type: integer
- fsGroupChangePolicy:
- type: string
- runAsGroup:
- format: int64
- type: integer
- runAsNonRoot:
- type: boolean
- runAsUser:
- format: int64
- type: integer
- seLinuxOptions:
- properties:
- level:
- type: string
- role:
- type: string
- type:
- type: string
- user:
- type: string
- type: object
- seccompProfile:
- properties:
- localhostProfile:
- type: string
- type:
- type: string
- required:
- - type
- type: object
- supplementalGroups:
- items:
- format: int64
- type: integer
- type: array
- sysctls:
- items:
- properties:
- name:
- type: string
- value:
- type: string
- required:
- - name
- - value
- type: object
- type: array
- windowsOptions:
- properties:
- gmsaCredentialSpec:
- type: string
- gmsaCredentialSpecName:
- type: string
- hostProcess:
- type: boolean
- runAsUserName:
- type: string
- type: object
- type: object
- priorityClassName:
- type: string
- resources:
- properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- resumeGcSchedule:
- type: boolean
- s3:
- properties:
- acl:
- type: string
- bucket:
- type: string
- endpoint:
- type: string
- options:
- items:
- type: string
- type: array
- path:
- type: string
- prefix:
- type: string
- provider:
- type: string
- region:
- type: string
- secretName:
- type: string
- sse:
- type: string
- storageClass:
- type: string
- required:
- - provider
- type: object
- serviceAccount:
- type: string
- storageClassName:
- type: string
- storageSize:
- type: string
- tableFilter:
- items:
- type: string
- type: array
- tikvGCLifeTime:
- type: string
- tolerations:
- items:
- properties:
- effect:
- type: string
- key:
- type: string
- operator:
- type: string
- tolerationSeconds:
- format: int64
- type: integer
- value:
- type: string
- type: object
- type: array
- toolImage:
- type: string
- useKMS:
- type: boolean
- volumeBackupInitJobMaxActiveSeconds:
- default: 600
- type: integer
- type: object
- status:
- properties:
- backoffRetryStatus:
- items:
- properties:
- detectFailedAt:
- format: date-time
- type: string
- expectedRetryAt:
- format: date-time
- type: string
- originalReason:
- type: string
- realRetryAt:
- format: date-time
- type: string
- retryNum:
- type: integer
- retryReason:
- type: string
- type: object
- type: array
- backupPath:
- type: string
- backupSize:
- format: int64
- type: integer
- backupSizeReadable:
- type: string
- commitTs:
- type: string
- conditions:
- items:
- properties:
- command:
- type: string
- lastTransitionTime:
- format: date-time
- nullable: true
- type: string
- message:
- type: string
- reason:
- type: string
- status:
- type: string
- type:
- type: string
- required:
- - status
- - type
- type: object
- nullable: true
- type: array
- incrementalBackupSize:
- format: int64
- type: integer
- incrementalBackupSizeReadable:
- type: string
- logCheckpointTs:
- type: string
- logSubCommandStatuses:
- additionalProperties:
- properties:
- command:
- type: string
- conditions:
- items:
- properties:
- command:
- type: string
- lastTransitionTime:
- format: date-time
- nullable: true
- type: string
- message:
- type: string
- reason:
- type: string
- status:
- type: string
- type:
- type: string
- required:
- - status
- - type
- type: object
- nullable: true
- type: array
- logTruncatingUntil:
- type: string
- phase:
- type: string
- timeCompleted:
- format: date-time
- nullable: true
- type: string
- timeStarted:
- format: date-time
- nullable: true
- type: string
- type: object
- type: object
- logSuccessTruncateUntil:
- type: string
- phase:
- type: string
- progresses:
- items:
- properties:
- lastTransitionTime:
- format: date-time
- nullable: true
- type: string
- progress:
- type: number
- step:
- type: string
- type: object
- nullable: true
- type: array
- timeCompleted:
- format: date-time
- nullable: true
- type: string
- timeStarted:
- format: date-time
- nullable: true
- type: string
- timeTaken:
- type: string
- type: object
- required:
- - metadata
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- name: backupschedules.pingcap.com
-spec:
- group: pingcap.com
- names:
- kind: BackupSchedule
- listKind: BackupScheduleList
- plural: backupschedules
- shortNames:
- - bks
- singular: backupschedule
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - description: The cron format string used for backup scheduling
- jsonPath: .spec.schedule
- name: Schedule
- type: string
- - description: The max number of backups we want to keep
- jsonPath: .spec.maxBackups
- name: MaxBackups
- type: integer
- - description: How long backups we want to keep
- jsonPath: .spec.maxReservedTime
- name: MaxReservedTime
- type: string
- - description: The last backup CR name
- jsonPath: .status.lastBackup
- name: LastBackup
- priority: 1
- type: string
- - description: The last time the backup was successfully created
- jsonPath: .status.lastBackupTime
- name: LastBackupTime
- priority: 1
- type: date
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- apiVersion:
- type: string
- kind:
- type: string
- metadata:
- type: object
- spec:
- properties:
- backupTemplate:
- properties:
- additionalVolumeMounts:
- items:
- properties:
- mountPath:
- type: string
- mountPropagation:
- type: string
- name:
- type: string
- readOnly:
- type: boolean
- subPath:
- type: string
- subPathExpr:
- type: string
- required:
- - mountPath
- - name
- type: object
- type: array
- additionalVolumes:
- items:
- properties:
- awsElasticBlockStore:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- readOnly:
- type: boolean
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- azureDisk:
- properties:
- cachingMode:
- type: string
- diskName:
- type: string
- diskURI:
- type: string
- fsType:
- type: string
- kind:
- type: string
- readOnly:
- type: boolean
- required:
- - diskName
- - diskURI
- type: object
- azureFile:
- properties:
- readOnly:
- type: boolean
- secretName:
- type: string
- shareName:
- type: string
- required:
- - secretName
- - shareName
- type: object
- cephfs:
- properties:
- monitors:
- items:
- type: string
- type: array
- path:
- type: string
- readOnly:
- type: boolean
- secretFile:
- type: string
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - monitors
- type: object
- cinder:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- configMap:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- csi:
- properties:
- driver:
- type: string
- fsType:
- type: string
- nodePublishSecretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- readOnly:
- type: boolean
- volumeAttributes:
- additionalProperties:
- type: string
- type: object
- required:
- - driver
- type: object
- downwardAPI:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
- type: string
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
- required:
- - path
- type: object
- type: array
- type: object
- emptyDir:
- properties:
- medium:
- type: string
- sizeLimit:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- ephemeral:
- properties:
- volumeClaimTemplate:
- properties:
- metadata:
- type: object
- spec:
- properties:
- accessModes:
- items:
- type: string
- type: array
- dataSource:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- required:
- - kind
- - name
- type: object
- x-kubernetes-map-type: atomic
- dataSourceRef:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- namespace:
- type: string
- required:
- - kind
- - name
- type: object
- resources:
- properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- selector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- storageClassName:
- type: string
- volumeMode:
- type: string
- volumeName:
- type: string
- type: object
- required:
- - spec
- type: object
- type: object
- fc:
- properties:
- fsType:
- type: string
- lun:
- format: int32
- type: integer
- readOnly:
- type: boolean
- targetWWNs:
- items:
- type: string
- type: array
- wwids:
- items:
- type: string
- type: array
- type: object
- flexVolume:
- properties:
- driver:
- type: string
- fsType:
- type: string
- options:
- additionalProperties:
- type: string
- type: object
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- required:
- - driver
- type: object
- flocker:
- properties:
- datasetName:
- type: string
- datasetUUID:
- type: string
- type: object
- gcePersistentDisk:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- pdName:
- type: string
- readOnly:
- type: boolean
- required:
- - pdName
- type: object
- gitRepo:
- properties:
- directory:
- type: string
- repository:
- type: string
- revision:
- type: string
- required:
- - repository
- type: object
- glusterfs:
- properties:
- endpoints:
- type: string
- path:
- type: string
- readOnly:
- type: boolean
- required:
- - endpoints
- - path
- type: object
- hostPath:
- properties:
- path:
- type: string
- type:
- type: string
- required:
- - path
- type: object
- iscsi:
- properties:
- chapAuthDiscovery:
- type: boolean
- chapAuthSession:
- type: boolean
- fsType:
- type: string
- initiatorName:
- type: string
- iqn:
- type: string
- iscsiInterface:
- type: string
- lun:
- format: int32
- type: integer
- portals:
- items:
- type: string
- type: array
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- targetPortal:
- type: string
- required:
- - iqn
- - lun
- - targetPortal
- type: object
- name:
- type: string
- nfs:
- properties:
- path:
- type: string
- readOnly:
- type: boolean
- server:
- type: string
- required:
- - path
- - server
- type: object
- persistentVolumeClaim:
- properties:
- claimName:
- type: string
- readOnly:
- type: boolean
- required:
- - claimName
- type: object
- photonPersistentDisk:
- properties:
- fsType:
- type: string
- pdID:
- type: string
- required:
- - pdID
- type: object
- portworxVolume:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- projected:
- properties:
- defaultMode:
- format: int32
- type: integer
- sources:
- items:
- properties:
- configMap:
- properties:
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- downwardAPI:
- properties:
- items:
- items:
- properties:
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
- type: string
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
- required:
- - path
- type: object
- type: array
- type: object
- secret:
- properties:
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- serviceAccountToken:
- properties:
- audience:
- type: string
- expirationSeconds:
- format: int64
- type: integer
- path:
- type: string
- required:
- - path
- type: object
- type: object
- type: array
- type: object
- quobyte:
- properties:
- group:
- type: string
- readOnly:
- type: boolean
- registry:
- type: string
- tenant:
- type: string
- user:
- type: string
- volume:
- type: string
- required:
- - registry
- - volume
- type: object
- rbd:
- properties:
- fsType:
- type: string
- image:
- type: string
- keyring:
- type: string
- monitors:
- items:
- type: string
- type: array
- pool:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - image
- - monitors
- type: object
- scaleIO:
- properties:
- fsType:
- type: string
- gateway:
- type: string
- protectionDomain:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- sslEnabled:
- type: boolean
- storageMode:
- type: string
- storagePool:
- type: string
- system:
- type: string
- volumeName:
- type: string
- required:
- - gateway
- - secretRef
- - system
- type: object
- secret:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- optional:
- type: boolean
- secretName:
- type: string
- type: object
- storageos:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- volumeName:
- type: string
- volumeNamespace:
- type: string
- type: object
- vsphereVolume:
- properties:
- fsType:
- type: string
- storagePolicyID:
- type: string
- storagePolicyName:
- type: string
- volumePath:
- type: string
- required:
- - volumePath
- type: object
- required:
- - name
- type: object
- type: array
- affinity:
- properties:
- nodeAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- preference:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchFields:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- type: object
- x-kubernetes-map-type: atomic
- weight:
- format: int32
- type: integer
- required:
- - preference
- - weight
- type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
+ gcePersistentDisk:
properties:
- nodeSelectorTerms:
- items:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchFields:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- type: object
- x-kubernetes-map-type: atomic
- type: array
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
required:
- - nodeSelectorTerms
+ - pdName
type: object
- x-kubernetes-map-type: atomic
- type: object
- podAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- podAffinityTerm:
- properties:
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
- required:
- - topologyKey
- type: object
- weight:
- format: int32
- type: integer
- required:
- - podAffinityTerm
- - weight
- type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ required:
+ - repository
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - endpoints
+ - path
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ required:
+ - path
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
type: string
- required:
- - topologyKey
- type: object
- type: array
- type: object
- podAntiAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- podAffinityTerm:
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ targetPortal:
+ type: string
+ required:
+ - iqn
+ - lun
+ - targetPortal
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ required:
+ - path
+ - server
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - claimName
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ required:
+ - pdID
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
properties:
- labelSelector:
+ configMap:
properties:
- matchExpressions:
+ items:
items:
properties:
key:
type: string
- operator:
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
- values:
- items:
- type: string
- type: array
required:
- key
- - operator
+ - path
type: object
type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
+ name:
+ type: string
+ optional:
+ type: boolean
type: object
x-kubernetes-map-type: atomic
- namespaceSelector:
+ downwardAPI:
properties:
- matchExpressions:
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
+ type: object
+ secret:
+ properties:
+ items:
items:
properties:
key:
type: string
- operator:
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
- values:
- items:
- type: string
- type: array
required:
- key
- - operator
+ - path
type: object
type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
+ name:
+ type: string
+ optional:
+ type: boolean
type: object
x-kubernetes-map-type: atomic
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
+ serviceAccountToken:
+ properties:
+ audience:
+ type: string
+ expirationSeconds:
+ format: int64
+ type: integer
+ path:
+ type: string
+ required:
+ - path
+ type: object
+ type: object
+ type: array
+ type: object
+ quobyte:
+ properties:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ required:
+ - registry
+ - volume
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - image
+ - monitors
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
+ required:
+ - gateway
+ - secretRef
+ - system
+ type: object
+ secret:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
required:
- - topologyKey
- type: object
- weight:
- format: int32
- type: integer
- required:
- - podAffinityTerm
- - weight
- type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
+ - key
+ - path
type: object
- x-kubernetes-map-type: atomic
- namespaces:
- items:
+ type: array
+ optional:
+ type: boolean
+ secretName:
+ type: string
+ type: object
+ storageos:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
type: string
- type: array
- topologyKey:
- type: string
- required:
- - topologyKey
- type: object
- type: array
+ type: object
+ x-kubernetes-map-type: atomic
+ volumeName:
+ type: string
+ volumeNamespace:
+ type: string
+ type: object
+ vsphereVolume:
+ properties:
+ fsType:
+ type: string
+ storagePolicyID:
+ type: string
+ storagePolicyName:
+ type: string
+ volumePath:
+ type: string
+ required:
+ - volumePath
+ type: object
+ required:
+ - name
+ type: object
+ volumeMount:
+ properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ required:
+ - volume
+ - volumeMount
+ type: object
+ logStop:
+ type: boolean
+ logSubcommand:
+ default: start
+ type: string
+ logTruncateUntil:
+ type: string
+ podSecurityContext:
+ properties:
+ fsGroup:
+ format: int64
+ type: integer
+ fsGroupChangePolicy:
+ type: string
+ runAsGroup:
+ format: int64
+ type: integer
+ runAsNonRoot:
+ type: boolean
+ runAsUser:
+ format: int64
+ type: integer
+ seLinuxOptions:
+ properties:
+ level:
+ type: string
+ role:
+ type: string
+ type:
+ type: string
+ user:
+ type: string
+ type: object
+ seccompProfile:
+ properties:
+ localhostProfile:
+ type: string
+ type:
+ type: string
+ required:
+ - type
+ type: object
+ supplementalGroups:
+ items:
+ format: int64
+ type: integer
+ type: array
+ sysctls:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ windowsOptions:
+ properties:
+ gmsaCredentialSpec:
+ type: string
+ gmsaCredentialSpecName:
+ type: string
+ hostProcess:
+ type: boolean
+ runAsUserName:
+ type: string
+ type: object
+ type: object
+ priorityClassName:
+ type: string
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
type: object
type: object
- azblob:
+ resumeGcSchedule:
+ type: boolean
+ s3:
properties:
- accessTier:
+ acl:
type: string
- container:
+ bucket:
+ type: string
+ endpoint:
type: string
+ options:
+ items:
+ type: string
+ type: array
path:
type: string
prefix:
type: string
- sasToken:
- type: string
- secretName:
- type: string
- storageAccount:
- type: string
- type: object
- backoffRetryPolicy:
- properties:
- maxRetryTimes:
- default: 2
- type: integer
- minRetryDuration:
- default: 300s
- type: string
- retryTimeout:
- default: 30m
- type: string
- type: object
- backupMode:
- default: snapshot
- type: string
- backupType:
- type: string
- br:
- properties:
- checkRequirements:
- type: boolean
- checksum:
- type: boolean
- cluster:
- type: string
- clusterNamespace:
- type: string
- concurrency:
- format: int32
- type: integer
- db:
+ provider:
type: string
- logLevel:
+ region:
type: string
- onLine:
- type: boolean
- options:
- items:
- type: string
- type: array
- rateLimit:
- type: integer
- sendCredToTikv:
- type: boolean
- statusAddr:
+ secretName:
type: string
- table:
+ sse:
type: string
- timeAgo:
+ storageClass:
type: string
required:
- - cluster
+ - provider
type: object
- calcSizeLevel:
- default: all
+ serviceAccount:
type: string
- cleanOption:
- properties:
- backoffEnabled:
- type: boolean
- batchConcurrency:
- format: int32
- type: integer
- disableBatchConcurrency:
- type: boolean
- pageSize:
- format: int64
- type: integer
- retryCount:
- default: 5
- type: integer
- routineConcurrency:
- format: int32
- type: integer
- snapshotsDeleteRatio:
- default: 1
- type: number
- type: object
- cleanPolicy:
+ storageClassName:
type: string
- commitTs:
+ storageSize:
type: string
- dumpling:
- properties:
- options:
- items:
+ tableFilter:
+ items:
+ type: string
+ type: array
+ tikvGCLifeTime:
+ type: string
+ tolerations:
+ items:
+ properties:
+ effect:
type: string
- type: array
- tableFilter:
- items:
+ key:
type: string
- type: array
- type: object
- env:
+ operator:
+ type: string
+ tolerationSeconds:
+ format: int64
+ type: integer
+ value:
+ type: string
+ type: object
+ type: array
+ toolImage:
+ type: string
+ useKMS:
+ type: boolean
+ volumeBackupInitJobMaxActiveSeconds:
+ default: 600
+ type: integer
+ type: object
+ imagePullSecrets:
+ items:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ logBackupTemplate:
+ properties:
+ additionalVolumeMounts:
items:
properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
name:
type: string
- value:
+ readOnly:
+ type: boolean
+ subPath:
type: string
- valueFrom:
+ subPathExpr:
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
+ additionalVolumes:
+ items:
+ properties:
+ awsElasticBlockStore:
properties:
- configMapKeyRef:
- properties:
- key:
- type: string
- name:
- type: string
- optional:
- type: boolean
- required:
- - key
- type: object
- x-kubernetes-map-type: atomic
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ azureDisk:
+ properties:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - diskName
+ - diskURI
+ type: object
+ azureFile:
+ properties:
+ readOnly:
+ type: boolean
+ secretName:
+ type: string
+ shareName:
+ type: string
+ required:
+ - secretName
+ - shareName
+ type: object
+ cephfs:
+ properties:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
+ properties:
+ name:
type: string
- required:
- - resource
type: object
x-kubernetes-map-type: atomic
- secretKeyRef:
+ user:
+ type: string
+ required:
+ - monitors
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- key:
- type: string
name:
type: string
- optional:
- type: boolean
- required:
- - key
type: object
x-kubernetes-map-type: atomic
+ volumeID:
+ type: string
+ required:
+ - volumeID
type: object
- required:
- - name
- type: object
- type: array
- federalVolumeBackupPhase:
- type: string
- from:
- properties:
- host:
- type: string
- port:
- format: int32
- type: integer
- secretName:
- type: string
- tlsClientSecretName:
- type: string
- user:
- type: string
- required:
- - host
- - secretName
- type: object
- gcs:
- properties:
- bucket:
- type: string
- bucketAcl:
- type: string
- location:
- type: string
- objectAcl:
- type: string
- path:
- type: string
- prefix:
- type: string
- projectId:
- type: string
- secretName:
- type: string
- storageClass:
- type: string
- required:
- - projectId
- type: object
- imagePullSecrets:
- items:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- type: array
- local:
- properties:
- prefix:
- type: string
- volume:
- properties:
- awsElasticBlockStore:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- readOnly:
- type: boolean
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- azureDisk:
- properties:
- cachingMode:
- type: string
- diskName:
- type: string
- diskURI:
- type: string
- fsType:
- type: string
- kind:
- type: string
- readOnly:
- type: boolean
- required:
- - diskName
- - diskURI
- type: object
- azureFile:
- properties:
- readOnly:
- type: boolean
- secretName:
- type: string
- shareName:
- type: string
- required:
- - secretName
- - shareName
- type: object
- cephfs:
- properties:
- monitors:
- items:
- type: string
- type: array
- path:
- type: string
- readOnly:
- type: boolean
- secretFile:
- type: string
- secretRef:
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
properties:
- name:
+ key:
type: string
- type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - monitors
- type: object
- cinder:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
+ required:
+ - key
+ - path
type: object
- x-kubernetes-map-type: atomic
- volumeID:
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
type: string
- required:
- - volumeID
- type: object
- configMap:
- properties:
- defaultMode:
- format: int32
- type: integer
+ type: object
+ required:
+ - driver
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
items:
- items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ properties:
+ medium:
+ type: string
+ sizeLimit:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
+ properties:
+ metadata:
+ type: object
+ spec:
properties:
- key:
+ accessModes:
+ items:
+ type: string
+ type: array
+ dataSource:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ x-kubernetes-map-type: atomic
+ dataSourceRef:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ storageClassName:
type: string
- mode:
- format: int32
- type: integer
- path:
+ volumeMode:
+ type: string
+ volumeName:
type: string
- required:
- - key
- - path
type: object
- type: array
- name:
+ required:
+ - spec
+ type: object
+ type: object
+ fc:
+ properties:
+ fsType:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- csi:
- properties:
- driver:
+ type: array
+ wwids:
+ items:
type: string
- fsType:
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
type: string
- nodePublishSecretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- readOnly:
- type: boolean
- volumeAttributes:
- additionalProperties:
+ type: object
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
type: string
- type: object
- required:
- - driver
- type: object
- downwardAPI:
- properties:
- defaultMode:
- format: int32
- type: integer
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - driver
+ type: object
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - pdName
+ type: object
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ required:
+ - repository
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - endpoints
+ - path
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ required:
+ - path
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
items:
- items:
- properties:
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
- type: string
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
- required:
- - path
- type: object
- type: array
- type: object
- emptyDir:
- properties:
- medium:
type: string
- sizeLimit:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- ephemeral:
- properties:
- volumeClaimTemplate:
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ targetPortal:
+ type: string
+ required:
+ - iqn
+ - lun
+ - targetPortal
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ required:
+ - path
+ - server
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - claimName
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ required:
+ - pdID
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
properties:
- metadata:
- type: object
- spec:
+ configMap:
properties:
- accessModes:
+ items:
items:
- type: string
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
type: array
- dataSource:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- required:
- - kind
- - name
- type: object
- x-kubernetes-map-type: atomic
- dataSourceRef:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- namespace:
- type: string
- required:
- - kind
- - name
- type: object
- resources:
- properties:
- claims:
- items:
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ downwardAPI:
+ properties:
+ items:
+ items:
+ properties:
+ fieldRef:
properties:
- name:
+ apiVersion:
+ type: string
+ fieldPath:
type: string
required:
- - name
+ - fieldPath
type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- selector:
- properties:
- matchExpressions:
- items:
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
properties:
- key:
+ containerName:
type: string
- operator:
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
type: string
- values:
- items:
- type: string
- type: array
required:
- - key
- - operator
+ - resource
type: object
- type: array
- matchLabels:
- additionalProperties:
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
+ type: object
+ secret:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- storageClassName:
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
type: string
- volumeMode:
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ serviceAccountToken:
+ properties:
+ audience:
type: string
- volumeName:
+ expirationSeconds:
+ format: int64
+ type: integer
+ path:
type: string
+ required:
+ - path
type: object
- required:
- - spec
type: object
- type: object
- fc:
- properties:
- fsType:
+ type: array
+ type: object
+ quobyte:
+ properties:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ required:
+ - registry
+ - volume
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
type: string
- lun:
- format: int32
- type: integer
- readOnly:
- type: boolean
- targetWWNs:
- items:
- type: string
- type: array
- wwids:
- items:
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
type: string
- type: array
- type: object
- flexVolume:
- properties:
- driver:
- type: string
- fsType:
- type: string
- options:
- additionalProperties:
+ type: object
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - image
+ - monitors
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
type: string
- type: object
- readOnly:
- type: boolean
- secretRef:
+ type: object
+ x-kubernetes-map-type: atomic
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
+ required:
+ - gateway
+ - secretRef
+ - system
+ type: object
+ secret:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
properties:
- name:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
+ required:
+ - key
+ - path
type: object
- x-kubernetes-map-type: atomic
- required:
- - driver
- type: object
- flocker:
- properties:
- datasetName:
- type: string
- datasetUUID:
- type: string
- type: object
- gcePersistentDisk:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- pdName:
- type: string
- readOnly:
- type: boolean
- required:
- - pdName
- type: object
- gitRepo:
- properties:
- directory:
- type: string
- repository:
- type: string
- revision:
- type: string
- required:
- - repository
- type: object
- glusterfs:
- properties:
- endpoints:
- type: string
- path:
- type: string
- readOnly:
- type: boolean
- required:
- - endpoints
- - path
- type: object
- hostPath:
- properties:
- path:
- type: string
- type:
- type: string
- required:
- - path
- type: object
- iscsi:
+ type: array
+ optional:
+ type: boolean
+ secretName:
+ type: string
+ type: object
+ storageos:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ volumeName:
+ type: string
+ volumeNamespace:
+ type: string
+ type: object
+ vsphereVolume:
+ properties:
+ fsType:
+ type: string
+ storagePolicyID:
+ type: string
+ storagePolicyName:
+ type: string
+ volumePath:
+ type: string
+ required:
+ - volumePath
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ affinity:
+ properties:
+ nodeAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ preference:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchFields:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ type: object
+ x-kubernetes-map-type: atomic
+ weight:
+ format: int32
+ type: integer
+ required:
+ - preference
+ - weight
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
properties:
- chapAuthDiscovery:
- type: boolean
- chapAuthSession:
- type: boolean
- fsType:
- type: string
- initiatorName:
- type: string
- iqn:
- type: string
- iscsiInterface:
- type: string
- lun:
- format: int32
- type: integer
- portals:
+ nodeSelectorTerms:
items:
- type: string
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchFields:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ type: object
+ x-kubernetes-map-type: atomic
type: array
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- targetPortal:
- type: string
- required:
- - iqn
- - lun
- - targetPortal
- type: object
- name:
- type: string
- nfs:
- properties:
- path:
- type: string
- readOnly:
- type: boolean
- server:
- type: string
- required:
- - path
- - server
- type: object
- persistentVolumeClaim:
- properties:
- claimName:
- type: string
- readOnly:
- type: boolean
- required:
- - claimName
- type: object
- photonPersistentDisk:
- properties:
- fsType:
- type: string
- pdID:
- type: string
- required:
- - pdID
- type: object
- portworxVolume:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- volumeID:
- type: string
required:
- - volumeID
+ - nodeSelectorTerms
type: object
- projected:
- properties:
- defaultMode:
- format: int32
- type: integer
- sources:
- items:
+ x-kubernetes-map-type: atomic
+ type: object
+ podAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ podAffinityTerm:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ required:
+ - topologyKey
+ type: object
+ weight:
+ format: int32
+ type: integer
+ required:
+ - podAffinityTerm
+ - weight
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaceSelector:
properties:
- configMap:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ required:
+ - topologyKey
+ type: object
+ type: array
+ type: object
+ podAntiAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ podAffinityTerm:
+ properties:
+ labelSelector:
properties:
- items:
+ matchExpressions:
items:
properties:
key:
type: string
- mode:
- format: int32
- type: integer
- path:
+ operator:
type: string
+ values:
+ items:
+ type: string
+ type: array
required:
- key
- - path
+ - operator
type: object
type: array
- name:
- type: string
- optional:
- type: boolean
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
type: object
x-kubernetes-map-type: atomic
- downwardAPI:
- properties:
- items:
- items:
- properties:
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
- type: string
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
- required:
- - path
- type: object
- type: array
- type: object
- secret:
+ namespaceSelector:
properties:
- items:
+ matchExpressions:
items:
properties:
key:
type: string
- mode:
- format: int32
- type: integer
- path:
+ operator:
type: string
+ values:
+ items:
+ type: string
+ type: array
required:
- key
- - path
+ - operator
type: object
type: array
- name:
- type: string
- optional:
- type: boolean
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
type: object
x-kubernetes-map-type: atomic
- serviceAccountToken:
- properties:
- audience:
- type: string
- expirationSeconds:
- format: int64
- type: integer
- path:
- type: string
- required:
- - path
- type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ required:
+ - topologyKey
type: object
- type: array
- type: object
- quobyte:
- properties:
- group:
- type: string
- readOnly:
- type: boolean
- registry:
- type: string
- tenant:
- type: string
- user:
- type: string
- volume:
- type: string
- required:
- - registry
- - volume
- type: object
- rbd:
- properties:
- fsType:
- type: string
- image:
- type: string
- keyring:
- type: string
- monitors:
- items:
- type: string
- type: array
- pool:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - image
- - monitors
- type: object
- scaleIO:
- properties:
- fsType:
- type: string
- gateway:
- type: string
- protectionDomain:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- sslEnabled:
- type: boolean
- storageMode:
- type: string
- storagePool:
- type: string
- system:
- type: string
- volumeName:
- type: string
- required:
- - gateway
- - secretRef
- - system
- type: object
- secret:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
+ weight:
+ format: int32
+ type: integer
+ required:
+ - podAffinityTerm
+ - weight
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaceSelector:
properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
type: object
- type: array
- optional:
- type: boolean
- secretName:
- type: string
- type: object
- storageos:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
+ x-kubernetes-map-type: atomic
+ namespaces:
+ items:
type: string
- type: object
- x-kubernetes-map-type: atomic
- volumeName:
- type: string
- volumeNamespace:
- type: string
- type: object
- vsphereVolume:
- properties:
- fsType:
- type: string
- storagePolicyID:
- type: string
- storagePolicyName:
- type: string
- volumePath:
- type: string
- required:
- - volumePath
- type: object
- required:
- - name
- type: object
- volumeMount:
- properties:
- mountPath:
- type: string
- mountPropagation:
- type: string
- name:
- type: string
- readOnly:
- type: boolean
- subPath:
- type: string
- subPathExpr:
- type: string
- required:
- - mountPath
- - name
+ type: array
+ topologyKey:
+ type: string
+ required:
+ - topologyKey
+ type: object
+ type: array
type: object
- required:
- - volume
- - volumeMount
type: object
- logStop:
- type: boolean
- logTruncateUntil:
- type: string
- podSecurityContext:
+ azblob:
properties:
- fsGroup:
- format: int64
- type: integer
- fsGroupChangePolicy:
+ accessTier:
+ type: string
+ container:
+ type: string
+ path:
+ type: string
+ prefix:
+ type: string
+ sasToken:
+ type: string
+ secretName:
+ type: string
+ storageAccount:
type: string
- runAsGroup:
- format: int64
- type: integer
- runAsNonRoot:
- type: boolean
- runAsUser:
- format: int64
- type: integer
- seLinuxOptions:
- properties:
- level:
- type: string
- role:
- type: string
- type:
- type: string
- user:
- type: string
- type: object
- seccompProfile:
- properties:
- localhostProfile:
- type: string
- type:
- type: string
- required:
- - type
- type: object
- supplementalGroups:
- items:
- format: int64
- type: integer
- type: array
- sysctls:
- items:
- properties:
- name:
- type: string
- value:
- type: string
- required:
- - name
- - value
- type: object
- type: array
- windowsOptions:
- properties:
- gmsaCredentialSpec:
- type: string
- gmsaCredentialSpecName:
- type: string
- hostProcess:
- type: boolean
- runAsUserName:
- type: string
- type: object
type: object
- priorityClassName:
- type: string
- resources:
+ backoffRetryPolicy:
properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
+ maxRetryTimes:
+ default: 2
+ type: integer
+ minRetryDuration:
+ default: 300s
+ type: string
+ retryTimeout:
+ default: 30m
+ type: string
type: object
- resumeGcSchedule:
- type: boolean
- s3:
+ backupMode:
+ default: snapshot
+ type: string
+ backupType:
+ type: string
+ br:
properties:
- acl:
+ checkRequirements:
+ type: boolean
+ checksum:
+ type: boolean
+ cluster:
+ type: string
+ clusterNamespace:
type: string
- bucket:
+ concurrency:
+ format: int32
+ type: integer
+ db:
type: string
- endpoint:
+ logLevel:
type: string
+ onLine:
+ type: boolean
options:
items:
type: string
type: array
- path:
- type: string
- prefix:
- type: string
- provider:
- type: string
- region:
- type: string
- secretName:
+ rateLimit:
+ type: integer
+ sendCredToTikv:
+ type: boolean
+ statusAddr:
type: string
- sse:
+ table:
type: string
- storageClass:
+ timeAgo:
type: string
required:
- - provider
+ - cluster
type: object
- serviceAccount:
- type: string
- storageClassName:
+ calcSizeLevel:
+ default: all
type: string
- storageSize:
+ cleanOption:
+ properties:
+ backoffEnabled:
+ type: boolean
+ batchConcurrency:
+ format: int32
+ type: integer
+ disableBatchConcurrency:
+ type: boolean
+ pageSize:
+ format: int64
+ type: integer
+ retryCount:
+ default: 5
+ type: integer
+ routineConcurrency:
+ format: int32
+ type: integer
+ snapshotsDeleteRatio:
+ default: 1
+ type: number
+ type: object
+ cleanPolicy:
type: string
- tableFilter:
- items:
- type: string
- type: array
- tikvGCLifeTime:
+ commitTs:
type: string
- tolerations:
- items:
- properties:
- effect:
- type: string
- key:
- type: string
- operator:
+ dumpling:
+ properties:
+ options:
+ items:
type: string
- tolerationSeconds:
- format: int64
- type: integer
- value:
+ type: array
+ tableFilter:
+ items:
type: string
- type: object
- type: array
- toolImage:
- type: string
- useKMS:
- type: boolean
- volumeBackupInitJobMaxActiveSeconds:
- default: 600
- type: integer
- type: object
- imagePullSecrets:
- items:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- type: array
- logBackupTemplate:
- properties:
- additionalVolumeMounts:
+ type: array
+ type: object
+ env:
items:
properties:
- mountPath:
- type: string
- mountPropagation:
- type: string
name:
type: string
- readOnly:
- type: boolean
- subPath:
- type: string
- subPathExpr:
+ value:
type: string
+ valueFrom:
+ properties:
+ configMapKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ secretKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ type: object
required:
- - mountPath
- name
type: object
type: array
- additionalVolumes:
- items:
- properties:
- awsElasticBlockStore:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- readOnly:
- type: boolean
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- azureDisk:
- properties:
- cachingMode:
- type: string
- diskName:
- type: string
- diskURI:
- type: string
- fsType:
- type: string
- kind:
- type: string
- readOnly:
- type: boolean
- required:
- - diskName
- - diskURI
- type: object
- azureFile:
- properties:
- readOnly:
- type: boolean
- secretName:
- type: string
- shareName:
- type: string
- required:
- - secretName
- - shareName
- type: object
- cephfs:
- properties:
- monitors:
- items:
+ federalVolumeBackupPhase:
+ type: string
+ from:
+ properties:
+ host:
+ type: string
+ port:
+ format: int32
+ type: integer
+ secretName:
+ type: string
+ tlsClientSecretName:
+ type: string
+ user:
+ type: string
+ required:
+ - host
+ - secretName
+ type: object
+ gcs:
+ properties:
+ bucket:
+ type: string
+ bucketAcl:
+ type: string
+ location:
+ type: string
+ objectAcl:
+ type: string
+ path:
+ type: string
+ prefix:
+ type: string
+ projectId:
+ type: string
+ secretName:
+ type: string
+ storageClass:
+ type: string
+ required:
+ - projectId
+ type: object
+ imagePullSecrets:
+ items:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ local:
+ properties:
+ prefix:
+ type: string
+ volume:
+ properties:
+ awsElasticBlockStore:
+ properties:
+ fsType:
type: string
- type: array
- path:
- type: string
- readOnly:
- type: boolean
- secretFile:
- type: string
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - monitors
- type: object
- cinder:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ azureDisk:
+ properties:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - diskName
+ - diskURI
+ type: object
+ azureFile:
+ properties:
+ readOnly:
+ type: boolean
+ secretName:
+ type: string
+ shareName:
+ type: string
+ required:
+ - secretName
+ - shareName
+ type: object
+ cephfs:
+ properties:
+ monitors:
+ items:
type: string
- type: object
- x-kubernetes-map-type: atomic
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- configMap:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
properties:
- key:
+ name:
type: string
- mode:
- format: int32
- type: integer
- path:
+ type: object
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - monitors
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
type: string
- required:
- - key
- - path
type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- csi:
- properties:
- driver:
- type: string
- fsType:
- type: string
- nodePublishSecretRef:
- properties:
- name:
+ x-kubernetes-map-type: atomic
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
type: string
- type: object
- x-kubernetes-map-type: atomic
- readOnly:
- type: boolean
- volumeAttributes:
- additionalProperties:
+ type: object
+ required:
+ - driver
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ properties:
+ medium:
type: string
- type: object
- required:
- - driver
- type: object
- downwardAPI:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
+ sizeLimit:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
properties:
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
+ metadata:
type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
- type: string
- resourceFieldRef:
+ spec:
properties:
- containerName:
+ accessModes:
+ items:
+ type: string
+ type: array
+ dataSource:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ x-kubernetes-map-type: atomic
+ dataSourceRef:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ storageClassName:
type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
+ volumeMode:
+ type: string
+ volumeName:
type: string
- required:
- - resource
type: object
- x-kubernetes-map-type: atomic
required:
- - path
+ - spec
+ type: object
+ type: object
+ fc:
+ properties:
+ fsType:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - driver
+ type: object
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - pdName
+ type: object
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ required:
+ - repository
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - endpoints
+ - path
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ required:
+ - path
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
type: object
- type: array
- type: object
- emptyDir:
- properties:
- medium:
- type: string
- sizeLimit:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- ephemeral:
- properties:
- volumeClaimTemplate:
- properties:
- metadata:
- type: object
- spec:
+ x-kubernetes-map-type: atomic
+ targetPortal:
+ type: string
+ required:
+ - iqn
+ - lun
+ - targetPortal
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ required:
+ - path
+ - server
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - claimName
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ required:
+ - pdID
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
properties:
- accessModes:
- items:
- type: string
- type: array
- dataSource:
+ configMap:
properties:
- apiGroup:
- type: string
- kind:
- type: string
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
name:
type: string
- required:
- - kind
- - name
+ optional:
+ type: boolean
type: object
x-kubernetes-map-type: atomic
- dataSourceRef:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- namespace:
- type: string
- required:
- - kind
- - name
- type: object
- resources:
+ downwardAPI:
properties:
- claims:
+ items:
items:
properties:
- name:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
required:
- - name
+ - path
type: object
type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
type: object
- selector:
+ secret:
properties:
- matchExpressions:
+ items:
items:
properties:
key:
type: string
- operator:
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
- values:
- items:
- type: string
- type: array
required:
- key
- - operator
+ - path
type: object
type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
+ name:
+ type: string
+ optional:
+ type: boolean
type: object
x-kubernetes-map-type: atomic
- storageClassName:
- type: string
- volumeMode:
+ serviceAccountToken:
+ properties:
+ audience:
+ type: string
+ expirationSeconds:
+ format: int64
+ type: integer
+ path:
+ type: string
+ required:
+ - path
+ type: object
+ type: object
+ type: array
+ type: object
+ quobyte:
+ properties:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ required:
+ - registry
+ - volume
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - image
+ - monitors
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
+ required:
+ - gateway
+ - secretRef
+ - system
+ type: object
+ secret:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
type: string
- volumeName:
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
+ required:
+ - key
+ - path
type: object
- required:
- - spec
- type: object
- type: object
- fc:
- properties:
- fsType:
- type: string
- lun:
- format: int32
- type: integer
- readOnly:
- type: boolean
- targetWWNs:
- items:
+ type: array
+ optional:
+ type: boolean
+ secretName:
type: string
- type: array
- wwids:
- items:
+ type: object
+ storageos:
+ properties:
+ fsType:
type: string
- type: array
- type: object
- flexVolume:
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ volumeName:
+ type: string
+ volumeNamespace:
+ type: string
+ type: object
+ vsphereVolume:
+ properties:
+ fsType:
+ type: string
+ storagePolicyID:
+ type: string
+ storagePolicyName:
+ type: string
+ volumePath:
+ type: string
+ required:
+ - volumePath
+ type: object
+ required:
+ - name
+ type: object
+ volumeMount:
+ properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ required:
+ - volume
+ - volumeMount
+ type: object
+ logStop:
+ type: boolean
+ logSubcommand:
+ default: start
+ type: string
+ logTruncateUntil:
+ type: string
+ podSecurityContext:
+ properties:
+ fsGroup:
+ format: int64
+ type: integer
+ fsGroupChangePolicy:
+ type: string
+ runAsGroup:
+ format: int64
+ type: integer
+ runAsNonRoot:
+ type: boolean
+ runAsUser:
+ format: int64
+ type: integer
+ seLinuxOptions:
+ properties:
+ level:
+ type: string
+ role:
+ type: string
+ type:
+ type: string
+ user:
+ type: string
+ type: object
+ seccompProfile:
+ properties:
+ localhostProfile:
+ type: string
+ type:
+ type: string
+ required:
+ - type
+ type: object
+ supplementalGroups:
+ items:
+ format: int64
+ type: integer
+ type: array
+ sysctls:
+ items:
properties:
- driver:
+ name:
type: string
- fsType:
+ value:
type: string
- options:
- additionalProperties:
- type: string
- type: object
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
required:
- - driver
+ - name
+ - value
type: object
- flocker:
+ type: array
+ windowsOptions:
+ properties:
+ gmsaCredentialSpec:
+ type: string
+ gmsaCredentialSpecName:
+ type: string
+ hostProcess:
+ type: boolean
+ runAsUserName:
+ type: string
+ type: object
+ type: object
+ priorityClassName:
+ type: string
+ resources:
+ properties:
+ claims:
+ items:
properties:
- datasetName:
- type: string
- datasetUUID:
+ name:
type: string
+ required:
+ - name
type: object
- gcePersistentDisk:
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ resumeGcSchedule:
+ type: boolean
+ s3:
+ properties:
+ acl:
+ type: string
+ bucket:
+ type: string
+ endpoint:
+ type: string
+ options:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ prefix:
+ type: string
+ provider:
+ type: string
+ region:
+ type: string
+ secretName:
+ type: string
+ sse:
+ type: string
+ storageClass:
+ type: string
+ required:
+ - provider
+ type: object
+ serviceAccount:
+ type: string
+ storageClassName:
+ type: string
+ storageSize:
+ type: string
+ tableFilter:
+ items:
+ type: string
+ type: array
+ tikvGCLifeTime:
+ type: string
+ tolerations:
+ items:
+ properties:
+ effect:
+ type: string
+ key:
+ type: string
+ operator:
+ type: string
+ tolerationSeconds:
+ format: int64
+ type: integer
+ value:
+ type: string
+ type: object
+ type: array
+ toolImage:
+ type: string
+ useKMS:
+ type: boolean
+ volumeBackupInitJobMaxActiveSeconds:
+ default: 600
+ type: integer
+ type: object
+ maxBackups:
+ format: int32
+ type: integer
+ maxReservedTime:
+ type: string
+ pause:
+ type: boolean
+ schedule:
+ type: string
+ storageClassName:
+ type: string
+ storageSize:
+ type: string
+ required:
+ - backupTemplate
+ - schedule
+ type: object
+ status:
+ properties:
+ allBackupCleanTime:
+ format: date-time
+ type: string
+ lastBackup:
+ type: string
+ lastBackupTime:
+ format: date-time
+ type: string
+ logBackup:
+ type: string
+ type: object
+ required:
+ - metadata
+ - spec
+ type: object
+ served: true
+ storage: true
+ subresources: {}
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.15.0
+ name: backups.pingcap.com
+spec:
+ group: pingcap.com
+ names:
+ kind: Backup
+ listKind: BackupList
+ plural: backups
+ shortNames:
+ - bk
+ singular: backup
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: the type of backup, such as full, db, table. Only used when Mode
+ = snapshot.
+ jsonPath: .spec.backupType
+ name: Type
+ type: string
+ - description: the mode of backup, such as snapshot, log.
+ jsonPath: .spec.backupMode
+ name: Mode
+ type: string
+ - description: The current status of the backup
+ jsonPath: .status.phase
+ name: Status
+ type: string
+ - description: The full path of backup data
+ jsonPath: .status.backupPath
+ name: BackupPath
+ type: string
+ - description: The data size of the backup
+ jsonPath: .status.backupSizeReadable
+ name: BackupSize
+ type: string
+ - description: The real size of volume snapshot backup, only valid to volume snapshot
+ backup
+ jsonPath: .status.incrementalBackupSizeReadable
+ name: IncrementalBackupSize
+ priority: 10
+ type: string
+ - description: The commit ts of the backup
+ jsonPath: .status.commitTs
+ name: CommitTS
+ type: string
+ - description: The log backup truncate until ts
+ jsonPath: .status.logSuccessTruncateUntil
+ name: LogTruncateUntil
+ type: string
+ - description: The time at which the backup was started
+ jsonPath: .status.timeStarted
+ name: Started
+ priority: 1
+ type: date
+ - description: The time at which the backup was completed
+ jsonPath: .status.timeCompleted
+ name: Completed
+ priority: 1
+ type: date
+ - description: The time that the backup takes
+ jsonPath: .status.timeTaken
+ name: TimeTaken
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ properties:
+ apiVersion:
+ type: string
+ kind:
+ type: string
+ metadata:
+ type: object
+ spec:
+ properties:
+ additionalVolumeMounts:
+ items:
+ properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ required:
+ - mountPath
+ - name
+ type: object
+ type: array
+ additionalVolumes:
+ items:
+ properties:
+ awsElasticBlockStore:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ azureDisk:
+ properties:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - diskName
+ - diskURI
+ type: object
+ azureFile:
+ properties:
+ readOnly:
+ type: boolean
+ secretName:
+ type: string
+ shareName:
+ type: string
+ required:
+ - secretName
+ - shareName
+ type: object
+ cephfs:
+ properties:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- pdName:
+ name:
type: string
- readOnly:
- type: boolean
- required:
- - pdName
type: object
- gitRepo:
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - monitors
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- directory:
- type: string
- repository:
- type: string
- revision:
+ name:
type: string
- required:
- - repository
type: object
- glusterfs:
+ x-kubernetes-map-type: atomic
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
properties:
- endpoints:
- type: string
- path:
+ name:
type: string
- readOnly:
- type: boolean
- required:
- - endpoints
- - path
type: object
- hostPath:
- properties:
- path:
- type: string
- type:
- type: string
- required:
- - path
+ x-kubernetes-map-type: atomic
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
+ type: string
type: object
- iscsi:
- properties:
- chapAuthDiscovery:
- type: boolean
- chapAuthSession:
- type: boolean
- fsType:
- type: string
- initiatorName:
- type: string
- iqn:
- type: string
- iscsiInterface:
- type: string
- lun:
- format: int32
- type: integer
- portals:
- items:
+ required:
+ - driver
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
- type: array
- readOnly:
- type: boolean
- secretRef:
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ properties:
+ medium:
+ type: string
+ sizeLimit:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
+ properties:
+ metadata:
+ type: object
+ spec:
properties:
- name:
+ accessModes:
+ items:
+ type: string
+ type: array
+ dataSource:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ x-kubernetes-map-type: atomic
+ dataSourceRef:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ storageClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
type: string
type: object
- x-kubernetes-map-type: atomic
- targetPortal:
- type: string
required:
- - iqn
- - lun
- - targetPortal
+ - spec
type: object
- name:
+ type: object
+ fc:
+ properties:
+ fsType:
type: string
- nfs:
- properties:
- path:
- type: string
- readOnly:
- type: boolean
- server:
- type: string
- required:
- - path
- - server
- type: object
- persistentVolumeClaim:
- properties:
- claimName:
- type: string
- readOnly:
- type: boolean
- required:
- - claimName
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
type: object
- photonPersistentDisk:
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- fsType:
- type: string
- pdID:
+ name:
type: string
- required:
- - pdID
type: object
- portworxVolume:
+ x-kubernetes-map-type: atomic
+ required:
+ - driver
+ type: object
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - pdName
+ type: object
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ required:
+ - repository
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - endpoints
+ - path
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ required:
+ - path
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- volumeID:
+ name:
type: string
- required:
- - volumeID
type: object
- projected:
- properties:
- defaultMode:
- format: int32
- type: integer
- sources:
- items:
+ x-kubernetes-map-type: atomic
+ targetPortal:
+ type: string
+ required:
+ - iqn
+ - lun
+ - targetPortal
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ required:
+ - path
+ - server
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - claimName
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ required:
+ - pdID
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
+ properties:
+ configMap:
properties:
- configMap:
- properties:
- items:
- items:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ downwardAPI:
+ properties:
+ items:
+ items:
+ properties:
+ fieldRef:
properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
+ apiVersion:
type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- downwardAPI:
- properties:
- items:
- items:
- properties:
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
+ fieldPath:
type: string
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
required:
- - path
+ - fieldPath
type: object
- type: array
- type: object
- secret:
- properties:
- items:
- items:
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
properties:
- key:
+ containerName:
type: string
- mode:
- format: int32
- type: integer
- path:
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
type: string
required:
- - key
- - path
+ - resource
type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- serviceAccountToken:
- properties:
- audience:
- type: string
- expirationSeconds:
- format: int64
- type: integer
- path:
- type: string
- required:
- - path
- type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
type: object
- type: array
- type: object
- quobyte:
- properties:
- group:
- type: string
- readOnly:
- type: boolean
- registry:
- type: string
- tenant:
- type: string
- user:
- type: string
- volume:
- type: string
- required:
- - registry
- - volume
- type: object
- rbd:
- properties:
- fsType:
- type: string
- image:
- type: string
- keyring:
- type: string
- monitors:
- items:
- type: string
- type: array
- pool:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - image
- - monitors
- type: object
- scaleIO:
- properties:
- fsType:
- type: string
- gateway:
- type: string
- protectionDomain:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- sslEnabled:
- type: boolean
- storageMode:
- type: string
- storagePool:
- type: string
- system:
- type: string
- volumeName:
- type: string
- required:
- - gateway
- - secretRef
- - system
- type: object
- secret:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
+ secret:
properties:
- key:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ serviceAccountToken:
+ properties:
+ audience:
type: string
- mode:
- format: int32
+ expirationSeconds:
+ format: int64
type: integer
path:
type: string
required:
- - key
- path
type: object
- type: array
- optional:
- type: boolean
- secretName:
- type: string
- type: object
- storageos:
+ type: object
+ type: array
+ type: object
+ quobyte:
+ properties:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ required:
+ - registry
+ - volume
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- volumeName:
- type: string
- volumeNamespace:
+ name:
type: string
type: object
- vsphereVolume:
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - image
+ - monitors
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- fsType:
- type: string
- storagePolicyID:
- type: string
- storagePolicyName:
- type: string
- volumePath:
+ name:
type: string
- required:
- - volumePath
type: object
+ x-kubernetes-map-type: atomic
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
required:
- - name
+ - gateway
+ - secretRef
+ - system
type: object
- type: array
- affinity:
- properties:
- nodeAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- preference:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchFields:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- type: object
- x-kubernetes-map-type: atomic
- weight:
- format: int32
- type: integer
- required:
- - preference
- - weight
- type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
+ secret:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
properties:
- nodeSelectorTerms:
- items:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchFields:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- type: object
- x-kubernetes-map-type: atomic
- type: array
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
required:
- - nodeSelectorTerms
+ - key
+ - path
type: object
- x-kubernetes-map-type: atomic
- type: object
- podAffinity:
+ type: array
+ optional:
+ type: boolean
+ secretName:
+ type: string
+ type: object
+ storageos:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ volumeName:
+ type: string
+ volumeNamespace:
+ type: string
+ type: object
+ vsphereVolume:
+ properties:
+ fsType:
+ type: string
+ storagePolicyID:
+ type: string
+ storagePolicyName:
+ type: string
+ volumePath:
+ type: string
+ required:
+ - volumePath
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ affinity:
+ properties:
+ nodeAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ preference:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchFields:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ type: object
+ x-kubernetes-map-type: atomic
+ weight:
+ format: int32
+ type: integer
+ required:
+ - preference
+ - weight
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
properties:
- preferredDuringSchedulingIgnoredDuringExecution:
+ nodeSelectorTerms:
items:
properties:
- podAffinityTerm:
- properties:
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- namespaces:
- items:
+ matchExpressions:
+ items:
+ properties:
+ key:
type: string
- type: array
- topologyKey:
- type: string
- required:
- - topologyKey
- type: object
- weight:
- format: int32
- type: integer
- required:
- - podAffinityTerm
- - weight
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchFields:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
type: object
+ x-kubernetes-map-type: atomic
type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
+ required:
+ - nodeSelectorTerms
+ type: object
+ x-kubernetes-map-type: atomic
+ type: object
+ podAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ podAffinityTerm:
properties:
labelSelector:
properties:
@@ -5693,82 +5529,82 @@ spec:
required:
- topologyKey
type: object
- type: array
- type: object
- podAntiAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
+ weight:
+ format: int32
+ type: integer
+ required:
+ - podAffinityTerm
+ - weight
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ labelSelector:
properties:
- podAffinityTerm:
- properties:
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- namespaces:
- items:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
type: string
- type: array
- topologyKey:
- type: string
- required:
- - topologyKey
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
type: object
- weight:
- format: int32
- type: integer
- required:
- - podAffinityTerm
- - weight
type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
+ x-kubernetes-map-type: atomic
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ required:
+ - topologyKey
+ type: object
+ type: array
+ type: object
+ podAntiAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ podAffinityTerm:
properties:
labelSelector:
properties:
@@ -5827,1164 +5663,1337 @@ spec:
required:
- topologyKey
type: object
- type: array
- type: object
- type: object
- azblob:
- properties:
- accessTier:
- type: string
- container:
- type: string
- path:
- type: string
- prefix:
- type: string
- sasToken:
- type: string
- secretName:
- type: string
- storageAccount:
- type: string
- type: object
- backoffRetryPolicy:
- properties:
- maxRetryTimes:
- default: 2
- type: integer
- minRetryDuration:
- default: 300s
- type: string
- retryTimeout:
- default: 30m
- type: string
- type: object
- backupMode:
- default: snapshot
- type: string
- backupType:
- type: string
- br:
- properties:
- checkRequirements:
- type: boolean
- checksum:
- type: boolean
- cluster:
- type: string
- clusterNamespace:
- type: string
- concurrency:
- format: int32
- type: integer
- db:
- type: string
- logLevel:
- type: string
- onLine:
- type: boolean
- options:
+ weight:
+ format: int32
+ type: integer
+ required:
+ - podAffinityTerm
+ - weight
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
items:
- type: string
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ required:
+ - topologyKey
+ type: object
type: array
- rateLimit:
- type: integer
- sendCredToTikv:
- type: boolean
- statusAddr:
- type: string
- table:
- type: string
- timeAgo:
- type: string
- required:
- - cluster
type: object
- calcSizeLevel:
- default: all
+ type: object
+ azblob:
+ properties:
+ accessTier:
+ type: string
+ container:
+ type: string
+ path:
+ type: string
+ prefix:
+ type: string
+ sasToken:
+ type: string
+ secretName:
+ type: string
+ storageAccount:
+ type: string
+ type: object
+ backoffRetryPolicy:
+ properties:
+ maxRetryTimes:
+ default: 2
+ type: integer
+ minRetryDuration:
+ default: 300s
+ type: string
+ retryTimeout:
+ default: 30m
+ type: string
+ type: object
+ backupMode:
+ default: snapshot
+ type: string
+ backupType:
+ type: string
+ br:
+ properties:
+ checkRequirements:
+ type: boolean
+ checksum:
+ type: boolean
+ cluster:
+ type: string
+ clusterNamespace:
+ type: string
+ concurrency:
+ format: int32
+ type: integer
+ db:
+ type: string
+ logLevel:
+ type: string
+ onLine:
+ type: boolean
+ options:
+ items:
+ type: string
+ type: array
+ rateLimit:
+ type: integer
+ sendCredToTikv:
+ type: boolean
+ statusAddr:
type: string
- cleanOption:
- properties:
- backoffEnabled:
- type: boolean
- batchConcurrency:
- format: int32
- type: integer
- disableBatchConcurrency:
- type: boolean
- pageSize:
- format: int64
- type: integer
- retryCount:
- default: 5
- type: integer
- routineConcurrency:
- format: int32
- type: integer
- snapshotsDeleteRatio:
- default: 1
- type: number
- type: object
- cleanPolicy:
+ table:
type: string
- commitTs:
+ timeAgo:
type: string
- dumpling:
- properties:
- options:
- items:
- type: string
- type: array
- tableFilter:
- items:
- type: string
- type: array
- type: object
- env:
+ required:
+ - cluster
+ type: object
+ calcSizeLevel:
+ default: all
+ type: string
+ cleanOption:
+ properties:
+ backoffEnabled:
+ type: boolean
+ batchConcurrency:
+ format: int32
+ type: integer
+ disableBatchConcurrency:
+ type: boolean
+ pageSize:
+ format: int64
+ type: integer
+ retryCount:
+ default: 5
+ type: integer
+ routineConcurrency:
+ format: int32
+ type: integer
+ snapshotsDeleteRatio:
+ default: 1
+ type: number
+ type: object
+ cleanPolicy:
+ type: string
+ commitTs:
+ type: string
+ dumpling:
+ properties:
+ options:
+ items:
+ type: string
+ type: array
+ tableFilter:
items:
+ type: string
+ type: array
+ type: object
+ env:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ valueFrom:
properties:
- name:
- type: string
- value:
- type: string
- valueFrom:
+ configMapKeyRef:
properties:
- configMapKeyRef:
- properties:
- key:
- type: string
- name:
- type: string
- optional:
- type: boolean
- required:
- - key
- type: object
- x-kubernetes-map-type: atomic
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
- secretKeyRef:
- properties:
- key:
- type: string
- name:
- type: string
- optional:
- type: boolean
- required:
- - key
- type: object
- x-kubernetes-map-type: atomic
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
type: object
- required:
- - name
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ secretKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
type: object
- type: array
- federalVolumeBackupPhase:
+ required:
+ - name
+ type: object
+ type: array
+ federalVolumeBackupPhase:
+ type: string
+ from:
+ properties:
+ host:
type: string
- from:
- properties:
- host:
- type: string
- port:
- format: int32
- type: integer
- secretName:
- type: string
- tlsClientSecretName:
- type: string
- user:
- type: string
- required:
- - host
- - secretName
- type: object
- gcs:
- properties:
- bucket:
- type: string
- bucketAcl:
- type: string
- location:
- type: string
- objectAcl:
- type: string
- path:
- type: string
- prefix:
- type: string
- projectId:
- type: string
- secretName:
- type: string
- storageClass:
- type: string
- required:
- - projectId
- type: object
- imagePullSecrets:
- items:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- type: array
- local:
+ port:
+ format: int32
+ type: integer
+ secretName:
+ type: string
+ tlsClientSecretName:
+ type: string
+ user:
+ type: string
+ required:
+ - host
+ - secretName
+ type: object
+ gcs:
+ properties:
+ bucket:
+ type: string
+ bucketAcl:
+ type: string
+ location:
+ type: string
+ objectAcl:
+ type: string
+ path:
+ type: string
+ prefix:
+ type: string
+ projectId:
+ type: string
+ secretName:
+ type: string
+ storageClass:
+ type: string
+ required:
+ - projectId
+ type: object
+ imagePullSecrets:
+ items:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ local:
+ properties:
+ prefix:
+ type: string
+ volume:
properties:
- prefix:
- type: string
- volume:
+ awsElasticBlockStore:
properties:
- awsElasticBlockStore:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- readOnly:
- type: boolean
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- azureDisk:
- properties:
- cachingMode:
- type: string
- diskName:
- type: string
- diskURI:
- type: string
- fsType:
- type: string
- kind:
- type: string
- readOnly:
- type: boolean
- required:
- - diskName
- - diskURI
- type: object
- azureFile:
- properties:
- readOnly:
- type: boolean
- secretName:
- type: string
- shareName:
- type: string
- required:
- - secretName
- - shareName
- type: object
- cephfs:
- properties:
- monitors:
- items:
- type: string
- type: array
- path:
- type: string
- readOnly:
- type: boolean
- secretFile:
- type: string
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - monitors
- type: object
- cinder:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- configMap:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- csi:
- properties:
- driver:
- type: string
- fsType:
- type: string
- nodePublishSecretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- readOnly:
- type: boolean
- volumeAttributes:
- additionalProperties:
- type: string
- type: object
- required:
- - driver
- type: object
- downwardAPI:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
- type: string
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
- required:
- - path
- type: object
- type: array
- type: object
- emptyDir:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ azureDisk:
+ properties:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - diskName
+ - diskURI
+ type: object
+ azureFile:
+ properties:
+ readOnly:
+ type: boolean
+ secretName:
+ type: string
+ shareName:
+ type: string
+ required:
+ - secretName
+ - shareName
+ type: object
+ cephfs:
+ properties:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
properties:
- medium:
+ name:
type: string
- sizeLimit:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- ephemeral:
- properties:
- volumeClaimTemplate:
- properties:
- metadata:
- type: object
- spec:
- properties:
- accessModes:
- items:
- type: string
- type: array
- dataSource:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- required:
- - kind
- - name
- type: object
- x-kubernetes-map-type: atomic
- dataSourceRef:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- namespace:
- type: string
- required:
- - kind
- - name
- type: object
- resources:
- properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- selector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- storageClassName:
- type: string
- volumeMode:
- type: string
- volumeName:
- type: string
- type: object
- required:
- - spec
- type: object
type: object
- fc:
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - monitors
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- fsType:
+ name:
type: string
- lun:
- format: int32
- type: integer
- readOnly:
- type: boolean
- targetWWNs:
- items:
- type: string
- type: array
- wwids:
- items:
- type: string
- type: array
type: object
- flexVolume:
- properties:
- driver:
- type: string
- fsType:
- type: string
- options:
- additionalProperties:
+ x-kubernetes-map-type: atomic
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
type: string
- type: object
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- required:
- - driver
- type: object
- flocker:
- properties:
- datasetName:
- type: string
- datasetUUID:
- type: string
- type: object
- gcePersistentDisk:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- pdName:
- type: string
- readOnly:
- type: boolean
- required:
- - pdName
- type: object
- gitRepo:
- properties:
- directory:
- type: string
- repository:
- type: string
- revision:
- type: string
- required:
- - repository
- type: object
- glusterfs:
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
properties:
- endpoints:
- type: string
- path:
+ name:
type: string
- readOnly:
- type: boolean
- required:
- - endpoints
- - path
type: object
- hostPath:
- properties:
- path:
- type: string
- type:
- type: string
- required:
- - path
+ x-kubernetes-map-type: atomic
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
+ type: string
type: object
- iscsi:
- properties:
- chapAuthDiscovery:
- type: boolean
- chapAuthSession:
- type: boolean
- fsType:
- type: string
- initiatorName:
- type: string
- iqn:
- type: string
- iscsiInterface:
- type: string
- lun:
- format: int32
- type: integer
- portals:
- items:
+ required:
+ - driver
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
- type: array
- readOnly:
- type: boolean
- secretRef:
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ properties:
+ medium:
+ type: string
+ sizeLimit:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
+ properties:
+ metadata:
+ type: object
+ spec:
properties:
- name:
+ accessModes:
+ items:
+ type: string
+ type: array
+ dataSource:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ x-kubernetes-map-type: atomic
+ dataSourceRef:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ storageClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
type: string
type: object
- x-kubernetes-map-type: atomic
- targetPortal:
- type: string
required:
- - iqn
- - lun
- - targetPortal
+ - spec
type: object
- name:
+ type: object
+ fc:
+ properties:
+ fsType:
type: string
- nfs:
- properties:
- path:
- type: string
- readOnly:
- type: boolean
- server:
- type: string
- required:
- - path
- - server
- type: object
- persistentVolumeClaim:
- properties:
- claimName:
- type: string
- readOnly:
- type: boolean
- required:
- - claimName
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
type: object
- photonPersistentDisk:
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- fsType:
- type: string
- pdID:
+ name:
type: string
- required:
- - pdID
type: object
- portworxVolume:
+ x-kubernetes-map-type: atomic
+ required:
+ - driver
+ type: object
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - pdName
+ type: object
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ required:
+ - repository
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - endpoints
+ - path
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ required:
+ - path
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- volumeID:
+ name:
type: string
- required:
- - volumeID
type: object
- projected:
- properties:
- defaultMode:
- format: int32
- type: integer
- sources:
- items:
+ x-kubernetes-map-type: atomic
+ targetPortal:
+ type: string
+ required:
+ - iqn
+ - lun
+ - targetPortal
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ required:
+ - path
+ - server
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - claimName
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ required:
+ - pdID
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
+ properties:
+ configMap:
properties:
- configMap:
- properties:
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- downwardAPI:
- properties:
- items:
- items:
- properties:
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
- type: string
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ downwardAPI:
+ properties:
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
required:
- - path
+ - fieldPath
type: object
- type: array
- type: object
- secret:
- properties:
- items:
- items:
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
properties:
- key:
+ containerName:
type: string
- mode:
- format: int32
- type: integer
- path:
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
type: string
required:
- - key
- - path
+ - resource
type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- serviceAccountToken:
- properties:
- audience:
- type: string
- expirationSeconds:
- format: int64
- type: integer
- path:
- type: string
- required:
- - path
- type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
type: object
- type: array
- type: object
- quobyte:
- properties:
- group:
- type: string
- readOnly:
- type: boolean
- registry:
- type: string
- tenant:
- type: string
- user:
- type: string
- volume:
- type: string
- required:
- - registry
- - volume
- type: object
- rbd:
- properties:
- fsType:
- type: string
- image:
- type: string
- keyring:
- type: string
- monitors:
- items:
- type: string
- type: array
- pool:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - image
- - monitors
- type: object
- scaleIO:
- properties:
- fsType:
- type: string
- gateway:
- type: string
- protectionDomain:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- sslEnabled:
- type: boolean
- storageMode:
- type: string
- storagePool:
- type: string
- system:
- type: string
- volumeName:
- type: string
- required:
- - gateway
- - secretRef
- - system
- type: object
- secret:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
+ secret:
properties:
- key:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
type: string
- mode:
- format: int32
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ serviceAccountToken:
+ properties:
+ audience:
+ type: string
+ expirationSeconds:
+ format: int64
type: integer
path:
type: string
required:
- - key
- path
type: object
- type: array
- optional:
- type: boolean
- secretName:
- type: string
- type: object
- storageos:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- volumeName:
- type: string
- volumeNamespace:
- type: string
- type: object
- vsphereVolume:
+ type: object
+ type: array
+ type: object
+ quobyte:
+ properties:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ required:
+ - registry
+ - volume
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- fsType:
- type: string
- storagePolicyID:
- type: string
- storagePolicyName:
- type: string
- volumePath:
+ name:
type: string
- required:
- - volumePath
type: object
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
required:
- - name
+ - image
+ - monitors
type: object
- volumeMount:
+ scaleIO:
properties:
- mountPath:
+ fsType:
type: string
- mountPropagation:
+ gateway:
type: string
- name:
+ protectionDomain:
type: string
readOnly:
type: boolean
- subPath:
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ sslEnabled:
+ type: boolean
+ storageMode:
type: string
- subPathExpr:
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
type: string
required:
- - mountPath
- - name
+ - gateway
+ - secretRef
+ - system
type: object
- required:
- - volume
- - volumeMount
- type: object
- logStop:
- type: boolean
- logTruncateUntil:
- type: string
- podSecurityContext:
- properties:
- fsGroup:
- format: int64
- type: integer
- fsGroupChangePolicy:
- type: string
- runAsGroup:
- format: int64
- type: integer
- runAsNonRoot:
- type: boolean
- runAsUser:
- format: int64
- type: integer
- seLinuxOptions:
+ secret:
properties:
- level:
- type: string
- role:
- type: string
- type:
- type: string
- user:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ optional:
+ type: boolean
+ secretName:
type: string
type: object
- seccompProfile:
+ storageos:
properties:
- localhostProfile:
+ fsType:
type: string
- type:
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ volumeName:
+ type: string
+ volumeNamespace:
type: string
- required:
- - type
type: object
- supplementalGroups:
- items:
- format: int64
- type: integer
- type: array
- sysctls:
- items:
- properties:
- name:
- type: string
- value:
- type: string
- required:
- - name
- - value
- type: object
- type: array
- windowsOptions:
+ vsphereVolume:
properties:
- gmsaCredentialSpec:
+ fsType:
type: string
- gmsaCredentialSpecName:
+ storagePolicyID:
type: string
- hostProcess:
- type: boolean
- runAsUserName:
+ storagePolicyName:
+ type: string
+ volumePath:
type: string
+ required:
+ - volumePath
type: object
+ required:
+ - name
type: object
- priorityClassName:
- type: string
- resources:
+ volumeMount:
properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ required:
+ - mountPath
+ - name
type: object
- resumeGcSchedule:
+ required:
+ - volume
+ - volumeMount
+ type: object
+ logStop:
+ type: boolean
+ logSubcommand:
+ default: start
+ type: string
+ logTruncateUntil:
+ type: string
+ podSecurityContext:
+ properties:
+ fsGroup:
+ format: int64
+ type: integer
+ fsGroupChangePolicy:
+ type: string
+ runAsGroup:
+ format: int64
+ type: integer
+ runAsNonRoot:
type: boolean
- s3:
+ runAsUser:
+ format: int64
+ type: integer
+ seLinuxOptions:
properties:
- acl:
- type: string
- bucket:
+ level:
type: string
- endpoint:
+ role:
type: string
- options:
- items:
- type: string
- type: array
- path:
+ type:
type: string
- prefix:
+ user:
type: string
- provider:
+ type: object
+ seccompProfile:
+ properties:
+ localhostProfile:
type: string
- region:
+ type:
type: string
- secretName:
+ required:
+ - type
+ type: object
+ supplementalGroups:
+ items:
+ format: int64
+ type: integer
+ type: array
+ sysctls:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ windowsOptions:
+ properties:
+ gmsaCredentialSpec:
type: string
- sse:
+ gmsaCredentialSpecName:
type: string
- storageClass:
+ hostProcess:
+ type: boolean
+ runAsUserName:
type: string
- required:
- - provider
type: object
- serviceAccount:
+ type: object
+ priorityClassName:
+ type: string
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ resumeGcSchedule:
+ type: boolean
+ s3:
+ properties:
+ acl:
type: string
- storageClassName:
+ bucket:
type: string
- storageSize:
+ endpoint:
type: string
- tableFilter:
+ options:
items:
type: string
type: array
- tikvGCLifeTime:
+ path:
type: string
- tolerations:
- items:
- properties:
- effect:
- type: string
- key:
- type: string
- operator:
- type: string
- tolerationSeconds:
- format: int64
- type: integer
- value:
- type: string
- type: object
- type: array
- toolImage:
+ prefix:
type: string
- useKMS:
- type: boolean
- volumeBackupInitJobMaxActiveSeconds:
- default: 600
- type: integer
+ provider:
+ type: string
+ region:
+ type: string
+ secretName:
+ type: string
+ sse:
+ type: string
+ storageClass:
+ type: string
+ required:
+ - provider
type: object
- maxBackups:
- format: int32
- type: integer
- maxReservedTime:
- type: string
- pause:
- type: boolean
- schedule:
+ serviceAccount:
type: string
storageClassName:
type: string
storageSize:
type: string
- required:
- - backupTemplate
- - schedule
+ tableFilter:
+ items:
+ type: string
+ type: array
+ tikvGCLifeTime:
+ type: string
+ tolerations:
+ items:
+ properties:
+ effect:
+ type: string
+ key:
+ type: string
+ operator:
+ type: string
+ tolerationSeconds:
+ format: int64
+ type: integer
+ value:
+ type: string
+ type: object
+ type: array
+ toolImage:
+ type: string
+ useKMS:
+ type: boolean
+ volumeBackupInitJobMaxActiveSeconds:
+ default: 600
+ type: integer
type: object
status:
properties:
- allBackupCleanTime:
- format: date-time
+ backoffRetryStatus:
+ items:
+ properties:
+ detectFailedAt:
+ format: date-time
+ type: string
+ expectedRetryAt:
+ format: date-time
+ type: string
+ originalReason:
+ type: string
+ realRetryAt:
+ format: date-time
+ type: string
+ retryNum:
+ type: integer
+ retryReason:
+ type: string
+ type: object
+ type: array
+ backupPath:
type: string
- lastBackup:
+ backupSize:
+ format: int64
+ type: integer
+ backupSizeReadable:
type: string
- lastBackupTime:
+ commitTs:
+ type: string
+ conditions:
+ items:
+ properties:
+ command:
+ type: string
+ lastTransitionTime:
+ format: date-time
+ nullable: true
+ type: string
+ message:
+ type: string
+ reason:
+ type: string
+ status:
+ type: string
+ type:
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ nullable: true
+ type: array
+ incrementalBackupSize:
+ format: int64
+ type: integer
+ incrementalBackupSizeReadable:
+ type: string
+ logCheckpointTs:
+ type: string
+ logSubCommandStatuses:
+ additionalProperties:
+ properties:
+ command:
+ type: string
+ conditions:
+ items:
+ properties:
+ command:
+ type: string
+ lastTransitionTime:
+ format: date-time
+ nullable: true
+ type: string
+ message:
+ type: string
+ reason:
+ type: string
+ status:
+ type: string
+ type:
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ nullable: true
+ type: array
+ logTruncatingUntil:
+ type: string
+ phase:
+ type: string
+ timeCompleted:
+ format: date-time
+ nullable: true
+ type: string
+ timeStarted:
+ format: date-time
+ nullable: true
+ type: string
+ type: object
+ type: object
+ logSuccessTruncateUntil:
+ type: string
+ phase:
+ type: string
+ progresses:
+ items:
+ properties:
+ lastTransitionTime:
+ format: date-time
+ nullable: true
+ type: string
+ progress:
+ type: number
+ step:
+ type: string
+ type: object
+ nullable: true
+ type: array
+ timeCompleted:
format: date-time
+ nullable: true
type: string
- logBackup:
+ timeStarted:
+ format: date-time
+ nullable: true
+ type: string
+ timeTaken:
type: string
type: object
required:
diff --git a/manifests/crd/v1/pingcap.com_backups.yaml b/manifests/crd/v1/pingcap.com_backups.yaml
index 753a1d33ca..b63416a139 100644
--- a/manifests/crd/v1/pingcap.com_backups.yaml
+++ b/manifests/crd/v1/pingcap.com_backups.yaml
@@ -2138,6 +2138,9 @@ spec:
type: object
logStop:
type: boolean
+ logSubcommand:
+ default: start
+ type: string
logTruncateUntil:
type: string
podSecurityContext:
diff --git a/manifests/crd/v1/pingcap.com_backupschedules.yaml b/manifests/crd/v1/pingcap.com_backupschedules.yaml
index fadc331a7d..bdf30a8f11 100644
--- a/manifests/crd/v1/pingcap.com_backupschedules.yaml
+++ b/manifests/crd/v1/pingcap.com_backupschedules.yaml
@@ -2113,6 +2113,9 @@ spec:
type: object
logStop:
type: boolean
+ logSubcommand:
+ default: start
+ type: string
logTruncateUntil:
type: string
podSecurityContext:
@@ -4346,6 +4349,9 @@ spec:
type: object
logStop:
type: boolean
+ logSubcommand:
+ default: start
+ type: string
logTruncateUntil:
type: string
podSecurityContext:
diff --git a/manifests/federation-crd.yaml b/manifests/federation-crd.yaml
index 0a6ae36d68..742c6627d4 100644
--- a/manifests/federation-crd.yaml
+++ b/manifests/federation-crd.yaml
@@ -4,35 +4,41 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
- name: volumebackups.federation.pingcap.com
+ name: volumebackupschedules.federation.pingcap.com
spec:
group: federation.pingcap.com
names:
- kind: VolumeBackup
- listKind: VolumeBackupList
- plural: volumebackups
+ kind: VolumeBackupSchedule
+ listKind: VolumeBackupScheduleList
+ plural: volumebackupschedules
shortNames:
- - vbk
- singular: volumebackup
+ - vbks
+ singular: volumebackupschedule
scope: Namespaced
versions:
- additionalPrinterColumns:
- - description: The current status of the backup
- jsonPath: .status.phase
- name: Status
- type: string
- - description: The data size of the backup
- jsonPath: .status.backupSizeReadable
- name: BackupSize
+ - description: The cron format string used for backup scheduling
+ jsonPath: .spec.schedule
+ name: Schedule
type: string
- - description: The commit ts of the backup
- jsonPath: .status.commitTs
- name: CommitTS
+ - description: The max number of backups we want to keep
+ jsonPath: .spec.maxBackups
+ name: MaxBackups
+ type: integer
+ - description: How long backups we want to keep
+ jsonPath: .spec.maxReservedTime
+ name: MaxReservedTime
type: string
- - description: The time that volume backup federation takes
- jsonPath: .status.timeTaken
- name: TimeTaken
+ - description: The last backup CR name
+ jsonPath: .status.lastBackup
+ name: LastBackup
+ priority: 1
type: string
+ - description: The last time the backup was successfully created
+ jsonPath: .status.lastBackupTime
+ name: LastBackupTime
+ priority: 1
+ type: date
- jsonPath: .metadata.creationTimestamp
name: Age
type: date
@@ -46,1781 +52,1732 @@ spec:
type: string
metadata:
type: object
- skipGC:
- default: false
- type: boolean
spec:
properties:
- clusters:
- items:
- properties:
- k8sClusterName:
- type: string
- tcName:
- type: string
- tcNamespace:
- type: string
- type: object
- type: array
- template:
+ backupTemplate:
properties:
- additionalVolumeMounts:
+ clusters:
items:
properties:
- mountPath:
- type: string
- mountPropagation:
- type: string
- name:
+ k8sClusterName:
type: string
- readOnly:
- type: boolean
- subPath:
+ tcName:
type: string
- subPathExpr:
+ tcNamespace:
type: string
- required:
- - mountPath
- - name
type: object
type: array
- additionalVolumes:
- items:
- properties:
- awsElasticBlockStore:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- readOnly:
- type: boolean
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- azureDisk:
+ template:
+ properties:
+ additionalVolumeMounts:
+ items:
properties:
- cachingMode:
- type: string
- diskName:
- type: string
- diskURI:
+ mountPath:
type: string
- fsType:
+ mountPropagation:
type: string
- kind:
+ name:
type: string
readOnly:
type: boolean
- required:
- - diskName
- - diskURI
- type: object
- azureFile:
- properties:
- readOnly:
- type: boolean
- secretName:
+ subPath:
type: string
- shareName:
+ subPathExpr:
type: string
required:
- - secretName
- - shareName
+ - mountPath
+ - name
type: object
- cephfs:
+ type: array
+ additionalVolumes:
+ items:
properties:
- monitors:
- items:
- type: string
- type: array
- path:
- type: string
- readOnly:
- type: boolean
- secretFile:
- type: string
- secretRef:
+ awsElasticBlockStore:
properties:
- name:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
type: string
+ required:
+ - volumeID
type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - monitors
- type: object
- cinder:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
+ azureDisk:
properties:
- name:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
type: string
+ readOnly:
+ type: boolean
+ required:
+ - diskName
+ - diskURI
type: object
- x-kubernetes-map-type: atomic
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- configMap:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- csi:
- properties:
- driver:
- type: string
- fsType:
- type: string
- nodePublishSecretRef:
+ azureFile:
properties:
- name:
+ readOnly:
+ type: boolean
+ secretName:
type: string
+ shareName:
+ type: string
+ required:
+ - secretName
+ - shareName
type: object
- x-kubernetes-map-type: atomic
- readOnly:
- type: boolean
- volumeAttributes:
- additionalProperties:
- type: string
- type: object
- required:
- - driver
- type: object
- downwardAPI:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
+ cephfs:
+ properties:
+ monitors:
+ items:
type: string
- resourceFieldRef:
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - monitors
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
properties:
- containerName:
+ key:
type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
required:
- - resource
+ - key
+ - path
type: object
- x-kubernetes-map-type: atomic
- required:
- - path
- type: object
- type: array
- type: object
- emptyDir:
- properties:
- medium:
- type: string
- sizeLimit:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- ephemeral:
- properties:
- volumeClaimTemplate:
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ csi:
properties:
- metadata:
- type: object
- spec:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
properties:
- accessModes:
- items:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
+ type: string
+ type: object
+ required:
+ - driver
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
- type: array
- dataSource:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- required:
- - kind
- - name
- type: object
- x-kubernetes-map-type: atomic
- dataSourceRef:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- namespace:
- type: string
- required:
- - kind
- - name
- type: object
- resources:
- properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
- type: object
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ properties:
+ medium:
+ type: string
+ sizeLimit:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
+ properties:
+ metadata:
type: object
- selector:
+ spec:
properties:
- matchExpressions:
+ accessModes:
items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
type: string
- type: object
- type: object
- x-kubernetes-map-type: atomic
- storageClassName:
- type: string
- volumeMode:
- type: string
- volumeName:
- type: string
+ type: array
+ dataSource:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ x-kubernetes-map-type: atomic
+ dataSourceRef:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ x-kubernetes-map-type: atomic
+ storageClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
+ type: string
+ type: object
+ required:
+ - spec
+ type: object
+ type: object
+ fc:
+ properties:
+ fsType:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
type: object
+ x-kubernetes-map-type: atomic
required:
- - spec
+ - driver
type: object
- type: object
- fc:
- properties:
- fsType:
- type: string
- lun:
- format: int32
- type: integer
- readOnly:
- type: boolean
- targetWWNs:
- items:
- type: string
- type: array
- wwids:
- items:
- type: string
- type: array
- type: object
- flexVolume:
- properties:
- driver:
- type: string
- fsType:
- type: string
- options:
- additionalProperties:
- type: string
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
type: object
- readOnly:
- type: boolean
- secretRef:
+ gcePersistentDisk:
properties:
- name:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
type: string
+ readOnly:
+ type: boolean
+ required:
+ - pdName
type: object
- x-kubernetes-map-type: atomic
- required:
- - driver
- type: object
- flocker:
- properties:
- datasetName:
- type: string
- datasetUUID:
- type: string
- type: object
- gcePersistentDisk:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- pdName:
- type: string
- readOnly:
- type: boolean
- required:
- - pdName
- type: object
- gitRepo:
- properties:
- directory:
- type: string
- repository:
- type: string
- revision:
- type: string
- required:
- - repository
- type: object
- glusterfs:
- properties:
- endpoints:
- type: string
- path:
- type: string
- readOnly:
- type: boolean
- required:
- - endpoints
- - path
- type: object
- hostPath:
- properties:
- path:
- type: string
- type:
- type: string
- required:
- - path
- type: object
- iscsi:
- properties:
- chapAuthDiscovery:
- type: boolean
- chapAuthSession:
- type: boolean
- fsType:
- type: string
- initiatorName:
- type: string
- iqn:
- type: string
- iscsiInterface:
- type: string
- lun:
- format: int32
- type: integer
- portals:
- items:
- type: string
- type: array
- readOnly:
- type: boolean
- secretRef:
+ gitRepo:
properties:
- name:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
type: string
+ required:
+ - repository
type: object
- x-kubernetes-map-type: atomic
- targetPortal:
- type: string
- required:
- - iqn
- - lun
- - targetPortal
- type: object
- name:
- type: string
- nfs:
- properties:
- path:
- type: string
- readOnly:
- type: boolean
- server:
- type: string
- required:
- - path
- - server
- type: object
- persistentVolumeClaim:
- properties:
- claimName:
- type: string
- readOnly:
- type: boolean
- required:
- - claimName
- type: object
- photonPersistentDisk:
- properties:
- fsType:
- type: string
- pdID:
- type: string
- required:
- - pdID
- type: object
- portworxVolume:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- projected:
- properties:
- defaultMode:
- format: int32
- type: integer
- sources:
- items:
- properties:
- configMap:
- properties:
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- downwardAPI:
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - endpoints
+ - path
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ required:
+ - path
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ targetPortal:
+ type: string
+ required:
+ - iqn
+ - lun
+ - targetPortal
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ required:
+ - path
+ - server
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - claimName
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ required:
+ - pdID
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
properties:
- items:
- items:
- properties:
- fieldRef:
+ configMap:
+ properties:
+ items:
+ items:
properties:
- apiVersion:
+ key:
type: string
- fieldPath:
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
required:
- - fieldPath
+ - key
+ - path
type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
- type: string
- resourceFieldRef:
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ downwardAPI:
+ properties:
+ items:
+ items:
properties:
- containerName:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
+ type: object
+ secret:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
required:
- - resource
+ - key
+ - path
type: object
- x-kubernetes-map-type: atomic
- required:
- - path
- type: object
- type: array
- type: object
- secret:
- properties:
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- serviceAccountToken:
- properties:
- audience:
- type: string
- expirationSeconds:
- format: int64
- type: integer
- path:
- type: string
- required:
- - path
- type: object
- type: object
- type: array
- type: object
- quobyte:
- properties:
- group:
- type: string
- readOnly:
- type: boolean
- registry:
- type: string
- tenant:
- type: string
- user:
- type: string
- volume:
- type: string
- required:
- - registry
- - volume
- type: object
- rbd:
- properties:
- fsType:
- type: string
- image:
- type: string
- keyring:
- type: string
- monitors:
- items:
- type: string
- type: array
- pool:
- type: string
- readOnly:
- type: boolean
- secretRef:
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ serviceAccountToken:
+ properties:
+ audience:
+ type: string
+ expirationSeconds:
+ format: int64
+ type: integer
+ path:
+ type: string
+ required:
+ - path
+ type: object
+ type: object
+ type: array
+ type: object
+ quobyte:
properties:
- name:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
type: string
+ required:
+ - registry
+ - volume
type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - image
- - monitors
- type: object
- scaleIO:
- properties:
- fsType:
- type: string
- gateway:
- type: string
- protectionDomain:
- type: string
- readOnly:
- type: boolean
- secretRef:
+ rbd:
properties:
- name:
+ fsType:
type: string
- type: object
- x-kubernetes-map-type: atomic
- sslEnabled:
- type: boolean
- storageMode:
- type: string
- storagePool:
- type: string
- system:
- type: string
- volumeName:
- type: string
- required:
- - gateway
- - secretRef
- - system
- type: object
- secret:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
type: string
- required:
- - key
- - path
- type: object
- type: array
- optional:
- type: boolean
- secretName:
- type: string
- type: object
- storageos:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ user:
type: string
+ required:
+ - image
+ - monitors
type: object
- x-kubernetes-map-type: atomic
- volumeName:
- type: string
- volumeNamespace:
- type: string
- type: object
- vsphereVolume:
- properties:
- fsType:
- type: string
- storagePolicyID:
- type: string
- storagePolicyName:
- type: string
- volumePath:
- type: string
- required:
- - volumePath
- type: object
- required:
- - name
- type: object
- type: array
- azblob:
- properties:
- accessTier:
- type: string
- container:
- type: string
- path:
- type: string
- prefix:
- type: string
- sasToken:
- type: string
- secretName:
- type: string
- storageAccount:
- type: string
- type: object
- br:
- properties:
- checkRequirements:
- type: boolean
- concurrency:
- format: int32
- type: integer
- options:
- items:
- type: string
- type: array
- sendCredToTikv:
- type: boolean
- type: object
- calcSizeLevel:
- default: all
- type: string
- cleanPolicy:
- type: string
- env:
- items:
- properties:
- name:
- type: string
- value:
- type: string
- valueFrom:
- properties:
- configMapKeyRef:
+ scaleIO:
properties:
- key:
+ fsType:
type: string
- name:
+ gateway:
type: string
- optional:
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ sslEnabled:
type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
required:
- - key
+ - gateway
+ - secretRef
+ - system
type: object
- x-kubernetes-map-type: atomic
- fieldRef:
+ secret:
properties:
- apiVersion:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ optional:
+ type: boolean
+ secretName:
+ type: string
+ type: object
+ storageos:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ volumeName:
type: string
- fieldPath:
+ volumeNamespace:
type: string
- required:
- - fieldPath
type: object
- x-kubernetes-map-type: atomic
- resourceFieldRef:
+ vsphereVolume:
properties:
- containerName:
+ fsType:
type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
+ storagePolicyID:
type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
- secretKeyRef:
- properties:
- key:
+ storagePolicyName:
type: string
- name:
+ volumePath:
type: string
- optional:
- type: boolean
required:
- - key
+ - volumePath
type: object
- x-kubernetes-map-type: atomic
+ required:
+ - name
type: object
- required:
- - name
- type: object
- type: array
- gcs:
- properties:
- bucket:
- type: string
- bucketAcl:
- type: string
- location:
- type: string
- objectAcl:
- type: string
- path:
- type: string
- prefix:
- type: string
- projectId:
- type: string
- secretName:
- type: string
- storageClass:
+ type: array
+ azblob:
+ properties:
+ accessTier:
+ type: string
+ container:
+ type: string
+ path:
+ type: string
+ prefix:
+ type: string
+ sasToken:
+ type: string
+ secretName:
+ type: string
+ storageAccount:
+ type: string
+ type: object
+ br:
+ properties:
+ checkRequirements:
+ type: boolean
+ concurrency:
+ format: int32
+ type: integer
+ options:
+ items:
+ type: string
+ type: array
+ sendCredToTikv:
+ type: boolean
+ type: object
+ calcSizeLevel:
+ default: all
type: string
- required:
- - projectId
- type: object
- imagePullSecrets:
- items:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- type: array
- local:
- properties:
- prefix:
+ cleanPolicy:
type: string
- volume:
+ env:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ valueFrom:
+ properties:
+ configMapKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ secretKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ gcs:
properties:
- awsElasticBlockStore:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- readOnly:
- type: boolean
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- azureDisk:
- properties:
- cachingMode:
- type: string
- diskName:
- type: string
- diskURI:
- type: string
- fsType:
- type: string
- kind:
- type: string
- readOnly:
- type: boolean
- required:
- - diskName
- - diskURI
- type: object
- azureFile:
- properties:
- readOnly:
- type: boolean
- secretName:
- type: string
- shareName:
- type: string
- required:
- - secretName
- - shareName
- type: object
- cephfs:
+ bucket:
+ type: string
+ bucketAcl:
+ type: string
+ location:
+ type: string
+ objectAcl:
+ type: string
+ path:
+ type: string
+ prefix:
+ type: string
+ projectId:
+ type: string
+ secretName:
+ type: string
+ storageClass:
+ type: string
+ required:
+ - projectId
+ type: object
+ imagePullSecrets:
+ items:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ local:
+ properties:
+ prefix:
+ type: string
+ volume:
properties:
- monitors:
- items:
- type: string
- type: array
- path:
- type: string
- readOnly:
- type: boolean
- secretFile:
- type: string
- secretRef:
+ awsElasticBlockStore:
properties:
- name:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
type: string
+ required:
+ - volumeID
type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - monitors
- type: object
- cinder:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
+ azureDisk:
properties:
- name:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
type: string
+ kind:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - diskName
+ - diskURI
type: object
- x-kubernetes-map-type: atomic
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- configMap:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- csi:
- properties:
- driver:
- type: string
- fsType:
- type: string
- nodePublishSecretRef:
+ azureFile:
properties:
- name:
+ readOnly:
+ type: boolean
+ secretName:
+ type: string
+ shareName:
type: string
+ required:
+ - secretName
+ - shareName
type: object
- x-kubernetes-map-type: atomic
- readOnly:
- type: boolean
- volumeAttributes:
- additionalProperties:
- type: string
+ cephfs:
+ properties:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - monitors
type: object
- required:
- - driver
- type: object
- downwardAPI:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- fieldRef:
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
properties:
- apiVersion:
+ key:
type: string
- fieldPath:
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
required:
- - fieldPath
+ - key
+ - path
type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
type: string
- resourceFieldRef:
+ type: object
+ required:
+ - driver
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
required:
- - resource
+ - path
type: object
- x-kubernetes-map-type: atomic
- required:
- - path
- type: object
- type: array
- type: object
- emptyDir:
- properties:
- medium:
- type: string
- sizeLimit:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- ephemeral:
- properties:
- volumeClaimTemplate:
+ type: array
+ type: object
+ emptyDir:
properties:
- metadata:
- type: object
- spec:
+ medium:
+ type: string
+ sizeLimit:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
properties:
- accessModes:
- items:
- type: string
- type: array
- dataSource:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- required:
- - kind
- - name
- type: object
- x-kubernetes-map-type: atomic
- dataSourceRef:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- namespace:
- type: string
- required:
- - kind
- - name
+ metadata:
type: object
- resources:
+ spec:
properties:
- claims:
+ accessModes:
items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
+ type: string
type: array
- x-kubernetes-list-map-keys:
+ dataSource:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ required:
+ - kind
- name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
+ x-kubernetes-map-type: atomic
+ dataSourceRef:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - kind
+ - name
type: object
- type: object
- selector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
+ type: object
type: object
+ x-kubernetes-map-type: atomic
+ storageClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
+ type: string
type: object
- x-kubernetes-map-type: atomic
- storageClassName:
- type: string
- volumeMode:
- type: string
- volumeName:
+ required:
+ - spec
+ type: object
+ type: object
+ fc:
+ properties:
+ fsType:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
type: string
type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - driver
+ type: object
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
required:
- - spec
+ - pdName
type: object
- type: object
- fc:
- properties:
- fsType:
- type: string
- lun:
- format: int32
- type: integer
- readOnly:
- type: boolean
- targetWWNs:
- items:
- type: string
- type: array
- wwids:
- items:
- type: string
- type: array
- type: object
- flexVolume:
- properties:
- driver:
- type: string
- fsType:
- type: string
- options:
- additionalProperties:
- type: string
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ required:
+ - repository
type: object
- readOnly:
- type: boolean
- secretRef:
+ glusterfs:
properties:
- name:
+ endpoints:
+ type: string
+ path:
type: string
+ readOnly:
+ type: boolean
+ required:
+ - endpoints
+ - path
type: object
- x-kubernetes-map-type: atomic
- required:
- - driver
- type: object
- flocker:
- properties:
- datasetName:
- type: string
- datasetUUID:
- type: string
- type: object
- gcePersistentDisk:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- pdName:
- type: string
- readOnly:
- type: boolean
- required:
- - pdName
- type: object
- gitRepo:
- properties:
- directory:
- type: string
- repository:
- type: string
- revision:
- type: string
- required:
- - repository
- type: object
- glusterfs:
- properties:
- endpoints:
- type: string
- path:
- type: string
- readOnly:
- type: boolean
- required:
- - endpoints
- - path
- type: object
- hostPath:
- properties:
- path:
- type: string
- type:
- type: string
- required:
- - path
- type: object
- iscsi:
- properties:
- chapAuthDiscovery:
- type: boolean
- chapAuthSession:
- type: boolean
- fsType:
- type: string
- initiatorName:
- type: string
- iqn:
- type: string
- iscsiInterface:
- type: string
- lun:
- format: int32
- type: integer
- portals:
- items:
- type: string
- type: array
- readOnly:
- type: boolean
- secretRef:
+ hostPath:
properties:
- name:
+ path:
+ type: string
+ type:
type: string
+ required:
+ - path
type: object
- x-kubernetes-map-type: atomic
- targetPortal:
- type: string
- required:
- - iqn
- - lun
- - targetPortal
- type: object
- name:
- type: string
- nfs:
- properties:
- path:
- type: string
- readOnly:
- type: boolean
- server:
- type: string
- required:
- - path
- - server
- type: object
- persistentVolumeClaim:
- properties:
- claimName:
- type: string
- readOnly:
- type: boolean
- required:
- - claimName
- type: object
- photonPersistentDisk:
- properties:
- fsType:
- type: string
- pdID:
- type: string
- required:
- - pdID
- type: object
- portworxVolume:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- projected:
- properties:
- defaultMode:
- format: int32
- type: integer
- sources:
- items:
- properties:
- configMap:
- properties:
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- downwardAPI:
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ targetPortal:
+ type: string
+ required:
+ - iqn
+ - lun
+ - targetPortal
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ required:
+ - path
+ - server
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - claimName
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ required:
+ - pdID
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
properties:
- items:
- items:
- properties:
- fieldRef:
+ configMap:
+ properties:
+ items:
+ items:
properties:
- apiVersion:
+ key:
type: string
- fieldPath:
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
required:
- - fieldPath
+ - key
+ - path
type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
- type: string
- resourceFieldRef:
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ downwardAPI:
+ properties:
+ items:
+ items:
properties:
- containerName:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
+ type: object
+ secret:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
required:
- - resource
+ - key
+ - path
type: object
- x-kubernetes-map-type: atomic
- required:
- - path
- type: object
- type: array
- type: object
- secret:
- properties:
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ serviceAccountToken:
+ properties:
+ audience:
+ type: string
+ expirationSeconds:
+ format: int64
+ type: integer
+ path:
+ type: string
+ required:
+ - path
+ type: object
type: object
- x-kubernetes-map-type: atomic
- serviceAccountToken:
+ type: array
+ type: object
+ quobyte:
+ properties:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ required:
+ - registry
+ - volume
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - image
+ - monitors
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
+ required:
+ - gateway
+ - secretRef
+ - system
+ type: object
+ secret:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
properties:
- audience:
+ key:
type: string
- expirationSeconds:
- format: int64
+ mode:
+ format: int32
type: integer
path:
type: string
required:
+ - key
- path
type: object
- type: object
- type: array
- type: object
- quobyte:
- properties:
- group:
- type: string
- readOnly:
- type: boolean
- registry:
- type: string
- tenant:
- type: string
- user:
- type: string
- volume:
- type: string
- required:
- - registry
- - volume
- type: object
- rbd:
- properties:
- fsType:
- type: string
- image:
- type: string
- keyring:
- type: string
- monitors:
- items:
- type: string
- type: array
- pool:
- type: string
- readOnly:
- type: boolean
- secretRef:
+ type: array
+ optional:
+ type: boolean
+ secretName:
+ type: string
+ type: object
+ storageos:
properties:
- name:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ volumeName:
+ type: string
+ volumeNamespace:
type: string
type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - image
- - monitors
- type: object
- scaleIO:
- properties:
- fsType:
- type: string
- gateway:
- type: string
- protectionDomain:
- type: string
- readOnly:
- type: boolean
- secretRef:
+ vsphereVolume:
properties:
- name:
+ fsType:
+ type: string
+ storagePolicyID:
+ type: string
+ storagePolicyName:
type: string
+ volumePath:
+ type: string
+ required:
+ - volumePath
type: object
- x-kubernetes-map-type: atomic
- sslEnabled:
- type: boolean
- storageMode:
- type: string
- storagePool:
- type: string
- system:
- type: string
- volumeName:
- type: string
required:
- - gateway
- - secretRef
- - system
+ - name
type: object
- secret:
+ volumeMount:
properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- optional:
- type: boolean
- secretName:
+ mountPath:
type: string
- type: object
- storageos:
- properties:
- fsType:
+ mountPropagation:
+ type: string
+ name:
type: string
readOnly:
type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- volumeName:
- type: string
- volumeNamespace:
- type: string
- type: object
- vsphereVolume:
- properties:
- fsType:
- type: string
- storagePolicyID:
- type: string
- storagePolicyName:
+ subPath:
type: string
- volumePath:
+ subPathExpr:
type: string
required:
- - volumePath
+ - mountPath
+ - name
type: object
required:
- - name
+ - volume
+ - volumeMount
type: object
- volumeMount:
+ priorityClassName:
+ type: string
+ resources:
properties:
- mountPath:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ s3:
+ properties:
+ acl:
+ type: string
+ bucket:
+ type: string
+ endpoint:
+ type: string
+ options:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ prefix:
+ type: string
+ provider:
type: string
- mountPropagation:
+ region:
type: string
- name:
+ secretName:
type: string
- readOnly:
- type: boolean
- subPath:
+ sse:
type: string
- subPathExpr:
+ storageClass:
type: string
required:
- - mountPath
- - name
+ - provider
type: object
- required:
- - volume
- - volumeMount
- type: object
- priorityClassName:
- type: string
- resources:
- properties:
- claims:
+ serviceAccount:
+ type: string
+ snapshotsDeleteRatio:
+ default: 1
+ type: number
+ tolerations:
items:
properties:
- name:
+ effect:
+ type: string
+ key:
+ type: string
+ operator:
+ type: string
+ tolerationSeconds:
+ format: int64
+ type: integer
+ value:
type: string
- required:
- - name
type: object
type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- s3:
- properties:
- acl:
- type: string
- bucket:
- type: string
- endpoint:
- type: string
- options:
- items:
- type: string
- type: array
- path:
- type: string
- prefix:
- type: string
- provider:
- type: string
- region:
- type: string
- secretName:
- type: string
- sse:
- type: string
- storageClass:
+ toolImage:
type: string
- required:
- - provider
+ volumeBackupInitJobMaxActiveSeconds:
+ default: 600
+ type: integer
type: object
- serviceAccount:
- type: string
- snapshotsDeleteRatio:
- default: 1
- type: number
- tolerations:
- items:
- properties:
- effect:
- type: string
- key:
- type: string
- operator:
- type: string
- tolerationSeconds:
- format: int64
- type: integer
- value:
- type: string
- type: object
- type: array
- toolImage:
- type: string
- volumeBackupInitJobMaxActiveSeconds:
- default: 600
- type: integer
type: object
- type: object
- status:
- properties:
- backupSize:
- format: int64
+ maxBackups:
+ format: int32
type: integer
- backupSizeReadable:
- type: string
- backups:
- items:
- properties:
- backupName:
- type: string
- backupPath:
- type: string
- backupSize:
- format: int64
- type: integer
- commitTs:
- type: string
- k8sClusterName:
- type: string
- message:
- type: string
- phase:
- type: string
- reason:
- type: string
- tcName:
- type: string
- tcNamespace:
- type: string
- required:
- - backupName
- - phase
- type: object
- type: array
- commitTs:
+ maxReservedTime:
type: string
- conditions:
- items:
- properties:
- lastTransitionTime:
- format: date-time
- nullable: true
- type: string
- message:
- type: string
- reason:
- type: string
- status:
- type: string
- type:
- type: string
- required:
- - status
- - type
- type: object
- nullable: true
- type: array
- phase:
+ pause:
+ type: boolean
+ schedule:
type: string
- timeCompleted:
+ required:
+ - backupTemplate
+ - schedule
+ type: object
+ status:
+ properties:
+ allBackupCleanTime:
format: date-time
- nullable: true
type: string
- timeStarted:
- format: date-time
- nullable: true
+ lastBackup:
type: string
- timeTaken:
+ lastBackupTime:
+ format: date-time
type: string
type: object
required:
@@ -1836,41 +1793,35 @@ kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
- name: volumebackupschedules.federation.pingcap.com
+ name: volumebackups.federation.pingcap.com
spec:
group: federation.pingcap.com
names:
- kind: VolumeBackupSchedule
- listKind: VolumeBackupScheduleList
- plural: volumebackupschedules
+ kind: VolumeBackup
+ listKind: VolumeBackupList
+ plural: volumebackups
shortNames:
- - vbks
- singular: volumebackupschedule
+ - vbk
+ singular: volumebackup
scope: Namespaced
versions:
- additionalPrinterColumns:
- - description: The cron format string used for backup scheduling
- jsonPath: .spec.schedule
- name: Schedule
+ - description: The current status of the backup
+ jsonPath: .status.phase
+ name: Status
type: string
- - description: The max number of backups we want to keep
- jsonPath: .spec.maxBackups
- name: MaxBackups
- type: integer
- - description: How long backups we want to keep
- jsonPath: .spec.maxReservedTime
- name: MaxReservedTime
+ - description: The data size of the backup
+ jsonPath: .status.backupSizeReadable
+ name: BackupSize
type: string
- - description: The last backup CR name
- jsonPath: .status.lastBackup
- name: LastBackup
- priority: 1
+ - description: The commit ts of the backup
+ jsonPath: .status.commitTs
+ name: CommitTS
+ type: string
+ - description: The time that volume backup federation takes
+ jsonPath: .status.timeTaken
+ name: TimeTaken
type: string
- - description: The last time the backup was successfully created
- jsonPath: .status.lastBackupTime
- name: LastBackupTime
- priority: 1
- type: date
- jsonPath: .metadata.creationTimestamp
name: Age
type: date
@@ -1884,1732 +1835,1781 @@ spec:
type: string
metadata:
type: object
+ skipGC:
+ default: false
+ type: boolean
spec:
properties:
- backupTemplate:
+ clusters:
+ items:
+ properties:
+ k8sClusterName:
+ type: string
+ tcName:
+ type: string
+ tcNamespace:
+ type: string
+ type: object
+ type: array
+ template:
properties:
- clusters:
+ additionalVolumeMounts:
items:
properties:
- k8sClusterName:
+ mountPath:
type: string
- tcName:
+ mountPropagation:
type: string
- tcNamespace:
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
type: string
+ required:
+ - mountPath
+ - name
type: object
type: array
- template:
- properties:
- additionalVolumeMounts:
- items:
+ additionalVolumes:
+ items:
+ properties:
+ awsElasticBlockStore:
properties:
- mountPath:
+ fsType:
type: string
- mountPropagation:
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
type: string
- name:
+ required:
+ - volumeID
+ type: object
+ azureDisk:
+ properties:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
type: string
readOnly:
type: boolean
- subPath:
+ required:
+ - diskName
+ - diskURI
+ type: object
+ azureFile:
+ properties:
+ readOnly:
+ type: boolean
+ secretName:
type: string
- subPathExpr:
+ shareName:
type: string
required:
- - mountPath
- - name
+ - secretName
+ - shareName
type: object
- type: array
- additionalVolumes:
- items:
+ cephfs:
properties:
- awsElasticBlockStore:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- readOnly:
- type: boolean
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- azureDisk:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
properties:
- cachingMode:
- type: string
- diskName:
- type: string
- diskURI:
- type: string
- fsType:
- type: string
- kind:
+ name:
type: string
- readOnly:
- type: boolean
- required:
- - diskName
- - diskURI
type: object
- azureFile:
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - monitors
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- readOnly:
- type: boolean
- secretName:
- type: string
- shareName:
+ name:
type: string
- required:
- - secretName
- - shareName
type: object
- cephfs:
- properties:
- monitors:
- items:
+ x-kubernetes-map-type: atomic
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
type: string
- type: array
- path:
- type: string
- readOnly:
- type: boolean
- secretFile:
- type: string
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - monitors
- type: object
- cinder:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- configMap:
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
name:
type: string
- optional:
- type: boolean
type: object
x-kubernetes-map-type: atomic
- csi:
- properties:
- driver:
- type: string
- fsType:
- type: string
- nodePublishSecretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- readOnly:
- type: boolean
- volumeAttributes:
- additionalProperties:
- type: string
- type: object
- required:
- - driver
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
+ type: string
type: object
- downwardAPI:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
+ required:
+ - driver
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ fieldRef:
properties:
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
+ apiVersion:
+ type: string
+ fieldPath:
type: string
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
required:
- - path
+ - fieldPath
type: object
- type: array
- type: object
- emptyDir:
- properties:
- medium:
- type: string
- sizeLimit:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- ephemeral:
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
+ type: string
+ required:
+ - resource
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ properties:
+ medium:
+ type: string
+ sizeLimit:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
properties:
- volumeClaimTemplate:
+ metadata:
+ type: object
+ spec:
properties:
- metadata:
+ accessModes:
+ items:
+ type: string
+ type: array
+ dataSource:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ required:
+ - kind
+ - name
type: object
- spec:
+ x-kubernetes-map-type: atomic
+ dataSourceRef:
properties:
- accessModes:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ resources:
+ properties:
+ claims:
items:
- type: string
+ properties:
+ name:
+ type: string
+ required:
+ - name
+ type: object
type: array
- dataSource:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- required:
- - kind
- - name
- type: object
- x-kubernetes-map-type: atomic
- dataSourceRef:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- namespace:
- type: string
- required:
- - kind
+ x-kubernetes-list-map-keys:
- name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
type: object
- resources:
- properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
type: object
- selector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
+ type: object
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
type: string
- type: object
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
type: object
- x-kubernetes-map-type: atomic
- storageClassName:
- type: string
- volumeMode:
- type: string
- volumeName:
- type: string
type: object
- required:
- - spec
- type: object
- type: object
- fc:
- properties:
- fsType:
- type: string
- lun:
- format: int32
- type: integer
- readOnly:
- type: boolean
- targetWWNs:
- items:
- type: string
- type: array
- wwids:
- items:
- type: string
- type: array
- type: object
- flexVolume:
- properties:
- driver:
- type: string
- fsType:
- type: string
- options:
- additionalProperties:
- type: string
- type: object
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
+ x-kubernetes-map-type: atomic
+ storageClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
type: string
type: object
- x-kubernetes-map-type: atomic
- required:
- - driver
- type: object
- flocker:
- properties:
- datasetName:
- type: string
- datasetUUID:
- type: string
- type: object
- gcePersistentDisk:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- pdName:
- type: string
- readOnly:
- type: boolean
- required:
- - pdName
- type: object
- gitRepo:
- properties:
- directory:
- type: string
- repository:
- type: string
- revision:
- type: string
- required:
- - repository
- type: object
- glusterfs:
- properties:
- endpoints:
- type: string
- path:
- type: string
- readOnly:
- type: boolean
required:
- - endpoints
- - path
+ - spec
type: object
- hostPath:
- properties:
- path:
- type: string
- type:
- type: string
- required:
- - path
+ type: object
+ fc:
+ properties:
+ fsType:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
type: object
- iscsi:
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- chapAuthDiscovery:
- type: boolean
- chapAuthSession:
- type: boolean
- fsType:
- type: string
- initiatorName:
- type: string
- iqn:
- type: string
- iscsiInterface:
- type: string
- lun:
- format: int32
- type: integer
- portals:
- items:
- type: string
- type: array
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- targetPortal:
+ name:
type: string
- required:
- - iqn
- - lun
- - targetPortal
type: object
- name:
+ x-kubernetes-map-type: atomic
+ required:
+ - driver
+ type: object
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - pdName
+ type: object
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ required:
+ - repository
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - endpoints
+ - path
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ required:
+ - path
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
type: string
- nfs:
- properties:
- path:
- type: string
- readOnly:
- type: boolean
- server:
- type: string
- required:
- - path
- - server
- type: object
- persistentVolumeClaim:
- properties:
- claimName:
- type: string
- readOnly:
- type: boolean
- required:
- - claimName
- type: object
- photonPersistentDisk:
- properties:
- fsType:
- type: string
- pdID:
- type: string
- required:
- - pdID
- type: object
- portworxVolume:
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- volumeID:
+ name:
type: string
- required:
- - volumeID
type: object
- projected:
- properties:
- defaultMode:
- format: int32
- type: integer
- sources:
- items:
+ x-kubernetes-map-type: atomic
+ targetPortal:
+ type: string
+ required:
+ - iqn
+ - lun
+ - targetPortal
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ required:
+ - path
+ - server
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - claimName
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ required:
+ - pdID
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
+ properties:
+ configMap:
properties:
- configMap:
- properties:
- items:
- items:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ downwardAPI:
+ properties:
+ items:
+ items:
+ properties:
+ fieldRef:
properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
+ apiVersion:
type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- downwardAPI:
- properties:
- items:
- items:
- properties:
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
+ fieldPath:
type: string
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
required:
- - path
+ - fieldPath
type: object
- type: array
- type: object
- secret:
- properties:
- items:
- items:
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
properties:
- key:
+ containerName:
type: string
- mode:
- format: int32
- type: integer
- path:
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
type: string
required:
- - key
- - path
+ - resource
type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- serviceAccountToken:
- properties:
- audience:
- type: string
- expirationSeconds:
- format: int64
- type: integer
- path:
- type: string
- required:
- - path
- type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
type: object
- type: array
- type: object
- quobyte:
+ secret:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ serviceAccountToken:
+ properties:
+ audience:
+ type: string
+ expirationSeconds:
+ format: int64
+ type: integer
+ path:
+ type: string
+ required:
+ - path
+ type: object
+ type: object
+ type: array
+ type: object
+ quobyte:
+ properties:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ required:
+ - registry
+ - volume
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- group:
- type: string
- readOnly:
- type: boolean
- registry:
- type: string
- tenant:
- type: string
- user:
- type: string
- volume:
+ name:
type: string
- required:
- - registry
- - volume
type: object
- rbd:
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - image
+ - monitors
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- fsType:
- type: string
- image:
- type: string
- keyring:
+ name:
type: string
- monitors:
- items:
+ type: object
+ x-kubernetes-map-type: atomic
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
+ required:
+ - gateway
+ - secretRef
+ - system
+ type: object
+ secret:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
type: string
- type: array
- pool:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- user:
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ optional:
+ type: boolean
+ secretName:
+ type: string
+ type: object
+ storageos:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
type: string
- required:
- - image
- - monitors
type: object
- scaleIO:
+ x-kubernetes-map-type: atomic
+ volumeName:
+ type: string
+ volumeNamespace:
+ type: string
+ type: object
+ vsphereVolume:
+ properties:
+ fsType:
+ type: string
+ storagePolicyID:
+ type: string
+ storagePolicyName:
+ type: string
+ volumePath:
+ type: string
+ required:
+ - volumePath
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ azblob:
+ properties:
+ accessTier:
+ type: string
+ container:
+ type: string
+ path:
+ type: string
+ prefix:
+ type: string
+ sasToken:
+ type: string
+ secretName:
+ type: string
+ storageAccount:
+ type: string
+ type: object
+ br:
+ properties:
+ checkRequirements:
+ type: boolean
+ concurrency:
+ format: int32
+ type: integer
+ options:
+ items:
+ type: string
+ type: array
+ sendCredToTikv:
+ type: boolean
+ type: object
+ calcSizeLevel:
+ default: all
+ type: string
+ cleanPolicy:
+ type: string
+ env:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ valueFrom:
+ properties:
+ configMapKeyRef:
properties:
- fsType:
- type: string
- gateway:
+ key:
type: string
- protectionDomain:
+ name:
type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- sslEnabled:
+ optional:
type: boolean
- storageMode:
- type: string
- storagePool:
- type: string
- system:
- type: string
- volumeName:
- type: string
required:
- - gateway
- - secretRef
- - system
+ - key
type: object
- secret:
+ x-kubernetes-map-type: atomic
+ fieldRef:
properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
- optional:
- type: boolean
- secretName:
+ apiVersion:
+ type: string
+ fieldPath:
type: string
+ required:
+ - fieldPath
type: object
- storageos:
+ x-kubernetes-map-type: atomic
+ resourceFieldRef:
properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- volumeName:
+ containerName:
type: string
- volumeNamespace:
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
type: string
+ required:
+ - resource
type: object
- vsphereVolume:
+ x-kubernetes-map-type: atomic
+ secretKeyRef:
properties:
- fsType:
- type: string
- storagePolicyID:
- type: string
- storagePolicyName:
+ key:
type: string
- volumePath:
+ name:
type: string
+ optional:
+ type: boolean
required:
- - volumePath
+ - key
type: object
- required:
- - name
+ x-kubernetes-map-type: atomic
type: object
- type: array
- azblob:
- properties:
- accessTier:
- type: string
- container:
- type: string
- path:
- type: string
- prefix:
- type: string
- sasToken:
- type: string
- secretName:
- type: string
- storageAccount:
- type: string
- type: object
- br:
- properties:
- checkRequirements:
- type: boolean
- concurrency:
- format: int32
- type: integer
- options:
- items:
- type: string
- type: array
- sendCredToTikv:
- type: boolean
- type: object
- calcSizeLevel:
- default: all
+ required:
+ - name
+ type: object
+ type: array
+ gcs:
+ properties:
+ bucket:
type: string
- cleanPolicy:
+ bucketAcl:
type: string
- env:
- items:
- properties:
- name:
- type: string
- value:
- type: string
- valueFrom:
- properties:
- configMapKeyRef:
- properties:
- key:
- type: string
- name:
- type: string
- optional:
- type: boolean
- required:
- - key
- type: object
- x-kubernetes-map-type: atomic
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
- secretKeyRef:
- properties:
- key:
- type: string
- name:
- type: string
- optional:
- type: boolean
- required:
- - key
- type: object
- x-kubernetes-map-type: atomic
- type: object
- required:
- - name
- type: object
- type: array
- gcs:
- properties:
- bucket:
- type: string
- bucketAcl:
- type: string
- location:
- type: string
- objectAcl:
- type: string
- path:
- type: string
- prefix:
- type: string
- projectId:
- type: string
- secretName:
- type: string
- storageClass:
- type: string
- required:
- - projectId
- type: object
- imagePullSecrets:
- items:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- type: array
- local:
+ location:
+ type: string
+ objectAcl:
+ type: string
+ path:
+ type: string
+ prefix:
+ type: string
+ projectId:
+ type: string
+ secretName:
+ type: string
+ storageClass:
+ type: string
+ required:
+ - projectId
+ type: object
+ imagePullSecrets:
+ items:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ local:
+ properties:
+ prefix:
+ type: string
+ volume:
properties:
- prefix:
- type: string
- volume:
+ awsElasticBlockStore:
properties:
- awsElasticBlockStore:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- readOnly:
- type: boolean
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- azureDisk:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ azureDisk:
+ properties:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - diskName
+ - diskURI
+ type: object
+ azureFile:
+ properties:
+ readOnly:
+ type: boolean
+ secretName:
+ type: string
+ shareName:
+ type: string
+ required:
+ - secretName
+ - shareName
+ type: object
+ cephfs:
+ properties:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
properties:
- cachingMode:
- type: string
- diskName:
- type: string
- diskURI:
- type: string
- fsType:
- type: string
- kind:
+ name:
type: string
- readOnly:
- type: boolean
- required:
- - diskName
- - diskURI
type: object
- azureFile:
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - monitors
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- readOnly:
- type: boolean
- secretName:
- type: string
- shareName:
+ name:
type: string
- required:
- - secretName
- - shareName
type: object
- cephfs:
- properties:
- monitors:
- items:
+ x-kubernetes-map-type: atomic
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
type: string
- type: array
- path:
- type: string
- readOnly:
- type: boolean
- secretFile:
- type: string
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - monitors
- type: object
- cinder:
- properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- volumeID:
- type: string
- required:
- - volumeID
- type: object
- configMap:
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
- properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
- type: string
- required:
- - key
- - path
- type: object
- type: array
name:
type: string
- optional:
- type: boolean
type: object
x-kubernetes-map-type: atomic
- csi:
- properties:
- driver:
- type: string
- fsType:
- type: string
- nodePublishSecretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- readOnly:
- type: boolean
- volumeAttributes:
- additionalProperties:
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
+ type: string
+ type: object
+ required:
+ - driver
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ required:
+ - fieldPath
+ type: object
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
- type: object
- required:
- - driver
- type: object
- downwardAPI:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
+ resourceFieldRef:
properties:
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
+ containerName:
+ type: string
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
type: string
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
required:
- - path
+ - resource
type: object
- type: array
- type: object
- emptyDir:
- properties:
- medium:
- type: string
- sizeLimit:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- ephemeral:
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ properties:
+ medium:
+ type: string
+ sizeLimit:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
properties:
- volumeClaimTemplate:
+ metadata:
+ type: object
+ spec:
properties:
- metadata:
+ accessModes:
+ items:
+ type: string
+ type: array
+ dataSource:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ required:
+ - kind
+ - name
type: object
- spec:
+ x-kubernetes-map-type: atomic
+ dataSourceRef:
properties:
- accessModes:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ resources:
+ properties:
+ claims:
items:
- type: string
+ properties:
+ name:
+ type: string
+ required:
+ - name
+ type: object
type: array
- dataSource:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- required:
- - kind
- - name
- type: object
- x-kubernetes-map-type: atomic
- dataSourceRef:
- properties:
- apiGroup:
- type: string
- kind:
- type: string
- name:
- type: string
- namespace:
- type: string
- required:
- - kind
+ x-kubernetes-list-map-keys:
- name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
type: object
- resources:
- properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
type: object
- selector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
+ type: object
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
type: string
- type: object
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
type: object
- x-kubernetes-map-type: atomic
- storageClassName:
- type: string
- volumeMode:
- type: string
- volumeName:
- type: string
type: object
- required:
- - spec
- type: object
- type: object
- fc:
- properties:
- fsType:
- type: string
- lun:
- format: int32
- type: integer
- readOnly:
- type: boolean
- targetWWNs:
- items:
- type: string
- type: array
- wwids:
- items:
- type: string
- type: array
- type: object
- flexVolume:
- properties:
- driver:
- type: string
- fsType:
- type: string
- options:
- additionalProperties:
- type: string
- type: object
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
+ x-kubernetes-map-type: atomic
+ storageClassName:
type: string
- type: object
- x-kubernetes-map-type: atomic
- required:
- - driver
- type: object
- flocker:
- properties:
- datasetName:
- type: string
- datasetUUID:
- type: string
- type: object
- gcePersistentDisk:
- properties:
- fsType:
- type: string
- partition:
- format: int32
- type: integer
- pdName:
- type: string
- readOnly:
- type: boolean
- required:
- - pdName
- type: object
- gitRepo:
- properties:
- directory:
- type: string
- repository:
- type: string
- revision:
- type: string
- required:
- - repository
- type: object
- glusterfs:
- properties:
- endpoints:
- type: string
- path:
- type: string
- readOnly:
- type: boolean
- required:
- - endpoints
- - path
- type: object
- hostPath:
- properties:
- path:
- type: string
- type:
- type: string
- required:
- - path
- type: object
- iscsi:
- properties:
- chapAuthDiscovery:
- type: boolean
- chapAuthSession:
- type: boolean
- fsType:
- type: string
- initiatorName:
- type: string
- iqn:
- type: string
- iscsiInterface:
- type: string
- lun:
- format: int32
- type: integer
- portals:
- items:
- type: string
- type: array
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
+ volumeMode:
+ type: string
+ volumeName:
type: string
type: object
- x-kubernetes-map-type: atomic
- targetPortal:
- type: string
required:
- - iqn
- - lun
- - targetPortal
+ - spec
type: object
- name:
+ type: object
+ fc:
+ properties:
+ fsType:
type: string
- nfs:
- properties:
- path:
- type: string
- readOnly:
- type: boolean
- server:
- type: string
- required:
- - path
- - server
- type: object
- persistentVolumeClaim:
- properties:
- claimName:
- type: string
- readOnly:
- type: boolean
- required:
- - claimName
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
type: object
- photonPersistentDisk:
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- fsType:
- type: string
- pdID:
+ name:
type: string
- required:
- - pdID
type: object
- portworxVolume:
+ x-kubernetes-map-type: atomic
+ required:
+ - driver
+ type: object
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - pdName
+ type: object
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ required:
+ - repository
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - endpoints
+ - path
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ required:
+ - path
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- volumeID:
+ name:
type: string
- required:
- - volumeID
type: object
- projected:
- properties:
- defaultMode:
- format: int32
- type: integer
- sources:
- items:
+ x-kubernetes-map-type: atomic
+ targetPortal:
+ type: string
+ required:
+ - iqn
+ - lun
+ - targetPortal
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ required:
+ - path
+ - server
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ required:
+ - claimName
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ required:
+ - pdID
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ required:
+ - volumeID
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
+ properties:
+ configMap:
properties:
- configMap:
- properties:
- items:
- items:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ x-kubernetes-map-type: atomic
+ downwardAPI:
+ properties:
+ items:
+ items:
+ properties:
+ fieldRef:
properties:
- key:
- type: string
- mode:
- format: int32
- type: integer
- path:
+ apiVersion:
type: string
- required:
- - key
- - path
- type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- downwardAPI:
- properties:
- items:
- items:
- properties:
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- required:
- - fieldPath
- type: object
- x-kubernetes-map-type: atomic
- mode:
- format: int32
- type: integer
- path:
+ fieldPath:
type: string
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- resource:
- type: string
- required:
- - resource
- type: object
- x-kubernetes-map-type: atomic
required:
- - path
+ - fieldPath
type: object
- type: array
- type: object
- secret:
- properties:
- items:
- items:
+ x-kubernetes-map-type: atomic
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
properties:
- key:
+ containerName:
type: string
- mode:
- format: int32
- type: integer
- path:
+ divisor:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ resource:
type: string
required:
- - key
- - path
+ - resource
type: object
- type: array
- name:
- type: string
- optional:
- type: boolean
- type: object
- x-kubernetes-map-type: atomic
- serviceAccountToken:
- properties:
- audience:
- type: string
- expirationSeconds:
- format: int64
- type: integer
- path:
- type: string
- required:
- - path
- type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - path
+ type: object
+ type: array
+ type: object
+ secret:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
type: object
- type: array
- type: object
- quobyte:
- properties:
- group:
- type: string
- readOnly:
- type: boolean
- registry:
- type: string
- tenant:
- type: string
- user:
- type: string
- volume:
- type: string
- required:
- - registry
- - volume
- type: object
- rbd:
- properties:
- fsType:
- type: string
- image:
- type: string
- keyring:
- type: string
- monitors:
- items:
- type: string
- type: array
- pool:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- user:
- type: string
- required:
- - image
- - monitors
- type: object
- scaleIO:
- properties:
- fsType:
- type: string
- gateway:
- type: string
- protectionDomain:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- sslEnabled:
- type: boolean
- storageMode:
- type: string
- storagePool:
- type: string
- system:
- type: string
- volumeName:
- type: string
- required:
- - gateway
- - secretRef
- - system
- type: object
- secret:
- properties:
- defaultMode:
- format: int32
- type: integer
- items:
- items:
+ x-kubernetes-map-type: atomic
+ serviceAccountToken:
properties:
- key:
+ audience:
type: string
- mode:
- format: int32
+ expirationSeconds:
+ format: int64
type: integer
path:
type: string
required:
- - key
- path
type: object
- type: array
- optional:
- type: boolean
- secretName:
- type: string
- type: object
- storageos:
+ type: object
+ type: array
+ type: object
+ quobyte:
+ properties:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ required:
+ - registry
+ - volume
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- fsType:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- x-kubernetes-map-type: atomic
- volumeName:
- type: string
- volumeNamespace:
+ name:
type: string
type: object
- vsphereVolume:
+ x-kubernetes-map-type: atomic
+ user:
+ type: string
+ required:
+ - image
+ - monitors
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- fsType:
- type: string
- storagePolicyID:
- type: string
- storagePolicyName:
- type: string
- volumePath:
+ name:
type: string
- required:
- - volumePath
type: object
+ x-kubernetes-map-type: atomic
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
required:
- - name
+ - gateway
+ - secretRef
+ - system
type: object
- volumeMount:
+ secret:
properties:
- mountPath:
- type: string
- mountPropagation:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ required:
+ - key
+ - path
+ type: object
+ type: array
+ optional:
+ type: boolean
+ secretName:
type: string
- name:
+ type: object
+ storageos:
+ properties:
+ fsType:
type: string
readOnly:
type: boolean
- subPath:
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ volumeName:
type: string
- subPathExpr:
+ volumeNamespace:
+ type: string
+ type: object
+ vsphereVolume:
+ properties:
+ fsType:
+ type: string
+ storagePolicyID:
+ type: string
+ storagePolicyName:
+ type: string
+ volumePath:
type: string
required:
- - mountPath
- - name
+ - volumePath
type: object
required:
- - volume
- - volumeMount
- type: object
- priorityClassName:
- type: string
- resources:
- properties:
- claims:
- items:
- properties:
- name:
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
+ - name
type: object
- s3:
+ volumeMount:
properties:
- acl:
- type: string
- bucket:
- type: string
- endpoint:
- type: string
- options:
- items:
- type: string
- type: array
- path:
- type: string
- prefix:
- type: string
- provider:
+ mountPath:
type: string
- region:
+ mountPropagation:
type: string
- secretName:
+ name:
type: string
- sse:
+ readOnly:
+ type: boolean
+ subPath:
type: string
- storageClass:
+ subPathExpr:
type: string
required:
- - provider
+ - mountPath
+ - name
type: object
- serviceAccount:
- type: string
- snapshotsDeleteRatio:
- default: 1
- type: number
- tolerations:
+ required:
+ - volume
+ - volumeMount
+ type: object
+ priorityClassName:
+ type: string
+ resources:
+ properties:
+ claims:
items:
properties:
- effect:
- type: string
- key:
- type: string
- operator:
- type: string
- tolerationSeconds:
- format: int64
- type: integer
- value:
+ name:
type: string
+ required:
+ - name
type: object
type: array
- toolImage:
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ limits:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ requests:
+ additionalProperties:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ x-kubernetes-int-or-string: true
+ type: object
+ type: object
+ s3:
+ properties:
+ acl:
type: string
- volumeBackupInitJobMaxActiveSeconds:
- default: 600
- type: integer
+ bucket:
+ type: string
+ endpoint:
+ type: string
+ options:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ prefix:
+ type: string
+ provider:
+ type: string
+ region:
+ type: string
+ secretName:
+ type: string
+ sse:
+ type: string
+ storageClass:
+ type: string
+ required:
+ - provider
type: object
+ serviceAccount:
+ type: string
+ snapshotsDeleteRatio:
+ default: 1
+ type: number
+ tolerations:
+ items:
+ properties:
+ effect:
+ type: string
+ key:
+ type: string
+ operator:
+ type: string
+ tolerationSeconds:
+ format: int64
+ type: integer
+ value:
+ type: string
+ type: object
+ type: array
+ toolImage:
+ type: string
+ volumeBackupInitJobMaxActiveSeconds:
+ default: 600
+ type: integer
type: object
- maxBackups:
- format: int32
- type: integer
- maxReservedTime:
- type: string
- pause:
- type: boolean
- schedule:
- type: string
- required:
- - backupTemplate
- - schedule
type: object
status:
properties:
- allBackupCleanTime:
- format: date-time
+ backupSize:
+ format: int64
+ type: integer
+ backupSizeReadable:
type: string
- lastBackup:
+ backups:
+ items:
+ properties:
+ backupName:
+ type: string
+ backupPath:
+ type: string
+ backupSize:
+ format: int64
+ type: integer
+ commitTs:
+ type: string
+ k8sClusterName:
+ type: string
+ message:
+ type: string
+ phase:
+ type: string
+ reason:
+ type: string
+ tcName:
+ type: string
+ tcNamespace:
+ type: string
+ required:
+ - backupName
+ - phase
+ type: object
+ type: array
+ commitTs:
type: string
- lastBackupTime:
+ conditions:
+ items:
+ properties:
+ lastTransitionTime:
+ format: date-time
+ nullable: true
+ type: string
+ message:
+ type: string
+ reason:
+ type: string
+ status:
+ type: string
+ type:
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ nullable: true
+ type: array
+ phase:
+ type: string
+ timeCompleted:
+ format: date-time
+ nullable: true
+ type: string
+ timeStarted:
format: date-time
+ nullable: true
+ type: string
+ timeTaken:
type: string
type: object
required:
diff --git a/pkg/apis/pingcap/v1alpha1/openapi_generated.go b/pkg/apis/pingcap/v1alpha1/openapi_generated.go
index 85c0ec1246..4f789a1a7e 100644
--- a/pkg/apis/pingcap/v1alpha1/openapi_generated.go
+++ b/pkg/apis/pingcap/v1alpha1/openapi_generated.go
@@ -1079,6 +1079,13 @@ func schema_pkg_apis_pingcap_v1alpha1_BackupSpec(ref common.ReferenceCallback) c
Format: "",
},
},
+ "logSubcommand": {
+ SchemaProps: spec.SchemaProps{
+ Description: "Subcommand is the subcommand for BR, such as start, stop, pause etc.",
+ Type: []string{"string"},
+ Format: "",
+ },
+ },
"logTruncateUntil": {
SchemaProps: spec.SchemaProps{
Description: "LogTruncateUntil is log backup truncate until timestamp. Format supports TSO or datetime, e.g. '400036290571534337', '2018-05-11 01:42:23'.",
diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go
index 7839858e30..9e2361996c 100644
--- a/pkg/apis/pingcap/v1alpha1/types.go
+++ b/pkg/apis/pingcap/v1alpha1/types.go
@@ -2177,6 +2177,10 @@ type BackupSpec struct {
// Default is current timestamp.
// +optional
CommitTs string `json:"commitTs,omitempty"`
+ // Subcommand is the subcommand for BR, such as start, stop, pause etc.
+ // +optional
+ // +kubebuilder:default="start"
+ LogSubcommand string `json:"logSubcommand,omitempty"`
// LogTruncateUntil is log backup truncate until timestamp.
// Format supports TSO or datetime, e.g. '400036290571534337', '2018-05-11 01:42:23'.
// +optional
@@ -2397,6 +2401,8 @@ const (
LogTruncateCommand LogSubCommandType = "log-truncate"
// LogStopCommand is the stop command of log backup.
LogStopCommand LogSubCommandType = "log-stop"
+ // LogPauseCommand is the pause command of log backup.
+ LogPauseCommand LogSubCommandType = "log-pause"
)
// LogSubCommandStatus is the log backup subcommand's status.
From b698c61c4e1b54e40cb0e26f699d4e4131f77365 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Tue, 13 Aug 2024 17:00:15 +0800
Subject: [PATCH 02/34] add more
---
pkg/apis/pingcap/v1alpha1/backup.go | 16 +++++++++++-----
pkg/backup/backup/backup_manager.go | 1 +
pkg/controller/backup/backup_controller.go | 2 +-
3 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index d380ab3fe4..9bc0dc799e 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -321,15 +321,21 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
if backup.Spec.Mode != BackupModeLog {
return ""
}
- if backup.Spec.LogStop {
+ switch backup.Spec.LogSubcommand {
+ case "log-start":
+ return LogStartCommand
+ case "log-stop":
return LogStopCommand
- }
- if backup.Spec.LogTruncateUntil != "" {
+ case "log-pause":
+ return LogPauseCommand
+ case "log-truncate":
return LogTruncateCommand
- }
- return LogStartCommand
+ default:
+ return ""
+ }
}
+//TODO: (Ris) move logic about truncate to elsewhere
// IsLogBackupSubCommandOntheCondition return whether the log subcommand on the condition.
func IsLogBackupSubCommandOntheCondition(backup *Backup, conditionType BackupConditionType) bool {
command := ParseLogBackupSubcommand(backup)
diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go
index 29e13ca78c..4fa54029e0 100644
--- a/pkg/backup/backup/backup_manager.go
+++ b/pkg/backup/backup/backup_manager.go
@@ -161,6 +161,7 @@ func (bm *backupManager) syncBackupJob(backup *v1alpha1.Backup) error {
var job *batchv1.Job
var reason string
var updateStatus *controller.BackupUpdateStatus
+ //TODO: (Ris)modify the backupJobs
if job, updateStatus, reason, err = bm.makeBackupJob(backup); err != nil {
klog.Errorf("backup %s/%s create job %s failed, reason is %s, error %v.", ns, name, backupJobName, reason, err)
return err
diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go
index 41a27dfbd3..4cdc625cb1 100644
--- a/pkg/controller/backup/backup_controller.go
+++ b/pkg/controller/backup/backup_controller.go
@@ -208,7 +208,7 @@ func (c *Controller) updateBackup(cur interface{}) {
return
}
- // TODO: log backup check all subcommand job's pod status
+ // TODO: (Ris)log backup check all subcommand job's pod status
if newBackup.Spec.Mode != v1alpha1.BackupModeLog {
// we will create backup job when we mark backup as scheduled status,
// but the backup job or its pod may failed due to insufficient resources or other reasons in k8s,
From 5bc9a6024ea4afafa56c9818f8ed50aa70b52aee Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Thu, 15 Aug 2024 08:37:21 +0200
Subject: [PATCH 03/34] add truncate task
---
pkg/apis/pingcap/v1alpha1/backup.go | 11 +++++++++--
pkg/controller/backup/backup_controller.go | 8 ++++++++
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index 9bc0dc799e..6de001d5c5 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -201,6 +201,13 @@ func IsBackupScheduled(backup *Backup) bool {
return condition != nil && condition.Status == corev1.ConditionTrue
}
+func HaveTruncateUntil(backup *Backup) bool {
+ if backup.Spec.Mode != BackupModeLog {
+ return false
+ }
+ return backup.Spec.LogTruncateUntil != ""
+}
+
// IsBackupRunning returns true if a Backup is Running.
func IsBackupRunning(backup *Backup) bool {
if backup.Spec.Mode == BackupModeLog {
@@ -332,10 +339,10 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
return LogTruncateCommand
default:
return ""
- }
+ }
}
-//TODO: (Ris) move logic about truncate to elsewhere
+// TODO: (Ris) move logic about truncate to elsewhere
// IsLogBackupSubCommandOntheCondition return whether the log subcommand on the condition.
func IsLogBackupSubCommandOntheCondition(backup *Backup, conditionType BackupConditionType) bool {
command := ParseLogBackupSubcommand(backup)
diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go
index 4cdc625cb1..d30c50e4f8 100644
--- a/pkg/controller/backup/backup_controller.go
+++ b/pkg/controller/backup/backup_controller.go
@@ -240,8 +240,16 @@ func (c *Controller) updateBackup(cur interface{}) {
return
}
+
klog.V(4).Infof("backup object %s/%s enqueue", ns, name)
c.enqueueBackup(newBackup)
+
+ //For log backup with truncate, we need to create a truncate job
+ if v1alpha1.HaveTruncateUntil(newBackup) {
+ truncateTask := newBackup.DeepCopy()
+ truncateTask.Spec.LogSubcommand = string(v1alpha1.LogTruncateCommand)
+ c.enqueueBackup(truncateTask)
+ }
}
func (c *Controller) deleteJob(obj interface{}) {
From d4d04775fa3ab50ac3566678c69287a979d3fc94 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Thu, 15 Aug 2024 09:14:41 +0200
Subject: [PATCH 04/34] add pause(p1)
---
pkg/apis/pingcap/v1alpha1/backup.go | 9 +++++++++
pkg/apis/pingcap/v1alpha1/types.go | 6 +++++-
pkg/controller/backup/backup_controller.go | 6 +++++-
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index 6de001d5c5..b49423f81a 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -201,6 +201,7 @@ func IsBackupScheduled(backup *Backup) bool {
return condition != nil && condition.Status == corev1.ConditionTrue
}
+// HaveTruncateUntil returns true if a Backup has truncate until set
func HaveTruncateUntil(backup *Backup) bool {
if backup.Spec.Mode != BackupModeLog {
return false
@@ -208,6 +209,14 @@ func HaveTruncateUntil(backup *Backup) bool {
return backup.Spec.LogTruncateUntil != ""
}
+func IsBackupPaused(backup *Backup) bool {
+ if backup.Spec.Mode == BackupModeLog {
+ return IsLogBackupSubCommandOntheCondition(backup, BackupPaused)
+ }
+ _, condition := GetBackupCondition(&backup.Status, BackupPaused)
+ return condition != nil && condition.Status == corev1.ConditionTrue
+}
+
// IsBackupRunning returns true if a Backup is Running.
func IsBackupRunning(backup *Backup) bool {
if backup.Spec.Mode == BackupModeLog {
diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go
index 9e2361996c..1dc42de4b3 100644
--- a/pkg/apis/pingcap/v1alpha1/types.go
+++ b/pkg/apis/pingcap/v1alpha1/types.go
@@ -2179,7 +2179,7 @@ type BackupSpec struct {
CommitTs string `json:"commitTs,omitempty"`
// Subcommand is the subcommand for BR, such as start, stop, pause etc.
// +optional
- // +kubebuilder:default="start"
+ // +kubebuilder:default="log-start"
LogSubcommand string `json:"logSubcommand,omitempty"`
// LogTruncateUntil is log backup truncate until timestamp.
// Format supports TSO or datetime, e.g. '400036290571534337', '2018-05-11 01:42:23'.
@@ -2362,6 +2362,8 @@ const (
BackupInvalid BackupConditionType = "Invalid"
// BackupPrepare means the backup prepare backup process
BackupPrepare BackupConditionType = "Prepare"
+ // BackupPaused means the backup was paused
+ BackupPaused BackupConditionType = "Paused"
// BackupStopped means the backup was stopped, just log backup has this condition
BackupStopped BackupConditionType = "Stopped"
// BackupRestart means the backup was restarted, now just support snapshot backup
@@ -2403,6 +2405,8 @@ const (
LogStopCommand LogSubCommandType = "log-stop"
// LogPauseCommand is the pause command of log backup.
LogPauseCommand LogSubCommandType = "log-pause"
+ // LogResumeCommand is the resume command of log backup.
+ LogResumeCommand LogSubCommandType = "log-resume"
)
// LogSubCommandStatus is the log backup subcommand's status.
diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go
index d30c50e4f8..deb779188d 100644
--- a/pkg/controller/backup/backup_controller.go
+++ b/pkg/controller/backup/backup_controller.go
@@ -240,12 +240,16 @@ func (c *Controller) updateBackup(cur interface{}) {
return
}
+ if newBackup.Spec.Mode == v1alpha1.BackupModeLog && newBackup.Spec.LogSubcommand == string(v1alpha1.LogStartCommand) && v1alpha1.IsBackupPaused(newBackup) {
+ newBackup.Spec.LogSubcommand = string(v1alpha1.LogResumeCommand)
+ }
+
klog.V(4).Infof("backup object %s/%s enqueue", ns, name)
c.enqueueBackup(newBackup)
//For log backup with truncate, we need to create a truncate job
- if v1alpha1.HaveTruncateUntil(newBackup) {
+ if v1alpha1.HaveTruncateUntil(newBackup) && newBackup.Spec.LogSubcommand != string(v1alpha1.LogTruncateCommand) {
truncateTask := newBackup.DeepCopy()
truncateTask.Spec.LogSubcommand = string(v1alpha1.LogTruncateCommand)
c.enqueueBackup(truncateTask)
From 66f0c91d0a9cc643833637e1071834d564f66bf8 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Thu, 15 Aug 2024 09:50:39 +0200
Subject: [PATCH 05/34] task didn't apply
---
manifests/crd.yaml | 6 +++---
manifests/crd/v1/pingcap.com_backups.yaml | 2 +-
.../crd/v1/pingcap.com_backupschedules.yaml | 4 ++--
pkg/apis/pingcap/v1alpha1/types.go | 2 +-
pkg/controller/backup/backup_controller.go | 18 ++++++++----------
5 files changed, 15 insertions(+), 17 deletions(-)
diff --git a/manifests/crd.yaml b/manifests/crd.yaml
index e93cdc85e1..68e6e4c46a 100644
--- a/manifests/crd.yaml
+++ b/manifests/crd.yaml
@@ -2114,7 +2114,7 @@ spec:
logStop:
type: boolean
logSubcommand:
- default: start
+ default: log-start
type: string
logTruncateUntil:
type: string
@@ -4350,7 +4350,7 @@ spec:
logStop:
type: boolean
logSubcommand:
- default: start
+ default: log-start
type: string
logTruncateUntil:
type: string
@@ -6696,7 +6696,7 @@ spec:
logStop:
type: boolean
logSubcommand:
- default: start
+ default: log-start
type: string
logTruncateUntil:
type: string
diff --git a/manifests/crd/v1/pingcap.com_backups.yaml b/manifests/crd/v1/pingcap.com_backups.yaml
index b63416a139..afcea77fce 100644
--- a/manifests/crd/v1/pingcap.com_backups.yaml
+++ b/manifests/crd/v1/pingcap.com_backups.yaml
@@ -2139,7 +2139,7 @@ spec:
logStop:
type: boolean
logSubcommand:
- default: start
+ default: log-start
type: string
logTruncateUntil:
type: string
diff --git a/manifests/crd/v1/pingcap.com_backupschedules.yaml b/manifests/crd/v1/pingcap.com_backupschedules.yaml
index bdf30a8f11..1bb9f92d88 100644
--- a/manifests/crd/v1/pingcap.com_backupschedules.yaml
+++ b/manifests/crd/v1/pingcap.com_backupschedules.yaml
@@ -2114,7 +2114,7 @@ spec:
logStop:
type: boolean
logSubcommand:
- default: start
+ default: log-start
type: string
logTruncateUntil:
type: string
@@ -4350,7 +4350,7 @@ spec:
logStop:
type: boolean
logSubcommand:
- default: start
+ default: log-start
type: string
logTruncateUntil:
type: string
diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go
index 1dc42de4b3..d961d8143f 100644
--- a/pkg/apis/pingcap/v1alpha1/types.go
+++ b/pkg/apis/pingcap/v1alpha1/types.go
@@ -2363,7 +2363,7 @@ const (
// BackupPrepare means the backup prepare backup process
BackupPrepare BackupConditionType = "Prepare"
// BackupPaused means the backup was paused
- BackupPaused BackupConditionType = "Paused"
+ BackupPaused BackupConditionType = "Paused"
// BackupStopped means the backup was stopped, just log backup has this condition
BackupStopped BackupConditionType = "Stopped"
// BackupRestart means the backup was restarted, now just support snapshot backup
diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go
index deb779188d..36aa15630e 100644
--- a/pkg/controller/backup/backup_controller.go
+++ b/pkg/controller/backup/backup_controller.go
@@ -167,9 +167,16 @@ func (c *Controller) updateBackup(cur interface{}) {
ns := newBackup.GetNamespace()
name := newBackup.GetName()
+ //For log backup with truncate, we need to create a truncate job
+ if newBackup.Spec.LogSubcommand != string(v1alpha1.LogTruncateCommand) && v1alpha1.HaveTruncateUntil(newBackup) {
+ truncateTask := newBackup.DeepCopy()
+ truncateTask.Spec.LogSubcommand = string(v1alpha1.LogTruncateCommand)
+ defer c.updateBackup(truncateTask)
+ }
+
if newBackup.DeletionTimestamp != nil {
// the backup is being deleted, we need to do some cleanup work, enqueue backup.
- klog.Infof("backup %s/%s is being deleted", ns, name)
+ klog.Infof("backup %s/%s - %s is being deleted", ns, name, string(newBackup.Spec.LogSubcommand))
c.enqueueBackup(newBackup)
return
}
@@ -208,7 +215,6 @@ func (c *Controller) updateBackup(cur interface{}) {
return
}
- // TODO: (Ris)log backup check all subcommand job's pod status
if newBackup.Spec.Mode != v1alpha1.BackupModeLog {
// we will create backup job when we mark backup as scheduled status,
// but the backup job or its pod may failed due to insufficient resources or other reasons in k8s,
@@ -244,16 +250,8 @@ func (c *Controller) updateBackup(cur interface{}) {
newBackup.Spec.LogSubcommand = string(v1alpha1.LogResumeCommand)
}
-
klog.V(4).Infof("backup object %s/%s enqueue", ns, name)
c.enqueueBackup(newBackup)
-
- //For log backup with truncate, we need to create a truncate job
- if v1alpha1.HaveTruncateUntil(newBackup) && newBackup.Spec.LogSubcommand != string(v1alpha1.LogTruncateCommand) {
- truncateTask := newBackup.DeepCopy()
- truncateTask.Spec.LogSubcommand = string(v1alpha1.LogTruncateCommand)
- c.enqueueBackup(truncateTask)
- }
}
func (c *Controller) deleteJob(obj interface{}) {
From f94c12fba0b72b0ee0b279e468e0079e0576c490 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Thu, 15 Aug 2024 11:49:25 +0200
Subject: [PATCH 06/34] done
---
pkg/backup/backup/backup_manager.go | 1 +
pkg/controller/backup/backup_controller.go | 10 ++--------
2 files changed, 3 insertions(+), 8 deletions(-)
diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go
index 4fa54029e0..efda3cdcb4 100644
--- a/pkg/backup/backup/backup_manager.go
+++ b/pkg/backup/backup/backup_manager.go
@@ -168,6 +168,7 @@ func (bm *backupManager) syncBackupJob(backup *v1alpha1.Backup) error {
}
// create k8s job
+ klog.Infof("backup %s/%s creating job %s.", ns, name, backupJobName)
if err := bm.deps.JobControl.CreateJob(backup, job); err != nil {
errMsg := fmt.Errorf("create backup %s/%s job %s failed, err: %v", ns, name, backupJobName, err)
bm.statusUpdater.Update(backup, &v1alpha1.BackupCondition{
diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go
index 36aa15630e..aa9bab3b91 100644
--- a/pkg/controller/backup/backup_controller.go
+++ b/pkg/controller/backup/backup_controller.go
@@ -155,6 +155,7 @@ func (c *Controller) sync(key string) (err error) {
return err
}
+ klog.Infof("Syncing Backup %s/%s", ns, name)
return c.syncBackup(backup.DeepCopy())
}
@@ -167,16 +168,9 @@ func (c *Controller) updateBackup(cur interface{}) {
ns := newBackup.GetNamespace()
name := newBackup.GetName()
- //For log backup with truncate, we need to create a truncate job
- if newBackup.Spec.LogSubcommand != string(v1alpha1.LogTruncateCommand) && v1alpha1.HaveTruncateUntil(newBackup) {
- truncateTask := newBackup.DeepCopy()
- truncateTask.Spec.LogSubcommand = string(v1alpha1.LogTruncateCommand)
- defer c.updateBackup(truncateTask)
- }
-
if newBackup.DeletionTimestamp != nil {
// the backup is being deleted, we need to do some cleanup work, enqueue backup.
- klog.Infof("backup %s/%s - %s is being deleted", ns, name, string(newBackup.Spec.LogSubcommand))
+ klog.Infof("backup %s/%s is being deleted", ns, name)
c.enqueueBackup(newBackup)
return
}
From e7f8537bead9fb4b1597c3eb46b3477eb4eac54f Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Mon, 26 Aug 2024 09:49:41 +0200
Subject: [PATCH 07/34] handel skip
---
pkg/apis/pingcap/v1alpha1/backup.go | 11 +++++++++++
pkg/backup/backup/backup_manager.go | 8 ++++++--
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index b49423f81a..937a52cf5b 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -414,3 +414,14 @@ func IsLogBackupAlreadyTruncate(backup *Backup) bool {
func IsLogBackupAlreadyStop(backup *Backup) bool {
return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupStopped
}
+
+// IsLogBackupAlreadyStop return whether log backup has already paused.
+//TODO: (Ris) deal with task stopped
+func IsLogBackupAlreadyPaused(backup *Backup) bool {
+ return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupPaused
+}
+
+// IsLogBackupAlreadyRestart return whether log backup has already resumed.
+func IsLogBackupAlreadyResumed(backup *Backup) bool {
+ return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupRestart
+}
diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go
index efda3cdcb4..4f46bcc66b 100644
--- a/pkg/backup/backup/backup_manager.go
+++ b/pkg/backup/backup/backup_manager.go
@@ -1090,6 +1090,12 @@ func (bm *backupManager) skipLogBackupSync(backup *v1alpha1.Backup) (bool, error
switch command {
case v1alpha1.LogStartCommand:
skip = v1alpha1.IsLogBackupAlreadyStart(backup)
+ case v1alpha1.LogStopCommand:
+ skip = v1alpha1.IsLogBackupAlreadyStop(backup)
+ case v1alpha1.LogPauseCommand:
+ skip = v1alpha1.IsLogBackupAlreadyPaused(backup)
+ case v1alpha1.LogResumeCommand:
+ skip = !v1alpha1.IsLogBackupAlreadyResumed(backup)
case v1alpha1.LogTruncateCommand:
if v1alpha1.IsLogBackupAlreadyTruncate(backup) {
skip = true
@@ -1105,8 +1111,6 @@ func (bm *backupManager) skipLogBackupSync(backup *v1alpha1.Backup) (bool, error
Status: corev1.ConditionTrue,
}, updateStatus)
}
- case v1alpha1.LogStopCommand:
- skip = v1alpha1.IsLogBackupAlreadyStop(backup)
default:
return false, nil
}
From 5be5ee0eaeefd7196ad4aaf5483568f8d5312771 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Mon, 26 Aug 2024 11:02:34 +0200
Subject: [PATCH 08/34] before bm
---
cmd/backup-manager/app/backup/manager.go | 4 ++++
pkg/apis/pingcap/v1alpha1/backup.go | 3 +++
2 files changed, 7 insertions(+)
diff --git a/cmd/backup-manager/app/backup/manager.go b/cmd/backup-manager/app/backup/manager.go
index b0d3b712da..d8c58e5e93 100644
--- a/cmd/backup-manager/app/backup/manager.go
+++ b/cmd/backup-manager/app/backup/manager.go
@@ -472,6 +472,10 @@ func (bm *Manager) performLogBackup(ctx context.Context, backup *v1alpha1.Backup
resultStatus, reason, err = bm.stopLogBackup(ctx, backup)
case string(v1alpha1.LogTruncateCommand):
resultStatus, reason, err = bm.truncateLogBackup(ctx, backup)
+ case string(v1alpha1.LogResumeCommand):
+ klog.Errorf("Log resume command is not supported yet")
+ case string(v1alpha1.LogPauseCommand):
+ klog.Errorf("Log pause command is not supported yet")
default:
return fmt.Errorf("log backup %s unknown log subcommand %s", bm, bm.SubCommand)
}
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index 937a52cf5b..d041763a77 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -339,6 +339,9 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
}
switch backup.Spec.LogSubcommand {
case "log-start":
+ if IsLogBackupAlreadyStart(backup) {
+ return LogResumeCommand
+ }
return LogStartCommand
case "log-stop":
return LogStopCommand
From 3a5f24c7d02e42b24340087b0133ef1090a92088 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Tue, 27 Aug 2024 07:16:20 +0200
Subject: [PATCH 09/34] add resume
---
cmd/backup-manager/app/backup/backup.go | 17 ++++++++++
cmd/backup-manager/app/backup/manager.go | 43 +++++++++++++++++++++++-
pkg/apis/pingcap/v1alpha1/backup.go | 7 ++--
3 files changed, 64 insertions(+), 3 deletions(-)
diff --git a/cmd/backup-manager/app/backup/backup.go b/cmd/backup-manager/app/backup/backup.go
index 854d37d2c1..cadbad0f6c 100644
--- a/cmd/backup-manager/app/backup/backup.go
+++ b/cmd/backup-manager/app/backup/backup.go
@@ -167,6 +167,23 @@ func (bo *Options) doStartLogBackup(ctx context.Context, backup *v1alpha1.Backup
return bo.brCommandRun(ctx, fullArgs)
}
+// doResumeLogBackup generates br args about log backup resume and runs br binary to do the real backup work.
+func (bo *Options) doResumeLogBackup(ctx context.Context, backup *v1alpha1.Backup) error {
+ specificArgs := []string{
+ "log",
+ "resume",
+ fmt.Sprintf("--task-name=%s", backup.Name),
+ }
+ // if bo.CommitTS != "" && bo.CommitTS != "0" {
+ // specificArgs = append(specificArgs, fmt.Sprintf("--start-ts=%s", bo.CommitTS))
+ // }
+ fullArgs, err := bo.backupCommandTemplate(backup, specificArgs, false)
+ if err != nil {
+ return err
+ }
+ return bo.brCommandRun(ctx, fullArgs)
+}
+
// doStoplogBackup generates br args about log backup stop and runs br binary to do the real backup work.
func (bo *Options) doStopLogBackup(ctx context.Context, backup *v1alpha1.Backup) error {
specificArgs := []string{
diff --git a/cmd/backup-manager/app/backup/manager.go b/cmd/backup-manager/app/backup/manager.go
index d8c58e5e93..085e425379 100644
--- a/cmd/backup-manager/app/backup/manager.go
+++ b/cmd/backup-manager/app/backup/manager.go
@@ -472,8 +472,9 @@ func (bm *Manager) performLogBackup(ctx context.Context, backup *v1alpha1.Backup
resultStatus, reason, err = bm.stopLogBackup(ctx, backup)
case string(v1alpha1.LogTruncateCommand):
resultStatus, reason, err = bm.truncateLogBackup(ctx, backup)
+ //TODO: (Ris) support more funcs
case string(v1alpha1.LogResumeCommand):
- klog.Errorf("Log resume command is not supported yet")
+ resultStatus, reason, err = bm.resumeLogBackup(ctx, backup)
case string(v1alpha1.LogPauseCommand):
klog.Errorf("Log pause command is not supported yet")
default:
@@ -555,6 +556,46 @@ func (bm *Manager) startLogBackup(ctx context.Context, backup *v1alpha1.Backup)
return updateStatus, "", nil
}
+// resumeLogBackup resume log backup.
+func (bm *Manager) resumeLogBackup(ctx context.Context, backup *v1alpha1.Backup) (*controller.BackupUpdateStatus, string, error) {
+ started := time.Now()
+ backupFullPath, err := util.GetStoragePath(backup)
+ if err != nil {
+ klog.Errorf("Get backup full path of cluster %s failed, err: %s", bm, err)
+ return nil, "GetBackupRemotePathFailed", err
+ }
+ klog.Infof("Get backup full path %s of cluster %s success", backupFullPath, bm)
+
+ updatePathStatus := &controller.BackupUpdateStatus{
+ BackupPath: &backupFullPath,
+ }
+
+ // change Prepare to Running before real backup process start
+ if err := bm.StatusUpdater.Update(backup, &v1alpha1.BackupCondition{
+ Command: v1alpha1.LogResumeCommand,
+ Type: v1alpha1.BackupRunning,
+ Status: corev1.ConditionTrue,
+ }, updatePathStatus); err != nil {
+ return nil, "UpdateStatusFailed", err
+ }
+
+ // run br binary to do the real job
+ backupErr := bm.doResumeLogBackup(ctx, backup)
+
+ if backupErr != nil {
+ klog.Errorf("Resume log backup of cluster %s failed, err: %s", bm, backupErr)
+ return nil, "ResumeLogBackuFailed", backupErr
+ }
+ klog.Infof("Resume log backup of cluster %s to %s success", bm, backupFullPath)
+
+ finish := time.Now()
+ updateStatus := &controller.BackupUpdateStatus{
+ TimeStarted: &metav1.Time{Time: started},
+ TimeCompleted: &metav1.Time{Time: finish},
+ }
+ return updateStatus, "", nil
+}
+
// stopLogBackup stops log backup.
func (bm *Manager) stopLogBackup(ctx context.Context, backup *v1alpha1.Backup) (*controller.BackupUpdateStatus, string, error) {
started := time.Now()
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index d041763a77..58e7fd8497 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -391,7 +391,10 @@ func GetLogSubcommandConditionInfo(backup *Backup) (reason, message string) {
// IsLogBackupAlreadyStart return whether log backup has already started.
func IsLogBackupAlreadyStart(backup *Backup) bool {
- return backup.Spec.Mode == BackupModeLog && backup.Status.CommitTs != ""
+ if backup.Spec.Mode != BackupModeLog || backup.Status.CommitTs == "" {
+ return false
+ }
+ return backup.Status.Phase == BackupRunning
}
// IsLogBackupAlreadyTruncate return whether log backup has already truncated.
@@ -426,5 +429,5 @@ func IsLogBackupAlreadyPaused(backup *Backup) bool {
// IsLogBackupAlreadyRestart return whether log backup has already resumed.
func IsLogBackupAlreadyResumed(backup *Backup) bool {
- return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupRestart
+ return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupRunning
}
From a69c409fcd5210ee0373c6199784f8e1b076a971 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Tue, 27 Aug 2024 08:34:00 +0200
Subject: [PATCH 10/34] add pause
---
cmd/backup-manager/app/backup/backup.go | 14 +++++++
cmd/backup-manager/app/backup/manager.go | 48 +++++++++++++++++-------
pkg/controller/backup_status_updater.go | 1 +
3 files changed, 49 insertions(+), 14 deletions(-)
diff --git a/cmd/backup-manager/app/backup/backup.go b/cmd/backup-manager/app/backup/backup.go
index cadbad0f6c..f46e1e13c1 100644
--- a/cmd/backup-manager/app/backup/backup.go
+++ b/cmd/backup-manager/app/backup/backup.go
@@ -198,6 +198,20 @@ func (bo *Options) doStopLogBackup(ctx context.Context, backup *v1alpha1.Backup)
return bo.brCommandRun(ctx, fullArgs)
}
+// doPauselogBackup generates br args about log backup pause and runs br binary to do the real backup work.
+func (bo *Options) doPauseLogBackup(ctx context.Context, backup *v1alpha1.Backup) error {
+ specificArgs := []string{
+ "log",
+ "pause",
+ fmt.Sprintf("--task-name=%s", backup.Name),
+ }
+ fullArgs, err := bo.backupCommandTemplate(backup, specificArgs, false)
+ if err != nil {
+ return err
+ }
+ return bo.brCommandRun(ctx, fullArgs)
+}
+
// doTruncateLogBackup generates br args about log backup truncate and runs br binary to do the real backup work.
func (bo *Options) doTruncateLogBackup(ctx context.Context, backup *v1alpha1.Backup) error {
specificArgs := []string{
diff --git a/cmd/backup-manager/app/backup/manager.go b/cmd/backup-manager/app/backup/manager.go
index 085e425379..a7bf3fcf12 100644
--- a/cmd/backup-manager/app/backup/manager.go
+++ b/cmd/backup-manager/app/backup/manager.go
@@ -472,11 +472,10 @@ func (bm *Manager) performLogBackup(ctx context.Context, backup *v1alpha1.Backup
resultStatus, reason, err = bm.stopLogBackup(ctx, backup)
case string(v1alpha1.LogTruncateCommand):
resultStatus, reason, err = bm.truncateLogBackup(ctx, backup)
- //TODO: (Ris) support more funcs
case string(v1alpha1.LogResumeCommand):
resultStatus, reason, err = bm.resumeLogBackup(ctx, backup)
case string(v1alpha1.LogPauseCommand):
- klog.Errorf("Log pause command is not supported yet")
+ resultStatus, reason, err = bm.pauseLogBackup(ctx, backup)
default:
return fmt.Errorf("log backup %s unknown log subcommand %s", bm, bm.SubCommand)
}
@@ -559,23 +558,13 @@ func (bm *Manager) startLogBackup(ctx context.Context, backup *v1alpha1.Backup)
// resumeLogBackup resume log backup.
func (bm *Manager) resumeLogBackup(ctx context.Context, backup *v1alpha1.Backup) (*controller.BackupUpdateStatus, string, error) {
started := time.Now()
- backupFullPath, err := util.GetStoragePath(backup)
- if err != nil {
- klog.Errorf("Get backup full path of cluster %s failed, err: %s", bm, err)
- return nil, "GetBackupRemotePathFailed", err
- }
- klog.Infof("Get backup full path %s of cluster %s success", backupFullPath, bm)
-
- updatePathStatus := &controller.BackupUpdateStatus{
- BackupPath: &backupFullPath,
- }
// change Prepare to Running before real backup process start
if err := bm.StatusUpdater.Update(backup, &v1alpha1.BackupCondition{
Command: v1alpha1.LogResumeCommand,
Type: v1alpha1.BackupRunning,
Status: corev1.ConditionTrue,
- }, updatePathStatus); err != nil {
+ }, nil); err != nil {
return nil, "UpdateStatusFailed", err
}
@@ -586,7 +575,7 @@ func (bm *Manager) resumeLogBackup(ctx context.Context, backup *v1alpha1.Backup)
klog.Errorf("Resume log backup of cluster %s failed, err: %s", bm, backupErr)
return nil, "ResumeLogBackuFailed", backupErr
}
- klog.Infof("Resume log backup of cluster %s to %s success", bm, backupFullPath)
+ klog.Infof("Resume log backup of cluster %s success", bm)
finish := time.Now()
updateStatus := &controller.BackupUpdateStatus{
@@ -627,6 +616,37 @@ func (bm *Manager) stopLogBackup(ctx context.Context, backup *v1alpha1.Backup) (
return updateStatus, "", nil
}
+// pauseLogBackup stops log backup.
+func (bm *Manager) pauseLogBackup(ctx context.Context, backup *v1alpha1.Backup) (*controller.BackupUpdateStatus, string, error) {
+ started := time.Now()
+
+ // change Prepare to Running before real backup process start
+ if err := bm.StatusUpdater.Update(backup, &v1alpha1.BackupCondition{
+ Command: v1alpha1.LogPauseCommand,
+ Type: v1alpha1.BackupRunning,
+ Status: corev1.ConditionTrue,
+ }, nil); err != nil {
+ return nil, "UpdateStatusFailed", err
+ }
+
+ // run br binary to do the real job
+ backupErr := bm.doPauseLogBackup(ctx, backup)
+
+ if backupErr != nil {
+ klog.Errorf("Pause log backup of cluster %s failed, err: %s", bm, backupErr)
+ return nil, "PauseLogBackupFailed", backupErr
+ }
+ klog.Infof("Pause log backup of cluster %s success", bm)
+
+ finish := time.Now()
+
+ updateStatus := &controller.BackupUpdateStatus{
+ TimeStarted: &metav1.Time{Time: started},
+ TimeCompleted: &metav1.Time{Time: finish},
+ }
+ return updateStatus, "", nil
+}
+
// truncateLogBackup truncates log backup.
func (bm *Manager) truncateLogBackup(ctx context.Context, backup *v1alpha1.Backup) (*controller.BackupUpdateStatus, string, error) {
started := time.Now()
diff --git a/pkg/controller/backup_status_updater.go b/pkg/controller/backup_status_updater.go
index 370ecfacb2..147eb20dae 100644
--- a/pkg/controller/backup_status_updater.go
+++ b/pkg/controller/backup_status_updater.go
@@ -254,6 +254,7 @@ func updateLogSubcommandStatus(backup *v1alpha1.Backup, condition *v1alpha1.Back
}
// updateWholeLogBackupStatus updates the whole log backup status.
+//TODO: (Ris) add more states
func updateWholeLogBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.BackupCondition, status *BackupUpdateStatus) bool {
// call real update interface to update whole status
doUpdateStatusAndCondition := func(newCondition *v1alpha1.BackupCondition, newStatus *BackupUpdateStatus) bool {
From cc893467e7622fb2e45fc28dc10efea44d5f153f Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Thu, 29 Aug 2024 11:31:20 +0200
Subject: [PATCH 11/34] change states
---
pkg/controller/backup_status_updater.go | 36 ++++++++++++++++++++++++-
1 file changed, 35 insertions(+), 1 deletion(-)
diff --git a/pkg/controller/backup_status_updater.go b/pkg/controller/backup_status_updater.go
index 147eb20dae..632df381c8 100644
--- a/pkg/controller/backup_status_updater.go
+++ b/pkg/controller/backup_status_updater.go
@@ -209,6 +209,7 @@ func updateSnapshotBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.Bac
// updateLogBackupStatus update log backup status.
// it will update both the log backup sub command status and the whole log backup status.
+//TODO: (Ris) add more states here
func updateLogBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.BackupCondition, newStatus *BackupUpdateStatus) bool {
// update whole backup status
isWholeStatusUpdate := updateWholeLogBackupStatus(backup, condition, newStatus)
@@ -254,7 +255,6 @@ func updateLogSubcommandStatus(backup *v1alpha1.Backup, condition *v1alpha1.Back
}
// updateWholeLogBackupStatus updates the whole log backup status.
-//TODO: (Ris) add more states
func updateWholeLogBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.BackupCondition, status *BackupUpdateStatus) bool {
// call real update interface to update whole status
doUpdateStatusAndCondition := func(newCondition *v1alpha1.BackupCondition, newStatus *BackupUpdateStatus) bool {
@@ -295,6 +295,24 @@ func updateWholeLogBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.Bac
newStatus.TimeCompleted = nil
newStatus.TimeStarted = nil
return &newStatus
+ case v1alpha1.LogPauseCommand:
+ // pause command, complete condition, should not update TimeStarted, TimeCompleted
+ // other conditions, no need to be used to update whole status
+ if condition.Type != v1alpha1.BackupComplete {
+ return nil
+ }
+ newStatus.TimeCompleted = nil
+ newStatus.TimeStarted = nil
+ return &newStatus
+ case v1alpha1.LogResumeCommand:
+ // resume command, complete condition, should not update TimeCompleted, TimeStarted
+ // other conditions, no need to be used to update whole status
+ if condition.Type != v1alpha1.BackupComplete {
+ return nil
+ }
+ newStatus.TimeCompleted = nil
+ newStatus.TimeStarted = nil
+ return &newStatus
default:
// should not hanpen
return nil
@@ -324,6 +342,22 @@ func updateWholeLogBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.Bac
return &newCondition
}
return nil
+ case v1alpha1.LogPauseCommand:
+ // pause command, complete condition, should be updated as paused
+ // other conditions, no need to be used to update whole condition
+ if condition.Type == v1alpha1.BackupComplete {
+ newCondition.Type = v1alpha1.BackupPaused
+ return &newCondition
+ }
+ return nil
+ case v1alpha1.LogResumeCommand:
+ // resume command, complete condition, should be updated as resumed
+ // other conditions, no need to be used to update whole condition
+ if condition.Type == v1alpha1.BackupComplete {
+ newCondition.Type = v1alpha1.BackupRunning
+ return &newCondition
+ }
+ return nil
default:
// truncate command or other, all conditions, no need to be used to update whole condition.
return nil
From 6ad5981fd7eac3df6211ca3fd26fe8d311f939c2 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Fri, 30 Aug 2024 08:51:45 +0200
Subject: [PATCH 12/34] fix
---
pkg/apis/pingcap/v1alpha1/backup.go | 7 ++-----
pkg/backup/backup/backup_manager.go | 2 +-
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index 58e7fd8497..0d9767ae09 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -391,10 +391,7 @@ func GetLogSubcommandConditionInfo(backup *Backup) (reason, message string) {
// IsLogBackupAlreadyStart return whether log backup has already started.
func IsLogBackupAlreadyStart(backup *Backup) bool {
- if backup.Spec.Mode != BackupModeLog || backup.Status.CommitTs == "" {
- return false
- }
- return backup.Status.Phase == BackupRunning
+ return backup.Spec.Mode == BackupModeLog && backup.Status.CommitTs != ""
}
// IsLogBackupAlreadyTruncate return whether log backup has already truncated.
@@ -428,6 +425,6 @@ func IsLogBackupAlreadyPaused(backup *Backup) bool {
}
// IsLogBackupAlreadyRestart return whether log backup has already resumed.
-func IsLogBackupAlreadyResumed(backup *Backup) bool {
+func IsLogBackupAlreadyRunning(backup *Backup) bool {
return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupRunning
}
diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go
index 4f46bcc66b..69e27f44d8 100644
--- a/pkg/backup/backup/backup_manager.go
+++ b/pkg/backup/backup/backup_manager.go
@@ -1095,7 +1095,7 @@ func (bm *backupManager) skipLogBackupSync(backup *v1alpha1.Backup) (bool, error
case v1alpha1.LogPauseCommand:
skip = v1alpha1.IsLogBackupAlreadyPaused(backup)
case v1alpha1.LogResumeCommand:
- skip = !v1alpha1.IsLogBackupAlreadyResumed(backup)
+ skip = !v1alpha1.IsLogBackupAlreadyRunning(backup)
case v1alpha1.LogTruncateCommand:
if v1alpha1.IsLogBackupAlreadyTruncate(backup) {
skip = true
From c58b62ca0842addef0380d3e2db233a6e2d7a38d Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Fri, 30 Aug 2024 10:14:56 +0200
Subject: [PATCH 13/34] fix resume failed
lint
---
hack/local-up-operator.sh | 4 ----
pkg/apis/pingcap/v1alpha1/backup.go | 6 ++----
pkg/backup/backup/backup_manager.go | 5 ++---
pkg/controller/backup_status_updater.go | 1 -
4 files changed, 4 insertions(+), 12 deletions(-)
diff --git a/hack/local-up-operator.sh b/hack/local-up-operator.sh
index d89806b563..6bb765f328 100755
--- a/hack/local-up-operator.sh
+++ b/hack/local-up-operator.sh
@@ -13,10 +13,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-#
-# This command runs tidb-operator in Kubernetes.
-#
-
# Default provider is kind
PROVIDER=${PROVIDER:-kind}
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index 0d9767ae09..951f60082a 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -339,7 +339,7 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
}
switch backup.Spec.LogSubcommand {
case "log-start":
- if IsLogBackupAlreadyStart(backup) {
+ if IsLogBackupAlreadyPaused(backup) {
return LogResumeCommand
}
return LogStartCommand
@@ -350,11 +350,10 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
case "log-truncate":
return LogTruncateCommand
default:
- return ""
+ return LogStartCommand
}
}
-// TODO: (Ris) move logic about truncate to elsewhere
// IsLogBackupSubCommandOntheCondition return whether the log subcommand on the condition.
func IsLogBackupSubCommandOntheCondition(backup *Backup, conditionType BackupConditionType) bool {
command := ParseLogBackupSubcommand(backup)
@@ -419,7 +418,6 @@ func IsLogBackupAlreadyStop(backup *Backup) bool {
}
// IsLogBackupAlreadyStop return whether log backup has already paused.
-//TODO: (Ris) deal with task stopped
func IsLogBackupAlreadyPaused(backup *Backup) bool {
return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupPaused
}
diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go
index 69e27f44d8..c29d5762eb 100644
--- a/pkg/backup/backup/backup_manager.go
+++ b/pkg/backup/backup/backup_manager.go
@@ -161,7 +161,6 @@ func (bm *backupManager) syncBackupJob(backup *v1alpha1.Backup) error {
var job *batchv1.Job
var reason string
var updateStatus *controller.BackupUpdateStatus
- //TODO: (Ris)modify the backupJobs
if job, updateStatus, reason, err = bm.makeBackupJob(backup); err != nil {
klog.Errorf("backup %s/%s create job %s failed, reason is %s, error %v.", ns, name, backupJobName, reason, err)
return err
@@ -1095,7 +1094,7 @@ func (bm *backupManager) skipLogBackupSync(backup *v1alpha1.Backup) (bool, error
case v1alpha1.LogPauseCommand:
skip = v1alpha1.IsLogBackupAlreadyPaused(backup)
case v1alpha1.LogResumeCommand:
- skip = !v1alpha1.IsLogBackupAlreadyRunning(backup)
+ skip = v1alpha1.IsLogBackupAlreadyRunning(backup)
case v1alpha1.LogTruncateCommand:
if v1alpha1.IsLogBackupAlreadyTruncate(backup) {
skip = true
@@ -1240,7 +1239,7 @@ func shouldLogBackupCommandRequeue(backup *v1alpha1.Backup) bool {
}
command := v1alpha1.ParseLogBackupSubcommand(backup)
- if command == v1alpha1.LogTruncateCommand || command == v1alpha1.LogStopCommand {
+ if command == v1alpha1.LogTruncateCommand || command == v1alpha1.LogStopCommand || command == v1alpha1.LogPauseCommand {
return backup.Status.CommitTs == ""
}
return false
diff --git a/pkg/controller/backup_status_updater.go b/pkg/controller/backup_status_updater.go
index 632df381c8..a0f977b167 100644
--- a/pkg/controller/backup_status_updater.go
+++ b/pkg/controller/backup_status_updater.go
@@ -209,7 +209,6 @@ func updateSnapshotBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.Bac
// updateLogBackupStatus update log backup status.
// it will update both the log backup sub command status and the whole log backup status.
-//TODO: (Ris) add more states here
func updateLogBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.BackupCondition, newStatus *BackupUpdateStatus) bool {
// update whole backup status
isWholeStatusUpdate := updateWholeLogBackupStatus(backup, condition, newStatus)
From bd137403a6ebfe5cffe4a9db4ea7c80f1dd09264 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Tue, 3 Sep 2024 06:33:57 +0200
Subject: [PATCH 14/34] add test
---
tests/e2e/br/br.go | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/tests/e2e/br/br.go b/tests/e2e/br/br.go
index 58e5c1c81f..c3a93997de 100644
--- a/tests/e2e/br/br.go
+++ b/tests/e2e/br/br.go
@@ -404,6 +404,7 @@ var _ = ginkgo.Describe("Backup and Restore", func() {
ginkgo.By("Start log backup")
backup, err := createBackupAndWaitForComplete(f, backupName, backupClusterName, typ, func(backup *v1alpha1.Backup) {
+ backup.Spec.LogSubcommand = "log-start"
backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
backup.Spec.Mode = v1alpha1.BackupModeLog
})
@@ -412,6 +413,7 @@ var _ = ginkgo.Describe("Backup and Restore", func() {
ginkgo.By("Truncate log backup")
backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
+ backup.Spec.LogSubcommand = "log-truncate"
backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
backup.Spec.Mode = v1alpha1.BackupModeLog
backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339)
@@ -421,6 +423,7 @@ var _ = ginkgo.Describe("Backup and Restore", func() {
ginkgo.By("Truncate log backup again")
backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
+ backup.Spec.LogSubcommand = "log-truncate"
backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
backup.Spec.Mode = v1alpha1.BackupModeLog
backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339)
@@ -430,19 +433,19 @@ var _ = ginkgo.Describe("Backup and Restore", func() {
ginkgo.By("Stop log backup")
backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
+ backup.Spec.LogSubcommand = "log-stop"
backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
backup.Spec.Mode = v1alpha1.BackupModeLog
- backup.Spec.LogStop = true
})
framework.ExpectNoError(err)
framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupStopped)
ginkgo.By("Truncate log backup after stop")
backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
+ backup.Spec.LogSubcommand = "log-truncate"
backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
backup.Spec.Mode = v1alpha1.BackupModeLog
backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339)
- backup.Spec.LogStop = false
})
framework.ExpectNoError(err)
framework.ExpectEqual(backup.Status.LogSuccessTruncateUntil, backup.Spec.LogTruncateUntil)
From 236b63f1d40202693c2e7fd1817f288b5088fab0 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Mon, 23 Sep 2024 09:39:12 +0200
Subject: [PATCH 15/34] fix comments
---
cmd/backup-manager/app/backup/backup.go | 3 ---
pkg/apis/pingcap/v1alpha1/backup.go | 21 +++++++++++----------
pkg/apis/pingcap/v1alpha1/types.go | 2 +-
pkg/controller/backup/backup_controller.go | 5 -----
4 files changed, 12 insertions(+), 19 deletions(-)
diff --git a/cmd/backup-manager/app/backup/backup.go b/cmd/backup-manager/app/backup/backup.go
index f46e1e13c1..67002fd213 100644
--- a/cmd/backup-manager/app/backup/backup.go
+++ b/cmd/backup-manager/app/backup/backup.go
@@ -174,9 +174,6 @@ func (bo *Options) doResumeLogBackup(ctx context.Context, backup *v1alpha1.Backu
"resume",
fmt.Sprintf("--task-name=%s", backup.Name),
}
- // if bo.CommitTS != "" && bo.CommitTS != "0" {
- // specificArgs = append(specificArgs, fmt.Sprintf("--start-ts=%s", bo.CommitTS))
- // }
fullArgs, err := bo.backupCommandTemplate(backup, specificArgs, false)
if err != nil {
return err
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index 951f60082a..19f77ecefd 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -209,14 +209,6 @@ func HaveTruncateUntil(backup *Backup) bool {
return backup.Spec.LogTruncateUntil != ""
}
-func IsBackupPaused(backup *Backup) bool {
- if backup.Spec.Mode == BackupModeLog {
- return IsLogBackupSubCommandOntheCondition(backup, BackupPaused)
- }
- _, condition := GetBackupCondition(&backup.Status, BackupPaused)
- return condition != nil && condition.Status == corev1.ConditionTrue
-}
-
// IsBackupRunning returns true if a Backup is Running.
func IsBackupRunning(backup *Backup) bool {
if backup.Spec.Mode == BackupModeLog {
@@ -337,6 +329,12 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
if backup.Spec.Mode != BackupModeLog {
return ""
}
+
+ //Compatible with the old version
+ if backup.Spec.LogStop {
+ return LogStopCommand
+ }
+
switch backup.Spec.LogSubcommand {
case "log-start":
if IsLogBackupAlreadyPaused(backup) {
@@ -350,6 +348,9 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
case "log-truncate":
return LogTruncateCommand
default:
+ if backup.Spec.LogTruncateUntil != "" {
+ return LogTruncateCommand
+ }
return LogStartCommand
}
}
@@ -417,12 +418,12 @@ func IsLogBackupAlreadyStop(backup *Backup) bool {
return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupStopped
}
-// IsLogBackupAlreadyStop return whether log backup has already paused.
+// IsLogBackupAlreadyPaused return whether log backup has already paused.
func IsLogBackupAlreadyPaused(backup *Backup) bool {
return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupPaused
}
-// IsLogBackupAlreadyRestart return whether log backup has already resumed.
+// IsLogBackupAlreadyRunning return whether log backup has already resumed.
func IsLogBackupAlreadyRunning(backup *Backup) bool {
return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupRunning
}
diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go
index d961d8143f..9db0313769 100644
--- a/pkg/apis/pingcap/v1alpha1/types.go
+++ b/pkg/apis/pingcap/v1alpha1/types.go
@@ -1879,6 +1879,7 @@ type TLSCluster struct {
// +kubebuilder:printcolumn:name="Completed",type=date,JSONPath=`.status.timeCompleted`,description="The time at which the backup was completed",priority=1
// +kubebuilder:printcolumn:name="TimeTaken",type=string,JSONPath=`.status.timeTaken`,description="The time that the backup takes"
// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`
+// +kubebuilder:validation:OneOf={"logSubCommand", "logStop"}
type Backup struct {
metav1.TypeMeta `json:",inline"`
// +k8s:openapi-gen=false
@@ -2179,7 +2180,6 @@ type BackupSpec struct {
CommitTs string `json:"commitTs,omitempty"`
// Subcommand is the subcommand for BR, such as start, stop, pause etc.
// +optional
- // +kubebuilder:default="log-start"
LogSubcommand string `json:"logSubcommand,omitempty"`
// LogTruncateUntil is log backup truncate until timestamp.
// Format supports TSO or datetime, e.g. '400036290571534337', '2018-05-11 01:42:23'.
diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go
index aa9bab3b91..73212ab128 100644
--- a/pkg/controller/backup/backup_controller.go
+++ b/pkg/controller/backup/backup_controller.go
@@ -155,7 +155,6 @@ func (c *Controller) sync(key string) (err error) {
return err
}
- klog.Infof("Syncing Backup %s/%s", ns, name)
return c.syncBackup(backup.DeepCopy())
}
@@ -240,10 +239,6 @@ func (c *Controller) updateBackup(cur interface{}) {
return
}
- if newBackup.Spec.Mode == v1alpha1.BackupModeLog && newBackup.Spec.LogSubcommand == string(v1alpha1.LogStartCommand) && v1alpha1.IsBackupPaused(newBackup) {
- newBackup.Spec.LogSubcommand = string(v1alpha1.LogResumeCommand)
- }
-
klog.V(4).Infof("backup object %s/%s enqueue", ns, name)
c.enqueueBackup(newBackup)
}
From 62ecb74cce6407900c350f728fdabc37a9f205d8 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Mon, 23 Sep 2024 11:27:55 +0200
Subject: [PATCH 16/34] make subcommand and logStop conflict
---
manifests/crd.yaml | 24 ++++++++++++++++---
manifests/crd/v1/pingcap.com_backups.yaml | 8 ++++++-
.../crd/v1/pingcap.com_backupschedules.yaml | 16 +++++++++++--
pkg/apis/pingcap/v1alpha1/types.go | 2 ++
4 files changed, 44 insertions(+), 6 deletions(-)
diff --git a/manifests/crd.yaml b/manifests/crd.yaml
index 68e6e4c46a..5941e61aa0 100644
--- a/manifests/crd.yaml
+++ b/manifests/crd.yaml
@@ -2114,7 +2114,6 @@ spec:
logStop:
type: boolean
logSubcommand:
- default: log-start
type: string
logTruncateUntil:
type: string
@@ -2282,6 +2281,13 @@ spec:
default: 600
type: integer
type: object
+ x-kubernetes-validations:
+ - message: Field `logStop` is the old version field, please use `logSubcommand`
+ instead
+ rule: 'has(self.logSubcommand) ? !has(self.logStop) : true'
+ - message: Field `logStop` is the old version field, please use `logSubcommand`
+ instead
+ rule: 'has(self.logStop) ? !has(self.logSubcommand) : true'
imagePullSecrets:
items:
properties:
@@ -4350,7 +4356,6 @@ spec:
logStop:
type: boolean
logSubcommand:
- default: log-start
type: string
logTruncateUntil:
type: string
@@ -4518,6 +4523,13 @@ spec:
default: 600
type: integer
type: object
+ x-kubernetes-validations:
+ - message: Field `logStop` is the old version field, please use `logSubcommand`
+ instead
+ rule: 'has(self.logSubcommand) ? !has(self.logStop) : true'
+ - message: Field `logStop` is the old version field, please use `logSubcommand`
+ instead
+ rule: 'has(self.logStop) ? !has(self.logSubcommand) : true'
maxBackups:
format: int32
type: integer
@@ -6696,7 +6708,6 @@ spec:
logStop:
type: boolean
logSubcommand:
- default: log-start
type: string
logTruncateUntil:
type: string
@@ -6864,6 +6875,13 @@ spec:
default: 600
type: integer
type: object
+ x-kubernetes-validations:
+ - message: Field `logStop` is the old version field, please use `logSubcommand`
+ instead
+ rule: 'has(self.logSubcommand) ? !has(self.logStop) : true'
+ - message: Field `logStop` is the old version field, please use `logSubcommand`
+ instead
+ rule: 'has(self.logStop) ? !has(self.logSubcommand) : true'
status:
properties:
backoffRetryStatus:
diff --git a/manifests/crd/v1/pingcap.com_backups.yaml b/manifests/crd/v1/pingcap.com_backups.yaml
index afcea77fce..3b82954047 100644
--- a/manifests/crd/v1/pingcap.com_backups.yaml
+++ b/manifests/crd/v1/pingcap.com_backups.yaml
@@ -2139,7 +2139,6 @@ spec:
logStop:
type: boolean
logSubcommand:
- default: log-start
type: string
logTruncateUntil:
type: string
@@ -2307,6 +2306,13 @@ spec:
default: 600
type: integer
type: object
+ x-kubernetes-validations:
+ - message: Field `logStop` is the old version field, please use `logSubcommand`
+ instead
+ rule: 'has(self.logSubcommand) ? !has(self.logStop) : true'
+ - message: Field `logStop` is the old version field, please use `logSubcommand`
+ instead
+ rule: 'has(self.logStop) ? !has(self.logSubcommand) : true'
status:
properties:
backoffRetryStatus:
diff --git a/manifests/crd/v1/pingcap.com_backupschedules.yaml b/manifests/crd/v1/pingcap.com_backupschedules.yaml
index 1bb9f92d88..335bee5a66 100644
--- a/manifests/crd/v1/pingcap.com_backupschedules.yaml
+++ b/manifests/crd/v1/pingcap.com_backupschedules.yaml
@@ -2114,7 +2114,6 @@ spec:
logStop:
type: boolean
logSubcommand:
- default: log-start
type: string
logTruncateUntil:
type: string
@@ -2282,6 +2281,13 @@ spec:
default: 600
type: integer
type: object
+ x-kubernetes-validations:
+ - message: Field `logStop` is the old version field, please use `logSubcommand`
+ instead
+ rule: 'has(self.logSubcommand) ? !has(self.logStop) : true'
+ - message: Field `logStop` is the old version field, please use `logSubcommand`
+ instead
+ rule: 'has(self.logStop) ? !has(self.logSubcommand) : true'
imagePullSecrets:
items:
properties:
@@ -4350,7 +4356,6 @@ spec:
logStop:
type: boolean
logSubcommand:
- default: log-start
type: string
logTruncateUntil:
type: string
@@ -4518,6 +4523,13 @@ spec:
default: 600
type: integer
type: object
+ x-kubernetes-validations:
+ - message: Field `logStop` is the old version field, please use `logSubcommand`
+ instead
+ rule: 'has(self.logSubcommand) ? !has(self.logStop) : true'
+ - message: Field `logStop` is the old version field, please use `logSubcommand`
+ instead
+ rule: 'has(self.logStop) ? !has(self.logSubcommand) : true'
maxBackups:
format: int32
type: integer
diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go
index 9db0313769..6927a7471c 100644
--- a/pkg/apis/pingcap/v1alpha1/types.go
+++ b/pkg/apis/pingcap/v1alpha1/types.go
@@ -2131,6 +2131,8 @@ type Progress struct {
// BackupSpec contains the backup specification for a tidb cluster.
// +k8s:openapi-gen=true
+// +kubebuilder:validation:XValidation:rule="has(self.logSubcommand) ? !has(self.logStop) : true",message="Field `logStop` is the old version field, please use `logSubcommand` instead"
+// +kubebuilder:validation:XValidation:rule="has(self.logStop) ? !has(self.logSubcommand) : true",message="Field `logStop` is the old version field, please use `logSubcommand` instead"
type BackupSpec struct {
corev1.ResourceRequirements `json:"resources,omitempty"`
// List of environment variables to set in the container, like v1.Container.Env.
From 1bea7becfe7c60f42b5607fa3ec7604cf4b31a3f Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Tue, 24 Sep 2024 11:01:03 +0200
Subject: [PATCH 17/34] add alreadySync logic
---
pkg/apis/pingcap/v1alpha1/backup.go | 46 ++++++++++++++++++++------
pkg/backup/backup/backup_manager.go | 50 ++++++++++++-----------------
2 files changed, 56 insertions(+), 40 deletions(-)
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index 19f77ecefd..d12912f110 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -310,6 +310,9 @@ func IsBackupCleanFailed(backup *Backup) bool {
// IsCleanCandidate returns true if a Backup should be added to clean candidate according to cleanPolicy
func IsCleanCandidate(backup *Backup) bool {
+ if backup.Spec.Mode == BackupModeLog {
+ return true
+ }
switch backup.Spec.CleanPolicy {
case CleanPolicyTypeDelete, CleanPolicyTypeOnFailure:
return true
@@ -324,34 +327,57 @@ func NeedNotClean(backup *Backup) bool {
}
// ParseLogBackupSubcommand parse the log backup subcommand from cr.
-// The parse priority of the command is stop > truncate > start.
func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
if backup.Spec.Mode != BackupModeLog {
return ""
}
- //Compatible with the old version
+ // Compatible with the old version
if backup.Spec.LogStop {
+ if isSubcommandAlreadySync(backup, LogStopCommand) {
+ return LogTruncateCommand
+ }
return LogStopCommand
}
+ var subCommand LogSubCommandType
switch backup.Spec.LogSubcommand {
case "log-start":
if IsLogBackupAlreadyPaused(backup) {
- return LogResumeCommand
+ subCommand = LogResumeCommand
+ } else {
+ subCommand = LogStartCommand
}
- return LogStartCommand
case "log-stop":
- return LogStopCommand
+ subCommand = LogStopCommand
case "log-pause":
- return LogPauseCommand
+ subCommand = LogPauseCommand
case "log-truncate":
+ subCommand = LogTruncateCommand
+ default:
+ subCommand = LogStartCommand
+ }
+
+ // If the selected subcommand is already done, switch to LogTruncateCommand
+ if isSubcommandAlreadySync(backup, subCommand) {
return LogTruncateCommand
+ }
+
+ return subCommand
+}
+
+func isSubcommandAlreadySync(backup *Backup, subCommand LogSubCommandType) bool {
+ switch subCommand {
+ case LogStartCommand:
+ return IsLogBackupAlreadyStart(backup)
+ case LogStopCommand:
+ return IsLogBackupAlreadyStop(backup)
+ case LogPauseCommand:
+ return IsLogBackupAlreadyPaused(backup)
+ case LogResumeCommand:
+ return IsLogBackupAlreadyRunning(backup)
default:
- if backup.Spec.LogTruncateUntil != "" {
- return LogTruncateCommand
- }
- return LogStartCommand
+ return false
}
}
diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go
index c29d5762eb..6136f1c509 100644
--- a/pkg/backup/backup/backup_manager.go
+++ b/pkg/backup/backup/backup_manager.go
@@ -1078,46 +1078,36 @@ func (bm *backupManager) skipSnapshotBackupSync(backup *v1alpha1.Backup) (bool,
return false, nil
}
-// skipLogBackupSync skip log backup, returns true if can be skipped.
+// skipLogBackupSync skips log backup, returns true if it can be skipped.
func (bm *backupManager) skipLogBackupSync(backup *v1alpha1.Backup) (bool, error) {
if backup.Spec.Mode != v1alpha1.BackupModeLog {
return false, nil
}
- var skip bool
- var err error
+
command := v1alpha1.ParseLogBackupSubcommand(backup)
- switch command {
- case v1alpha1.LogStartCommand:
- skip = v1alpha1.IsLogBackupAlreadyStart(backup)
- case v1alpha1.LogStopCommand:
- skip = v1alpha1.IsLogBackupAlreadyStop(backup)
- case v1alpha1.LogPauseCommand:
- skip = v1alpha1.IsLogBackupAlreadyPaused(backup)
- case v1alpha1.LogResumeCommand:
- skip = v1alpha1.IsLogBackupAlreadyRunning(backup)
- case v1alpha1.LogTruncateCommand:
- if v1alpha1.IsLogBackupAlreadyTruncate(backup) {
- skip = true
- // if skip truncate, we need update truncate to be complete, and truncating util is the spec's truncate until.
- updateStatus := &controller.BackupUpdateStatus{
- TimeStarted: &metav1.Time{Time: time.Now()},
- TimeCompleted: &metav1.Time{Time: time.Now()},
- LogTruncatingUntil: &backup.Spec.LogTruncateUntil,
- }
- err = bm.statusUpdater.Update(backup, &v1alpha1.BackupCondition{
- Command: v1alpha1.LogTruncateCommand,
- Type: v1alpha1.BackupComplete,
- Status: corev1.ConditionTrue,
- }, updateStatus)
+
+ // Handle the special case for LogTruncateCommand where additional actions are needed
+ var err error
+ if command == v1alpha1.LogTruncateCommand && v1alpha1.IsLogBackupAlreadyTruncate(backup) {
+ // If skipping truncate, update status
+ updateStatus := &controller.BackupUpdateStatus{
+ TimeStarted: &metav1.Time{Time: time.Now()},
+ TimeCompleted: &metav1.Time{Time: time.Now()},
+ LogTruncatingUntil: &backup.Spec.LogTruncateUntil,
}
- default:
- return false, nil
+ err = bm.statusUpdater.Update(backup, &v1alpha1.BackupCondition{
+ Command: v1alpha1.LogTruncateCommand,
+ Type: v1alpha1.BackupComplete,
+ Status: corev1.ConditionTrue,
+ }, updateStatus)
}
- if skip {
+ if command == v1alpha1.LogTruncateCommand {
klog.Infof("log backup %s/%s subcommand %s is already done, will skip sync.", backup.Namespace, backup.Name, command)
+ return true, err
}
- return skip, err
+
+ return false, nil
}
// skipVolumeSnapshotBackupSync skip volume snapshot backup, returns true if can be skipped.
From a5be49367bb3b2b2bc4c0508c095b344b15d8102 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Tue, 24 Sep 2024 12:04:13 +0200
Subject: [PATCH 18/34] better truncate
---
pkg/apis/pingcap/v1alpha1/backup.go | 13 ++++++-------
pkg/backup/backup/backup_manager.go | 8 ++++----
2 files changed, 10 insertions(+), 11 deletions(-)
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index d12912f110..676b8476ee 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -310,9 +310,6 @@ func IsBackupCleanFailed(backup *Backup) bool {
// IsCleanCandidate returns true if a Backup should be added to clean candidate according to cleanPolicy
func IsCleanCandidate(backup *Backup) bool {
- if backup.Spec.Mode == BackupModeLog {
- return true
- }
switch backup.Spec.CleanPolicy {
case CleanPolicyTypeDelete, CleanPolicyTypeOnFailure:
return true
@@ -334,7 +331,7 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
// Compatible with the old version
if backup.Spec.LogStop {
- if isSubcommandAlreadySync(backup, LogStopCommand) {
+ if IsLogSubcommandAlreadySync(backup, LogStopCommand) && backup.Spec.LogTruncateUntil != "" {
return LogTruncateCommand
}
return LogStopCommand
@@ -358,15 +355,17 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
subCommand = LogStartCommand
}
- // If the selected subcommand is already done, switch to LogTruncateCommand
- if isSubcommandAlreadySync(backup, subCommand) {
+ // If the selected subcommand is already sync and logTruncateUntil is set, switch to LogTruncateCommand
+ if IsLogSubcommandAlreadySync(backup, subCommand) && backup.Spec.LogTruncateUntil != "" {
return LogTruncateCommand
}
return subCommand
}
-func isSubcommandAlreadySync(backup *Backup, subCommand LogSubCommandType) bool {
+// IsLogSubcommandAlreadySync return whether the log subcommand already sync.
+// It only check start/stop/pause subcommand. Truncate subcommand need to check the truncate until seperately.
+func IsLogSubcommandAlreadySync(backup *Backup, subCommand LogSubCommandType) bool {
switch subCommand {
case LogStartCommand:
return IsLogBackupAlreadyStart(backup)
diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go
index 6136f1c509..048d51f3e9 100644
--- a/pkg/backup/backup/backup_manager.go
+++ b/pkg/backup/backup/backup_manager.go
@@ -1085,8 +1085,11 @@ func (bm *backupManager) skipLogBackupSync(backup *v1alpha1.Backup) (bool, error
}
command := v1alpha1.ParseLogBackupSubcommand(backup)
+ if command != v1alpha1.LogTruncateCommand && v1alpha1.IsLogSubcommandAlreadySync(backup, command) {
+ return true, nil
+ }
- // Handle the special case for LogTruncateCommand where additional actions are needed
+ // Handle the special case for LogTruncateCommand
var err error
if command == v1alpha1.LogTruncateCommand && v1alpha1.IsLogBackupAlreadyTruncate(backup) {
// If skipping truncate, update status
@@ -1100,9 +1103,6 @@ func (bm *backupManager) skipLogBackupSync(backup *v1alpha1.Backup) (bool, error
Type: v1alpha1.BackupComplete,
Status: corev1.ConditionTrue,
}, updateStatus)
- }
-
- if command == v1alpha1.LogTruncateCommand {
klog.Infof("log backup %s/%s subcommand %s is already done, will skip sync.", backup.Namespace, backup.Name, command)
return true, err
}
From ea818c4049b9e9179bc2f53de3cf14e168a06504 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Tue, 24 Sep 2024 12:12:08 +0200
Subject: [PATCH 19/34] remove explict truncate
---
pkg/apis/pingcap/v1alpha1/backup.go | 2 --
tests/e2e/br/br.go | 3 ---
2 files changed, 5 deletions(-)
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index 676b8476ee..e9e591f1c3 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -349,8 +349,6 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
subCommand = LogStopCommand
case "log-pause":
subCommand = LogPauseCommand
- case "log-truncate":
- subCommand = LogTruncateCommand
default:
subCommand = LogStartCommand
}
diff --git a/tests/e2e/br/br.go b/tests/e2e/br/br.go
index c3a93997de..85cf3d28f0 100644
--- a/tests/e2e/br/br.go
+++ b/tests/e2e/br/br.go
@@ -413,7 +413,6 @@ var _ = ginkgo.Describe("Backup and Restore", func() {
ginkgo.By("Truncate log backup")
backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
- backup.Spec.LogSubcommand = "log-truncate"
backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
backup.Spec.Mode = v1alpha1.BackupModeLog
backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339)
@@ -423,7 +422,6 @@ var _ = ginkgo.Describe("Backup and Restore", func() {
ginkgo.By("Truncate log backup again")
backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
- backup.Spec.LogSubcommand = "log-truncate"
backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
backup.Spec.Mode = v1alpha1.BackupModeLog
backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339)
@@ -442,7 +440,6 @@ var _ = ginkgo.Describe("Backup and Restore", func() {
ginkgo.By("Truncate log backup after stop")
backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
- backup.Spec.LogSubcommand = "log-truncate"
backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
backup.Spec.Mode = v1alpha1.BackupModeLog
backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339)
From 27cd7fb4f74078b901a87b08e97ce5cb3188ea58 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Wed, 25 Sep 2024 07:12:24 +0200
Subject: [PATCH 20/34] add tests
---
tests/e2e/br/br.go | 116 ++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 115 insertions(+), 1 deletion(-)
diff --git a/tests/e2e/br/br.go b/tests/e2e/br/br.go
index 85cf3d28f0..5443b3cd39 100644
--- a/tests/e2e/br/br.go
+++ b/tests/e2e/br/br.go
@@ -378,7 +378,85 @@ var _ = ginkgo.Describe("Backup and Restore", func() {
})
ginkgo.Context("Log Backup Test", func() {
- ginkgo.It("start,truncate,stop log backup", func() {
+ ginkgo.It("start,truncate,stop log backup using old interface", func() {
+ backupClusterName := "log-backup"
+ backupVersion := utilimage.TiDBLatest
+ enableTLS := false
+ skipCA := false
+ backupName := backupClusterName
+ typ := strings.ToLower(typeBR)
+
+ ns := f.Namespace.Name
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ ginkgo.By("Create log-backup.enable TiDB cluster for log backup")
+ err := createLogBackupEnableTidbCluster(f, backupClusterName, backupVersion, enableTLS, skipCA)
+ framework.ExpectNoError(err)
+
+ ginkgo.By("Wait for backup TiDB cluster ready")
+ err = utiltidbcluster.WaitForTCConditionReady(f.ExtClient, ns, backupClusterName, tidbReadyTimeout, 0)
+ framework.ExpectNoError(err)
+
+ ginkgo.By("Create RBAC for log backup")
+ err = createRBAC(f)
+ framework.ExpectNoError(err)
+
+ ginkgo.By("Start log backup")
+ backup, err := createBackupAndWaitForComplete(f, backupName, backupClusterName, typ, func(backup *v1alpha1.Backup) {
+ backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
+ backup.Spec.Mode = v1alpha1.BackupModeLog
+ })
+ framework.ExpectNoError(err)
+ framework.ExpectNotEqual(backup.Status.CommitTs, "")
+
+ ginkgo.By("Truncate log backup")
+ backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
+ backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
+ backup.Spec.Mode = v1alpha1.BackupModeLog
+ backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339)
+ })
+ framework.ExpectNoError(err)
+ framework.ExpectEqual(backup.Status.LogSuccessTruncateUntil, backup.Spec.LogTruncateUntil)
+
+ ginkgo.By("Truncate log backup again")
+ backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
+ backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
+ backup.Spec.Mode = v1alpha1.BackupModeLog
+ backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339)
+ })
+ framework.ExpectNoError(err)
+ framework.ExpectEqual(backup.Status.LogSuccessTruncateUntil, backup.Spec.LogTruncateUntil)
+
+ ginkgo.By("Stop log backup")
+ backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
+ backup.Spec.LogStop = true
+ backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
+ backup.Spec.Mode = v1alpha1.BackupModeLog
+ })
+ framework.ExpectNoError(err)
+ framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupStopped)
+
+ ginkgo.By("Truncate log backup after stop")
+ backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
+ backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
+ backup.Spec.Mode = v1alpha1.BackupModeLog
+ backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339)
+ })
+ framework.ExpectNoError(err)
+ framework.ExpectEqual(backup.Status.LogSuccessTruncateUntil, backup.Spec.LogTruncateUntil)
+
+ ginkgo.By("Delete backup")
+ err = deleteBackup(f, backupName)
+ framework.ExpectNoError(err)
+
+ ginkgo.By("Check if all backup files in storage is deleted")
+ cleaned, err := f.Storage.IsDataCleaned(ctx, ns, backup.Spec.S3.Prefix) // now we only use s3
+ framework.ExpectNoError(err)
+ framework.ExpectEqual(cleaned, true, "storage should be cleaned")
+ })
+
+ ginkgo.It("start -> pause -> resume -> pause -> resume -> stop log backup", func() {
backupClusterName := "log-backup"
backupVersion := utilimage.TiDBLatest
enableTLS := false
@@ -420,6 +498,15 @@ var _ = ginkgo.Describe("Backup and Restore", func() {
framework.ExpectNoError(err)
framework.ExpectEqual(backup.Status.LogSuccessTruncateUntil, backup.Spec.LogTruncateUntil)
+ ginkgo.By("Pause log backup")
+ backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
+ backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
+ backup.Spec.Mode = v1alpha1.BackupModeLog
+ backup.Spec.LogSubcommand = "log-pause"
+ })
+ framework.ExpectNoError(err)
+ framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupPaused)
+
ginkgo.By("Truncate log backup again")
backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
@@ -429,6 +516,33 @@ var _ = ginkgo.Describe("Backup and Restore", func() {
framework.ExpectNoError(err)
framework.ExpectEqual(backup.Status.LogSuccessTruncateUntil, backup.Spec.LogTruncateUntil)
+ ginkgo.By("resume log backup")
+ backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
+ backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
+ backup.Spec.Mode = v1alpha1.BackupModeLog
+ backup.Spec.LogSubcommand = "log-start"
+ })
+ framework.ExpectNoError(err)
+ framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupRunning)
+
+ ginkgo.By("Pause log backup again")
+ backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
+ backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
+ backup.Spec.Mode = v1alpha1.BackupModeLog
+ backup.Spec.LogSubcommand = "log-pause"
+ })
+ framework.ExpectNoError(err)
+ framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupPaused)
+
+ ginkgo.By("resume log backup again")
+ backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
+ backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete
+ backup.Spec.Mode = v1alpha1.BackupModeLog
+ backup.Spec.LogSubcommand = "log-start"
+ })
+ framework.ExpectNoError(err)
+ framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupRunning)
+
ginkgo.By("Stop log backup")
backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) {
backup.Spec.LogSubcommand = "log-stop"
From 43d40103cad59de64e090201eb63feb11ef40fb3 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Wed, 25 Sep 2024 07:13:06 +0200
Subject: [PATCH 21/34] add validation of unknown sub -commnad
---
pkg/apis/pingcap/v1alpha1/backup.go | 17 ++++-------------
pkg/apis/pingcap/v1alpha1/types.go | 3 ++-
pkg/backup/backup/backup_manager.go | 14 +++++++++++++-
pkg/controller/backup/backup_controller.go | 2 +-
4 files changed, 20 insertions(+), 16 deletions(-)
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index e9e591f1c3..5c100b550e 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -285,17 +285,6 @@ func IsVolumeBackupFailed(backup *Backup) bool {
return condition != nil && condition.Status == corev1.ConditionTrue
}
-// IsLogBackupStopped returns true if a log backup is stopped.
-// It means log backup is at stopped status.
-// It used to filter CR update event which is stop command and stopped status, and let it run truncate after log backup stopped which is truncate command and stopped status.
-func IsLogBackupStopped(backup *Backup) bool {
- if backup.Spec.Mode == BackupModeLog {
- command := ParseLogBackupSubcommand(backup)
- return command == LogStopCommand && backup.Status.Phase == BackupStopped
- }
- return false
-}
-
// IsBackupClean returns true if a Backup has been successfully cleaned up
func IsBackupClean(backup *Backup) bool {
_, condition := GetBackupCondition(&backup.Status, BackupClean)
@@ -349,8 +338,10 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
subCommand = LogStopCommand
case "log-pause":
subCommand = LogPauseCommand
- default:
+ case "":
subCommand = LogStartCommand
+ default:
+ return LogUnknownCommand
}
// If the selected subcommand is already sync and logTruncateUntil is set, switch to LogTruncateCommand
@@ -362,7 +353,7 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
}
// IsLogSubcommandAlreadySync return whether the log subcommand already sync.
-// It only check start/stop/pause subcommand. Truncate subcommand need to check the truncate until seperately.
+// It only check start/stop/pause subcommand. Truncate subcommand need to check the `logTruncateUntil` seperately.
func IsLogSubcommandAlreadySync(backup *Backup, subCommand LogSubCommandType) bool {
switch subCommand {
case LogStartCommand:
diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go
index 6927a7471c..36478e95d7 100644
--- a/pkg/apis/pingcap/v1alpha1/types.go
+++ b/pkg/apis/pingcap/v1alpha1/types.go
@@ -1879,7 +1879,6 @@ type TLSCluster struct {
// +kubebuilder:printcolumn:name="Completed",type=date,JSONPath=`.status.timeCompleted`,description="The time at which the backup was completed",priority=1
// +kubebuilder:printcolumn:name="TimeTaken",type=string,JSONPath=`.status.timeTaken`,description="The time that the backup takes"
// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`
-// +kubebuilder:validation:OneOf={"logSubCommand", "logStop"}
type Backup struct {
metav1.TypeMeta `json:",inline"`
// +k8s:openapi-gen=false
@@ -2409,6 +2408,8 @@ const (
LogPauseCommand LogSubCommandType = "log-pause"
// LogResumeCommand is the resume command of log backup.
LogResumeCommand LogSubCommandType = "log-resume"
+ // LogUnknownCommand is the unknown command of log backup.
+ LogUnknownCommand LogSubCommandType = "log-unknown"
)
// LogSubCommandStatus is the log backup subcommand's status.
diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go
index 048d51f3e9..94918fa742 100644
--- a/pkg/backup/backup/backup_manager.go
+++ b/pkg/backup/backup/backup_manager.go
@@ -191,11 +191,23 @@ func (bm *backupManager) syncBackupJob(backup *v1alpha1.Backup) error {
func (bm *backupManager) validateBackup(backup *v1alpha1.Backup) error {
ns := backup.GetNamespace()
name := backup.GetName()
- logBackupSubcommand := v1alpha1.ParseLogBackupSubcommand(backup)
var err error
+ logBackupSubcommand := v1alpha1.ParseLogBackupSubcommand(backup)
if backup.Spec.BR == nil {
err = backuputil.ValidateBackup(backup, "", nil)
} else {
+ if backup.Spec.Mode == v1alpha1.BackupModeLog && logBackupSubcommand == v1alpha1.LogUnknownCommand {
+ err = fmt.Errorf("log backup %s/%s subcommand `%s` is not supported", ns, name, backup.Spec.LogSubcommand)
+ bm.statusUpdater.Update(backup, &v1alpha1.BackupCondition{
+ Command: logBackupSubcommand,
+ Type: v1alpha1.BackupRetryTheFailed,
+ Status: corev1.ConditionTrue,
+ Reason: err.Error(),
+ Message: err.Error(),
+ }, nil)
+ return err
+ }
+
backupNamespace := backup.GetNamespace()
if backup.Spec.BR.ClusterNamespace != "" {
backupNamespace = backup.Spec.BR.ClusterNamespace
diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go
index 73212ab128..0d2c095d6a 100644
--- a/pkg/controller/backup/backup_controller.go
+++ b/pkg/controller/backup/backup_controller.go
@@ -234,7 +234,7 @@ func (c *Controller) updateBackup(cur interface{}) {
return
}
- if v1alpha1.IsBackupScheduled(newBackup) || v1alpha1.IsBackupRunning(newBackup) || v1alpha1.IsBackupPrepared(newBackup) || v1alpha1.IsLogBackupStopped(newBackup) {
+ if v1alpha1.IsBackupScheduled(newBackup) || v1alpha1.IsBackupRunning(newBackup) || v1alpha1.IsBackupPrepared(newBackup) || v1alpha1.IsLogBackupAlreadyStop(newBackup) {
klog.V(4).Infof("backup %s/%s is already Scheduled, Running, Preparing or Failed, skipping.", ns, name)
return
}
From 1c68708f5244c2d8188e3b0a63db2e4ee22c6ea4 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Wed, 25 Sep 2024 07:15:24 +0200
Subject: [PATCH 22/34] lint
---
pkg/backup/backup/backup_manager.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go
index 94918fa742..be4aa1264b 100644
--- a/pkg/backup/backup/backup_manager.go
+++ b/pkg/backup/backup/backup_manager.go
@@ -197,14 +197,14 @@ func (bm *backupManager) validateBackup(backup *v1alpha1.Backup) error {
err = backuputil.ValidateBackup(backup, "", nil)
} else {
if backup.Spec.Mode == v1alpha1.BackupModeLog && logBackupSubcommand == v1alpha1.LogUnknownCommand {
- err = fmt.Errorf("log backup %s/%s subcommand `%s` is not supported", ns, name, backup.Spec.LogSubcommand)
+ err = fmt.Errorf("log backup %s/%s subcommand `%s` is not supported", ns, name, backup.Spec.LogSubcommand)
bm.statusUpdater.Update(backup, &v1alpha1.BackupCondition{
Command: logBackupSubcommand,
Type: v1alpha1.BackupRetryTheFailed,
Status: corev1.ConditionTrue,
Reason: err.Error(),
Message: err.Error(),
- }, nil)
+ }, nil)
return err
}
From 292b35089ab5baf473e46a399562659a6cd1ed6f Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Wed, 25 Sep 2024 08:40:47 +0200
Subject: [PATCH 23/34] typo
---
pkg/apis/pingcap/v1alpha1/backup.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index 5c100b550e..ca60f977d7 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -353,7 +353,7 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
}
// IsLogSubcommandAlreadySync return whether the log subcommand already sync.
-// It only check start/stop/pause subcommand. Truncate subcommand need to check the `logTruncateUntil` seperately.
+// It only check start/stop/pause subcommand. Truncate subcommand need to check the `logTruncateUntil` separately.
func IsLogSubcommandAlreadySync(backup *Backup, subCommand LogSubCommandType) bool {
switch subCommand {
case LogStartCommand:
From 2797bf303617f3f7f0a4269c08c3c1875a9046c2 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Wed, 25 Sep 2024 09:31:29 +0200
Subject: [PATCH 24/34] add truncate check
---
pkg/apis/pingcap/v1alpha1/backup.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index ca60f977d7..7923f23bda 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -320,7 +320,7 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
// Compatible with the old version
if backup.Spec.LogStop {
- if IsLogSubcommandAlreadySync(backup, LogStopCommand) && backup.Spec.LogTruncateUntil != "" {
+ if IsLogBackupAlreadyStop(backup) && backup.Spec.LogTruncateUntil != "" && backup.Spec.LogTruncateUntil != backup.Status.LogSuccessTruncateUntil {
return LogTruncateCommand
}
return LogStopCommand
@@ -345,7 +345,7 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
}
// If the selected subcommand is already sync and logTruncateUntil is set, switch to LogTruncateCommand
- if IsLogSubcommandAlreadySync(backup, subCommand) && backup.Spec.LogTruncateUntil != "" {
+ if IsLogSubcommandAlreadySync(backup, subCommand) && backup.Spec.LogTruncateUntil != "" && backup.Spec.LogTruncateUntil != backup.Status.LogSuccessTruncateUntil {
return LogTruncateCommand
}
From 90cf8f2b2a7bded3ff6249f6c0d45dc4d064eab0 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Wed, 25 Sep 2024 09:37:29 +0200
Subject: [PATCH 25/34] handle empty subcommand
---
pkg/apis/pingcap/v1alpha1/backup.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go
index 7923f23bda..a01db45bd9 100644
--- a/pkg/apis/pingcap/v1alpha1/backup.go
+++ b/pkg/apis/pingcap/v1alpha1/backup.go
@@ -328,6 +328,8 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
var subCommand LogSubCommandType
switch backup.Spec.LogSubcommand {
+ case "":
+ fallthrough
case "log-start":
if IsLogBackupAlreadyPaused(backup) {
subCommand = LogResumeCommand
@@ -338,8 +340,6 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType {
subCommand = LogStopCommand
case "log-pause":
subCommand = LogPauseCommand
- case "":
- subCommand = LogStartCommand
default:
return LogUnknownCommand
}
From a31daf1f9e8772fd2c66ce0395d25d71c771ab20 Mon Sep 17 00:00:00 2001
From: RidRisR <79858083+RidRisR@users.noreply.github.com>
Date: Wed, 25 Sep 2024 11:22:14 +0200
Subject: [PATCH 26/34] more restricted subCommand check
---
cmd/backup-manager/app/backup/manager.go | 2 +-
docs/api-references/docs.md | 9 +++++++--
manifests/crd.yaml | 15 +++++++++++++++
manifests/crd/v1/pingcap.com_backups.yaml | 5 +++++
manifests/crd/v1/pingcap.com_backupschedules.yaml | 10 ++++++++++
pkg/apis/pingcap/v1alpha1/backup.go | 6 +++---
pkg/apis/pingcap/v1alpha1/types.go | 3 ++-
7 files changed, 43 insertions(+), 7 deletions(-)
diff --git a/cmd/backup-manager/app/backup/manager.go b/cmd/backup-manager/app/backup/manager.go
index a7bf3fcf12..226ac9ab22 100644
--- a/cmd/backup-manager/app/backup/manager.go
+++ b/cmd/backup-manager/app/backup/manager.go
@@ -616,7 +616,7 @@ func (bm *Manager) stopLogBackup(ctx context.Context, backup *v1alpha1.Backup) (
return updateStatus, "", nil
}
-// pauseLogBackup stops log backup.
+// pauseLogBackup pauses log backup.
func (bm *Manager) pauseLogBackup(ctx context.Context, backup *v1alpha1.Backup) (*controller.BackupUpdateStatus, string, error) {
started := time.Now()
diff --git a/docs/api-references/docs.md b/docs/api-references/docs.md
index 203774ec68..8367f02c8c 100644
--- a/docs/api-references/docs.md
+++ b/docs/api-references/docs.md
@@ -247,7 +247,9 @@ Default is current timestamp.
logSubcommand
-string
+
+LogSubCommandType
+
logSubcommand
-string
+
+LogSubCommandType
+
(Appears on: BackupCondition, +BackupSpec, LogSubCommandStatus)
diff --git a/manifests/crd.yaml b/manifests/crd.yaml index 5941e61aa0..0324823d5b 100644 --- a/manifests/crd.yaml +++ b/manifests/crd.yaml @@ -2114,6 +2114,11 @@ spec: logStop: type: boolean logSubcommand: + enum: + - "" + - log-start + - log-stop + - log-pause type: string logTruncateUntil: type: string @@ -4356,6 +4361,11 @@ spec: logStop: type: boolean logSubcommand: + enum: + - "" + - log-start + - log-stop + - log-pause type: string logTruncateUntil: type: string @@ -6708,6 +6718,11 @@ spec: logStop: type: boolean logSubcommand: + enum: + - "" + - log-start + - log-stop + - log-pause type: string logTruncateUntil: type: string diff --git a/manifests/crd/v1/pingcap.com_backups.yaml b/manifests/crd/v1/pingcap.com_backups.yaml index 3b82954047..1f719f1f6b 100644 --- a/manifests/crd/v1/pingcap.com_backups.yaml +++ b/manifests/crd/v1/pingcap.com_backups.yaml @@ -2139,6 +2139,11 @@ spec: logStop: type: boolean logSubcommand: + enum: + - "" + - log-start + - log-stop + - log-pause type: string logTruncateUntil: type: string diff --git a/manifests/crd/v1/pingcap.com_backupschedules.yaml b/manifests/crd/v1/pingcap.com_backupschedules.yaml index 335bee5a66..45f641f874 100644 --- a/manifests/crd/v1/pingcap.com_backupschedules.yaml +++ b/manifests/crd/v1/pingcap.com_backupschedules.yaml @@ -2114,6 +2114,11 @@ spec: logStop: type: boolean logSubcommand: + enum: + - "" + - log-start + - log-stop + - log-pause type: string logTruncateUntil: type: string @@ -4356,6 +4361,11 @@ spec: logStop: type: boolean logSubcommand: + enum: + - "" + - log-start + - log-stop + - log-pause type: string logTruncateUntil: type: string diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index a01db45bd9..5310b1d3eb 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -330,15 +330,15 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { switch backup.Spec.LogSubcommand { case "": fallthrough - case "log-start": + case LogStartCommand: if IsLogBackupAlreadyPaused(backup) { subCommand = LogResumeCommand } else { subCommand = LogStartCommand } - case "log-stop": + case LogStopCommand: subCommand = LogStopCommand - case "log-pause": + case LogPauseCommand: subCommand = LogPauseCommand default: return LogUnknownCommand diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go index 36478e95d7..0d76d07a2d 100644 --- a/pkg/apis/pingcap/v1alpha1/types.go +++ b/pkg/apis/pingcap/v1alpha1/types.go @@ -2181,7 +2181,8 @@ type BackupSpec struct { CommitTs string `json:"commitTs,omitempty"` // Subcommand is the subcommand for BR, such as start, stop, pause etc. // +optional - LogSubcommand string `json:"logSubcommand,omitempty"` + // +kubebuilder:validation:Enum:="";"log-start";"log-stop";"log-pause" + LogSubcommand LogSubCommandType `json:"logSubcommand,omitempty"` // LogTruncateUntil is log backup truncate until timestamp. // Format supports TSO or datetime, e.g. '400036290571534337', '2018-05-11 01:42:23'. // +optional From 04721de0c6131b35908961c6dc10fc0422e7edd6 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Wed, 25 Sep 2024 12:13:22 +0200 Subject: [PATCH 27/34] user should be able to truncate after stop --- manifests/crd.yaml | 3 -- manifests/crd/v1/pingcap.com_backups.yaml | 1 - .../crd/v1/pingcap.com_backupschedules.yaml | 2 - pkg/apis/pingcap/v1alpha1/backup.go | 47 ++++++++++--------- pkg/apis/pingcap/v1alpha1/types.go | 2 +- pkg/controller/backup/backup_controller.go | 2 +- 6 files changed, 27 insertions(+), 30 deletions(-) diff --git a/manifests/crd.yaml b/manifests/crd.yaml index 0324823d5b..2bdb2ce7cb 100644 --- a/manifests/crd.yaml +++ b/manifests/crd.yaml @@ -2115,7 +2115,6 @@ spec: type: boolean logSubcommand: enum: - - "" - log-start - log-stop - log-pause @@ -4362,7 +4361,6 @@ spec: type: boolean logSubcommand: enum: - - "" - log-start - log-stop - log-pause @@ -6719,7 +6717,6 @@ spec: type: boolean logSubcommand: enum: - - "" - log-start - log-stop - log-pause diff --git a/manifests/crd/v1/pingcap.com_backups.yaml b/manifests/crd/v1/pingcap.com_backups.yaml index 1f719f1f6b..8b91e0ad9e 100644 --- a/manifests/crd/v1/pingcap.com_backups.yaml +++ b/manifests/crd/v1/pingcap.com_backups.yaml @@ -2140,7 +2140,6 @@ spec: type: boolean logSubcommand: enum: - - "" - log-start - log-stop - log-pause diff --git a/manifests/crd/v1/pingcap.com_backupschedules.yaml b/manifests/crd/v1/pingcap.com_backupschedules.yaml index 45f641f874..22a40a0176 100644 --- a/manifests/crd/v1/pingcap.com_backupschedules.yaml +++ b/manifests/crd/v1/pingcap.com_backupschedules.yaml @@ -2115,7 +2115,6 @@ spec: type: boolean logSubcommand: enum: - - "" - log-start - log-stop - log-pause @@ -4362,7 +4361,6 @@ spec: type: boolean logSubcommand: enum: - - "" - log-start - log-stop - log-pause diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 5310b1d3eb..cd824e9008 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -318,31 +318,34 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { return "" } - // Compatible with the old version - if backup.Spec.LogStop { - if IsLogBackupAlreadyStop(backup) && backup.Spec.LogTruncateUntil != "" && backup.Spec.LogTruncateUntil != backup.Status.LogSuccessTruncateUntil { - return LogTruncateCommand - } - return LogStopCommand - } - var subCommand LogSubCommandType - switch backup.Spec.LogSubcommand { - case "": - fallthrough - case LogStartCommand: - if IsLogBackupAlreadyPaused(backup) { - subCommand = LogResumeCommand - } else { + + // Maintain backward compatibility: + // Users can omit the LogSubcommand field and use the `LogStop` field to stop log backups as in older version. + if backup.Spec.LogSubcommand == "" { + if backup.Spec.LogStop || IsLogBackupAlreadyStop(backup) { + subCommand = LogStopCommand + } else if IsLogBackupAlreadyPaused(backup){ + subCommand = LogResumeCommand + } else { subCommand = LogStartCommand } - case LogStopCommand: - subCommand = LogStopCommand - case LogPauseCommand: - subCommand = LogPauseCommand - default: - return LogUnknownCommand - } + } else { + switch backup.Spec.LogSubcommand { + case LogStartCommand: + if IsLogBackupAlreadyPaused(backup) { + subCommand = LogResumeCommand + } else { + subCommand = LogStartCommand + } + case LogStopCommand: + subCommand = LogStopCommand + case LogPauseCommand: + subCommand = LogPauseCommand + default: + return LogUnknownCommand + } + } // If the selected subcommand is already sync and logTruncateUntil is set, switch to LogTruncateCommand if IsLogSubcommandAlreadySync(backup, subCommand) && backup.Spec.LogTruncateUntil != "" && backup.Spec.LogTruncateUntil != backup.Status.LogSuccessTruncateUntil { diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go index 0d76d07a2d..13292b9d25 100644 --- a/pkg/apis/pingcap/v1alpha1/types.go +++ b/pkg/apis/pingcap/v1alpha1/types.go @@ -2181,7 +2181,7 @@ type BackupSpec struct { CommitTs string `json:"commitTs,omitempty"` // Subcommand is the subcommand for BR, such as start, stop, pause etc. // +optional - // +kubebuilder:validation:Enum:="";"log-start";"log-stop";"log-pause" + // +kubebuilder:validation:Enum:="log-start";"log-stop";"log-pause" LogSubcommand LogSubCommandType `json:"logSubcommand,omitempty"` // LogTruncateUntil is log backup truncate until timestamp. // Format supports TSO or datetime, e.g. '400036290571534337', '2018-05-11 01:42:23'. diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go index 0d2c095d6a..c3b65621c4 100644 --- a/pkg/controller/backup/backup_controller.go +++ b/pkg/controller/backup/backup_controller.go @@ -234,7 +234,7 @@ func (c *Controller) updateBackup(cur interface{}) { return } - if v1alpha1.IsBackupScheduled(newBackup) || v1alpha1.IsBackupRunning(newBackup) || v1alpha1.IsBackupPrepared(newBackup) || v1alpha1.IsLogBackupAlreadyStop(newBackup) { + if v1alpha1.IsBackupScheduled(newBackup) || v1alpha1.IsBackupRunning(newBackup) || v1alpha1.IsBackupPrepared(newBackup) || v1alpha1.IsBackupFailed(newBackup) { klog.V(4).Infof("backup %s/%s is already Scheduled, Running, Preparing or Failed, skipping.", ns, name) return } From aebc1d5c6efe5ed683d0435f53f4deb2e1b34c52 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Wed, 25 Sep 2024 12:23:03 +0200 Subject: [PATCH 28/34] lint --- pkg/apis/pingcap/v1alpha1/backup.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index cd824e9008..dde3579658 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -320,7 +320,6 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { var subCommand LogSubCommandType - // Maintain backward compatibility: // Users can omit the LogSubcommand field and use the `LogStop` field to stop log backups as in older version. if backup.Spec.LogSubcommand == "" { if backup.Spec.LogStop || IsLogBackupAlreadyStop(backup) { From 4fab3510dcc01d5d711a1639c86c26b8754de287 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Wed, 25 Sep 2024 12:30:15 +0200 Subject: [PATCH 29/34] lint --- pkg/apis/pingcap/v1alpha1/backup.go | 44 ++++++++++++++--------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index dde3579658..14a4fd63ee 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -321,30 +321,30 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { var subCommand LogSubCommandType // Users can omit the LogSubcommand field and use the `LogStop` field to stop log backups as in older version. - if backup.Spec.LogSubcommand == "" { - if backup.Spec.LogStop || IsLogBackupAlreadyStop(backup) { - subCommand = LogStopCommand - } else if IsLogBackupAlreadyPaused(backup){ - subCommand = LogResumeCommand - } else { + if backup.Spec.LogSubcommand == "" { + if backup.Spec.LogStop || IsLogBackupAlreadyStop(backup) { + subCommand = LogStopCommand + } else if IsLogBackupAlreadyPaused(backup) { + subCommand = LogResumeCommand + } else { subCommand = LogStartCommand } - } else { - switch backup.Spec.LogSubcommand { - case LogStartCommand: - if IsLogBackupAlreadyPaused(backup) { - subCommand = LogResumeCommand - } else { - subCommand = LogStartCommand - } - case LogStopCommand: - subCommand = LogStopCommand - case LogPauseCommand: - subCommand = LogPauseCommand - default: - return LogUnknownCommand - } - } + } else { + switch backup.Spec.LogSubcommand { + case LogStartCommand: + if IsLogBackupAlreadyPaused(backup) { + subCommand = LogResumeCommand + } else { + subCommand = LogStartCommand + } + case LogStopCommand: + subCommand = LogStopCommand + case LogPauseCommand: + subCommand = LogPauseCommand + default: + return LogUnknownCommand + } + } // If the selected subcommand is already sync and logTruncateUntil is set, switch to LogTruncateCommand if IsLogSubcommandAlreadySync(backup, subCommand) && backup.Spec.LogTruncateUntil != "" && backup.Spec.LogTruncateUntil != backup.Status.LogSuccessTruncateUntil { From 638ca5f6a9762bb058fcc4331d1431e0844c1af4 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Fri, 27 Sep 2024 11:12:35 +0200 Subject: [PATCH 30/34] compatible with old version --- pkg/apis/pingcap/v1alpha1/backup.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 14a4fd63ee..03a2c0ddae 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -324,8 +324,6 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { if backup.Spec.LogSubcommand == "" { if backup.Spec.LogStop || IsLogBackupAlreadyStop(backup) { subCommand = LogStopCommand - } else if IsLogBackupAlreadyPaused(backup) { - subCommand = LogResumeCommand } else { subCommand = LogStartCommand } From 726e5b366092aabf529e6b868ff750b9adef1074 Mon Sep 17 00:00:00 2001 From: ris <79858083+RidRisR@users.noreply.github.com> Date: Sun, 29 Sep 2024 11:06:56 +0800 Subject: [PATCH 31/34] Update backup.go --- pkg/apis/pingcap/v1alpha1/backup.go | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 03a2c0ddae..392f4a8e0b 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -320,28 +320,26 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { var subCommand LogSubCommandType + switch backup.Spec.LogSubcommand { // Users can omit the LogSubcommand field and use the `LogStop` field to stop log backups as in older version. - if backup.Spec.LogSubcommand == "" { + case "": if backup.Spec.LogStop || IsLogBackupAlreadyStop(backup) { subCommand = LogStopCommand } else { subCommand = LogStartCommand } - } else { - switch backup.Spec.LogSubcommand { - case LogStartCommand: - if IsLogBackupAlreadyPaused(backup) { - subCommand = LogResumeCommand - } else { - subCommand = LogStartCommand - } - case LogStopCommand: - subCommand = LogStopCommand - case LogPauseCommand: - subCommand = LogPauseCommand - default: - return LogUnknownCommand + case LogStartCommand: + if IsLogBackupAlreadyPaused(backup) { + subCommand = LogResumeCommand + } else { + subCommand = LogStartCommand } + case LogStopCommand: + subCommand = LogStopCommand + case LogPauseCommand: + subCommand = LogPauseCommand + default: + return LogUnknownCommand } // If the selected subcommand is already sync and logTruncateUntil is set, switch to LogTruncateCommand From 79fb58649440f28467c9a8e9cf3570dd60a35f76 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Tue, 8 Oct 2024 09:15:22 +0200 Subject: [PATCH 32/34] fix condition --- pkg/apis/pingcap/v1alpha1/backup.go | 2 +- tests/e2e/br/br.go | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 392f4a8e0b..75d7a5610c 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -371,7 +371,7 @@ func IsLogSubcommandAlreadySync(backup *Backup, subCommand LogSubCommandType) bo func IsLogBackupSubCommandOntheCondition(backup *Backup, conditionType BackupConditionType) bool { command := ParseLogBackupSubcommand(backup) switch command { - case LogStartCommand, LogStopCommand: + case LogStartCommand, LogStopCommand, LogPauseCommand, LogResumeCommand: if subStatus, ok := backup.Status.LogSubCommandStatuses[command]; ok { return subStatus.Phase == conditionType } diff --git a/tests/e2e/br/br.go b/tests/e2e/br/br.go index 42cc67a959..349109cc26 100644 --- a/tests/e2e/br/br.go +++ b/tests/e2e/br/br.go @@ -482,7 +482,7 @@ var _ = ginkgo.Describe("Backup and Restore", func() { ginkgo.By("Start log backup") backup, err := createBackupAndWaitForComplete(f, backupName, backupClusterName, typ, func(backup *v1alpha1.Backup) { - backup.Spec.LogSubcommand = "log-start" + backup.Spec.LogSubcommand = v1alpha1.LogStartCommand backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog }) @@ -500,9 +500,9 @@ var _ = ginkgo.Describe("Backup and Restore", func() { ginkgo.By("Pause log backup") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.LogSubcommand = v1alpha1.LogPauseCommand backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog - backup.Spec.LogSubcommand = "log-pause" }) framework.ExpectNoError(err) framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupPaused) @@ -518,34 +518,34 @@ var _ = ginkgo.Describe("Backup and Restore", func() { ginkgo.By("resume log backup") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.LogSubcommand = v1alpha1.LogStartCommand backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog - backup.Spec.LogSubcommand = "log-start" }) framework.ExpectNoError(err) framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupRunning) ginkgo.By("Pause log backup again") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.LogSubcommand = v1alpha1.LogPauseCommand backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog - backup.Spec.LogSubcommand = "log-pause" }) framework.ExpectNoError(err) framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupPaused) ginkgo.By("resume log backup again") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.LogSubcommand = v1alpha1.LogStartCommand backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog - backup.Spec.LogSubcommand = "log-start" }) framework.ExpectNoError(err) framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupRunning) ginkgo.By("Stop log backup") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { - backup.Spec.LogSubcommand = "log-stop" + backup.Spec.LogSubcommand = v1alpha1.LogStopCommand backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog }) From e0b2e0b14afa5b507f26635361b02385bb8f8f9f Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:41:05 +0200 Subject: [PATCH 33/34] fix rerunable command --- pkg/controller/backup_status_updater.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/controller/backup_status_updater.go b/pkg/controller/backup_status_updater.go index a0f977b167..514a183368 100644 --- a/pkg/controller/backup_status_updater.go +++ b/pkg/controller/backup_status_updater.go @@ -248,6 +248,12 @@ func updateLogSubcommandStatus(backup *v1alpha1.Backup, condition *v1alpha1.Back subcomandConditionUpdate := updateLogSubCommandConditionOnly(&subStatus, condition) if subcommandStatusUpdate || subcomandConditionUpdate { backup.Status.LogSubCommandStatuses[condition.Command] = subStatus + if condition.Command == v1alpha1.LogPauseCommand { + delete(backup.Status.LogSubCommandStatuses, v1alpha1.LogResumeCommand) + } + if condition.Command == v1alpha1.LogResumeCommand { + delete(backup.Status.LogSubCommandStatuses, v1alpha1.LogPauseCommand) + } return true } return false From ab5daead42db62e109bbffb4ff99bfb29e2df924 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Tue, 8 Oct 2024 11:21:24 +0200 Subject: [PATCH 34/34] fix --- pkg/apis/pingcap/v1alpha1/types.go | 3 +++ pkg/controller/backup_status_updater.go | 14 +++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go index 13292b9d25..98c0e54b41 100644 --- a/pkg/apis/pingcap/v1alpha1/types.go +++ b/pkg/apis/pingcap/v1alpha1/types.go @@ -2354,6 +2354,9 @@ const ( BackupComplete BackupConditionType = "Complete" // BackupClean means the clean job has been created to clean backup data BackupClean BackupConditionType = "Clean" + // BackupRepeatable should ONLY be used in log backup + // It means some log backup sub-command completed and the log backup can be re-run + BackupRepeatable BackupConditionType = "Repeatable" // BackupFailed means the backup has failed. BackupFailed BackupConditionType = "Failed" // BackupRetryTheFailed means this failure can be retried diff --git a/pkg/controller/backup_status_updater.go b/pkg/controller/backup_status_updater.go index 514a183368..003ff93071 100644 --- a/pkg/controller/backup_status_updater.go +++ b/pkg/controller/backup_status_updater.go @@ -247,13 +247,21 @@ func updateLogSubcommandStatus(backup *v1alpha1.Backup, condition *v1alpha1.Back subcommandStatusUpdate := updateLogSubCommandStatusOnly(&subStatus, newStatus) subcomandConditionUpdate := updateLogSubCommandConditionOnly(&subStatus, condition) if subcommandStatusUpdate || subcomandConditionUpdate { - backup.Status.LogSubCommandStatuses[condition.Command] = subStatus + // handle special case for pause and resume, if one is on condition, the other should be updated as repeatable if condition.Command == v1alpha1.LogPauseCommand { - delete(backup.Status.LogSubCommandStatuses, v1alpha1.LogResumeCommand) + if subStatus, exist := backup.Status.LogSubCommandStatuses[v1alpha1.LogResumeCommand]; exist { + subStatus.Phase = v1alpha1.BackupRepeatable + backup.Status.LogSubCommandStatuses[v1alpha1.LogResumeCommand] = subStatus + } } if condition.Command == v1alpha1.LogResumeCommand { - delete(backup.Status.LogSubCommandStatuses, v1alpha1.LogPauseCommand) + if subStatus, exist := backup.Status.LogSubCommandStatuses[v1alpha1.LogPauseCommand]; exist { + subStatus.Phase = v1alpha1.BackupRepeatable + backup.Status.LogSubCommandStatuses[v1alpha1.LogPauseCommand] = subStatus + } } + + backup.Status.LogSubCommandStatuses[condition.Command] = subStatus return true } return false