apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.11.3
    helm.sh/resource-policy: keep
    meta.helm.sh/release-name: c3
    meta.helm.sh/release-namespace: c3
  creationTimestamp: "2023-09-08T15:16:44Z"
  generation: 1
  labels:
    app.kubernetes.io/managed-by: Helm
  name: cephclusters.ceph.rook.io
  resourceVersion: "381811"
  uid: d83f144a-87b6-4c65-96f4-e4308d211e0c
spec:
  conversion:
    strategy: None
  group: ceph.rook.io
  names:
    kind: CephCluster
    listKind: CephClusterList
    plural: cephclusters
    singular: cephcluster
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - description: Directory used on the K8s nodes
      jsonPath: .spec.dataDirHostPath
      name: DataDirHostPath
      type: string
    - description: Number of MONs
      jsonPath: .spec.mon.count
      name: MonCount
      type: string
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    - jsonPath: .status.phase
      name: Phase
      type: string
    - description: Message
      jsonPath: .status.message
      name: Message
      type: string
    - description: Ceph Health
      jsonPath: .status.ceph.health
      name: Health
      type: string
    - jsonPath: .spec.external.enable
      name: External
      type: boolean
    - description: Ceph FSID
      jsonPath: .status.ceph.fsid
      name: FSID
      type: string
    name: v1
    schema:
      openAPIV3Schema:
        description: CephCluster is a Ceph storage cluster
        properties:
          apiVersion:
            description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            type: string
          kind:
            description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            description: ClusterSpec represents the specification of Ceph Cluster
            properties:
              annotations:
                additionalProperties:
                  additionalProperties:
                    type: string
                  description: Annotations are annotations
                  type: object
                description: The annotations-related configuration to add/set on each
                  Pod related object.
                nullable: true
                type: object
                x-kubernetes-preserve-unknown-fields: true
              cephVersion:
                description: The version information that instructs Rook to orchestrate
                  a particular version of Ceph.
                nullable: true
                properties:
                  allowUnsupported:
                    description: Whether to allow unsupported versions (do not set
                      to true in production)
                    type: boolean
                  image:
                    description: Image is the container image used to launch the ceph
                      daemons, such as quay.io/ceph/ceph:<tag> The full list of images
                      can be found at https://quay.io/repository/ceph/ceph?tab=tags
                    type: string
                  imagePullPolicy:
                    description: ImagePullPolicy describes a policy for if/when to
                      pull a container image One of Always, Never, IfNotPresent.
                    enum:
                    - IfNotPresent
                    - Always
                    - Never
                    - ""
                    type: string
                type: object
              cleanupPolicy:
                description: Indicates user intent when deleting a cluster; blocks
                  orchestration and should not be set if cluster deletion is not imminent.
                nullable: true
                properties:
                  allowUninstallWithVolumes:
                    description: AllowUninstallWithVolumes defines whether we can
                      proceed with the uninstall if they are RBD images still present
                    type: boolean
                  confirmation:
                    description: Confirmation represents the cleanup confirmation
                    nullable: true
                    pattern: ^$|^yes-really-destroy-data$
                    type: string
                  sanitizeDisks:
                    description: SanitizeDisks represents way we sanitize disks
                    nullable: true
                    properties:
                      dataSource:
                        description: DataSource is the data source to use to sanitize
                          the disk with
                        enum:
                        - zero
                        - random
                        type: string
                      iteration:
                        description: Iteration is the number of pass to apply the
                          sanitizing
                        format: int32
                        type: integer
                      method:
                        description: Method is the method we use to sanitize disks
                        enum:
                        - complete
                        - quick
                        type: string
                    type: object
                type: object
              continueUpgradeAfterChecksEvenIfNotHealthy:
                description: ContinueUpgradeAfterChecksEvenIfNotHealthy defines if
                  an upgrade should continue even if PGs are not clean
                type: boolean
              crashCollector:
                description: A spec for the crash controller
                nullable: true
                properties:
                  daysToRetain:
                    description: DaysToRetain represents the number of days to retain
                      crash until they get pruned
                    type: integer
                  disable:
                    description: Disable determines whether we should enable the crash
                      collector
                    type: boolean
                type: object
              dashboard:
                description: Dashboard settings
                nullable: true
                properties:
                  enabled:
                    description: Enabled determines whether to enable the dashboard
                    type: boolean
                  port:
                    description: Port is the dashboard webserver port
                    maximum: 65535
                    minimum: 0
                    type: integer
                  ssl:
                    description: SSL determines whether SSL should be used
                    type: boolean
                  urlPrefix:
                    description: URLPrefix is a prefix for all URLs to use the dashboard
                      with a reverse proxy
                    type: string
                type: object
              dataDirHostPath:
                description: The path on the host where config and data can be persisted
                pattern: ^/(\S+)
                type: string
              disruptionManagement:
                description: A spec for configuring disruption management.
                nullable: true
                properties:
                  machineDisruptionBudgetNamespace:
                    description: Deprecated. Namespace to look for MDBs by the machineDisruptionBudgetController
                    type: string
                  manageMachineDisruptionBudgets:
                    description: Deprecated. This enables management of machinedisruptionbudgets.
                    type: boolean
                  managePodBudgets:
                    description: This enables management of poddisruptionbudgets
                    type: boolean
                  osdMaintenanceTimeout:
                    description: OSDMaintenanceTimeout sets how many additional minutes
                      the DOWN/OUT interval is for drained failure domains it only
                      works if managePodBudgets is true. the default is 30 minutes
                    format: int64
                    type: integer
                  pgHealthCheckTimeout:
                    description: PGHealthCheckTimeout is the time (in minutes) that
                      the operator will wait for the placement groups to become healthy
                      (active+clean) after a drain was completed and OSDs came back
                      up. Rook will continue with the next drain if the timeout exceeds.
                      It only works if managePodBudgets is true. No values or 0 means
                      that the operator will wait until the placement groups are healthy
                      before unblocking the next drain.
                    format: int64
                    type: integer
                type: object
              external:
                description: Whether the Ceph Cluster is running external to this
                  Kubernetes cluster mon, mgr, osd, mds, and discover daemons will
                  not be created for external clusters.
                nullable: true
                properties:
                  enable:
                    description: Enable determines whether external mode is enabled
                      or not
                    type: boolean
                type: object
                x-kubernetes-preserve-unknown-fields: true
              healthCheck:
                description: Internal daemon healthchecks and liveness probe
                nullable: true
                properties:
                  daemonHealth:
                    description: DaemonHealth is the health check for a given daemon
                    nullable: true
                    properties:
                      mon:
                        description: Monitor represents the health check settings
                          for the Ceph monitor
                        nullable: true
                        properties:
                          disabled:
                            type: boolean
                          interval:
                            description: Interval is the internal in second or minute
                              for the health check to run like 60s for 60 seconds
                            type: string
                          timeout:
                            type: string
                        type: object
                      osd:
                        description: ObjectStorageDaemon represents the health check
                          settings for the Ceph OSDs
                        nullable: true
                        properties:
                          disabled:
                            type: boolean
                          interval:
                            description: Interval is the internal in second or minute
                              for the health check to run like 60s for 60 seconds
                            type: string
                          timeout:
                            type: string
                        type: object
                      status:
                        description: Status represents the health check settings for
                          the Ceph health
                        nullable: true
                        properties:
                          disabled:
                            type: boolean
                          interval:
                            description: Interval is the internal in second or minute
                              for the health check to run like 60s for 60 seconds
                            type: string
                          timeout:
                            type: string
                        type: object
                    type: object
                  livenessProbe:
                    additionalProperties:
                      description: ProbeSpec is a wrapper around Probe so it can be
                        enabled or disabled for a Ceph daemon
                      properties:
                        disabled:
                          description: Disabled determines whether probe is disable
                            or not
                          type: boolean
                        probe:
                          description: Probe describes a health check to be performed
                            against a container to determine whether it is alive or
                            ready to receive traffic.
                          properties:
                            exec:
                              description: Exec specifies the action to take.
                              properties:
                                command:
                                  description: Command is the command line to execute
                                    inside the container, the working directory for
                                    the command  is root ('/') in the container's
                                    filesystem. The command is simply exec'd, it is
                                    not run inside a shell, so traditional shell instructions
                                    ('|', etc) won't work. To use a shell, you need
                                    to explicitly call out to that shell. Exit status
                                    of 0 is treated as live/healthy and non-zero is
                                    unhealthy.
                                  items:
                                    type: string
                                  type: array
                              type: object
                            failureThreshold:
                              description: Minimum consecutive failures for the probe
                                to be considered failed after having succeeded. Defaults
                                to 3. Minimum value is 1.
                              format: int32
                              type: integer
                            grpc:
                              description: GRPC specifies an action involving a GRPC
                                port.
                              properties:
                                port:
                                  description: Port number of the gRPC service. Number
                                    must be in the range 1 to 65535.
                                  format: int32
                                  type: integer
                                service:
                                  description: "Service is the name of the service
                                    to place in the gRPC HealthCheckRequest (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
                                    \n If this is not specified, the default behavior
                                    is defined by gRPC."
                                  type: string
                              required:
                              - port
                              type: object
                            httpGet:
                              description: HTTPGet specifies the http request to perform.
                              properties:
                                host:
                                  description: Host name to connect to, defaults to
                                    the pod IP. You probably want to set "Host" in
                                    httpHeaders instead.
                                  type: string
                                httpHeaders:
                                  description: Custom headers to set in the request.
                                    HTTP allows repeated headers.
                                  items:
                                    description: HTTPHeader describes a custom header
                                      to be used in HTTP probes
                                    properties:
                                      name:
                                        description: The header field name. This will
                                          be canonicalized upon output, so case-variant
                                          names will be understood as the same header.
                                        type: string
                                      value:
                                        description: The header field value
                                        type: string
                                    required:
                                    - name
                                    - value
                                    type: object
                                  type: array
                                path:
                                  description: Path to access on the HTTP server.
                                  type: string
                                port:
                                  anyOf:
                                  - type: integer
                                  - type: string
                                  description: Name or number of the port to access
                                    on the container. Number must be in the range
                                    1 to 65535. Name must be an IANA_SVC_NAME.
                                  x-kubernetes-int-or-string: true
                                scheme:
                                  description: Scheme to use for connecting to the
                                    host. Defaults to HTTP.
                                  type: string
                              required:
                              - port
                              type: object
                            initialDelaySeconds:
                              description: 'Number of seconds after the container
                                has started before liveness probes are initiated.
                                More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes'
                              format: int32
                              type: integer
                            periodSeconds:
                              description: How often (in seconds) to perform the probe.
                                Default to 10 seconds. Minimum value is 1.
                              format: int32
                              type: integer
                            successThreshold:
                              description: Minimum consecutive successes for the probe
                                to be considered successful after having failed. Defaults
                                to 1. Must be 1 for liveness and startup. Minimum
                                value is 1.
                              format: int32
                              type: integer
                            tcpSocket:
                              description: TCPSocket specifies an action involving
                                a TCP port.
                              properties:
                                host:
                                  description: 'Optional: Host name to connect to,
                                    defaults to the pod IP.'
                                  type: string
                                port:
                                  anyOf:
                                  - type: integer
                                  - type: string
                                  description: Number or name of the port to access
                                    on the container. Number must be in the range
                                    1 to 65535. Name must be an IANA_SVC_NAME.
                                  x-kubernetes-int-or-string: true
                              required:
                              - port
                              type: object
                            terminationGracePeriodSeconds:
                              description: Optional duration in seconds the pod needs
                                to terminate gracefully upon probe failure. The grace
                                period is the duration in seconds after the processes
                                running in the pod are sent a termination signal and
                                the time when the processes are forcibly halted with
                                a kill signal. Set this value longer than the expected
                                cleanup time for your process. If this value is nil,
                                the pod's terminationGracePeriodSeconds will be used.
                                Otherwise, this value overrides the value provided
                                by the pod spec. Value must be non-negative integer.
                                The value zero indicates stop immediately via the
                                kill signal (no opportunity to shut down). This is
                                a beta field and requires enabling ProbeTerminationGracePeriod
                                feature gate. Minimum value is 1. spec.terminationGracePeriodSeconds
                                is used if unset.
                              format: int64
                              type: integer
                            timeoutSeconds:
                              description: 'Number of seconds after which the probe
                                times out. Defaults to 1 second. Minimum value is
                                1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes'
                              format: int32
                              type: integer
                          type: object
                      type: object
                    description: LivenessProbe allows changing the livenessProbe configuration
                      for a given daemon
                    type: object
                  startupProbe:
                    additionalProperties:
                      description: ProbeSpec is a wrapper around Probe so it can be
                        enabled or disabled for a Ceph daemon
                      properties:
                        disabled:
                          description: Disabled determines whether probe is disable
                            or not
                          type: boolean
                        probe:
                          description: Probe describes a health check to be performed
                            against a container to determine whether it is alive or
                            ready to receive traffic.
                          properties:
                            exec:
                              description: Exec specifies the action to take.
                              properties:
                                command:
                                  description: Command is the command line to execute
                                    inside the container, the working directory for
                                    the command  is root ('/') in the container's
                                    filesystem. The command is simply exec'd, it is
                                    not run inside a shell, so traditional shell instructions
                                    ('|', etc) won't work. To use a shell, you need
                                    to explicitly call out to that shell. Exit status
                                    of 0 is treated as live/healthy and non-zero is
                                    unhealthy.
                                  items:
                                    type: string
                                  type: array
                              type: object
                            failureThreshold:
                              description: Minimum consecutive failures for the probe
                                to be considered failed after having succeeded. Defaults
                                to 3. Minimum value is 1.
                              format: int32
                              type: integer
                            grpc:
                              description: GRPC specifies an action involving a GRPC
                                port.
                              properties:
                                port:
                                  description: Port number of the gRPC service. Number
                                    must be in the range 1 to 65535.
                                  format: int32
                                  type: integer
                                service:
                                  description: "Service is the name of the service
                                    to place in the gRPC HealthCheckRequest (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
                                    \n If this is not specified, the default behavior
                                    is defined by gRPC."
                                  type: string
                              required:
                              - port
                              type: object
                            httpGet:
                              description: HTTPGet specifies the http request to perform.
                              properties:
                                host:
                                  description: Host name to connect to, defaults to
                                    the pod IP. You probably want to set "Host" in
                                    httpHeaders instead.
                                  type: string
                                httpHeaders:
                                  description: Custom headers to set in the request.
                                    HTTP allows repeated headers.
                                  items:
                                    description: HTTPHeader describes a custom header
                                      to be used in HTTP probes
                                    properties:
                                      name:
                                        description: The header field name. This will
                                          be canonicalized upon output, so case-variant
                                          names will be understood as the same header.
                                        type: string
                                      value:
                                        description: The header field value
                                        type: string
                                    required:
                                    - name
                                    - value
                                    type: object
                                  type: array
                                path:
                                  description: Path to access on the HTTP server.
                                  type: string
                                port:
                                  anyOf:
                                  - type: integer
                                  - type: string
                                  description: Name or number of the port to access
                                    on the container. Number must be in the range
                                    1 to 65535. Name must be an IANA_SVC_NAME.
                                  x-kubernetes-int-or-string: true
                                scheme:
                                  description: Scheme to use for connecting to the
                                    host. Defaults to HTTP.
                                  type: string
                              required:
                              - port
                              type: object
                            initialDelaySeconds:
                              description: 'Number of seconds after the container
                                has started before liveness probes are initiated.
                                More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes'
                              format: int32
                              type: integer
                            periodSeconds:
                              description: How often (in seconds) to perform the probe.
                                Default to 10 seconds. Minimum value is 1.
                              format: int32
                              type: integer
                            successThreshold:
                              description: Minimum consecutive successes for the probe
                                to be considered successful after having failed. Defaults
                                to 1. Must be 1 for liveness and startup. Minimum
                                value is 1.
                              format: int32
                              type: integer
                            tcpSocket:
                              description: TCPSocket specifies an action involving
                                a TCP port.
                              properties:
                                host:
                                  description: 'Optional: Host name to connect to,
                                    defaults to the pod IP.'
                                  type: string
                                port:
                                  anyOf:
                                  - type: integer
                                  - type: string
                                  description: Number or name of the port to access
                                    on the container. Number must be in the range
                                    1 to 65535. Name must be an IANA_SVC_NAME.
                                  x-kubernetes-int-or-string: true
                              required:
                              - port
                              type: object
                            terminationGracePeriodSeconds:
                              description: Optional duration in seconds the pod needs
                                to terminate gracefully upon probe failure. The grace
                                period is the duration in seconds after the processes
                                running in the pod are sent a termination signal and
                                the time when the processes are forcibly halted with
                                a kill signal. Set this value longer than the expected
                                cleanup time for your process. If this value is nil,
                                the pod's terminationGracePeriodSeconds will be used.
                                Otherwise, this value overrides the value provided
                                by the pod spec. Value must be non-negative integer.
                                The value zero indicates stop immediately via the
                                kill signal (no opportunity to shut down). This is
                                a beta field and requires enabling ProbeTerminationGracePeriod
                                feature gate. Minimum value is 1. spec.terminationGracePeriodSeconds
                                is used if unset.
                              format: int64
                              type: integer
                            timeoutSeconds:
                              description: 'Number of seconds after which the probe
                                times out. Defaults to 1 second. Minimum value is
                                1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes'
                              format: int32
                              type: integer
                          type: object
                      type: object
                    description: StartupProbe allows changing the startupProbe configuration
                      for a given daemon
                    type: object
                type: object
              labels:
                additionalProperties:
                  additionalProperties:
                    type: string
                  description: Labels are label for a given daemons
                  type: object
                description: The labels-related configuration to add/set on each Pod
                  related object.
                nullable: true
                type: object
                x-kubernetes-preserve-unknown-fields: true
              logCollector:
                description: Logging represents loggings settings
                nullable: true
                properties:
                  enabled:
                    description: Enabled represents whether the log collector is enabled
                    type: boolean
                  maxLogSize:
                    anyOf:
                    - type: integer
                    - type: string
                    description: MaxLogSize is the maximum size of the log per ceph
                      daemons. Must be at least 1M.
                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                    x-kubernetes-int-or-string: true
                  periodicity:
                    description: Periodicity is the periodicity of the log rotation.
                    pattern: ^$|^(hourly|daily|weekly|monthly|1h|24h|1d)$
                    type: string
                type: object
              mgr:
                description: A spec for mgr related options
                nullable: true
                properties:
                  allowMultiplePerNode:
                    description: AllowMultiplePerNode allows to run multiple managers
                      on the same node (not recommended)
                    type: boolean
                  count:
                    description: Count is the number of manager to run
                    maximum: 2
                    minimum: 0
                    type: integer
                  modules:
                    description: Modules is the list of ceph manager modules to enable/disable
                    items:
                      description: Module represents mgr modules that the user wants
                        to enable or disable
                      properties:
                        enabled:
                          description: Enabled determines whether a module should
                            be enabled or not
                          type: boolean
                        name:
                          description: Name is the name of the ceph manager module
                          type: string
                      type: object
                    nullable: true
                    type: array
                type: object
              mon:
                description: A spec for mon related options
                nullable: true
                properties:
                  allowMultiplePerNode:
                    description: AllowMultiplePerNode determines if we can run multiple
                      monitors on the same node (not recommended)
                    type: boolean
                  count:
                    description: Count is the number of Ceph monitors
                    maximum: 9
                    minimum: 0
                    type: integer
                  failureDomainLabel:
                    type: string
                  stretchCluster:
                    description: StretchCluster is the stretch cluster specification
                    properties:
                      failureDomainLabel:
                        description: 'FailureDomainLabel the failure domain name (e,g:
                          zone)'
                        type: string
                      subFailureDomain:
                        description: SubFailureDomain is the failure domain within
                          a zone
                        type: string
                      zones:
                        description: Zones is the list of zones
                        items:
                          description: MonZoneSpec represents the specification of
                            a zone in a Ceph Cluster
                          properties:
                            arbiter:
                              description: Arbiter determines if the zone contains
                                the arbiter used for stretch cluster mode
                              type: boolean
                            name:
                              description: Name is the name of the zone
                              type: string
                            volumeClaimTemplate:
                              description: VolumeClaimTemplate is the PVC template
                              properties:
                                apiVersion:
                                  description: 'APIVersion defines the versioned schema
                                    of this representation of an object. Servers should
                                    convert recognized schemas to the latest internal
                                    value, and may reject unrecognized values. More
                                    info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
                                  type: string
                                kind:
                                  description: 'Kind is a string value representing
                                    the REST resource this object represents. Servers
                                    may infer this from the endpoint the client submits
                                    requests to. Cannot be updated. In CamelCase.
                                    More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                                  type: string
                                metadata:
                                  description: 'Standard object''s metadata. More
                                    info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata'
                                  properties:
                                    annotations:
                                      additionalProperties:
                                        type: string
                                      type: object
                                    finalizers:
                                      items:
                                        type: string
                                      type: array
                                    labels:
                                      additionalProperties:
                                        type: string
                                      type: object
                                    name:
                                      type: string
                                    namespace:
                                      type: string
                                  type: object
                                spec:
                                  description: 'spec defines the desired characteristics
                                    of a volume requested by a pod author. More info:
                                    https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims'
                                  properties:
                                    accessModes:
                                      description: 'accessModes contains the desired
                                        access modes the volume should have. More
                                        info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1'
                                      items:
                                        type: string
                                      type: array
                                    dataSource:
                                      description: 'dataSource field can be used to
                                        specify either: * An existing VolumeSnapshot
                                        object (snapshot.storage.k8s.io/VolumeSnapshot)
                                        * An existing PVC (PersistentVolumeClaim)
                                        If the provisioner or an external controller
                                        can support the specified data source, it
                                        will create a new volume based on the contents
                                        of the specified data source. When the AnyVolumeDataSource
                                        feature gate is enabled, dataSource contents
                                        will be copied to dataSourceRef, and dataSourceRef
                                        contents will be copied to dataSource when
                                        dataSourceRef.namespace is not specified.
                                        If the namespace is specified, then dataSourceRef
                                        will not be copied to dataSource.'
                                      properties:
                                        apiGroup:
                                          description: APIGroup is the group for the
                                            resource being referenced. If APIGroup
                                            is not specified, the specified Kind must
                                            be in the core API group. For any other
                                            third-party types, APIGroup is required.
                                          type: string
                                        kind:
                                          description: Kind is the type of resource
                                            being referenced
                                          type: string
                                        name:
                                          description: Name is the name of resource
                                            being referenced
                                          type: string
                                      required:
                                      - kind
                                      - name
                                      type: object
                                      x-kubernetes-map-type: atomic
                                    dataSourceRef:
                                      description: 'dataSourceRef specifies the object
                                        from which to populate the volume with data,
                                        if a non-empty volume is desired. This may
                                        be any object from a non-empty API group (non
                                        core object) or a PersistentVolumeClaim object.
                                        When this field is specified, volume binding
                                        will only succeed if the type of the specified
                                        object matches some installed volume populator
                                        or dynamic provisioner. This field will replace
                                        the functionality of the dataSource field
                                        and as such if both fields are non-empty,
                                        they must have the same value. For backwards
                                        compatibility, when namespace isn''t specified
                                        in dataSourceRef, both fields (dataSource
                                        and dataSourceRef) will be set to the same
                                        value automatically if one of them is empty
                                        and the other is non-empty. When namespace
                                        is specified in dataSourceRef, dataSource
                                        isn''t set to the same value and must be empty.
                                        There are three important differences between
                                        dataSource and dataSourceRef: * While dataSource
                                        only allows two specific types of objects,
                                        dataSourceRef allows any non-core object,
                                        as well as PersistentVolumeClaim objects.
                                        * While dataSource ignores disallowed values
                                        (dropping them), dataSourceRef preserves all
                                        values, and generates an error if a disallowed
                                        value is specified. * While dataSource only
                                        allows local objects, dataSourceRef allows
                                        objects in any namespaces. (Beta) Using this
                                        field requires the AnyVolumeDataSource feature
                                        gate to be enabled. (Alpha) Using the namespace
                                        field of dataSourceRef requires the CrossNamespaceVolumeDataSource
                                        feature gate to be enabled.'
                                      properties:
                                        apiGroup:
                                          description: APIGroup is the group for the
                                            resource being referenced. If APIGroup
                                            is not specified, the specified Kind must
                                            be in the core API group. For any other
                                            third-party types, APIGroup is required.
                                          type: string
                                        kind:
                                          description: Kind is the type of resource
                                            being referenced
                                          type: string
                                        name:
                                          description: Name is the name of resource
                                            being referenced
                                          type: string
                                        namespace:
                                          description: Namespace is the namespace
                                            of resource being referenced Note that
                                            when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant
                                            object is required in the referent namespace
                                            to allow that namespace's owner to accept
                                            the reference. See the ReferenceGrant
                                            documentation for details. (Alpha) This
                                            field requires the CrossNamespaceVolumeDataSource
                                            feature gate to be enabled.
                                          type: string
                                      required:
                                      - kind
                                      - name
                                      type: object
                                    resources:
                                      description: 'resources represents the minimum
                                        resources the volume should have. If RecoverVolumeExpansionFailure
                                        feature is enabled users are allowed to specify
                                        resource requirements that are lower than
                                        previous value but must still be higher than
                                        capacity recorded in the status field of the
                                        claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources'
                                      properties:
                                        claims:
                                          description: "Claims lists the names of
                                            resources, defined in spec.resourceClaims,
                                            that are used by this container. \n This
                                            is an alpha field and requires enabling
                                            the DynamicResourceAllocation feature
                                            gate. \n This field is immutable. It can
                                            only be set for containers."
                                          items:
                                            description: ResourceClaim references
                                              one entry in PodSpec.ResourceClaims.
                                            properties:
                                              name:
                                                description: Name must match the name
                                                  of one entry in pod.spec.resourceClaims
                                                  of the Pod where this field is used.
                                                  It makes that resource available
                                                  inside a container.
                                                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
                                          description: 'Limits describes the maximum
                                            amount of compute resources allowed. More
                                            info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                                          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
                                          description: 'Requests describes the minimum
                                            amount of compute resources required.
                                            If Requests is omitted for a container,
                                            it defaults to Limits if that is explicitly
                                            specified, otherwise to an implementation-defined
                                            value. Requests cannot exceed Limits.
                                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                                          type: object
                                      type: object
                                    selector:
                                      description: selector is a label query over
                                        volumes to consider for binding.
                                      properties:
                                        matchExpressions:
                                          description: matchExpressions is a list
                                            of label selector requirements. The requirements
                                            are ANDed.
                                          items:
                                            description: A label selector requirement
                                              is a selector that contains values,
                                              a key, and an operator that relates
                                              the key and values.
                                            properties:
                                              key:
                                                description: key is the label key
                                                  that the selector applies to.
                                                type: string
                                              operator:
                                                description: operator represents a
                                                  key's relationship to a set of values.
                                                  Valid operators are In, NotIn, Exists
                                                  and DoesNotExist.
                                                type: string
                                              values:
                                                description: values is an array of
                                                  string values. If the operator is
                                                  In or NotIn, the values array must
                                                  be non-empty. If the operator is
                                                  Exists or DoesNotExist, the values
                                                  array must be empty. This array
                                                  is replaced during a strategic merge
                                                  patch.
                                                items:
                                                  type: string
                                                type: array
                                            required:
                                            - key
                                            - operator
                                            type: object
                                          type: array
                                        matchLabels:
                                          additionalProperties:
                                            type: string
                                          description: matchLabels is a map of {key,value}
                                            pairs. A single {key,value} in the matchLabels
                                            map is equivalent to an element of matchExpressions,
                                            whose key field is "key", the operator
                                            is "In", and the values array contains
                                            only "value". The requirements are ANDed.
                                          type: object
                                      type: object
                                      x-kubernetes-map-type: atomic
                                    storageClassName:
                                      description: 'storageClassName is the name of
                                        the StorageClass required by the claim. More
                                        info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1'
                                      type: string
                                    volumeMode:
                                      description: volumeMode defines what type of
                                        volume is required by the claim. Value of
                                        Filesystem is implied when not included in
                                        claim spec.
                                      type: string
                                    volumeName:
                                      description: volumeName is the binding reference
                                        to the PersistentVolume backing this claim.
                                      type: string
                                  type: object
                                status:
                                  description: 'status represents the current information/status
                                    of a persistent volume claim. Read-only. More
                                    info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims'
                                  properties:
                                    accessModes:
                                      description: 'accessModes contains the actual
                                        access modes the volume backing the PVC has.
                                        More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1'
                                      items:
                                        type: string
                                      type: array
                                    allocatedResourceStatuses:
                                      additionalProperties:
                                        description: When a controller receives persistentvolume
                                          claim update with ClaimResourceStatus for
                                          a resource that it does not recognizes,
                                          then it should ignore that update and let
                                          other controllers handle it.
                                        type: string
                                      description: "allocatedResourceStatuses stores
                                        status of resource being resized for the given
                                        PVC. Key names follow standard Kubernetes
                                        label syntax. Valid values are either: * Un-prefixed
                                        keys: - storage - the capacity of the volume.
                                        * Custom resources must use implementation-defined
                                        prefixed names such as \"example.com/my-custom-resource\"
                                        Apart from above values - keys that are unprefixed
                                        or have kubernetes.io prefix are considered
                                        reserved and hence may not be used. \n ClaimResourceStatus
                                        can be in any of following states: - ControllerResizeInProgress:
                                        State set when resize controller starts resizing
                                        the volume in control-plane. - ControllerResizeFailed:
                                        State set when resize has failed in resize
                                        controller with a terminal error. - NodeResizePending:
                                        State set when resize controller has finished
                                        resizing the volume but further resizing of
                                        volume is needed on the node. - NodeResizeInProgress:
                                        State set when kubelet starts resizing the
                                        volume. - NodeResizeFailed: State set when
                                        resizing has failed in kubelet with a terminal
                                        error. Transient errors don't set NodeResizeFailed.
                                        For example: if expanding a PVC for more capacity
                                        - this field can be one of the following states:
                                        - pvc.status.allocatedResourceStatus['storage']
                                        = \"ControllerResizeInProgress\" - pvc.status.allocatedResourceStatus['storage']
                                        = \"ControllerResizeFailed\" - pvc.status.allocatedResourceStatus['storage']
                                        = \"NodeResizePending\" - pvc.status.allocatedResourceStatus['storage']
                                        = \"NodeResizeInProgress\" - pvc.status.allocatedResourceStatus['storage']
                                        = \"NodeResizeFailed\" When this field is
                                        not set, it means that no resize operation
                                        is in progress for the given PVC. \n A controller
                                        that receives PVC update with previously unknown
                                        resourceName or ClaimResourceStatus should
                                        ignore the update for the purpose it was designed.
                                        For example - a controller that only is responsible
                                        for resizing capacity of the volume, should
                                        ignore PVC updates that change other valid
                                        resources associated with PVC. \n This is
                                        an alpha field and requires enabling RecoverVolumeExpansionFailure
                                        feature."
                                      type: object
                                      x-kubernetes-map-type: granular
                                    allocatedResources:
                                      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
                                      description: "allocatedResources tracks the
                                        resources allocated to a PVC including its
                                        capacity. Key names follow standard Kubernetes
                                        label syntax. Valid values are either: * Un-prefixed
                                        keys: - storage - the capacity of the volume.
                                        * Custom resources must use implementation-defined
                                        prefixed names such as \"example.com/my-custom-resource\"
                                        Apart from above values - keys that are unprefixed
                                        or have kubernetes.io prefix are considered
                                        reserved and hence may not be used. \n Capacity
                                        reported here may be larger than the actual
                                        capacity when a volume expansion operation
                                        is requested. For storage quota, the larger
                                        value from allocatedResources and PVC.spec.resources
                                        is used. If allocatedResources is not set,
                                        PVC.spec.resources alone is used for quota
                                        calculation. If a volume expansion capacity
                                        request is lowered, allocatedResources is
                                        only lowered if there are no expansion operations
                                        in progress and if the actual volume capacity
                                        is equal or lower than the requested capacity.
                                        \n A controller that receives PVC update with
                                        previously unknown resourceName should ignore
                                        the update for the purpose it was designed.
                                        For example - a controller that only is responsible
                                        for resizing capacity of the volume, should
                                        ignore PVC updates that change other valid
                                        resources associated with PVC. \n This is
                                        an alpha field and requires enabling RecoverVolumeExpansionFailure
                                        feature."
                                      type: object
                                    capacity:
                                      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
                                      description: capacity represents the actual
                                        resources of the underlying volume.
                                      type: object
                                    conditions:
                                      description: conditions is the current Condition
                                        of persistent volume claim. If underlying
                                        persistent volume is being resized then the
                                        Condition will be set to 'ResizeStarted'.
                                      items:
                                        description: PersistentVolumeClaimCondition
                                          contains details about state of pvc
                                        properties:
                                          lastProbeTime:
                                            description: lastProbeTime is the time
                                              we probed the condition.
                                            format: date-time
                                            type: string
                                          lastTransitionTime:
                                            description: lastTransitionTime is the
                                              time the condition transitioned from
                                              one status to another.
                                            format: date-time
                                            type: string
                                          message:
                                            description: message is the human-readable
                                              message indicating details about last
                                              transition.
                                            type: string
                                          reason:
                                            description: reason is a unique, this
                                              should be a short, machine understandable
                                              string that gives the reason for condition's
                                              last transition. If it reports "ResizeStarted"
                                              that means the underlying persistent
                                              volume is being resized.
                                            type: string
                                          status:
                                            type: string
                                          type:
                                            description: PersistentVolumeClaimConditionType
                                              is a valid value of PersistentVolumeClaimCondition.Type
                                            type: string
                                        required:
                                        - status
                                        - type
                                        type: object
                                      type: array
                                    phase:
                                      description: phase represents the current phase
                                        of PersistentVolumeClaim.
                                      type: string
                                  type: object
                              type: object
                              x-kubernetes-preserve-unknown-fields: true
                          type: object
                        nullable: true
                        type: array
                    type: object
                  volumeClaimTemplate:
                    description: VolumeClaimTemplate is the PVC definition
                    properties:
                      apiVersion:
                        description: 'APIVersion defines the versioned schema of this
                          representation of an object. Servers should convert recognized
                          schemas to the latest internal value, and may reject unrecognized
                          values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
                        type: string
                      kind:
                        description: 'Kind is a string value representing the REST
                          resource this object represents. Servers may infer this
                          from the endpoint the client submits requests to. Cannot
                          be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                        type: string
                      metadata:
                        description: 'Standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata'
                        properties:
                          annotations:
                            additionalProperties:
                              type: string
                            type: object
                          finalizers:
                            items:
                              type: string
                            type: array
                          labels:
                            additionalProperties:
                              type: string
                            type: object
                          name:
                            type: string
                          namespace:
                            type: string
                        type: object
                      spec:
                        description: 'spec defines the desired characteristics of
                          a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims'
                        properties:
                          accessModes:
                            description: 'accessModes contains the desired access
                              modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1'
                            items:
                              type: string
                            type: array
                          dataSource:
                            description: 'dataSource field can be used to specify
                              either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
                              * An existing PVC (PersistentVolumeClaim) If the provisioner
                              or an external controller can support the specified
                              data source, it will create a new volume based on the
                              contents of the specified data source. When the AnyVolumeDataSource
                              feature gate is enabled, dataSource contents will be
                              copied to dataSourceRef, and dataSourceRef contents
                              will be copied to dataSource when dataSourceRef.namespace
                              is not specified. If the namespace is specified, then
                              dataSourceRef will not be copied to dataSource.'
                            properties:
                              apiGroup:
                                description: APIGroup is the group for the resource
                                  being referenced. If APIGroup is not specified,
                                  the specified Kind must be in the core API group.
                                  For any other third-party types, APIGroup is required.
                                type: string
                              kind:
                                description: Kind is the type of resource being referenced
                                type: string
                              name:
                                description: Name is the name of resource being referenced
                                type: string
                            required:
                            - kind
                            - name
                            type: object
                            x-kubernetes-map-type: atomic
                          dataSourceRef:
                            description: 'dataSourceRef specifies the object from
                              which to populate the volume with data, if a non-empty
                              volume is desired. This may be any object from a non-empty
                              API group (non core object) or a PersistentVolumeClaim
                              object. When this field is specified, volume binding
                              will only succeed if the type of the specified object
                              matches some installed volume populator or dynamic provisioner.
                              This field will replace the functionality of the dataSource
                              field and as such if both fields are non-empty, they
                              must have the same value. For backwards compatibility,
                              when namespace isn''t specified in dataSourceRef, both
                              fields (dataSource and dataSourceRef) will be set to
                              the same value automatically if one of them is empty
                              and the other is non-empty. When namespace is specified
                              in dataSourceRef, dataSource isn''t set to the same
                              value and must be empty. There are three important differences
                              between dataSource and dataSourceRef: * While dataSource
                              only allows two specific types of objects, dataSourceRef
                              allows any non-core object, as well as PersistentVolumeClaim
                              objects. * While dataSource ignores disallowed values
                              (dropping them), dataSourceRef preserves all values,
                              and generates an error if a disallowed value is specified.
                              * While dataSource only allows local objects, dataSourceRef
                              allows objects in any namespaces. (Beta) Using this
                              field requires the AnyVolumeDataSource feature gate
                              to be enabled. (Alpha) Using the namespace field of
                              dataSourceRef requires the CrossNamespaceVolumeDataSource
                              feature gate to be enabled.'
                            properties:
                              apiGroup:
                                description: APIGroup is the group for the resource
                                  being referenced. If APIGroup is not specified,
                                  the specified Kind must be in the core API group.
                                  For any other third-party types, APIGroup is required.
                                type: string
                              kind:
                                description: Kind is the type of resource being referenced
                                type: string
                              name:
                                description: Name is the name of resource being referenced
                                type: string
                              namespace:
                                description: Namespace is the namespace of resource
                                  being referenced Note that when a namespace is specified,
                                  a gateway.networking.k8s.io/ReferenceGrant object
                                  is required in the referent namespace to allow that
                                  namespace's owner to accept the reference. See the
                                  ReferenceGrant documentation for details. (Alpha)
                                  This field requires the CrossNamespaceVolumeDataSource
                                  feature gate to be enabled.
                                type: string
                            required:
                            - kind
                            - name
                            type: object
                          resources:
                            description: 'resources represents the minimum resources
                              the volume should have. If RecoverVolumeExpansionFailure
                              feature is enabled users are allowed to specify resource
                              requirements that are lower than previous value but
                              must still be higher than capacity recorded in the status
                              field of the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources'
                            properties:
                              claims:
                                description: "Claims lists the names of resources,
                                  defined in spec.resourceClaims, that are used by
                                  this container. \n This is an alpha field and requires
                                  enabling the DynamicResourceAllocation feature gate.
                                  \n This field is immutable. It can only be set for
                                  containers."
                                items:
                                  description: ResourceClaim references one entry
                                    in PodSpec.ResourceClaims.
                                  properties:
                                    name:
                                      description: Name must match the name of one
                                        entry in pod.spec.resourceClaims of the Pod
                                        where this field is used. It makes that resource
                                        available inside a container.
                                      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
                                description: 'Limits describes the maximum amount
                                  of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                                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
                                description: 'Requests describes the minimum amount
                                  of compute resources required. If Requests is omitted
                                  for a container, it defaults to Limits if that is
                                  explicitly specified, otherwise to an implementation-defined
                                  value. Requests cannot exceed Limits. More info:
                                  https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                                type: object
                            type: object
                          selector:
                            description: selector is a label query over volumes to
                              consider for binding.
                            properties:
                              matchExpressions:
                                description: matchExpressions is a list of label selector
                                  requirements. The requirements are ANDed.
                                items:
                                  description: A label selector requirement is a selector
                                    that contains values, a key, and an operator that
                                    relates the key and values.
                                  properties:
                                    key:
                                      description: key is the label key that the selector
                                        applies to.
                                      type: string
                                    operator:
                                      description: operator represents a key's relationship
                                        to a set of values. Valid operators are In,
                                        NotIn, Exists and DoesNotExist.
                                      type: string
                                    values:
                                      description: values is an array of string values.
                                        If the operator is In or NotIn, the values
                                        array must be non-empty. If the operator is
                                        Exists or DoesNotExist, the values array must
                                        be empty. This array is replaced during a
                                        strategic merge patch.
                                      items:
                                        type: string
                                      type: array
                                  required:
                                  - key
                                  - operator
                                  type: object
                                type: array
                              matchLabels:
                                additionalProperties:
                                  type: string
                                description: matchLabels is a map of {key,value} pairs.
                                  A single {key,value} in the matchLabels map is equivalent
                                  to an element of matchExpressions, whose key field
                                  is "key", the operator is "In", and the values array
                                  contains only "value". The requirements are ANDed.
                                type: object
                            type: object
                            x-kubernetes-map-type: atomic
                          storageClassName:
                            description: 'storageClassName is the name of the StorageClass
                              required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1'
                            type: string
                          volumeMode:
                            description: volumeMode defines what type of volume is
                              required by the claim. Value of Filesystem is implied
                              when not included in claim spec.
                            type: string
                          volumeName:
                            description: volumeName is the binding reference to the
                              PersistentVolume backing this claim.
                            type: string
                        type: object
                      status:
                        description: 'status represents the current information/status
                          of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims'
                        properties:
                          accessModes:
                            description: 'accessModes contains the actual access modes
                              the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1'
                            items:
                              type: string
                            type: array
                          allocatedResourceStatuses:
                            additionalProperties:
                              description: When a controller receives persistentvolume
                                claim update with ClaimResourceStatus for a resource
                                that it does not recognizes, then it should ignore
                                that update and let other controllers handle it.
                              type: string
                            description: "allocatedResourceStatuses stores status
                              of resource being resized for the given PVC. Key names
                              follow standard Kubernetes label syntax. Valid values
                              are either: * Un-prefixed keys: - storage - the capacity
                              of the volume. * Custom resources must use implementation-defined
                              prefixed names such as \"example.com/my-custom-resource\"
                              Apart from above values - keys that are unprefixed or
                              have kubernetes.io prefix are considered reserved and
                              hence may not be used. \n ClaimResourceStatus can be
                              in any of following states: - ControllerResizeInProgress:
                              State set when resize controller starts resizing the
                              volume in control-plane. - ControllerResizeFailed: State
                              set when resize has failed in resize controller with
                              a terminal error. - NodeResizePending: State set when
                              resize controller has finished resizing the volume but
                              further resizing of volume is needed on the node. -
                              NodeResizeInProgress: State set when kubelet starts
                              resizing the volume. - NodeResizeFailed: State set when
                              resizing has failed in kubelet with a terminal error.
                              Transient errors don't set NodeResizeFailed. For example:
                              if expanding a PVC for more capacity - this field can
                              be one of the following states: - pvc.status.allocatedResourceStatus['storage']
                              = \"ControllerResizeInProgress\" - pvc.status.allocatedResourceStatus['storage']
                              = \"ControllerResizeFailed\" - pvc.status.allocatedResourceStatus['storage']
                              = \"NodeResizePending\" - pvc.status.allocatedResourceStatus['storage']
                              = \"NodeResizeInProgress\" - pvc.status.allocatedResourceStatus['storage']
                              = \"NodeResizeFailed\" When this field is not set, it
                              means that no resize operation is in progress for the
                              given PVC. \n A controller that receives PVC update
                              with previously unknown resourceName or ClaimResourceStatus
                              should ignore the update for the purpose it was designed.
                              For example - a controller that only is responsible
                              for resizing capacity of the volume, should ignore PVC
                              updates that change other valid resources associated
                              with PVC. \n This is an alpha field and requires enabling
                              RecoverVolumeExpansionFailure feature."
                            type: object
                            x-kubernetes-map-type: granular
                          allocatedResources:
                            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
                            description: "allocatedResources tracks the resources
                              allocated to a PVC including its capacity. Key names
                              follow standard Kubernetes label syntax. Valid values
                              are either: * Un-prefixed keys: - storage - the capacity
                              of the volume. * Custom resources must use implementation-defined
                              prefixed names such as \"example.com/my-custom-resource\"
                              Apart from above values - keys that are unprefixed or
                              have kubernetes.io prefix are considered reserved and
                              hence may not be used. \n Capacity reported here may
                              be larger than the actual capacity when a volume expansion
                              operation is requested. For storage quota, the larger
                              value from allocatedResources and PVC.spec.resources
                              is used. If allocatedResources is not set, PVC.spec.resources
                              alone is used for quota calculation. If a volume expansion
                              capacity request is lowered, allocatedResources is only
                              lowered if there are no expansion operations in progress
                              and if the actual volume capacity is equal or lower
                              than the requested capacity. \n A controller that receives
                              PVC update with previously unknown resourceName should
                              ignore the update for the purpose it was designed. For
                              example - a controller that only is responsible for
                              resizing capacity of the volume, should ignore PVC updates
                              that change other valid resources associated with PVC.
                              \n This is an alpha field and requires enabling RecoverVolumeExpansionFailure
                              feature."
                            type: object
                          capacity:
                            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
                            description: capacity represents the actual resources
                              of the underlying volume.
                            type: object
                          conditions:
                            description: conditions is the current Condition of persistent
                              volume claim. If underlying persistent volume is being
                              resized then the Condition will be set to 'ResizeStarted'.
                            items:
                              description: PersistentVolumeClaimCondition contains
                                details about state of pvc
                              properties:
                                lastProbeTime:
                                  description: lastProbeTime is the time we probed
                                    the condition.
                                  format: date-time
                                  type: string
                                lastTransitionTime:
                                  description: lastTransitionTime is the time the
                                    condition transitioned from one status to another.
                                  format: date-time
                                  type: string
                                message:
                                  description: message is the human-readable message
                                    indicating details about last transition.
                                  type: string
                                reason:
                                  description: reason is a unique, this should be
                                    a short, machine understandable string that gives
                                    the reason for condition's last transition. If
                                    it reports "ResizeStarted" that means the underlying
                                    persistent volume is being resized.
                                  type: string
                                status:
                                  type: string
                                type:
                                  description: PersistentVolumeClaimConditionType
                                    is a valid value of PersistentVolumeClaimCondition.Type
                                  type: string
                              required:
                              - status
                              - type
                              type: object
                            type: array
                          phase:
                            description: phase represents the current phase of PersistentVolumeClaim.
                            type: string
                        type: object
                    type: object
                    x-kubernetes-preserve-unknown-fields: true
                  zones:
                    description: Zones are specified when we want to provide zonal
                      awareness to mons
                    items:
                      description: MonZoneSpec represents the specification of a zone
                        in a Ceph Cluster
                      properties:
                        arbiter:
                          description: Arbiter determines if the zone contains the
                            arbiter used for stretch cluster mode
                          type: boolean
                        name:
                          description: Name is the name of the zone
                          type: string
                        volumeClaimTemplate:
                          description: VolumeClaimTemplate is the PVC template
                          properties:
                            apiVersion:
                              description: 'APIVersion defines the versioned schema
                                of this representation of an object. Servers should
                                convert recognized schemas to the latest internal
                                value, and may reject unrecognized values. More info:
                                https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
                              type: string
                            kind:
                              description: 'Kind is a string value representing the
                                REST resource this object represents. Servers may
                                infer this from the endpoint the client submits requests
                                to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                              type: string
                            metadata:
                              description: 'Standard object''s metadata. More info:
                                https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata'
                              properties:
                                annotations:
                                  additionalProperties:
                                    type: string
                                  type: object
                                finalizers:
                                  items:
                                    type: string
                                  type: array
                                labels:
                                  additionalProperties:
                                    type: string
                                  type: object
                                name:
                                  type: string
                                namespace:
                                  type: string
                              type: object
                            spec:
                              description: 'spec defines the desired characteristics
                                of a volume requested by a pod author. More info:
                                https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims'
                              properties:
                                accessModes:
                                  description: 'accessModes contains the desired access
                                    modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1'
                                  items:
                                    type: string
                                  type: array
                                dataSource:
                                  description: 'dataSource field can be used to specify
                                    either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
                                    * An existing PVC (PersistentVolumeClaim) If the
                                    provisioner or an external controller can support
                                    the specified data source, it will create a new
                                    volume based on the contents of the specified
                                    data source. When the AnyVolumeDataSource feature
                                    gate is enabled, dataSource contents will be copied
                                    to dataSourceRef, and dataSourceRef contents will
                                    be copied to dataSource when dataSourceRef.namespace
                                    is not specified. If the namespace is specified,
                                    then dataSourceRef will not be copied to dataSource.'
                                  properties:
                                    apiGroup:
                                      description: APIGroup is the group for the resource
                                        being referenced. If APIGroup is not specified,
                                        the specified Kind must be in the core API
                                        group. For any other third-party types, APIGroup
                                        is required.
                                      type: string
                                    kind:
                                      description: Kind is the type of resource being
                                        referenced
                                      type: string
                                    name:
                                      description: Name is the name of resource being
                                        referenced
                                      type: string
                                  required:
                                  - kind
                                  - name
                                  type: object
                                  x-kubernetes-map-type: atomic
                                dataSourceRef:
                                  description: 'dataSourceRef specifies the object
                                    from which to populate the volume with data, if
                                    a non-empty volume is desired. This may be any
                                    object from a non-empty API group (non core object)
                                    or a PersistentVolumeClaim object. When this field
                                    is specified, volume binding will only succeed
                                    if the type of the specified object matches some
                                    installed volume populator or dynamic provisioner.
                                    This field will replace the functionality of the
                                    dataSource field and as such if both fields are
                                    non-empty, they must have the same value. For
                                    backwards compatibility, when namespace isn''t
                                    specified in dataSourceRef, both fields (dataSource
                                    and dataSourceRef) will be set to the same value
                                    automatically if one of them is empty and the
                                    other is non-empty. When namespace is specified
                                    in dataSourceRef, dataSource isn''t set to the
                                    same value and must be empty. There are three
                                    important differences between dataSource and dataSourceRef:
                                    * While dataSource only allows two specific types
                                    of objects, dataSourceRef allows any non-core
                                    object, as well as PersistentVolumeClaim objects.
                                    * While dataSource ignores disallowed values (dropping
                                    them), dataSourceRef preserves all values, and
                                    generates an error if a disallowed value is specified.
                                    * While dataSource only allows local objects,
                                    dataSourceRef allows objects in any namespaces.
                                    (Beta) Using this field requires the AnyVolumeDataSource
                                    feature gate to be enabled. (Alpha) Using the
                                    namespace field of dataSourceRef requires the
                                    CrossNamespaceVolumeDataSource feature gate to
                                    be enabled.'
                                  properties:
                                    apiGroup:
                                      description: APIGroup is the group for the resource
                                        being referenced. If APIGroup is not specified,
                                        the specified Kind must be in the core API
                                        group. For any other third-party types, APIGroup
                                        is required.
                                      type: string
                                    kind:
                                      description: Kind is the type of resource being
                                        referenced
                                      type: string
                                    name:
                                      description: Name is the name of resource being
                                        referenced
                                      type: string
                                    namespace:
                                      description: Namespace is the namespace of resource
                                        being referenced Note that when a namespace
                                        is specified, a gateway.networking.k8s.io/ReferenceGrant
                                        object is required in the referent namespace
                                        to allow that namespace's owner to accept
                                        the reference. See the ReferenceGrant documentation
                                        for details. (Alpha) This field requires the
                                        CrossNamespaceVolumeDataSource feature gate
                                        to be enabled.
                                      type: string
                                  required:
                                  - kind
                                  - name
                                  type: object
                                resources:
                                  description: 'resources represents the minimum resources
                                    the volume should have. If RecoverVolumeExpansionFailure
                                    feature is enabled users are allowed to specify
                                    resource requirements that are lower than previous
                                    value but must still be higher than capacity recorded
                                    in the status field of the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources'
                                  properties:
                                    claims:
                                      description: "Claims lists the names of resources,
                                        defined in spec.resourceClaims, that are used
                                        by this container. \n This is an alpha field
                                        and requires enabling the DynamicResourceAllocation
                                        feature gate. \n This field is immutable.
                                        It can only be set for containers."
                                      items:
                                        description: ResourceClaim references one
                                          entry in PodSpec.ResourceClaims.
                                        properties:
                                          name:
                                            description: Name must match the name
                                              of one entry in pod.spec.resourceClaims
                                              of the Pod where this field is used.
                                              It makes that resource available inside
                                              a container.
                                            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
                                      description: 'Limits describes the maximum amount
                                        of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                                      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
                                      description: 'Requests describes the minimum
                                        amount of compute resources required. If Requests
                                        is omitted for a container, it defaults to
                                        Limits if that is explicitly specified, otherwise
                                        to an implementation-defined value. Requests
                                        cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                                      type: object
                                  type: object
                                selector:
                                  description: selector is a label query over volumes
                                    to consider for binding.
                                  properties:
                                    matchExpressions:
                                      description: matchExpressions is a list of label
                                        selector requirements. The requirements are
                                        ANDed.
                                      items:
                                        description: A label selector requirement
                                          is a selector that contains values, a key,
                                          and an operator that relates the key and
                                          values.
                                        properties:
                                          key:
                                            description: key is the label key that
                                              the selector applies to.
                                            type: string
                                          operator:
                                            description: operator represents a key's
                                              relationship to a set of values. Valid
                                              operators are In, NotIn, Exists and
                                              DoesNotExist.
                                            type: string
                                          values:
                                            description: values is an array of string
                                              values. If the operator is In or NotIn,
                                              the values array must be non-empty.
                                              If the operator is Exists or DoesNotExist,
                                              the values array must be empty. This
                                              array is replaced during a strategic
                                              merge patch.
                                            items:
                                              type: string
                                            type: array
                                        required:
                                        - key
                                        - operator
                                        type: object
                                      type: array
                                    matchLabels:
                                      additionalProperties:
                                        type: string
                                      description: matchLabels is a map of {key,value}
                                        pairs. A single {key,value} in the matchLabels
                                        map is equivalent to an element of matchExpressions,
                                        whose key field is "key", the operator is
                                        "In", and the values array contains only "value".
                                        The requirements are ANDed.
                                      type: object
                                  type: object
                                  x-kubernetes-map-type: atomic
                                storageClassName:
                                  description: 'storageClassName is the name of the
                                    StorageClass required by the claim. More info:
                                    https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1'
                                  type: string
                                volumeMode:
                                  description: volumeMode defines what type of volume
                                    is required by the claim. Value of Filesystem
                                    is implied when not included in claim spec.
                                  type: string
                                volumeName:
                                  description: volumeName is the binding reference
                                    to the PersistentVolume backing this claim.
                                  type: string
                              type: object
                            status:
                              description: 'status represents the current information/status
                                of a persistent volume claim. Read-only. More info:
                                https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims'
                              properties:
                                accessModes:
                                  description: 'accessModes contains the actual access
                                    modes the volume backing the PVC has. More info:
                                    https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1'
                                  items:
                                    type: string
                                  type: array
                                allocatedResourceStatuses:
                                  additionalProperties:
                                    description: When a controller receives persistentvolume
                                      claim update with ClaimResourceStatus for a
                                      resource that it does not recognizes, then it
                                      should ignore that update and let other controllers
                                      handle it.
                                    type: string
                                  description: "allocatedResourceStatuses stores status
                                    of resource being resized for the given PVC. Key
                                    names follow standard Kubernetes label syntax.
                                    Valid values are either: * Un-prefixed keys: -
                                    storage - the capacity of the volume. * Custom
                                    resources must use implementation-defined prefixed
                                    names such as \"example.com/my-custom-resource\"
                                    Apart from above values - keys that are unprefixed
                                    or have kubernetes.io prefix are considered reserved
                                    and hence may not be used. \n ClaimResourceStatus
                                    can be in any of following states: - ControllerResizeInProgress:
                                    State set when resize controller starts resizing
                                    the volume in control-plane. - ControllerResizeFailed:
                                    State set when resize has failed in resize controller
                                    with a terminal error. - NodeResizePending: State
                                    set when resize controller has finished resizing
                                    the volume but further resizing of volume is needed
                                    on the node. - NodeResizeInProgress: State set
                                    when kubelet starts resizing the volume. - NodeResizeFailed:
                                    State set when resizing has failed in kubelet
                                    with a terminal error. Transient errors don't
                                    set NodeResizeFailed. For example: if expanding
                                    a PVC for more capacity - this field can be one
                                    of the following states: - pvc.status.allocatedResourceStatus['storage']
                                    = \"ControllerResizeInProgress\" - pvc.status.allocatedResourceStatus['storage']
                                    = \"ControllerResizeFailed\" - pvc.status.allocatedResourceStatus['storage']
                                    = \"NodeResizePending\" - pvc.status.allocatedResourceStatus['storage']
                                    = \"NodeResizeInProgress\" - pvc.status.allocatedResourceStatus['storage']
                                    = \"NodeResizeFailed\" When this field is not
                                    set, it means that no resize operation is in progress
                                    for the given PVC. \n A controller that receives
                                    PVC update with previously unknown resourceName
                                    or ClaimResourceStatus should ignore the update
                                    for the purpose it was designed. For example -
                                    a controller that only is responsible for resizing
                                    capacity of the volume, should ignore PVC updates
                                    that change other valid resources associated with
                                    PVC. \n This is an alpha field and requires enabling
                                    RecoverVolumeExpansionFailure feature."
                                  type: object
                                  x-kubernetes-map-type: granular
                                allocatedResources:
                                  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
                                  description: "allocatedResources tracks the resources
                                    allocated to a PVC including its capacity. Key
                                    names follow standard Kubernetes label syntax.
                                    Valid values are either: * Un-prefixed keys: -
                                    storage - the capacity of the volume. * Custom
                                    resources must use implementation-defined prefixed
                                    names such as \"example.com/my-custom-resource\"
                                    Apart from above values - keys that are unprefixed
                                    or have kubernetes.io prefix are considered reserved
                                    and hence may not be used. \n Capacity reported
                                    here may be larger than the actual capacity when
                                    a volume expansion operation is requested. For
                                    storage quota, the larger value from allocatedResources
                                    and PVC.spec.resources is used. If allocatedResources
                                    is not set, PVC.spec.resources alone is used for
                                    quota calculation. If a volume expansion capacity
                                    request is lowered, allocatedResources is only
                                    lowered if there are no expansion operations in
                                    progress and if the actual volume capacity is
                                    equal or lower than the requested capacity. \n
                                    A controller that receives PVC update with previously
                                    unknown resourceName should ignore the update
                                    for the purpose it was designed. For example -
                                    a controller that only is responsible for resizing
                                    capacity of the volume, should ignore PVC updates
                                    that change other valid resources associated with
                                    PVC. \n This is an alpha field and requires enabling
                                    RecoverVolumeExpansionFailure feature."
                                  type: object
                                capacity:
                                  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
                                  description: capacity represents the actual resources
                                    of the underlying volume.
                                  type: object
                                conditions:
                                  description: conditions is the current Condition
                                    of persistent volume claim. If underlying persistent
                                    volume is being resized then the Condition will
                                    be set to 'ResizeStarted'.
                                  items:
                                    description: PersistentVolumeClaimCondition contains
                                      details about state of pvc
                                    properties:
                                      lastProbeTime:
                                        description: lastProbeTime is the time we
                                          probed the condition.
                                        format: date-time
                                        type: string
                                      lastTransitionTime:
                                        description: lastTransitionTime is the time
                                          the condition transitioned from one status
                                          to another.
                                        format: date-time
                                        type: string
                                      message:
                                        description: message is the human-readable
                                          message indicating details about last transition.
                                        type: string
                                      reason:
                                        description: reason is a unique, this should
                                          be a short, machine understandable string
                                          that gives the reason for condition's last
                                          transition. If it reports "ResizeStarted"
                                          that means the underlying persistent volume
                                          is being resized.
                                        type: string
                                      status:
                                        type: string
                                      type:
                                        description: PersistentVolumeClaimConditionType
                                          is a valid value of PersistentVolumeClaimCondition.Type
                                        type: string
                                    required:
                                    - status
                                    - type
                                    type: object
                                  type: array
                                phase:
                                  description: phase represents the current phase
                                    of PersistentVolumeClaim.
                                  type: string
                              type: object
                          type: object
                          x-kubernetes-preserve-unknown-fields: true
                      type: object
                    type: array
                type: object
              monitoring:
                description: Prometheus based Monitoring settings
                nullable: true
                properties:
                  enabled:
                    description: Enabled determines whether to create the prometheus
                      rules for the ceph cluster. If true, the prometheus types must
                      exist or the creation will fail. Default is false.
                    type: boolean
                  externalMgrEndpoints:
                    description: ExternalMgrEndpoints points to an existing Ceph prometheus
                      exporter endpoint
                    items:
                      description: EndpointAddress is a tuple that describes single
                        IP address.
                      properties:
                        hostname:
                          description: The Hostname of this endpoint
                          type: string
                        ip:
                          description: The IP of this endpoint. May not be loopback
                            (127.0.0.0/8 or ::1), link-local (169.254.0.0/16 or fe80::/10),
                            or link-local multicast (224.0.0.0/24 or ff02::/16).
                          type: string
                        nodeName:
                          description: 'Optional: Node hosting this endpoint. This
                            can be used to determine endpoints local to a node.'
                          type: string
                        targetRef:
                          description: Reference to object providing the endpoint.
                          properties:
                            apiVersion:
                              description: API version of the referent.
                              type: string
                            fieldPath:
                              description: 'If referring to a piece of an object instead
                                of an entire object, this string should contain a
                                valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
                                For example, if the object reference is to a container
                                within a pod, this would take on a value like: "spec.containers{name}"
                                (where "name" refers to the name of the container
                                that triggered the event) or if no container name
                                is specified "spec.containers[2]" (container with
                                index 2 in this pod). This syntax is chosen only to
                                have some well-defined way of referencing a part of
                                an object. TODO: this design is not final and this
                                field is subject to change in the future.'
                              type: string
                            kind:
                              description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                              type: string
                            name:
                              description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                              type: string
                            namespace:
                              description: 'Namespace of the referent. More info:
                                https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                              type: string
                            resourceVersion:
                              description: 'Specific resourceVersion to which this
                                reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                              type: string
                            uid:
                              description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                              type: string
                          type: object
                          x-kubernetes-map-type: atomic
                      required:
                      - ip
                      type: object
                      x-kubernetes-map-type: atomic
                    nullable: true
                    type: array
                  externalMgrPrometheusPort:
                    description: ExternalMgrPrometheusPort Prometheus exporter port
                    maximum: 65535
                    minimum: 0
                    type: integer
                  interval:
                    description: Interval determines prometheus scrape interval
                    type: string
                  metricsDisabled:
                    description: Whether to disable the metrics reported by Ceph.
                      If false, the prometheus mgr module and Ceph exporter are enabled.
                      If true, the prometheus mgr module and Ceph exporter are both
                      disabled. Default is false.
                    type: boolean
                  port:
                    description: Port is the prometheus server port
                    maximum: 65535
                    minimum: 0
                    type: integer
                type: object
              network:
                description: Network related configuration
                nullable: true
                properties:
                  connections:
                    description: Settings for network connections such as compression
                      and encryption across the wire.
                    nullable: true
                    properties:
                      compression:
                        description: Compression settings for the network connections.
                        nullable: true
                        properties:
                          enabled:
                            description: Whether to compress the data in transit across
                              the wire. The default is not set. Requires Ceph Quincy
                              (v17) or newer.
                            type: boolean
                        type: object
                      encryption:
                        description: Encryption settings for the network connections.
                        nullable: true
                        properties:
                          enabled:
                            description: Whether to encrypt the data in transit across
                              the wire to prevent eavesdropping the data on the network.
                              The default is not set. Even if encryption is not enabled,
                              clients still establish a strong initial authentication
                              for the connection and data integrity is still validated
                              with a crc check. When encryption is enabled, all communication
                              between clients and Ceph daemons, or between Ceph daemons
                              will be encrypted.
                            type: boolean
                        type: object
                      requireMsgr2:
                        description: Whether to require msgr2 (port 3300) even if
                          compression or encryption are not enabled. If true, the
                          msgr1 port (6789) will be disabled. Requires a kernel that
                          supports msgr2 (kernel 5.11 or CentOS 8.4 or newer).
                        type: boolean
                    type: object
                  dualStack:
                    description: DualStack determines whether Ceph daemons should
                      listen on both IPv4 and IPv6
                    type: boolean
                  hostNetwork:
                    description: HostNetwork to enable host network
                    type: boolean
                  ipFamily:
                    description: IPFamily is the single stack IPv6 or IPv4 protocol
                    enum:
                    - IPv4
                    - IPv6
                    nullable: true
                    type: string
                  multiClusterService:
                    description: Enable multiClusterService to export the Services
                      between peer clusters
                    properties:
                      clusterID:
                        description: 'ClusterID uniquely identifies a cluster. It
                          is used as a prefix to nslookup exported services. For example:
                          <clusterid>.<svc>.<ns>.svc.clusterset.local'
                        type: string
                      enabled:
                        description: Enable multiClusterService to export the mon
                          and OSD services to peer cluster. Ensure that peer clusters
                          are connected using an MCS API compatible application, like
                          Globalnet Submariner.
                        type: boolean
                    type: object
                  provider:
                    description: Provider is what provides network connectivity to
                      the cluster e.g. "host" or "multus"
                    nullable: true
                    type: string
                  selectors:
                    additionalProperties:
                      type: string
                    description: Selectors string values describe what networks will
                      be used to connect the cluster. Meanwhile the keys describe
                      each network respective responsibilities or any metadata storage
                      provider decide.
                    nullable: true
                    type: object
                type: object
                x-kubernetes-preserve-unknown-fields: true
              placement:
                additionalProperties:
                  description: Placement is the placement for an object
                  properties:
                    nodeAffinity:
                      description: NodeAffinity is a group of node affinity scheduling
                        rules
                      properties:
                        preferredDuringSchedulingIgnoredDuringExecution:
                          description: The scheduler will prefer to schedule pods
                            to nodes that satisfy the affinity expressions specified
                            by this field, but it may choose a node that violates
                            one or more of the expressions. The node that is most
                            preferred is the one with the greatest sum of weights,
                            i.e. for each node that meets all of the scheduling requirements
                            (resource request, requiredDuringScheduling affinity expressions,
                            etc.), compute a sum by iterating through the elements
                            of this field and adding "weight" to the sum if the node
                            matches the corresponding matchExpressions; the node(s)
                            with the highest sum are the most preferred.
                          items:
                            description: An empty preferred scheduling term matches
                              all objects with implicit weight 0 (i.e. it's a no-op).
                              A null preferred scheduling term matches no objects
                              (i.e. is also a no-op).
                            properties:
                              preference:
                                description: A node selector term, associated with
                                  the corresponding weight.
                                properties:
                                  matchExpressions:
                                    description: A list of node selector requirements
                                      by node's labels.
                                    items:
                                      description: A node selector requirement is
                                        a selector that contains values, a key, and
                                        an operator that relates the key and values.
                                      properties:
                                        key:
                                          description: The label key that the selector
                                            applies to.
                                          type: string
                                        operator:
                                          description: Represents a key's relationship
                                            to a set of values. Valid operators are
                                            In, NotIn, Exists, DoesNotExist. Gt, and
                                            Lt.
                                          type: string
                                        values:
                                          description: An array of string values.
                                            If the operator is In or NotIn, the values
                                            array must be non-empty. If the operator
                                            is Exists or DoesNotExist, the values
                                            array must be empty. If the operator is
                                            Gt or Lt, the values array must have a
                                            single element, which will be interpreted
                                            as an integer. This array is replaced
                                            during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                  matchFields:
                                    description: A list of node selector requirements
                                      by node's fields.
                                    items:
                                      description: A node selector requirement is
                                        a selector that contains values, a key, and
                                        an operator that relates the key and values.
                                      properties:
                                        key:
                                          description: The label key that the selector
                                            applies to.
                                          type: string
                                        operator:
                                          description: Represents a key's relationship
                                            to a set of values. Valid operators are
                                            In, NotIn, Exists, DoesNotExist. Gt, and
                                            Lt.
                                          type: string
                                        values:
                                          description: An array of string values.
                                            If the operator is In or NotIn, the values
                                            array must be non-empty. If the operator
                                            is Exists or DoesNotExist, the values
                                            array must be empty. If the operator is
                                            Gt or Lt, the values array must have a
                                            single element, which will be interpreted
                                            as an integer. This array is replaced
                                            during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                type: object
                                x-kubernetes-map-type: atomic
                              weight:
                                description: Weight associated with matching the corresponding
                                  nodeSelectorTerm, in the range 1-100.
                                format: int32
                                type: integer
                            required:
                            - preference
                            - weight
                            type: object
                          type: array
                        requiredDuringSchedulingIgnoredDuringExecution:
                          description: If the affinity requirements specified by this
                            field are not met at scheduling time, the pod will not
                            be scheduled onto the node. If the affinity requirements
                            specified by this field cease to be met at some point
                            during pod execution (e.g. due to an update), the system
                            may or may not try to eventually evict the pod from its
                            node.
                          properties:
                            nodeSelectorTerms:
                              description: Required. A list of node selector terms.
                                The terms are ORed.
                              items:
                                description: A null or empty node selector term matches
                                  no objects. The requirements of them are ANDed.
                                  The TopologySelectorTerm type implements a subset
                                  of the NodeSelectorTerm.
                                properties:
                                  matchExpressions:
                                    description: A list of node selector requirements
                                      by node's labels.
                                    items:
                                      description: A node selector requirement is
                                        a selector that contains values, a key, and
                                        an operator that relates the key and values.
                                      properties:
                                        key:
                                          description: The label key that the selector
                                            applies to.
                                          type: string
                                        operator:
                                          description: Represents a key's relationship
                                            to a set of values. Valid operators are
                                            In, NotIn, Exists, DoesNotExist. Gt, and
                                            Lt.
                                          type: string
                                        values:
                                          description: An array of string values.
                                            If the operator is In or NotIn, the values
                                            array must be non-empty. If the operator
                                            is Exists or DoesNotExist, the values
                                            array must be empty. If the operator is
                                            Gt or Lt, the values array must have a
                                            single element, which will be interpreted
                                            as an integer. This array is replaced
                                            during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                  matchFields:
                                    description: A list of node selector requirements
                                      by node's fields.
                                    items:
                                      description: A node selector requirement is
                                        a selector that contains values, a key, and
                                        an operator that relates the key and values.
                                      properties:
                                        key:
                                          description: The label key that the selector
                                            applies to.
                                          type: string
                                        operator:
                                          description: Represents a key's relationship
                                            to a set of values. Valid operators are
                                            In, NotIn, Exists, DoesNotExist. Gt, and
                                            Lt.
                                          type: string
                                        values:
                                          description: An array of string values.
                                            If the operator is In or NotIn, the values
                                            array must be non-empty. If the operator
                                            is Exists or DoesNotExist, the values
                                            array must be empty. If the operator is
                                            Gt or Lt, the values array must have a
                                            single element, which will be interpreted
                                            as an integer. This array is replaced
                                            during a strategic merge patch.
                                          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:
                      description: PodAffinity is a group of inter pod affinity scheduling
                        rules
                      properties:
                        preferredDuringSchedulingIgnoredDuringExecution:
                          description: The scheduler will prefer to schedule pods
                            to nodes that satisfy the affinity expressions specified
                            by this field, but it may choose a node that violates
                            one or more of the expressions. The node that is most
                            preferred is the one with the greatest sum of weights,
                            i.e. for each node that meets all of the scheduling requirements
                            (resource request, requiredDuringScheduling affinity expressions,
                            etc.), compute a sum by iterating through the elements
                            of this field and adding "weight" to the sum if the node
                            has pods which matches the corresponding podAffinityTerm;
                            the node(s) with the highest sum are the most preferred.
                          items:
                            description: The weights of all of the matched WeightedPodAffinityTerm
                              fields are added per-node to find the most preferred
                              node(s)
                            properties:
                              podAffinityTerm:
                                description: Required. A pod affinity term, associated
                                  with the corresponding weight.
                                properties:
                                  labelSelector:
                                    description: A label query over a set of resources,
                                      in this case pods.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: A label selector requirement
                                            is a selector that contains values, a
                                            key, and an operator that relates the
                                            key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: operator represents a key's
                                                relationship to a set of values. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: matchLabels is a map of {key,value}
                                          pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions,
                                          whose key field is "key", the operator is
                                          "In", and the values array contains only
                                          "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  namespaceSelector:
                                    description: A label query over the set of namespaces
                                      that the term applies to. The term is applied
                                      to the union of the namespaces selected by this
                                      field and the ones listed in the namespaces
                                      field. null selector and null or empty namespaces
                                      list means "this pod's namespace". An empty
                                      selector ({}) matches all namespaces.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: A label selector requirement
                                            is a selector that contains values, a
                                            key, and an operator that relates the
                                            key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: operator represents a key's
                                                relationship to a set of values. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: matchLabels is a map of {key,value}
                                          pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions,
                                          whose key field is "key", the operator is
                                          "In", and the values array contains only
                                          "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  namespaces:
                                    description: namespaces specifies a static list
                                      of namespace names that the term applies to.
                                      The term is applied to the union of the namespaces
                                      listed in this field and the ones selected by
                                      namespaceSelector. null or empty namespaces
                                      list and null namespaceSelector means "this
                                      pod's namespace".
                                    items:
                                      type: string
                                    type: array
                                  topologyKey:
                                    description: This pod should be co-located (affinity)
                                      or not co-located (anti-affinity) with the pods
                                      matching the labelSelector in the specified
                                      namespaces, where co-located is defined as running
                                      on a node whose value of the label with key
                                      topologyKey matches that of any node on which
                                      any of the selected pods is running. Empty topologyKey
                                      is not allowed.
                                    type: string
                                required:
                                - topologyKey
                                type: object
                              weight:
                                description: weight associated with matching the corresponding
                                  podAffinityTerm, in the range 1-100.
                                format: int32
                                type: integer
                            required:
                            - podAffinityTerm
                            - weight
                            type: object
                          type: array
                        requiredDuringSchedulingIgnoredDuringExecution:
                          description: If the affinity requirements specified by this
                            field are not met at scheduling time, the pod will not
                            be scheduled onto the node. If the affinity requirements
                            specified by this field cease to be met at some point
                            during pod execution (e.g. due to a pod label update),
                            the system may or may not try to eventually evict the
                            pod from its node. When there are multiple elements, the
                            lists of nodes corresponding to each podAffinityTerm are
                            intersected, i.e. all terms must be satisfied.
                          items:
                            description: Defines a set of pods (namely those matching
                              the labelSelector relative to the given namespace(s))
                              that this pod should be co-located (affinity) or not
                              co-located (anti-affinity) with, where co-located is
                              defined as running on a node whose value of the label
                              with key <topologyKey> matches that of any node on which
                              a pod of the set of pods is running
                            properties:
                              labelSelector:
                                description: A label query over a set of resources,
                                  in this case pods.
                                properties:
                                  matchExpressions:
                                    description: matchExpressions is a list of label
                                      selector requirements. The requirements are
                                      ANDed.
                                    items:
                                      description: A label selector requirement is
                                        a selector that contains values, a key, and
                                        an operator that relates the key and values.
                                      properties:
                                        key:
                                          description: key is the label key that the
                                            selector applies to.
                                          type: string
                                        operator:
                                          description: operator represents a key's
                                            relationship to a set of values. Valid
                                            operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        values:
                                          description: values is an array of string
                                            values. If the operator is In or NotIn,
                                            the values array must be non-empty. If
                                            the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array
                                            is replaced during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                  matchLabels:
                                    additionalProperties:
                                      type: string
                                    description: matchLabels is a map of {key,value}
                                      pairs. A single {key,value} in the matchLabels
                                      map is equivalent to an element of matchExpressions,
                                      whose key field is "key", the operator is "In",
                                      and the values array contains only "value".
                                      The requirements are ANDed.
                                    type: object
                                type: object
                                x-kubernetes-map-type: atomic
                              namespaceSelector:
                                description: A label query over the set of namespaces
                                  that the term applies to. The term is applied to
                                  the union of the namespaces selected by this field
                                  and the ones listed in the namespaces field. null
                                  selector and null or empty namespaces list means
                                  "this pod's namespace". An empty selector ({}) matches
                                  all namespaces.
                                properties:
                                  matchExpressions:
                                    description: matchExpressions is a list of label
                                      selector requirements. The requirements are
                                      ANDed.
                                    items:
                                      description: A label selector requirement is
                                        a selector that contains values, a key, and
                                        an operator that relates the key and values.
                                      properties:
                                        key:
                                          description: key is the label key that the
                                            selector applies to.
                                          type: string
                                        operator:
                                          description: operator represents a key's
                                            relationship to a set of values. Valid
                                            operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        values:
                                          description: values is an array of string
                                            values. If the operator is In or NotIn,
                                            the values array must be non-empty. If
                                            the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array
                                            is replaced during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                  matchLabels:
                                    additionalProperties:
                                      type: string
                                    description: matchLabels is a map of {key,value}
                                      pairs. A single {key,value} in the matchLabels
                                      map is equivalent to an element of matchExpressions,
                                      whose key field is "key", the operator is "In",
                                      and the values array contains only "value".
                                      The requirements are ANDed.
                                    type: object
                                type: object
                                x-kubernetes-map-type: atomic
                              namespaces:
                                description: namespaces specifies a static list of
                                  namespace names that the term applies to. The term
                                  is applied to the union of the namespaces listed
                                  in this field and the ones selected by namespaceSelector.
                                  null or empty namespaces list and null namespaceSelector
                                  means "this pod's namespace".
                                items:
                                  type: string
                                type: array
                              topologyKey:
                                description: This pod should be co-located (affinity)
                                  or not co-located (anti-affinity) with the pods
                                  matching the labelSelector in the specified namespaces,
                                  where co-located is defined as running on a node
                                  whose value of the label with key topologyKey matches
                                  that of any node on which any of the selected pods
                                  is running. Empty topologyKey is not allowed.
                                type: string
                            required:
                            - topologyKey
                            type: object
                          type: array
                      type: object
                    podAntiAffinity:
                      description: PodAntiAffinity is a group of inter pod anti affinity
                        scheduling rules
                      properties:
                        preferredDuringSchedulingIgnoredDuringExecution:
                          description: The scheduler will prefer to schedule pods
                            to nodes that satisfy the anti-affinity expressions specified
                            by this field, but it may choose a node that violates
                            one or more of the expressions. The node that is most
                            preferred is the one with the greatest sum of weights,
                            i.e. for each node that meets all of the scheduling requirements
                            (resource request, requiredDuringScheduling anti-affinity
                            expressions, etc.), compute a sum by iterating through
                            the elements of this field and adding "weight" to the
                            sum if the node has pods which matches the corresponding
                            podAffinityTerm; the node(s) with the highest sum are
                            the most preferred.
                          items:
                            description: The weights of all of the matched WeightedPodAffinityTerm
                              fields are added per-node to find the most preferred
                              node(s)
                            properties:
                              podAffinityTerm:
                                description: Required. A pod affinity term, associated
                                  with the corresponding weight.
                                properties:
                                  labelSelector:
                                    description: A label query over a set of resources,
                                      in this case pods.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: A label selector requirement
                                            is a selector that contains values, a
                                            key, and an operator that relates the
                                            key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: operator represents a key's
                                                relationship to a set of values. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: matchLabels is a map of {key,value}
                                          pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions,
                                          whose key field is "key", the operator is
                                          "In", and the values array contains only
                                          "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  namespaceSelector:
                                    description: A label query over the set of namespaces
                                      that the term applies to. The term is applied
                                      to the union of the namespaces selected by this
                                      field and the ones listed in the namespaces
                                      field. null selector and null or empty namespaces
                                      list means "this pod's namespace". An empty
                                      selector ({}) matches all namespaces.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: A label selector requirement
                                            is a selector that contains values, a
                                            key, and an operator that relates the
                                            key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: operator represents a key's
                                                relationship to a set of values. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: matchLabels is a map of {key,value}
                                          pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions,
                                          whose key field is "key", the operator is
                                          "In", and the values array contains only
                                          "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  namespaces:
                                    description: namespaces specifies a static list
                                      of namespace names that the term applies to.
                                      The term is applied to the union of the namespaces
                                      listed in this field and the ones selected by
                                      namespaceSelector. null or empty namespaces
                                      list and null namespaceSelector means "this
                                      pod's namespace".
                                    items:
                                      type: string
                                    type: array
                                  topologyKey:
                                    description: This pod should be co-located (affinity)
                                      or not co-located (anti-affinity) with the pods
                                      matching the labelSelector in the specified
                                      namespaces, where co-located is defined as running
                                      on a node whose value of the label with key
                                      topologyKey matches that of any node on which
                                      any of the selected pods is running. Empty topologyKey
                                      is not allowed.
                                    type: string
                                required:
                                - topologyKey
                                type: object
                              weight:
                                description: weight associated with matching the corresponding
                                  podAffinityTerm, in the range 1-100.
                                format: int32
                                type: integer
                            required:
                            - podAffinityTerm
                            - weight
                            type: object
                          type: array
                        requiredDuringSchedulingIgnoredDuringExecution:
                          description: If the anti-affinity requirements specified
                            by this field are not met at scheduling time, the pod
                            will not be scheduled onto the node. If the anti-affinity
                            requirements specified by this field cease to be met at
                            some point during pod execution (e.g. due to a pod label
                            update), the system may or may not try to eventually evict
                            the pod from its node. When there are multiple elements,
                            the lists of nodes corresponding to each podAffinityTerm
                            are intersected, i.e. all terms must be satisfied.
                          items:
                            description: Defines a set of pods (namely those matching
                              the labelSelector relative to the given namespace(s))
                              that this pod should be co-located (affinity) or not
                              co-located (anti-affinity) with, where co-located is
                              defined as running on a node whose value of the label
                              with key <topologyKey> matches that of any node on which
                              a pod of the set of pods is running
                            properties:
                              labelSelector:
                                description: A label query over a set of resources,
                                  in this case pods.
                                properties:
                                  matchExpressions:
                                    description: matchExpressions is a list of label
                                      selector requirements. The requirements are
                                      ANDed.
                                    items:
                                      description: A label selector requirement is
                                        a selector that contains values, a key, and
                                        an operator that relates the key and values.
                                      properties:
                                        key:
                                          description: key is the label key that the
                                            selector applies to.
                                          type: string
                                        operator:
                                          description: operator represents a key's
                                            relationship to a set of values. Valid
                                            operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        values:
                                          description: values is an array of string
                                            values. If the operator is In or NotIn,
                                            the values array must be non-empty. If
                                            the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array
                                            is replaced during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                  matchLabels:
                                    additionalProperties:
                                      type: string
                                    description: matchLabels is a map of {key,value}
                                      pairs. A single {key,value} in the matchLabels
                                      map is equivalent to an element of matchExpressions,
                                      whose key field is "key", the operator is "In",
                                      and the values array contains only "value".
                                      The requirements are ANDed.
                                    type: object
                                type: object
                                x-kubernetes-map-type: atomic
                              namespaceSelector:
                                description: A label query over the set of namespaces
                                  that the term applies to. The term is applied to
                                  the union of the namespaces selected by this field
                                  and the ones listed in the namespaces field. null
                                  selector and null or empty namespaces list means
                                  "this pod's namespace". An empty selector ({}) matches
                                  all namespaces.
                                properties:
                                  matchExpressions:
                                    description: matchExpressions is a list of label
                                      selector requirements. The requirements are
                                      ANDed.
                                    items:
                                      description: A label selector requirement is
                                        a selector that contains values, a key, and
                                        an operator that relates the key and values.
                                      properties:
                                        key:
                                          description: key is the label key that the
                                            selector applies to.
                                          type: string
                                        operator:
                                          description: operator represents a key's
                                            relationship to a set of values. Valid
                                            operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        values:
                                          description: values is an array of string
                                            values. If the operator is In or NotIn,
                                            the values array must be non-empty. If
                                            the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array
                                            is replaced during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                  matchLabels:
                                    additionalProperties:
                                      type: string
                                    description: matchLabels is a map of {key,value}
                                      pairs. A single {key,value} in the matchLabels
                                      map is equivalent to an element of matchExpressions,
                                      whose key field is "key", the operator is "In",
                                      and the values array contains only "value".
                                      The requirements are ANDed.
                                    type: object
                                type: object
                                x-kubernetes-map-type: atomic
                              namespaces:
                                description: namespaces specifies a static list of
                                  namespace names that the term applies to. The term
                                  is applied to the union of the namespaces listed
                                  in this field and the ones selected by namespaceSelector.
                                  null or empty namespaces list and null namespaceSelector
                                  means "this pod's namespace".
                                items:
                                  type: string
                                type: array
                              topologyKey:
                                description: This pod should be co-located (affinity)
                                  or not co-located (anti-affinity) with the pods
                                  matching the labelSelector in the specified namespaces,
                                  where co-located is defined as running on a node
                                  whose value of the label with key topologyKey matches
                                  that of any node on which any of the selected pods
                                  is running. Empty topologyKey is not allowed.
                                type: string
                            required:
                            - topologyKey
                            type: object
                          type: array
                      type: object
                    tolerations:
                      description: The pod this Toleration is attached to tolerates
                        any taint that matches the triple <key,value,effect> using
                        the matching operator <operator>
                      items:
                        description: The pod this Toleration is attached to tolerates
                          any taint that matches the triple <key,value,effect> using
                          the matching operator <operator>.
                        properties:
                          effect:
                            description: Effect indicates the taint effect to match.
                              Empty means match all taint effects. When specified,
                              allowed values are NoSchedule, PreferNoSchedule and
                              NoExecute.
                            type: string
                          key:
                            description: Key is the taint key that the toleration
                              applies to. Empty means match all taint keys. If the
                              key is empty, operator must be Exists; this combination
                              means to match all values and all keys.
                            type: string
                          operator:
                            description: Operator represents a key's relationship
                              to the value. Valid operators are Exists and Equal.
                              Defaults to Equal. Exists is equivalent to wildcard
                              for value, so that a pod can tolerate all taints of
                              a particular category.
                            type: string
                          tolerationSeconds:
                            description: TolerationSeconds represents the period of
                              time the toleration (which must be of effect NoExecute,
                              otherwise this field is ignored) tolerates the taint.
                              By default, it is not set, which means tolerate the
                              taint forever (do not evict). Zero and negative values
                              will be treated as 0 (evict immediately) by the system.
                            format: int64
                            type: integer
                          value:
                            description: Value is the taint value the toleration matches
                              to. If the operator is Exists, the value should be empty,
                              otherwise just a regular string.
                            type: string
                        type: object
                      type: array
                    topologySpreadConstraints:
                      description: TopologySpreadConstraint specifies how to spread
                        matching pods among the given topology
                      items:
                        description: TopologySpreadConstraint specifies how to spread
                          matching pods among the given topology.
                        properties:
                          labelSelector:
                            description: LabelSelector is used to find matching pods.
                              Pods that match this label selector are counted to determine
                              the number of pods in their corresponding topology domain.
                            properties:
                              matchExpressions:
                                description: matchExpressions is a list of label selector
                                  requirements. The requirements are ANDed.
                                items:
                                  description: A label selector requirement is a selector
                                    that contains values, a key, and an operator that
                                    relates the key and values.
                                  properties:
                                    key:
                                      description: key is the label key that the selector
                                        applies to.
                                      type: string
                                    operator:
                                      description: operator represents a key's relationship
                                        to a set of values. Valid operators are In,
                                        NotIn, Exists and DoesNotExist.
                                      type: string
                                    values:
                                      description: values is an array of string values.
                                        If the operator is In or NotIn, the values
                                        array must be non-empty. If the operator is
                                        Exists or DoesNotExist, the values array must
                                        be empty. This array is replaced during a
                                        strategic merge patch.
                                      items:
                                        type: string
                                      type: array
                                  required:
                                  - key
                                  - operator
                                  type: object
                                type: array
                              matchLabels:
                                additionalProperties:
                                  type: string
                                description: matchLabels is a map of {key,value} pairs.
                                  A single {key,value} in the matchLabels map is equivalent
                                  to an element of matchExpressions, whose key field
                                  is "key", the operator is "In", and the values array
                                  contains only "value". The requirements are ANDed.
                                type: object
                            type: object
                            x-kubernetes-map-type: atomic
                          matchLabelKeys:
                            description: "MatchLabelKeys is a set of pod label keys
                              to select the pods over which spreading will be calculated.
                              The keys are used to lookup values from the incoming
                              pod labels, those key-value labels are ANDed with labelSelector
                              to select the group of existing pods over which spreading
                              will be calculated for the incoming pod. The same key
                              is forbidden to exist in both MatchLabelKeys and LabelSelector.
                              MatchLabelKeys cannot be set when LabelSelector isn't
                              set. Keys that don't exist in the incoming pod labels
                              will be ignored. A null or empty list means only match
                              against labelSelector. \n This is a beta field and requires
                              the MatchLabelKeysInPodTopologySpread feature gate to
                              be enabled (enabled by default)."
                            items:
                              type: string
                            type: array
                            x-kubernetes-list-type: atomic
                          maxSkew:
                            description: 'MaxSkew describes the degree to which pods
                              may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`,
                              it is the maximum permitted difference between the number
                              of matching pods in the target topology and the global
                              minimum. The global minimum is the minimum number of
                              matching pods in an eligible domain or zero if the number
                              of eligible domains is less than MinDomains. For example,
                              in a 3-zone cluster, MaxSkew is set to 1, and pods with
                              the same labelSelector spread as 2/2/1: In this case,
                              the global minimum is 1. | zone1 | zone2 | zone3 | |  P
                              P  |  P P  |   P   | - if MaxSkew is 1, incoming pod
                              can only be scheduled to zone3 to become 2/2/2; scheduling
                              it onto zone1(zone2) would make the ActualSkew(3-1)
                              on zone1(zone2) violate MaxSkew(1). - if MaxSkew is
                              2, incoming pod can be scheduled onto any zone. When
                              `whenUnsatisfiable=ScheduleAnyway`, it is used to give
                              higher precedence to topologies that satisfy it. It''s
                              a required field. Default value is 1 and 0 is not allowed.'
                            format: int32
                            type: integer
                          minDomains:
                            description: "MinDomains indicates a minimum number of
                              eligible domains. When the number of eligible domains
                              with matching topology keys is less than minDomains,
                              Pod Topology Spread treats \"global minimum\" as 0,
                              and then the calculation of Skew is performed. And when
                              the number of eligible domains with matching topology
                              keys equals or greater than minDomains, this value has
                              no effect on scheduling. As a result, when the number
                              of eligible domains is less than minDomains, scheduler
                              won't schedule more than maxSkew Pods to those domains.
                              If value is nil, the constraint behaves as if MinDomains
                              is equal to 1. Valid values are integers greater than
                              0. When value is not nil, WhenUnsatisfiable must be
                              DoNotSchedule. \n For example, in a 3-zone cluster,
                              MaxSkew is set to 2, MinDomains is set to 5 and pods
                              with the same labelSelector spread as 2/2/2: | zone1
                              | zone2 | zone3 | |  P P  |  P P  |  P P  | The number
                              of domains is less than 5(MinDomains), so \"global minimum\"
                              is treated as 0. In this situation, new pod with the
                              same labelSelector cannot be scheduled, because computed
                              skew will be 3(3 - 0) if new Pod is scheduled to any
                              of the three zones, it will violate MaxSkew. \n This
                              is a beta field and requires the MinDomainsInPodTopologySpread
                              feature gate to be enabled (enabled by default)."
                            format: int32
                            type: integer
                          nodeAffinityPolicy:
                            description: "NodeAffinityPolicy indicates how we will
                              treat Pod's nodeAffinity/nodeSelector when calculating
                              pod topology spread skew. Options are: - Honor: only
                              nodes matching nodeAffinity/nodeSelector are included
                              in the calculations. - Ignore: nodeAffinity/nodeSelector
                              are ignored. All nodes are included in the calculations.
                              \n If this value is nil, the behavior is equivalent
                              to the Honor policy. This is a beta-level feature default
                              enabled by the NodeInclusionPolicyInPodTopologySpread
                              feature flag."
                            type: string
                          nodeTaintsPolicy:
                            description: "NodeTaintsPolicy indicates how we will treat
                              node taints when calculating pod topology spread skew.
                              Options are: - Honor: nodes without taints, along with
                              tainted nodes for which the incoming pod has a toleration,
                              are included. - Ignore: node taints are ignored. All
                              nodes are included. \n If this value is nil, the behavior
                              is equivalent to the Ignore policy. This is a beta-level
                              feature default enabled by the NodeInclusionPolicyInPodTopologySpread
                              feature flag."
                            type: string
                          topologyKey:
                            description: TopologyKey is the key of node labels. Nodes
                              that have a label with this key and identical values
                              are considered to be in the same topology. We consider
                              each <key, value> as a "bucket", and try to put balanced
                              number of pods into each bucket. We define a domain
                              as a particular instance of a topology. Also, we define
                              an eligible domain as a domain whose nodes meet the
                              requirements of nodeAffinityPolicy and nodeTaintsPolicy.
                              e.g. If TopologyKey is "kubernetes.io/hostname", each
                              Node is a domain of that topology. And, if TopologyKey
                              is "topology.kubernetes.io/zone", each zone is a domain
                              of that topology. It's a required field.
                            type: string
                          whenUnsatisfiable:
                            description: 'WhenUnsatisfiable indicates how to deal
                              with a pod if it doesn''t satisfy the spread constraint.
                              - DoNotSchedule (default) tells the scheduler not to
                              schedule it. - ScheduleAnyway tells the scheduler to
                              schedule the pod in any location, but giving higher
                              precedence to topologies that would help reduce the
                              skew. A constraint is considered "Unsatisfiable" for
                              an incoming pod if and only if every possible node assignment
                              for that pod would violate "MaxSkew" on some topology.
                              For example, in a 3-zone cluster, MaxSkew is set to
                              1, and pods with the same labelSelector spread as 3/1/1:
                              | zone1 | zone2 | zone3 | | P P P |   P   |   P   |
                              If WhenUnsatisfiable is set to DoNotSchedule, incoming
                              pod can only be scheduled to zone2(zone3) to become
                              3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies
                              MaxSkew(1). In other words, the cluster can still be
                              imbalanced, but scheduler won''t make it *more* imbalanced.
                              It''s a required field.'
                            type: string
                        required:
                        - maxSkew
                        - topologyKey
                        - whenUnsatisfiable
                        type: object
                      type: array
                  type: object
                description: The placement-related configuration to pass to kubernetes
                  (affinity, node selector, tolerations).
                nullable: true
                type: object
                x-kubernetes-preserve-unknown-fields: true
              priorityClassNames:
                additionalProperties:
                  type: string
                description: PriorityClassNames sets priority classes on components
                nullable: true
                type: object
                x-kubernetes-preserve-unknown-fields: true
              removeOSDsIfOutAndSafeToRemove:
                description: Remove the OSD that is out and safe to remove only if
                  this option is true
                type: boolean
              resources:
                additionalProperties:
                  description: ResourceRequirements describes the compute resource
                    requirements.
                  properties:
                    claims:
                      description: "Claims lists the names of resources, defined in
                        spec.resourceClaims, that are used by this container. \n This
                        is an alpha field and requires enabling the DynamicResourceAllocation
                        feature gate. \n This field is immutable. It can only be set
                        for containers."
                      items:
                        description: ResourceClaim references one entry in PodSpec.ResourceClaims.
                        properties:
                          name:
                            description: Name must match the name of one entry in
                              pod.spec.resourceClaims of the Pod where this field
                              is used. It makes that resource available inside a container.
                            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
                      description: 'Limits describes the maximum amount of compute
                        resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                      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
                      description: 'Requests describes the minimum amount of compute
                        resources required. If Requests is omitted for a container,
                        it defaults to Limits if that is explicitly specified, otherwise
                        to an implementation-defined value. Requests cannot exceed
                        Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                      type: object
                  type: object
                description: Resources set resource requests and limits
                nullable: true
                type: object
                x-kubernetes-preserve-unknown-fields: true
              security:
                description: Security represents security settings
                nullable: true
                properties:
                  keyRotation:
                    description: KeyRotation defines options for Key Rotation.
                    nullable: true
                    properties:
                      enabled:
                        default: false
                        description: Enabled represents whether the key rotation is
                          enabled.
                        type: boolean
                      schedule:
                        description: Schedule represents the cron schedule for key
                          rotation.
                        type: string
                    type: object
                  kms:
                    description: KeyManagementService is the main Key Management option
                    nullable: true
                    properties:
                      connectionDetails:
                        additionalProperties:
                          type: string
                        description: ConnectionDetails contains the KMS connection
                          details (address, port etc)
                        nullable: true
                        type: object
                        x-kubernetes-preserve-unknown-fields: true
                      tokenSecretName:
                        description: TokenSecretName is the kubernetes secret containing
                          the KMS token
                        type: string
                    type: object
                type: object
              skipUpgradeChecks:
                description: SkipUpgradeChecks defines if an upgrade should be forced
                  even if one of the check fails
                type: boolean
              storage:
                description: A spec for available storage in the cluster and how it
                  should be used
                nullable: true
                properties:
                  config:
                    additionalProperties:
                      type: string
                    nullable: true
                    type: object
                    x-kubernetes-preserve-unknown-fields: true
                  deviceFilter:
                    description: A regular expression to allow more fine-grained selection
                      of devices on nodes across the cluster
                    type: string
                  devicePathFilter:
                    description: A regular expression to allow more fine-grained selection
                      of devices with path names
                    type: string
                  devices:
                    description: List of devices to use as storage devices
                    items:
                      description: Device represents a disk to use in the cluster
                      properties:
                        config:
                          additionalProperties:
                            type: string
                          nullable: true
                          type: object
                          x-kubernetes-preserve-unknown-fields: true
                        fullpath:
                          type: string
                        name:
                          type: string
                      type: object
                    nullable: true
                    type: array
                    x-kubernetes-preserve-unknown-fields: true
                  nodes:
                    items:
                      description: Node is a storage nodes
                      properties:
                        config:
                          additionalProperties:
                            type: string
                          nullable: true
                          type: object
                          x-kubernetes-preserve-unknown-fields: true
                        deviceFilter:
                          description: A regular expression to allow more fine-grained
                            selection of devices on nodes across the cluster
                          type: string
                        devicePathFilter:
                          description: A regular expression to allow more fine-grained
                            selection of devices with path names
                          type: string
                        devices:
                          description: List of devices to use as storage devices
                          items:
                            description: Device represents a disk to use in the cluster
                            properties:
                              config:
                                additionalProperties:
                                  type: string
                                nullable: true
                                type: object
                                x-kubernetes-preserve-unknown-fields: true
                              fullpath:
                                type: string
                              name:
                                type: string
                            type: object
                          nullable: true
                          type: array
                          x-kubernetes-preserve-unknown-fields: true
                        name:
                          type: string
                        resources:
                          description: ResourceRequirements describes the compute
                            resource requirements.
                          nullable: true
                          properties:
                            claims:
                              description: "Claims lists the names of resources, defined
                                in spec.resourceClaims, that are used by this container.
                                \n This is an alpha field and requires enabling the
                                DynamicResourceAllocation feature gate. \n This field
                                is immutable. It can only be set for containers."
                              items:
                                description: ResourceClaim references one entry in
                                  PodSpec.ResourceClaims.
                                properties:
                                  name:
                                    description: Name must match the name of one entry
                                      in pod.spec.resourceClaims of the Pod where
                                      this field is used. It makes that resource available
                                      inside a container.
                                    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
                              description: 'Limits describes the maximum amount of
                                compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                              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
                              description: 'Requests describes the minimum amount
                                of compute resources required. If Requests is omitted
                                for a container, it defaults to Limits if that is
                                explicitly specified, otherwise to an implementation-defined
                                value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                              type: object
                          type: object
                          x-kubernetes-preserve-unknown-fields: true
                        useAllDevices:
                          description: Whether to consume all the storage devices
                            found on a machine
                          type: boolean
                        volumeClaimTemplates:
                          description: PersistentVolumeClaims to use as storage
                          items:
                            description: PersistentVolumeClaim is a user's request
                              for and claim to a persistent volume
                            properties:
                              apiVersion:
                                description: 'APIVersion defines the versioned schema
                                  of this representation of an object. Servers should
                                  convert recognized schemas to the latest internal
                                  value, and may reject unrecognized values. More
                                  info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
                                type: string
                              kind:
                                description: 'Kind is a string value representing
                                  the REST resource this object represents. Servers
                                  may infer this from the endpoint the client submits
                                  requests to. Cannot be updated. In CamelCase. More
                                  info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                                type: string
                              metadata:
                                description: 'Standard object''s metadata. More info:
                                  https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata'
                                properties:
                                  annotations:
                                    additionalProperties:
                                      type: string
                                    type: object
                                  finalizers:
                                    items:
                                      type: string
                                    type: array
                                  labels:
                                    additionalProperties:
                                      type: string
                                    type: object
                                  name:
                                    type: string
                                  namespace:
                                    type: string
                                type: object
                              spec:
                                description: 'spec defines the desired characteristics
                                  of a volume requested by a pod author. More info:
                                  https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims'
                                properties:
                                  accessModes:
                                    description: 'accessModes contains the desired
                                      access modes the volume should have. More info:
                                      https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1'
                                    items:
                                      type: string
                                    type: array
                                  dataSource:
                                    description: 'dataSource field can be used to
                                      specify either: * An existing VolumeSnapshot
                                      object (snapshot.storage.k8s.io/VolumeSnapshot)
                                      * An existing PVC (PersistentVolumeClaim) If
                                      the provisioner or an external controller can
                                      support the specified data source, it will create
                                      a new volume based on the contents of the specified
                                      data source. When the AnyVolumeDataSource feature
                                      gate is enabled, dataSource contents will be
                                      copied to dataSourceRef, and dataSourceRef contents
                                      will be copied to dataSource when dataSourceRef.namespace
                                      is not specified. If the namespace is specified,
                                      then dataSourceRef will not be copied to dataSource.'
                                    properties:
                                      apiGroup:
                                        description: APIGroup is the group for the
                                          resource being referenced. If APIGroup is
                                          not specified, the specified Kind must be
                                          in the core API group. For any other third-party
                                          types, APIGroup is required.
                                        type: string
                                      kind:
                                        description: Kind is the type of resource
                                          being referenced
                                        type: string
                                      name:
                                        description: Name is the name of resource
                                          being referenced
                                        type: string
                                    required:
                                    - kind
                                    - name
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  dataSourceRef:
                                    description: 'dataSourceRef specifies the object
                                      from which to populate the volume with data,
                                      if a non-empty volume is desired. This may be
                                      any object from a non-empty API group (non core
                                      object) or a PersistentVolumeClaim object. When
                                      this field is specified, volume binding will
                                      only succeed if the type of the specified object
                                      matches some installed volume populator or dynamic
                                      provisioner. This field will replace the functionality
                                      of the dataSource field and as such if both
                                      fields are non-empty, they must have the same
                                      value. For backwards compatibility, when namespace
                                      isn''t specified in dataSourceRef, both fields
                                      (dataSource and dataSourceRef) will be set to
                                      the same value automatically if one of them
                                      is empty and the other is non-empty. When namespace
                                      is specified in dataSourceRef, dataSource isn''t
                                      set to the same value and must be empty. There
                                      are three important differences between dataSource
                                      and dataSourceRef: * While dataSource only allows
                                      two specific types of objects, dataSourceRef
                                      allows any non-core object, as well as PersistentVolumeClaim
                                      objects. * While dataSource ignores disallowed
                                      values (dropping them), dataSourceRef preserves
                                      all values, and generates an error if a disallowed
                                      value is specified. * While dataSource only
                                      allows local objects, dataSourceRef allows objects
                                      in any namespaces. (Beta) Using this field requires
                                      the AnyVolumeDataSource feature gate to be enabled.
                                      (Alpha) Using the namespace field of dataSourceRef
                                      requires the CrossNamespaceVolumeDataSource
                                      feature gate to be enabled.'
                                    properties:
                                      apiGroup:
                                        description: APIGroup is the group for the
                                          resource being referenced. If APIGroup is
                                          not specified, the specified Kind must be
                                          in the core API group. For any other third-party
                                          types, APIGroup is required.
                                        type: string
                                      kind:
                                        description: Kind is the type of resource
                                          being referenced
                                        type: string
                                      name:
                                        description: Name is the name of resource
                                          being referenced
                                        type: string
                                      namespace:
                                        description: Namespace is the namespace of
                                          resource being referenced Note that when
                                          a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant
                                          object is required in the referent namespace
                                          to allow that namespace's owner to accept
                                          the reference. See the ReferenceGrant documentation
                                          for details. (Alpha) This field requires
                                          the CrossNamespaceVolumeDataSource feature
                                          gate to be enabled.
                                        type: string
                                    required:
                                    - kind
                                    - name
                                    type: object
                                  resources:
                                    description: 'resources represents the minimum
                                      resources the volume should have. If RecoverVolumeExpansionFailure
                                      feature is enabled users are allowed to specify
                                      resource requirements that are lower than previous
                                      value but must still be higher than capacity
                                      recorded in the status field of the claim. More
                                      info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources'
                                    properties:
                                      claims:
                                        description: "Claims lists the names of resources,
                                          defined in spec.resourceClaims, that are
                                          used by this container. \n This is an alpha
                                          field and requires enabling the DynamicResourceAllocation
                                          feature gate. \n This field is immutable.
                                          It can only be set for containers."
                                        items:
                                          description: ResourceClaim references one
                                            entry in PodSpec.ResourceClaims.
                                          properties:
                                            name:
                                              description: Name must match the name
                                                of one entry in pod.spec.resourceClaims
                                                of the Pod where this field is used.
                                                It makes that resource available inside
                                                a container.
                                              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
                                        description: 'Limits describes the maximum
                                          amount of compute resources allowed. More
                                          info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                                        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
                                        description: 'Requests describes the minimum
                                          amount of compute resources required. If
                                          Requests is omitted for a container, it
                                          defaults to Limits if that is explicitly
                                          specified, otherwise to an implementation-defined
                                          value. Requests cannot exceed Limits. More
                                          info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                                        type: object
                                    type: object
                                  selector:
                                    description: selector is a label query over volumes
                                      to consider for binding.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: A label selector requirement
                                            is a selector that contains values, a
                                            key, and an operator that relates the
                                            key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: operator represents a key's
                                                relationship to a set of values. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: matchLabels is a map of {key,value}
                                          pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions,
                                          whose key field is "key", the operator is
                                          "In", and the values array contains only
                                          "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  storageClassName:
                                    description: 'storageClassName is the name of
                                      the StorageClass required by the claim. More
                                      info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1'
                                    type: string
                                  volumeMode:
                                    description: volumeMode defines what type of volume
                                      is required by the claim. Value of Filesystem
                                      is implied when not included in claim spec.
                                    type: string
                                  volumeName:
                                    description: volumeName is the binding reference
                                      to the PersistentVolume backing this claim.
                                    type: string
                                type: object
                              status:
                                description: 'status represents the current information/status
                                  of a persistent volume claim. Read-only. More info:
                                  https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims'
                                properties:
                                  accessModes:
                                    description: 'accessModes contains the actual
                                      access modes the volume backing the PVC has.
                                      More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1'
                                    items:
                                      type: string
                                    type: array
                                  allocatedResourceStatuses:
                                    additionalProperties:
                                      description: When a controller receives persistentvolume
                                        claim update with ClaimResourceStatus for
                                        a resource that it does not recognizes, then
                                        it should ignore that update and let other
                                        controllers handle it.
                                      type: string
                                    description: "allocatedResourceStatuses stores
                                      status of resource being resized for the given
                                      PVC. Key names follow standard Kubernetes label
                                      syntax. Valid values are either: * Un-prefixed
                                      keys: - storage - the capacity of the volume.
                                      * Custom resources must use implementation-defined
                                      prefixed names such as \"example.com/my-custom-resource\"
                                      Apart from above values - keys that are unprefixed
                                      or have kubernetes.io prefix are considered
                                      reserved and hence may not be used. \n ClaimResourceStatus
                                      can be in any of following states: - ControllerResizeInProgress:
                                      State set when resize controller starts resizing
                                      the volume in control-plane. - ControllerResizeFailed:
                                      State set when resize has failed in resize controller
                                      with a terminal error. - NodeResizePending:
                                      State set when resize controller has finished
                                      resizing the volume but further resizing of
                                      volume is needed on the node. - NodeResizeInProgress:
                                      State set when kubelet starts resizing the volume.
                                      - NodeResizeFailed: State set when resizing
                                      has failed in kubelet with a terminal error.
                                      Transient errors don't set NodeResizeFailed.
                                      For example: if expanding a PVC for more capacity
                                      - this field can be one of the following states:
                                      - pvc.status.allocatedResourceStatus['storage']
                                      = \"ControllerResizeInProgress\" - pvc.status.allocatedResourceStatus['storage']
                                      = \"ControllerResizeFailed\" - pvc.status.allocatedResourceStatus['storage']
                                      = \"NodeResizePending\" - pvc.status.allocatedResourceStatus['storage']
                                      = \"NodeResizeInProgress\" - pvc.status.allocatedResourceStatus['storage']
                                      = \"NodeResizeFailed\" When this field is not
                                      set, it means that no resize operation is in
                                      progress for the given PVC. \n A controller
                                      that receives PVC update with previously unknown
                                      resourceName or ClaimResourceStatus should ignore
                                      the update for the purpose it was designed.
                                      For example - a controller that only is responsible
                                      for resizing capacity of the volume, should
                                      ignore PVC updates that change other valid resources
                                      associated with PVC. \n This is an alpha field
                                      and requires enabling RecoverVolumeExpansionFailure
                                      feature."
                                    type: object
                                    x-kubernetes-map-type: granular
                                  allocatedResources:
                                    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
                                    description: "allocatedResources tracks the resources
                                      allocated to a PVC including its capacity. Key
                                      names follow standard Kubernetes label syntax.
                                      Valid values are either: * Un-prefixed keys:
                                      - storage - the capacity of the volume. * Custom
                                      resources must use implementation-defined prefixed
                                      names such as \"example.com/my-custom-resource\"
                                      Apart from above values - keys that are unprefixed
                                      or have kubernetes.io prefix are considered
                                      reserved and hence may not be used. \n Capacity
                                      reported here may be larger than the actual
                                      capacity when a volume expansion operation is
                                      requested. For storage quota, the larger value
                                      from allocatedResources and PVC.spec.resources
                                      is used. If allocatedResources is not set, PVC.spec.resources
                                      alone is used for quota calculation. If a volume
                                      expansion capacity request is lowered, allocatedResources
                                      is only lowered if there are no expansion operations
                                      in progress and if the actual volume capacity
                                      is equal or lower than the requested capacity.
                                      \n A controller that receives PVC update with
                                      previously unknown resourceName should ignore
                                      the update for the purpose it was designed.
                                      For example - a controller that only is responsible
                                      for resizing capacity of the volume, should
                                      ignore PVC updates that change other valid resources
                                      associated with PVC. \n This is an alpha field
                                      and requires enabling RecoverVolumeExpansionFailure
                                      feature."
                                    type: object
                                  capacity:
                                    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
                                    description: capacity represents the actual resources
                                      of the underlying volume.
                                    type: object
                                  conditions:
                                    description: conditions is the current Condition
                                      of persistent volume claim. If underlying persistent
                                      volume is being resized then the Condition will
                                      be set to 'ResizeStarted'.
                                    items:
                                      description: PersistentVolumeClaimCondition
                                        contains details about state of pvc
                                      properties:
                                        lastProbeTime:
                                          description: lastProbeTime is the time we
                                            probed the condition.
                                          format: date-time
                                          type: string
                                        lastTransitionTime:
                                          description: lastTransitionTime is the time
                                            the condition transitioned from one status
                                            to another.
                                          format: date-time
                                          type: string
                                        message:
                                          description: message is the human-readable
                                            message indicating details about last
                                            transition.
                                          type: string
                                        reason:
                                          description: reason is a unique, this should
                                            be a short, machine understandable string
                                            that gives the reason for condition's
                                            last transition. If it reports "ResizeStarted"
                                            that means the underlying persistent volume
                                            is being resized.
                                          type: string
                                        status:
                                          type: string
                                        type:
                                          description: PersistentVolumeClaimConditionType
                                            is a valid value of PersistentVolumeClaimCondition.Type
                                          type: string
                                      required:
                                      - status
                                      - type
                                      type: object
                                    type: array
                                  phase:
                                    description: phase represents the current phase
                                      of PersistentVolumeClaim.
                                    type: string
                                type: object
                            type: object
                          type: array
                      type: object
                    nullable: true
                    type: array
                  onlyApplyOSDPlacement:
                    type: boolean
                  storageClassDeviceSets:
                    items:
                      description: StorageClassDeviceSet is a storage class device
                        set
                      properties:
                        config:
                          additionalProperties:
                            type: string
                          description: Provider-specific device configuration
                          nullable: true
                          type: object
                          x-kubernetes-preserve-unknown-fields: true
                        count:
                          description: Count is the number of devices in this set
                          minimum: 1
                          type: integer
                        encrypted:
                          description: Whether to encrypt the deviceSet
                          type: boolean
                        name:
                          description: Name is a unique identifier for the set
                          type: string
                        placement:
                          description: Placement is the placement for an object
                          nullable: true
                          properties:
                            nodeAffinity:
                              description: NodeAffinity is a group of node affinity
                                scheduling rules
                              properties:
                                preferredDuringSchedulingIgnoredDuringExecution:
                                  description: The scheduler will prefer to schedule
                                    pods to nodes that satisfy the affinity expressions
                                    specified by this field, but it may choose a node
                                    that violates one or more of the expressions.
                                    The node that is most preferred is the one with
                                    the greatest sum of weights, i.e. for each node
                                    that meets all of the scheduling requirements
                                    (resource request, requiredDuringScheduling affinity
                                    expressions, etc.), compute a sum by iterating
                                    through the elements of this field and adding
                                    "weight" to the sum if the node matches the corresponding
                                    matchExpressions; the node(s) with the highest
                                    sum are the most preferred.
                                  items:
                                    description: An empty preferred scheduling term
                                      matches all objects with implicit weight 0 (i.e.
                                      it's a no-op). A null preferred scheduling term
                                      matches no objects (i.e. is also a no-op).
                                    properties:
                                      preference:
                                        description: A node selector term, associated
                                          with the corresponding weight.
                                        properties:
                                          matchExpressions:
                                            description: A list of node selector requirements
                                              by node's labels.
                                            items:
                                              description: A node selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: The label key that
                                                    the selector applies to.
                                                  type: string
                                                operator:
                                                  description: Represents a key's
                                                    relationship to a set of values.
                                                    Valid operators are In, NotIn,
                                                    Exists, DoesNotExist. Gt, and
                                                    Lt.
                                                  type: string
                                                values:
                                                  description: An array of string
                                                    values. If the operator is In
                                                    or NotIn, the values array must
                                                    be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. If
                                                    the operator is Gt or Lt, the
                                                    values array must have a single
                                                    element, which will be interpreted
                                                    as an integer. This array is replaced
                                                    during a strategic merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                          matchFields:
                                            description: A list of node selector requirements
                                              by node's fields.
                                            items:
                                              description: A node selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: The label key that
                                                    the selector applies to.
                                                  type: string
                                                operator:
                                                  description: Represents a key's
                                                    relationship to a set of values.
                                                    Valid operators are In, NotIn,
                                                    Exists, DoesNotExist. Gt, and
                                                    Lt.
                                                  type: string
                                                values:
                                                  description: An array of string
                                                    values. If the operator is In
                                                    or NotIn, the values array must
                                                    be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. If
                                                    the operator is Gt or Lt, the
                                                    values array must have a single
                                                    element, which will be interpreted
                                                    as an integer. This array is replaced
                                                    during a strategic merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      weight:
                                        description: Weight associated with matching
                                          the corresponding nodeSelectorTerm, in the
                                          range 1-100.
                                        format: int32
                                        type: integer
                                    required:
                                    - preference
                                    - weight
                                    type: object
                                  type: array
                                requiredDuringSchedulingIgnoredDuringExecution:
                                  description: If the affinity requirements specified
                                    by this field are not met at scheduling time,
                                    the pod will not be scheduled onto the node. If
                                    the affinity requirements specified by this field
                                    cease to be met at some point during pod execution
                                    (e.g. due to an update), the system may or may
                                    not try to eventually evict the pod from its node.
                                  properties:
                                    nodeSelectorTerms:
                                      description: Required. A list of node selector
                                        terms. The terms are ORed.
                                      items:
                                        description: A null or empty node selector
                                          term matches no objects. The requirements
                                          of them are ANDed. The TopologySelectorTerm
                                          type implements a subset of the NodeSelectorTerm.
                                        properties:
                                          matchExpressions:
                                            description: A list of node selector requirements
                                              by node's labels.
                                            items:
                                              description: A node selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: The label key that
                                                    the selector applies to.
                                                  type: string
                                                operator:
                                                  description: Represents a key's
                                                    relationship to a set of values.
                                                    Valid operators are In, NotIn,
                                                    Exists, DoesNotExist. Gt, and
                                                    Lt.
                                                  type: string
                                                values:
                                                  description: An array of string
                                                    values. If the operator is In
                                                    or NotIn, the values array must
                                                    be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. If
                                                    the operator is Gt or Lt, the
                                                    values array must have a single
                                                    element, which will be interpreted
                                                    as an integer. This array is replaced
                                                    during a strategic merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                          matchFields:
                                            description: A list of node selector requirements
                                              by node's fields.
                                            items:
                                              description: A node selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: The label key that
                                                    the selector applies to.
                                                  type: string
                                                operator:
                                                  description: Represents a key's
                                                    relationship to a set of values.
                                                    Valid operators are In, NotIn,
                                                    Exists, DoesNotExist. Gt, and
                                                    Lt.
                                                  type: string
                                                values:
                                                  description: An array of string
                                                    values. If the operator is In
                                                    or NotIn, the values array must
                                                    be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. If
                                                    the operator is Gt or Lt, the
                                                    values array must have a single
                                                    element, which will be interpreted
                                                    as an integer. This array is replaced
                                                    during a strategic merge patch.
                                                  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:
                              description: PodAffinity is a group of inter pod affinity
                                scheduling rules
                              properties:
                                preferredDuringSchedulingIgnoredDuringExecution:
                                  description: The scheduler will prefer to schedule
                                    pods to nodes that satisfy the affinity expressions
                                    specified by this field, but it may choose a node
                                    that violates one or more of the expressions.
                                    The node that is most preferred is the one with
                                    the greatest sum of weights, i.e. for each node
                                    that meets all of the scheduling requirements
                                    (resource request, requiredDuringScheduling affinity
                                    expressions, etc.), compute a sum by iterating
                                    through the elements of this field and adding
                                    "weight" to the sum if the node has pods which
                                    matches the corresponding podAffinityTerm; the
                                    node(s) with the highest sum are the most preferred.
                                  items:
                                    description: The weights of all of the matched
                                      WeightedPodAffinityTerm fields are added per-node
                                      to find the most preferred node(s)
                                    properties:
                                      podAffinityTerm:
                                        description: Required. A pod affinity term,
                                          associated with the corresponding weight.
                                        properties:
                                          labelSelector:
                                            description: A label query over a set
                                              of resources, in this case pods.
                                            properties:
                                              matchExpressions:
                                                description: matchExpressions is a
                                                  list of label selector requirements.
                                                  The requirements are ANDed.
                                                items:
                                                  description: A label selector requirement
                                                    is a selector that contains values,
                                                    a key, and an operator that relates
                                                    the key and values.
                                                  properties:
                                                    key:
                                                      description: key is the label
                                                        key that the selector applies
                                                        to.
                                                      type: string
                                                    operator:
                                                      description: operator represents
                                                        a key's relationship to a
                                                        set of values. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                              matchLabels:
                                                additionalProperties:
                                                  type: string
                                                description: matchLabels is a map
                                                  of {key,value} pairs. A single {key,value}
                                                  in the matchLabels map is equivalent
                                                  to an element of matchExpressions,
                                                  whose key field is "key", the operator
                                                  is "In", and the values array contains
                                                  only "value". The requirements are
                                                  ANDed.
                                                type: object
                                            type: object
                                            x-kubernetes-map-type: atomic
                                          namespaceSelector:
                                            description: A label query over the set
                                              of namespaces that the term applies
                                              to. The term is applied to the union
                                              of the namespaces selected by this field
                                              and the ones listed in the namespaces
                                              field. null selector and null or empty
                                              namespaces list means "this pod's namespace".
                                              An empty selector ({}) matches all namespaces.
                                            properties:
                                              matchExpressions:
                                                description: matchExpressions is a
                                                  list of label selector requirements.
                                                  The requirements are ANDed.
                                                items:
                                                  description: A label selector requirement
                                                    is a selector that contains values,
                                                    a key, and an operator that relates
                                                    the key and values.
                                                  properties:
                                                    key:
                                                      description: key is the label
                                                        key that the selector applies
                                                        to.
                                                      type: string
                                                    operator:
                                                      description: operator represents
                                                        a key's relationship to a
                                                        set of values. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                              matchLabels:
                                                additionalProperties:
                                                  type: string
                                                description: matchLabels is a map
                                                  of {key,value} pairs. A single {key,value}
                                                  in the matchLabels map is equivalent
                                                  to an element of matchExpressions,
                                                  whose key field is "key", the operator
                                                  is "In", and the values array contains
                                                  only "value". The requirements are
                                                  ANDed.
                                                type: object
                                            type: object
                                            x-kubernetes-map-type: atomic
                                          namespaces:
                                            description: namespaces specifies a static
                                              list of namespace names that the term
                                              applies to. The term is applied to the
                                              union of the namespaces listed in this
                                              field and the ones selected by namespaceSelector.
                                              null or empty namespaces list and null
                                              namespaceSelector means "this pod's
                                              namespace".
                                            items:
                                              type: string
                                            type: array
                                          topologyKey:
                                            description: This pod should be co-located
                                              (affinity) or not co-located (anti-affinity)
                                              with the pods matching the labelSelector
                                              in the specified namespaces, where co-located
                                              is defined as running on a node whose
                                              value of the label with key topologyKey
                                              matches that of any node on which any
                                              of the selected pods is running. Empty
                                              topologyKey is not allowed.
                                            type: string
                                        required:
                                        - topologyKey
                                        type: object
                                      weight:
                                        description: weight associated with matching
                                          the corresponding podAffinityTerm, in the
                                          range 1-100.
                                        format: int32
                                        type: integer
                                    required:
                                    - podAffinityTerm
                                    - weight
                                    type: object
                                  type: array
                                requiredDuringSchedulingIgnoredDuringExecution:
                                  description: If the affinity requirements specified
                                    by this field are not met at scheduling time,
                                    the pod will not be scheduled onto the node. If
                                    the affinity requirements specified by this field
                                    cease to be met at some point during pod execution
                                    (e.g. due to a pod label update), the system may
                                    or may not try to eventually evict the pod from
                                    its node. When there are multiple elements, the
                                    lists of nodes corresponding to each podAffinityTerm
                                    are intersected, i.e. all terms must be satisfied.
                                  items:
                                    description: Defines a set of pods (namely those
                                      matching the labelSelector relative to the given
                                      namespace(s)) that this pod should be co-located
                                      (affinity) or not co-located (anti-affinity)
                                      with, where co-located is defined as running
                                      on a node whose value of the label with key
                                      <topologyKey> matches that of any node on which
                                      a pod of the set of pods is running
                                    properties:
                                      labelSelector:
                                        description: A label query over a set of resources,
                                          in this case pods.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: A label selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: operator represents
                                                    a key's relationship to a set
                                                    of values. Valid operators are
                                                    In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: values is an array
                                                    of string values. If the operator
                                                    is In or NotIn, the values array
                                                    must be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. This
                                                    array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: matchLabels is a map of {key,value}
                                              pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions,
                                              whose key field is "key", the operator
                                              is "In", and the values array contains
                                              only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      namespaceSelector:
                                        description: A label query over the set of
                                          namespaces that the term applies to. The
                                          term is applied to the union of the namespaces
                                          selected by this field and the ones listed
                                          in the namespaces field. null selector and
                                          null or empty namespaces list means "this
                                          pod's namespace". An empty selector ({})
                                          matches all namespaces.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: A label selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: operator represents
                                                    a key's relationship to a set
                                                    of values. Valid operators are
                                                    In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: values is an array
                                                    of string values. If the operator
                                                    is In or NotIn, the values array
                                                    must be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. This
                                                    array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: matchLabels is a map of {key,value}
                                              pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions,
                                              whose key field is "key", the operator
                                              is "In", and the values array contains
                                              only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      namespaces:
                                        description: namespaces specifies a static
                                          list of namespace names that the term applies
                                          to. The term is applied to the union of
                                          the namespaces listed in this field and
                                          the ones selected by namespaceSelector.
                                          null or empty namespaces list and null namespaceSelector
                                          means "this pod's namespace".
                                        items:
                                          type: string
                                        type: array
                                      topologyKey:
                                        description: This pod should be co-located
                                          (affinity) or not co-located (anti-affinity)
                                          with the pods matching the labelSelector
                                          in the specified namespaces, where co-located
                                          is defined as running on a node whose value
                                          of the label with key topologyKey matches
                                          that of any node on which any of the selected
                                          pods is running. Empty topologyKey is not
                                          allowed.
                                        type: string
                                    required:
                                    - topologyKey
                                    type: object
                                  type: array
                              type: object
                            podAntiAffinity:
                              description: PodAntiAffinity is a group of inter pod
                                anti affinity scheduling rules
                              properties:
                                preferredDuringSchedulingIgnoredDuringExecution:
                                  description: The scheduler will prefer to schedule
                                    pods to nodes that satisfy the anti-affinity expressions
                                    specified by this field, but it may choose a node
                                    that violates one or more of the expressions.
                                    The node that is most preferred is the one with
                                    the greatest sum of weights, i.e. for each node
                                    that meets all of the scheduling requirements
                                    (resource request, requiredDuringScheduling anti-affinity
                                    expressions, etc.), compute a sum by iterating
                                    through the elements of this field and adding
                                    "weight" to the sum if the node has pods which
                                    matches the corresponding podAffinityTerm; the
                                    node(s) with the highest sum are the most preferred.
                                  items:
                                    description: The weights of all of the matched
                                      WeightedPodAffinityTerm fields are added per-node
                                      to find the most preferred node(s)
                                    properties:
                                      podAffinityTerm:
                                        description: Required. A pod affinity term,
                                          associated with the corresponding weight.
                                        properties:
                                          labelSelector:
                                            description: A label query over a set
                                              of resources, in this case pods.
                                            properties:
                                              matchExpressions:
                                                description: matchExpressions is a
                                                  list of label selector requirements.
                                                  The requirements are ANDed.
                                                items:
                                                  description: A label selector requirement
                                                    is a selector that contains values,
                                                    a key, and an operator that relates
                                                    the key and values.
                                                  properties:
                                                    key:
                                                      description: key is the label
                                                        key that the selector applies
                                                        to.
                                                      type: string
                                                    operator:
                                                      description: operator represents
                                                        a key's relationship to a
                                                        set of values. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                              matchLabels:
                                                additionalProperties:
                                                  type: string
                                                description: matchLabels is a map
                                                  of {key,value} pairs. A single {key,value}
                                                  in the matchLabels map is equivalent
                                                  to an element of matchExpressions,
                                                  whose key field is "key", the operator
                                                  is "In", and the values array contains
                                                  only "value". The requirements are
                                                  ANDed.
                                                type: object
                                            type: object
                                            x-kubernetes-map-type: atomic
                                          namespaceSelector:
                                            description: A label query over the set
                                              of namespaces that the term applies
                                              to. The term is applied to the union
                                              of the namespaces selected by this field
                                              and the ones listed in the namespaces
                                              field. null selector and null or empty
                                              namespaces list means "this pod's namespace".
                                              An empty selector ({}) matches all namespaces.
                                            properties:
                                              matchExpressions:
                                                description: matchExpressions is a
                                                  list of label selector requirements.
                                                  The requirements are ANDed.
                                                items:
                                                  description: A label selector requirement
                                                    is a selector that contains values,
                                                    a key, and an operator that relates
                                                    the key and values.
                                                  properties:
                                                    key:
                                                      description: key is the label
                                                        key that the selector applies
                                                        to.
                                                      type: string
                                                    operator:
                                                      description: operator represents
                                                        a key's relationship to a
                                                        set of values. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                              matchLabels:
                                                additionalProperties:
                                                  type: string
                                                description: matchLabels is a map
                                                  of {key,value} pairs. A single {key,value}
                                                  in the matchLabels map is equivalent
                                                  to an element of matchExpressions,
                                                  whose key field is "key", the operator
                                                  is "In", and the values array contains
                                                  only "value". The requirements are
                                                  ANDed.
                                                type: object
                                            type: object
                                            x-kubernetes-map-type: atomic
                                          namespaces:
                                            description: namespaces specifies a static
                                              list of namespace names that the term
                                              applies to. The term is applied to the
                                              union of the namespaces listed in this
                                              field and the ones selected by namespaceSelector.
                                              null or empty namespaces list and null
                                              namespaceSelector means "this pod's
                                              namespace".
                                            items:
                                              type: string
                                            type: array
                                          topologyKey:
                                            description: This pod should be co-located
                                              (affinity) or not co-located (anti-affinity)
                                              with the pods matching the labelSelector
                                              in the specified namespaces, where co-located
                                              is defined as running on a node whose
                                              value of the label with key topologyKey
                                              matches that of any node on which any
                                              of the selected pods is running. Empty
                                              topologyKey is not allowed.
                                            type: string
                                        required:
                                        - topologyKey
                                        type: object
                                      weight:
                                        description: weight associated with matching
                                          the corresponding podAffinityTerm, in the
                                          range 1-100.
                                        format: int32
                                        type: integer
                                    required:
                                    - podAffinityTerm
                                    - weight
                                    type: object
                                  type: array
                                requiredDuringSchedulingIgnoredDuringExecution:
                                  description: If the anti-affinity requirements specified
                                    by this field are not met at scheduling time,
                                    the pod will not be scheduled onto the node. If
                                    the anti-affinity requirements specified by this
                                    field cease to be met at some point during pod
                                    execution (e.g. due to a pod label update), the
                                    system may or may not try to eventually evict
                                    the pod from its node. When there are multiple
                                    elements, the lists of nodes corresponding to
                                    each podAffinityTerm are intersected, i.e. all
                                    terms must be satisfied.
                                  items:
                                    description: Defines a set of pods (namely those
                                      matching the labelSelector relative to the given
                                      namespace(s)) that this pod should be co-located
                                      (affinity) or not co-located (anti-affinity)
                                      with, where co-located is defined as running
                                      on a node whose value of the label with key
                                      <topologyKey> matches that of any node on which
                                      a pod of the set of pods is running
                                    properties:
                                      labelSelector:
                                        description: A label query over a set of resources,
                                          in this case pods.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: A label selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: operator represents
                                                    a key's relationship to a set
                                                    of values. Valid operators are
                                                    In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: values is an array
                                                    of string values. If the operator
                                                    is In or NotIn, the values array
                                                    must be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. This
                                                    array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: matchLabels is a map of {key,value}
                                              pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions,
                                              whose key field is "key", the operator
                                              is "In", and the values array contains
                                              only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      namespaceSelector:
                                        description: A label query over the set of
                                          namespaces that the term applies to. The
                                          term is applied to the union of the namespaces
                                          selected by this field and the ones listed
                                          in the namespaces field. null selector and
                                          null or empty namespaces list means "this
                                          pod's namespace". An empty selector ({})
                                          matches all namespaces.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: A label selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: operator represents
                                                    a key's relationship to a set
                                                    of values. Valid operators are
                                                    In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: values is an array
                                                    of string values. If the operator
                                                    is In or NotIn, the values array
                                                    must be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. This
                                                    array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: matchLabels is a map of {key,value}
                                              pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions,
                                              whose key field is "key", the operator
                                              is "In", and the values array contains
                                              only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      namespaces:
                                        description: namespaces specifies a static
                                          list of namespace names that the term applies
                                          to. The term is applied to the union of
                                          the namespaces listed in this field and
                                          the ones selected by namespaceSelector.
                                          null or empty namespaces list and null namespaceSelector
                                          means "this pod's namespace".
                                        items:
                                          type: string
                                        type: array
                                      topologyKey:
                                        description: This pod should be co-located
                                          (affinity) or not co-located (anti-affinity)
                                          with the pods matching the labelSelector
                                          in the specified namespaces, where co-located
                                          is defined as running on a node whose value
                                          of the label with key topologyKey matches
                                          that of any node on which any of the selected
                                          pods is running. Empty topologyKey is not
                                          allowed.
                                        type: string
                                    required:
                                    - topologyKey
                                    type: object
                                  type: array
                              type: object
                            tolerations:
                              description: The pod this Toleration is attached to
                                tolerates any taint that matches the triple <key,value,effect>
                                using the matching operator <operator>
                              items:
                                description: The pod this Toleration is attached to
                                  tolerates any taint that matches the triple <key,value,effect>
                                  using the matching operator <operator>.
                                properties:
                                  effect:
                                    description: Effect indicates the taint effect
                                      to match. Empty means match all taint effects.
                                      When specified, allowed values are NoSchedule,
                                      PreferNoSchedule and NoExecute.
                                    type: string
                                  key:
                                    description: Key is the taint key that the toleration
                                      applies to. Empty means match all taint keys.
                                      If the key is empty, operator must be Exists;
                                      this combination means to match all values and
                                      all keys.
                                    type: string
                                  operator:
                                    description: Operator represents a key's relationship
                                      to the value. Valid operators are Exists and
                                      Equal. Defaults to Equal. Exists is equivalent
                                      to wildcard for value, so that a pod can tolerate
                                      all taints of a particular category.
                                    type: string
                                  tolerationSeconds:
                                    description: TolerationSeconds represents the
                                      period of time the toleration (which must be
                                      of effect NoExecute, otherwise this field is
                                      ignored) tolerates the taint. By default, it
                                      is not set, which means tolerate the taint forever
                                      (do not evict). Zero and negative values will
                                      be treated as 0 (evict immediately) by the system.
                                    format: int64
                                    type: integer
                                  value:
                                    description: Value is the taint value the toleration
                                      matches to. If the operator is Exists, the value
                                      should be empty, otherwise just a regular string.
                                    type: string
                                type: object
                              type: array
                            topologySpreadConstraints:
                              description: TopologySpreadConstraint specifies how
                                to spread matching pods among the given topology
                              items:
                                description: TopologySpreadConstraint specifies how
                                  to spread matching pods among the given topology.
                                properties:
                                  labelSelector:
                                    description: LabelSelector is used to find matching
                                      pods. Pods that match this label selector are
                                      counted to determine the number of pods in their
                                      corresponding topology domain.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: A label selector requirement
                                            is a selector that contains values, a
                                            key, and an operator that relates the
                                            key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: operator represents a key's
                                                relationship to a set of values. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: matchLabels is a map of {key,value}
                                          pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions,
                                          whose key field is "key", the operator is
                                          "In", and the values array contains only
                                          "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  matchLabelKeys:
                                    description: "MatchLabelKeys is a set of pod label
                                      keys to select the pods over which spreading
                                      will be calculated. The keys are used to lookup
                                      values from the incoming pod labels, those key-value
                                      labels are ANDed with labelSelector to select
                                      the group of existing pods over which spreading
                                      will be calculated for the incoming pod. The
                                      same key is forbidden to exist in both MatchLabelKeys
                                      and LabelSelector. MatchLabelKeys cannot be
                                      set when LabelSelector isn't set. Keys that
                                      don't exist in the incoming pod labels will
                                      be ignored. A null or empty list means only
                                      match against labelSelector. \n This is a beta
                                      field and requires the MatchLabelKeysInPodTopologySpread
                                      feature gate to be enabled (enabled by default)."
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  maxSkew:
                                    description: 'MaxSkew describes the degree to
                                      which pods may be unevenly distributed. When
                                      `whenUnsatisfiable=DoNotSchedule`, it is the
                                      maximum permitted difference between the number
                                      of matching pods in the target topology and
                                      the global minimum. The global minimum is the
                                      minimum number of matching pods in an eligible
                                      domain or zero if the number of eligible domains
                                      is less than MinDomains. For example, in a 3-zone
                                      cluster, MaxSkew is set to 1, and pods with
                                      the same labelSelector spread as 2/2/1: In this
                                      case, the global minimum is 1. | zone1 | zone2
                                      | zone3 | |  P P  |  P P  |   P   | - if MaxSkew
                                      is 1, incoming pod can only be scheduled to
                                      zone3 to become 2/2/2; scheduling it onto zone1(zone2)
                                      would make the ActualSkew(3-1) on zone1(zone2)
                                      violate MaxSkew(1). - if MaxSkew is 2, incoming
                                      pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`,
                                      it is used to give higher precedence to topologies
                                      that satisfy it. It''s a required field. Default
                                      value is 1 and 0 is not allowed.'
                                    format: int32
                                    type: integer
                                  minDomains:
                                    description: "MinDomains indicates a minimum number
                                      of eligible domains. When the number of eligible
                                      domains with matching topology keys is less
                                      than minDomains, Pod Topology Spread treats
                                      \"global minimum\" as 0, and then the calculation
                                      of Skew is performed. And when the number of
                                      eligible domains with matching topology keys
                                      equals or greater than minDomains, this value
                                      has no effect on scheduling. As a result, when
                                      the number of eligible domains is less than
                                      minDomains, scheduler won't schedule more than
                                      maxSkew Pods to those domains. If value is nil,
                                      the constraint behaves as if MinDomains is equal
                                      to 1. Valid values are integers greater than
                                      0. When value is not nil, WhenUnsatisfiable
                                      must be DoNotSchedule. \n For example, in a
                                      3-zone cluster, MaxSkew is set to 2, MinDomains
                                      is set to 5 and pods with the same labelSelector
                                      spread as 2/2/2: | zone1 | zone2 | zone3 | |
                                      \ P P  |  P P  |  P P  | The number of domains
                                      is less than 5(MinDomains), so \"global minimum\"
                                      is treated as 0. In this situation, new pod
                                      with the same labelSelector cannot be scheduled,
                                      because computed skew will be 3(3 - 0) if new
                                      Pod is scheduled to any of the three zones,
                                      it will violate MaxSkew. \n This is a beta field
                                      and requires the MinDomainsInPodTopologySpread
                                      feature gate to be enabled (enabled by default)."
                                    format: int32
                                    type: integer
                                  nodeAffinityPolicy:
                                    description: "NodeAffinityPolicy indicates how
                                      we will treat Pod's nodeAffinity/nodeSelector
                                      when calculating pod topology spread skew. Options
                                      are: - Honor: only nodes matching nodeAffinity/nodeSelector
                                      are included in the calculations. - Ignore:
                                      nodeAffinity/nodeSelector are ignored. All nodes
                                      are included in the calculations. \n If this
                                      value is nil, the behavior is equivalent to
                                      the Honor policy. This is a beta-level feature
                                      default enabled by the NodeInclusionPolicyInPodTopologySpread
                                      feature flag."
                                    type: string
                                  nodeTaintsPolicy:
                                    description: "NodeTaintsPolicy indicates how we
                                      will treat node taints when calculating pod
                                      topology spread skew. Options are: - Honor:
                                      nodes without taints, along with tainted nodes
                                      for which the incoming pod has a toleration,
                                      are included. - Ignore: node taints are ignored.
                                      All nodes are included. \n If this value is
                                      nil, the behavior is equivalent to the Ignore
                                      policy. This is a beta-level feature default
                                      enabled by the NodeInclusionPolicyInPodTopologySpread
                                      feature flag."
                                    type: string
                                  topologyKey:
                                    description: TopologyKey is the key of node labels.
                                      Nodes that have a label with this key and identical
                                      values are considered to be in the same topology.
                                      We consider each <key, value> as a "bucket",
                                      and try to put balanced number of pods into
                                      each bucket. We define a domain as a particular
                                      instance of a topology. Also, we define an eligible
                                      domain as a domain whose nodes meet the requirements
                                      of nodeAffinityPolicy and nodeTaintsPolicy.
                                      e.g. If TopologyKey is "kubernetes.io/hostname",
                                      each Node is a domain of that topology. And,
                                      if TopologyKey is "topology.kubernetes.io/zone",
                                      each zone is a domain of that topology. It's
                                      a required field.
                                    type: string
                                  whenUnsatisfiable:
                                    description: 'WhenUnsatisfiable indicates how
                                      to deal with a pod if it doesn''t satisfy the
                                      spread constraint. - DoNotSchedule (default)
                                      tells the scheduler not to schedule it. - ScheduleAnyway
                                      tells the scheduler to schedule the pod in any
                                      location, but giving higher precedence to topologies
                                      that would help reduce the skew. A constraint
                                      is considered "Unsatisfiable" for an incoming
                                      pod if and only if every possible node assignment
                                      for that pod would violate "MaxSkew" on some
                                      topology. For example, in a 3-zone cluster,
                                      MaxSkew is set to 1, and pods with the same
                                      labelSelector spread as 3/1/1: | zone1 | zone2
                                      | zone3 | | P P P |   P   |   P   | If WhenUnsatisfiable
                                      is set to DoNotSchedule, incoming pod can only
                                      be scheduled to zone2(zone3) to become 3/2/1(3/1/2)
                                      as ActualSkew(2-1) on zone2(zone3) satisfies
                                      MaxSkew(1). In other words, the cluster can
                                      still be imbalanced, but scheduler won''t make
                                      it *more* imbalanced. It''s a required field.'
                                    type: string
                                required:
                                - maxSkew
                                - topologyKey
                                - whenUnsatisfiable
                                type: object
                              type: array
                          type: object
                          x-kubernetes-preserve-unknown-fields: true
                        portable:
                          description: Portable represents OSD portability across
                            the hosts
                          type: boolean
                        preparePlacement:
                          description: Placement is the placement for an object
                          nullable: true
                          properties:
                            nodeAffinity:
                              description: NodeAffinity is a group of node affinity
                                scheduling rules
                              properties:
                                preferredDuringSchedulingIgnoredDuringExecution:
                                  description: The scheduler will prefer to schedule
                                    pods to nodes that satisfy the affinity expressions
                                    specified by this field, but it may choose a node
                                    that violates one or more of the expressions.
                                    The node that is most preferred is the one with
                                    the greatest sum of weights, i.e. for each node
                                    that meets all of the scheduling requirements
                                    (resource request, requiredDuringScheduling affinity
                                    expressions, etc.), compute a sum by iterating
                                    through the elements of this field and adding
                                    "weight" to the sum if the node matches the corresponding
                                    matchExpressions; the node(s) with the highest
                                    sum are the most preferred.
                                  items:
                                    description: An empty preferred scheduling term
                                      matches all objects with implicit weight 0 (i.e.
                                      it's a no-op). A null preferred scheduling term
                                      matches no objects (i.e. is also a no-op).
                                    properties:
                                      preference:
                                        description: A node selector term, associated
                                          with the corresponding weight.
                                        properties:
                                          matchExpressions:
                                            description: A list of node selector requirements
                                              by node's labels.
                                            items:
                                              description: A node selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: The label key that
                                                    the selector applies to.
                                                  type: string
                                                operator:
                                                  description: Represents a key's
                                                    relationship to a set of values.
                                                    Valid operators are In, NotIn,
                                                    Exists, DoesNotExist. Gt, and
                                                    Lt.
                                                  type: string
                                                values:
                                                  description: An array of string
                                                    values. If the operator is In
                                                    or NotIn, the values array must
                                                    be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. If
                                                    the operator is Gt or Lt, the
                                                    values array must have a single
                                                    element, which will be interpreted
                                                    as an integer. This array is replaced
                                                    during a strategic merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                          matchFields:
                                            description: A list of node selector requirements
                                              by node's fields.
                                            items:
                                              description: A node selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: The label key that
                                                    the selector applies to.
                                                  type: string
                                                operator:
                                                  description: Represents a key's
                                                    relationship to a set of values.
                                                    Valid operators are In, NotIn,
                                                    Exists, DoesNotExist. Gt, and
                                                    Lt.
                                                  type: string
                                                values:
                                                  description: An array of string
                                                    values. If the operator is In
                                                    or NotIn, the values array must
                                                    be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. If
                                                    the operator is Gt or Lt, the
                                                    values array must have a single
                                                    element, which will be interpreted
                                                    as an integer. This array is replaced
                                                    during a strategic merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      weight:
                                        description: Weight associated with matching
                                          the corresponding nodeSelectorTerm, in the
                                          range 1-100.
                                        format: int32
                                        type: integer
                                    required:
                                    - preference
                                    - weight
                                    type: object
                                  type: array
                                requiredDuringSchedulingIgnoredDuringExecution:
                                  description: If the affinity requirements specified
                                    by this field are not met at scheduling time,
                                    the pod will not be scheduled onto the node. If
                                    the affinity requirements specified by this field
                                    cease to be met at some point during pod execution
                                    (e.g. due to an update), the system may or may
                                    not try to eventually evict the pod from its node.
                                  properties:
                                    nodeSelectorTerms:
                                      description: Required. A list of node selector
                                        terms. The terms are ORed.
                                      items:
                                        description: A null or empty node selector
                                          term matches no objects. The requirements
                                          of them are ANDed. The TopologySelectorTerm
                                          type implements a subset of the NodeSelectorTerm.
                                        properties:
                                          matchExpressions:
                                            description: A list of node selector requirements
                                              by node's labels.
                                            items:
                                              description: A node selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: The label key that
                                                    the selector applies to.
                                                  type: string
                                                operator:
                                                  description: Represents a key's
                                                    relationship to a set of values.
                                                    Valid operators are In, NotIn,
                                                    Exists, DoesNotExist. Gt, and
                                                    Lt.
                                                  type: string
                                                values:
                                                  description: An array of string
                                                    values. If the operator is In
                                                    or NotIn, the values array must
                                                    be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. If
                                                    the operator is Gt or Lt, the
                                                    values array must have a single
                                                    element, which will be interpreted
                                                    as an integer. This array is replaced
                                                    during a strategic merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                          matchFields:
                                            description: A list of node selector requirements
                                              by node's fields.
                                            items:
                                              description: A node selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: The label key that
                                                    the selector applies to.
                                                  type: string
                                                operator:
                                                  description: Represents a key's
                                                    relationship to a set of values.
                                                    Valid operators are In, NotIn,
                                                    Exists, DoesNotExist. Gt, and
                                                    Lt.
                                                  type: string
                                                values:
                                                  description: An array of string
                                                    values. If the operator is In
                                                    or NotIn, the values array must
                                                    be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. If
                                                    the operator is Gt or Lt, the
                                                    values array must have a single
                                                    element, which will be interpreted
                                                    as an integer. This array is replaced
                                                    during a strategic merge patch.
                                                  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:
                              description: PodAffinity is a group of inter pod affinity
                                scheduling rules
                              properties:
                                preferredDuringSchedulingIgnoredDuringExecution:
                                  description: The scheduler will prefer to schedule
                                    pods to nodes that satisfy the affinity expressions
                                    specified by this field, but it may choose a node
                                    that violates one or more of the expressions.
                                    The node that is most preferred is the one with
                                    the greatest sum of weights, i.e. for each node
                                    that meets all of the scheduling requirements
                                    (resource request, requiredDuringScheduling affinity
                                    expressions, etc.), compute a sum by iterating
                                    through the elements of this field and adding
                                    "weight" to the sum if the node has pods which
                                    matches the corresponding podAffinityTerm; the
                                    node(s) with the highest sum are the most preferred.
                                  items:
                                    description: The weights of all of the matched
                                      WeightedPodAffinityTerm fields are added per-node
                                      to find the most preferred node(s)
                                    properties:
                                      podAffinityTerm:
                                        description: Required. A pod affinity term,
                                          associated with the corresponding weight.
                                        properties:
                                          labelSelector:
                                            description: A label query over a set
                                              of resources, in this case pods.
                                            properties:
                                              matchExpressions:
                                                description: matchExpressions is a
                                                  list of label selector requirements.
                                                  The requirements are ANDed.
                                                items:
                                                  description: A label selector requirement
                                                    is a selector that contains values,
                                                    a key, and an operator that relates
                                                    the key and values.
                                                  properties:
                                                    key:
                                                      description: key is the label
                                                        key that the selector applies
                                                        to.
                                                      type: string
                                                    operator:
                                                      description: operator represents
                                                        a key's relationship to a
                                                        set of values. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                              matchLabels:
                                                additionalProperties:
                                                  type: string
                                                description: matchLabels is a map
                                                  of {key,value} pairs. A single {key,value}
                                                  in the matchLabels map is equivalent
                                                  to an element of matchExpressions,
                                                  whose key field is "key", the operator
                                                  is "In", and the values array contains
                                                  only "value". The requirements are
                                                  ANDed.
                                                type: object
                                            type: object
                                            x-kubernetes-map-type: atomic
                                          namespaceSelector:
                                            description: A label query over the set
                                              of namespaces that the term applies
                                              to. The term is applied to the union
                                              of the namespaces selected by this field
                                              and the ones listed in the namespaces
                                              field. null selector and null or empty
                                              namespaces list means "this pod's namespace".
                                              An empty selector ({}) matches all namespaces.
                                            properties:
                                              matchExpressions:
                                                description: matchExpressions is a
                                                  list of label selector requirements.
                                                  The requirements are ANDed.
                                                items:
                                                  description: A label selector requirement
                                                    is a selector that contains values,
                                                    a key, and an operator that relates
                                                    the key and values.
                                                  properties:
                                                    key:
                                                      description: key is the label
                                                        key that the selector applies
                                                        to.
                                                      type: string
                                                    operator:
                                                      description: operator represents
                                                        a key's relationship to a
                                                        set of values. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                              matchLabels:
                                                additionalProperties:
                                                  type: string
                                                description: matchLabels is a map
                                                  of {key,value} pairs. A single {key,value}
                                                  in the matchLabels map is equivalent
                                                  to an element of matchExpressions,
                                                  whose key field is "key", the operator
                                                  is "In", and the values array contains
                                                  only "value". The requirements are
                                                  ANDed.
                                                type: object
                                            type: object
                                            x-kubernetes-map-type: atomic
                                          namespaces:
                                            description: namespaces specifies a static
                                              list of namespace names that the term
                                              applies to. The term is applied to the
                                              union of the namespaces listed in this
                                              field and the ones selected by namespaceSelector.
                                              null or empty namespaces list and null
                                              namespaceSelector means "this pod's
                                              namespace".
                                            items:
                                              type: string
                                            type: array
                                          topologyKey:
                                            description: This pod should be co-located
                                              (affinity) or not co-located (anti-affinity)
                                              with the pods matching the labelSelector
                                              in the specified namespaces, where co-located
                                              is defined as running on a node whose
                                              value of the label with key topologyKey
                                              matches that of any node on which any
                                              of the selected pods is running. Empty
                                              topologyKey is not allowed.
                                            type: string
                                        required:
                                        - topologyKey
                                        type: object
                                      weight:
                                        description: weight associated with matching
                                          the corresponding podAffinityTerm, in the
                                          range 1-100.
                                        format: int32
                                        type: integer
                                    required:
                                    - podAffinityTerm
                                    - weight
                                    type: object
                                  type: array
                                requiredDuringSchedulingIgnoredDuringExecution:
                                  description: If the affinity requirements specified
                                    by this field are not met at scheduling time,
                                    the pod will not be scheduled onto the node. If
                                    the affinity requirements specified by this field
                                    cease to be met at some point during pod execution
                                    (e.g. due to a pod label update), the system may
                                    or may not try to eventually evict the pod from
                                    its node. When there are multiple elements, the
                                    lists of nodes corresponding to each podAffinityTerm
                                    are intersected, i.e. all terms must be satisfied.
                                  items:
                                    description: Defines a set of pods (namely those
                                      matching the labelSelector relative to the given
                                      namespace(s)) that this pod should be co-located
                                      (affinity) or not co-located (anti-affinity)
                                      with, where co-located is defined as running
                                      on a node whose value of the label with key
                                      <topologyKey> matches that of any node on which
                                      a pod of the set of pods is running
                                    properties:
                                      labelSelector:
                                        description: A label query over a set of resources,
                                          in this case pods.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: A label selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: operator represents
                                                    a key's relationship to a set
                                                    of values. Valid operators are
                                                    In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: values is an array
                                                    of string values. If the operator
                                                    is In or NotIn, the values array
                                                    must be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. This
                                                    array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: matchLabels is a map of {key,value}
                                              pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions,
                                              whose key field is "key", the operator
                                              is "In", and the values array contains
                                              only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      namespaceSelector:
                                        description: A label query over the set of
                                          namespaces that the term applies to. The
                                          term is applied to the union of the namespaces
                                          selected by this field and the ones listed
                                          in the namespaces field. null selector and
                                          null or empty namespaces list means "this
                                          pod's namespace". An empty selector ({})
                                          matches all namespaces.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: A label selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: operator represents
                                                    a key's relationship to a set
                                                    of values. Valid operators are
                                                    In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: values is an array
                                                    of string values. If the operator
                                                    is In or NotIn, the values array
                                                    must be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. This
                                                    array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: matchLabels is a map of {key,value}
                                              pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions,
                                              whose key field is "key", the operator
                                              is "In", and the values array contains
                                              only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      namespaces:
                                        description: namespaces specifies a static
                                          list of namespace names that the term applies
                                          to. The term is applied to the union of
                                          the namespaces listed in this field and
                                          the ones selected by namespaceSelector.
                                          null or empty namespaces list and null namespaceSelector
                                          means "this pod's namespace".
                                        items:
                                          type: string
                                        type: array
                                      topologyKey:
                                        description: This pod should be co-located
                                          (affinity) or not co-located (anti-affinity)
                                          with the pods matching the labelSelector
                                          in the specified namespaces, where co-located
                                          is defined as running on a node whose value
                                          of the label with key topologyKey matches
                                          that of any node on which any of the selected
                                          pods is running. Empty topologyKey is not
                                          allowed.
                                        type: string
                                    required:
                                    - topologyKey
                                    type: object
                                  type: array
                              type: object
                            podAntiAffinity:
                              description: PodAntiAffinity is a group of inter pod
                                anti affinity scheduling rules
                              properties:
                                preferredDuringSchedulingIgnoredDuringExecution:
                                  description: The scheduler will prefer to schedule
                                    pods to nodes that satisfy the anti-affinity expressions
                                    specified by this field, but it may choose a node
                                    that violates one or more of the expressions.
                                    The node that is most preferred is the one with
                                    the greatest sum of weights, i.e. for each node
                                    that meets all of the scheduling requirements
                                    (resource request, requiredDuringScheduling anti-affinity
                                    expressions, etc.), compute a sum by iterating
                                    through the elements of this field and adding
                                    "weight" to the sum if the node has pods which
                                    matches the corresponding podAffinityTerm; the
                                    node(s) with the highest sum are the most preferred.
                                  items:
                                    description: The weights of all of the matched
                                      WeightedPodAffinityTerm fields are added per-node
                                      to find the most preferred node(s)
                                    properties:
                                      podAffinityTerm:
                                        description: Required. A pod affinity term,
                                          associated with the corresponding weight.
                                        properties:
                                          labelSelector:
                                            description: A label query over a set
                                              of resources, in this case pods.
                                            properties:
                                              matchExpressions:
                                                description: matchExpressions is a
                                                  list of label selector requirements.
                                                  The requirements are ANDed.
                                                items:
                                                  description: A label selector requirement
                                                    is a selector that contains values,
                                                    a key, and an operator that relates
                                                    the key and values.
                                                  properties:
                                                    key:
                                                      description: key is the label
                                                        key that the selector applies
                                                        to.
                                                      type: string
                                                    operator:
                                                      description: operator represents
                                                        a key's relationship to a
                                                        set of values. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                              matchLabels:
                                                additionalProperties:
                                                  type: string
                                                description: matchLabels is a map
                                                  of {key,value} pairs. A single {key,value}
                                                  in the matchLabels map is equivalent
                                                  to an element of matchExpressions,
                                                  whose key field is "key", the operator
                                                  is "In", and the values array contains
                                                  only "value". The requirements are
                                                  ANDed.
                                                type: object
                                            type: object
                                            x-kubernetes-map-type: atomic
                                          namespaceSelector:
                                            description: A label query over the set
                                              of namespaces that the term applies
                                              to. The term is applied to the union
                                              of the namespaces selected by this field
                                              and the ones listed in the namespaces
                                              field. null selector and null or empty
                                              namespaces list means "this pod's namespace".
                                              An empty selector ({}) matches all namespaces.
                                            properties:
                                              matchExpressions:
                                                description: matchExpressions is a
                                                  list of label selector requirements.
                                                  The requirements are ANDed.
                                                items:
                                                  description: A label selector requirement
                                                    is a selector that contains values,
                                                    a key, and an operator that relates
                                                    the key and values.
                                                  properties:
                                                    key:
                                                      description: key is the label
                                                        key that the selector applies
                                                        to.
                                                      type: string
                                                    operator:
                                                      description: operator represents
                                                        a key's relationship to a
                                                        set of values. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                              matchLabels:
                                                additionalProperties:
                                                  type: string
                                                description: matchLabels is a map
                                                  of {key,value} pairs. A single {key,value}
                                                  in the matchLabels map is equivalent
                                                  to an element of matchExpressions,
                                                  whose key field is "key", the operator
                                                  is "In", and the values array contains
                                                  only "value". The requirements are
                                                  ANDed.
                                                type: object
                                            type: object
                                            x-kubernetes-map-type: atomic
                                          namespaces:
                                            description: namespaces specifies a static
                                              list of namespace names that the term
                                              applies to. The term is applied to the
                                              union of the namespaces listed in this
                                              field and the ones selected by namespaceSelector.
                                              null or empty namespaces list and null
                                              namespaceSelector means "this pod's
                                              namespace".
                                            items:
                                              type: string
                                            type: array
                                          topologyKey:
                                            description: This pod should be co-located
                                              (affinity) or not co-located (anti-affinity)
                                              with the pods matching the labelSelector
                                              in the specified namespaces, where co-located
                                              is defined as running on a node whose
                                              value of the label with key topologyKey
                                              matches that of any node on which any
                                              of the selected pods is running. Empty
                                              topologyKey is not allowed.
                                            type: string
                                        required:
                                        - topologyKey
                                        type: object
                                      weight:
                                        description: weight associated with matching
                                          the corresponding podAffinityTerm, in the
                                          range 1-100.
                                        format: int32
                                        type: integer
                                    required:
                                    - podAffinityTerm
                                    - weight
                                    type: object
                                  type: array
                                requiredDuringSchedulingIgnoredDuringExecution:
                                  description: If the anti-affinity requirements specified
                                    by this field are not met at scheduling time,
                                    the pod will not be scheduled onto the node. If
                                    the anti-affinity requirements specified by this
                                    field cease to be met at some point during pod
                                    execution (e.g. due to a pod label update), the
                                    system may or may not try to eventually evict
                                    the pod from its node. When there are multiple
                                    elements, the lists of nodes corresponding to
                                    each podAffinityTerm are intersected, i.e. all
                                    terms must be satisfied.
                                  items:
                                    description: Defines a set of pods (namely those
                                      matching the labelSelector relative to the given
                                      namespace(s)) that this pod should be co-located
                                      (affinity) or not co-located (anti-affinity)
                                      with, where co-located is defined as running
                                      on a node whose value of the label with key
                                      <topologyKey> matches that of any node on which
                                      a pod of the set of pods is running
                                    properties:
                                      labelSelector:
                                        description: A label query over a set of resources,
                                          in this case pods.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: A label selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: operator represents
                                                    a key's relationship to a set
                                                    of values. Valid operators are
                                                    In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: values is an array
                                                    of string values. If the operator
                                                    is In or NotIn, the values array
                                                    must be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. This
                                                    array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: matchLabels is a map of {key,value}
                                              pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions,
                                              whose key field is "key", the operator
                                              is "In", and the values array contains
                                              only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      namespaceSelector:
                                        description: A label query over the set of
                                          namespaces that the term applies to. The
                                          term is applied to the union of the namespaces
                                          selected by this field and the ones listed
                                          in the namespaces field. null selector and
                                          null or empty namespaces list means "this
                                          pod's namespace". An empty selector ({})
                                          matches all namespaces.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: A label selector requirement
                                                is a selector that contains values,
                                                a key, and an operator that relates
                                                the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: operator represents
                                                    a key's relationship to a set
                                                    of values. Valid operators are
                                                    In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: values is an array
                                                    of string values. If the operator
                                                    is In or NotIn, the values array
                                                    must be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. This
                                                    array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: matchLabels is a map of {key,value}
                                              pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions,
                                              whose key field is "key", the operator
                                              is "In", and the values array contains
                                              only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      namespaces:
                                        description: namespaces specifies a static
                                          list of namespace names that the term applies
                                          to. The term is applied to the union of
                                          the namespaces listed in this field and
                                          the ones selected by namespaceSelector.
                                          null or empty namespaces list and null namespaceSelector
                                          means "this pod's namespace".
                                        items:
                                          type: string
                                        type: array
                                      topologyKey:
                                        description: This pod should be co-located
                                          (affinity) or not co-located (anti-affinity)
                                          with the pods matching the labelSelector
                                          in the specified namespaces, where co-located
                                          is defined as running on a node whose value
                                          of the label with key topologyKey matches
                                          that of any node on which any of the selected
                                          pods is running. Empty topologyKey is not
                                          allowed.
                                        type: string
                                    required:
                                    - topologyKey
                                    type: object
                                  type: array
                              type: object
                            tolerations:
                              description: The pod this Toleration is attached to
                                tolerates any taint that matches the triple <key,value,effect>
                                using the matching operator <operator>
                              items:
                                description: The pod this Toleration is attached to
                                  tolerates any taint that matches the triple <key,value,effect>
                                  using the matching operator <operator>.
                                properties:
                                  effect:
                                    description: Effect indicates the taint effect
                                      to match. Empty means match all taint effects.
                                      When specified, allowed values are NoSchedule,
                                      PreferNoSchedule and NoExecute.
                                    type: string
                                  key:
                                    description: Key is the taint key that the toleration
                                      applies to. Empty means match all taint keys.
                                      If the key is empty, operator must be Exists;
                                      this combination means to match all values and
                                      all keys.
                                    type: string
                                  operator:
                                    description: Operator represents a key's relationship
                                      to the value. Valid operators are Exists and
                                      Equal. Defaults to Equal. Exists is equivalent
                                      to wildcard for value, so that a pod can tolerate
                                      all taints of a particular category.
                                    type: string
                                  tolerationSeconds:
                                    description: TolerationSeconds represents the
                                      period of time the toleration (which must be
                                      of effect NoExecute, otherwise this field is
                                      ignored) tolerates the taint. By default, it
                                      is not set, which means tolerate the taint forever
                                      (do not evict). Zero and negative values will
                                      be treated as 0 (evict immediately) by the system.
                                    format: int64
                                    type: integer
                                  value:
                                    description: Value is the taint value the toleration
                                      matches to. If the operator is Exists, the value
                                      should be empty, otherwise just a regular string.
                                    type: string
                                type: object
                              type: array
                            topologySpreadConstraints:
                              description: TopologySpreadConstraint specifies how
                                to spread matching pods among the given topology
                              items:
                                description: TopologySpreadConstraint specifies how
                                  to spread matching pods among the given topology.
                                properties:
                                  labelSelector:
                                    description: LabelSelector is used to find matching
                                      pods. Pods that match this label selector are
                                      counted to determine the number of pods in their
                                      corresponding topology domain.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: A label selector requirement
                                            is a selector that contains values, a
                                            key, and an operator that relates the
                                            key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: operator represents a key's
                                                relationship to a set of values. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: matchLabels is a map of {key,value}
                                          pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions,
                                          whose key field is "key", the operator is
                                          "In", and the values array contains only
                                          "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  matchLabelKeys:
                                    description: "MatchLabelKeys is a set of pod label
                                      keys to select the pods over which spreading
                                      will be calculated. The keys are used to lookup
                                      values from the incoming pod labels, those key-value
                                      labels are ANDed with labelSelector to select
                                      the group of existing pods over which spreading
                                      will be calculated for the incoming pod. The
                                      same key is forbidden to exist in both MatchLabelKeys
                                      and LabelSelector. MatchLabelKeys cannot be
                                      set when LabelSelector isn't set. Keys that
                                      don't exist in the incoming pod labels will
                                      be ignored. A null or empty list means only
                                      match against labelSelector. \n This is a beta
                                      field and requires the MatchLabelKeysInPodTopologySpread
                                      feature gate to be enabled (enabled by default)."
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  maxSkew:
                                    description: 'MaxSkew describes the degree to
                                      which pods may be unevenly distributed. When
                                      `whenUnsatisfiable=DoNotSchedule`, it is the
                                      maximum permitted difference between the number
                                      of matching pods in the target topology and
                                      the global minimum. The global minimum is the
                                      minimum number of matching pods in an eligible
                                      domain or zero if the number of eligible domains
                                      is less than MinDomains. For example, in a 3-zone
                                      cluster, MaxSkew is set to 1, and pods with
                                      the same labelSelector spread as 2/2/1: In this
                                      case, the global minimum is 1. | zone1 | zone2
                                      | zone3 | |  P P  |  P P  |   P   | - if MaxSkew
                                      is 1, incoming pod can only be scheduled to
                                      zone3 to become 2/2/2; scheduling it onto zone1(zone2)
                                      would make the ActualSkew(3-1) on zone1(zone2)
                                      violate MaxSkew(1). - if MaxSkew is 2, incoming
                                      pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`,
                                      it is used to give higher precedence to topologies
                                      that satisfy it. It''s a required field. Default
                                      value is 1 and 0 is not allowed.'
                                    format: int32
                                    type: integer
                                  minDomains:
                                    description: "MinDomains indicates a minimum number
                                      of eligible domains. When the number of eligible
                                      domains with matching topology keys is less
                                      than minDomains, Pod Topology Spread treats
                                      \"global minimum\" as 0, and then the calculation
                                      of Skew is performed. And when the number of
                                      eligible domains with matching topology keys
                                      equals or greater than minDomains, this value
                                      has no effect on scheduling. As a result, when
                                      the number of eligible domains is less than
                                      minDomains, scheduler won't schedule more than
                                      maxSkew Pods to those domains. If value is nil,
                                      the constraint behaves as if MinDomains is equal
                                      to 1. Valid values are integers greater than
                                      0. When value is not nil, WhenUnsatisfiable
                                      must be DoNotSchedule. \n For example, in a
                                      3-zone cluster, MaxSkew is set to 2, MinDomains
                                      is set to 5 and pods with the same labelSelector
                                      spread as 2/2/2: | zone1 | zone2 | zone3 | |
                                      \ P P  |  P P  |  P P  | The number of domains
                                      is less than 5(MinDomains), so \"global minimum\"
                                      is treated as 0. In this situation, new pod
                                      with the same labelSelector cannot be scheduled,
                                      because computed skew will be 3(3 - 0) if new
                                      Pod is scheduled to any of the three zones,
                                      it will violate MaxSkew. \n This is a beta field
                                      and requires the MinDomainsInPodTopologySpread
                                      feature gate to be enabled (enabled by default)."
                                    format: int32
                                    type: integer
                                  nodeAffinityPolicy:
                                    description: "NodeAffinityPolicy indicates how
                                      we will treat Pod's nodeAffinity/nodeSelector
                                      when calculating pod topology spread skew. Options
                                      are: - Honor: only nodes matching nodeAffinity/nodeSelector
                                      are included in the calculations. - Ignore:
                                      nodeAffinity/nodeSelector are ignored. All nodes
                                      are included in the calculations. \n If this
                                      value is nil, the behavior is equivalent to
                                      the Honor policy. This is a beta-level feature
                                      default enabled by the NodeInclusionPolicyInPodTopologySpread
                                      feature flag."
                                    type: string
                                  nodeTaintsPolicy:
                                    description: "NodeTaintsPolicy indicates how we
                                      will treat node taints when calculating pod
                                      topology spread skew. Options are: - Honor:
                                      nodes without taints, along with tainted nodes
                                      for which the incoming pod has a toleration,
                                      are included. - Ignore: node taints are ignored.
                                      All nodes are included. \n If this value is
                                      nil, the behavior is equivalent to the Ignore
                                      policy. This is a beta-level feature default
                                      enabled by the NodeInclusionPolicyInPodTopologySpread
                                      feature flag."
                                    type: string
                                  topologyKey:
                                    description: TopologyKey is the key of node labels.
                                      Nodes that have a label with this key and identical
                                      values are considered to be in the same topology.
                                      We consider each <key, value> as a "bucket",
                                      and try to put balanced number of pods into
                                      each bucket. We define a domain as a particular
                                      instance of a topology. Also, we define an eligible
                                      domain as a domain whose nodes meet the requirements
                                      of nodeAffinityPolicy and nodeTaintsPolicy.
                                      e.g. If TopologyKey is "kubernetes.io/hostname",
                                      each Node is a domain of that topology. And,
                                      if TopologyKey is "topology.kubernetes.io/zone",
                                      each zone is a domain of that topology. It's
                                      a required field.
                                    type: string
                                  whenUnsatisfiable:
                                    description: 'WhenUnsatisfiable indicates how
                                      to deal with a pod if it doesn''t satisfy the
                                      spread constraint. - DoNotSchedule (default)
                                      tells the scheduler not to schedule it. - ScheduleAnyway
                                      tells the scheduler to schedule the pod in any
                                      location, but giving higher precedence to topologies
                                      that would help reduce the skew. A constraint
                                      is considered "Unsatisfiable" for an incoming
                                      pod if and only if every possible node assignment
                                      for that pod would violate "MaxSkew" on some
                                      topology. For example, in a 3-zone cluster,
                                      MaxSkew is set to 1, and pods with the same
                                      labelSelector spread as 3/1/1: | zone1 | zone2
                                      | zone3 | | P P P |   P   |   P   | If WhenUnsatisfiable
                                      is set to DoNotSchedule, incoming pod can only
                                      be scheduled to zone2(zone3) to become 3/2/1(3/1/2)
                                      as ActualSkew(2-1) on zone2(zone3) satisfies
                                      MaxSkew(1). In other words, the cluster can
                                      still be imbalanced, but scheduler won''t make
                                      it *more* imbalanced. It''s a required field.'
                                    type: string
                                required:
                                - maxSkew
                                - topologyKey
                                - whenUnsatisfiable
                                type: object
                              type: array
                          type: object
                          x-kubernetes-preserve-unknown-fields: true
                        resources:
                          description: ResourceRequirements describes the compute
                            resource requirements.
                          nullable: true
                          properties:
                            claims:
                              description: "Claims lists the names of resources, defined
                                in spec.resourceClaims, that are used by this container.
                                \n This is an alpha field and requires enabling the
                                DynamicResourceAllocation feature gate. \n This field
                                is immutable. It can only be set for containers."
                              items:
                                description: ResourceClaim references one entry in
                                  PodSpec.ResourceClaims.
                                properties:
                                  name:
                                    description: Name must match the name of one entry
                                      in pod.spec.resourceClaims of the Pod where
                                      this field is used. It makes that resource available
                                      inside a container.
                                    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
                              description: 'Limits describes the maximum amount of
                                compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                              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
                              description: 'Requests describes the minimum amount
                                of compute resources required. If Requests is omitted
                                for a container, it defaults to Limits if that is
                                explicitly specified, otherwise to an implementation-defined
                                value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                              type: object
                          type: object
                          x-kubernetes-preserve-unknown-fields: true
                        schedulerName:
                          description: Scheduler name for OSD pod placement
                          type: string
                        tuneDeviceClass:
                          description: TuneSlowDeviceClass Tune the OSD when running
                            on a slow Device Class
                          type: boolean
                        tuneFastDeviceClass:
                          description: TuneFastDeviceClass Tune the OSD when running
                            on a fast Device Class
                          type: boolean
                        volumeClaimTemplates:
                          description: VolumeClaimTemplates is a list of PVC templates
                            for the underlying storage devices
                          items:
                            description: PersistentVolumeClaim is a user's request
                              for and claim to a persistent volume
                            properties:
                              apiVersion:
                                description: 'APIVersion defines the versioned schema
                                  of this representation of an object. Servers should
                                  convert recognized schemas to the latest internal
                                  value, and may reject unrecognized values. More
                                  info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
                                type: string
                              kind:
                                description: 'Kind is a string value representing
                                  the REST resource this object represents. Servers
                                  may infer this from the endpoint the client submits
                                  requests to. Cannot be updated. In CamelCase. More
                                  info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                                type: string
                              metadata:
                                description: 'Standard object''s metadata. More info:
                                  https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata'
                                properties:
                                  annotations:
                                    additionalProperties:
                                      type: string
                                    type: object
                                    x-kubernetes-preserve-unknown-fields: true
                                  finalizers:
                                    items:
                                      type: string
                                    type: array
                                  labels:
                                    additionalProperties:
                                      type: string
                                    type: object
                                  name:
                                    type: string
                                  namespace:
                                    type: string
                                type: object
                              spec:
                                description: 'spec defines the desired characteristics
                                  of a volume requested by a pod author. More info:
                                  https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims'
                                properties:
                                  accessModes:
                                    description: 'accessModes contains the desired
                                      access modes the volume should have. More info:
                                      https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1'
                                    items:
                                      type: string
                                    type: array
                                  dataSource:
                                    description: 'dataSource field can be used to
                                      specify either: * An existing VolumeSnapshot
                                      object (snapshot.storage.k8s.io/VolumeSnapshot)
                                      * An existing PVC (PersistentVolumeClaim) If
                                      the provisioner or an external controller can
                                      support the specified data source, it will create
                                      a new volume based on the contents of the specified
                                      data source. When the AnyVolumeDataSource feature
                                      gate is enabled, dataSource contents will be
                                      copied to dataSourceRef, and dataSourceRef contents
                                      will be copied to dataSource when dataSourceRef.namespace
                                      is not specified. If the namespace is specified,
                                      then dataSourceRef will not be copied to dataSource.'
                                    properties:
                                      apiGroup:
                                        description: APIGroup is the group for the
                                          resource being referenced. If APIGroup is
                                          not specified, the specified Kind must be
                                          in the core API group. For any other third-party
                                          types, APIGroup is required.
                                        type: string
                                      kind:
                                        description: Kind is the type of resource
                                          being referenced
                                        type: string
                                      name:
                                        description: Name is the name of resource
                                          being referenced
                                        type: string
                                    required:
                                    - kind
                                    - name
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  dataSourceRef:
                                    description: 'dataSourceRef specifies the object
                                      from which to populate the volume with data,
                                      if a non-empty volume is desired. This may be
                                      any object from a non-empty API group (non core
                                      object) or a PersistentVolumeClaim object. When
                                      this field is specified, volume binding will
                                      only succeed if the type of the specified object
                                      matches some installed volume populator or dynamic
                                      provisioner. This field will replace the functionality
                                      of the dataSource field and as such if both
                                      fields are non-empty, they must have the same
                                      value. For backwards compatibility, when namespace
                                      isn''t specified in dataSourceRef, both fields
                                      (dataSource and dataSourceRef) will be set to
                                      the same value automatically if one of them
                                      is empty and the other is non-empty. When namespace
                                      is specified in dataSourceRef, dataSource isn''t
                                      set to the same value and must be empty. There
                                      are three important differences between dataSource
                                      and dataSourceRef: * While dataSource only allows
                                      two specific types of objects, dataSourceRef
                                      allows any non-core object, as well as PersistentVolumeClaim
                                      objects. * While dataSource ignores disallowed
                                      values (dropping them), dataSourceRef preserves
                                      all values, and generates an error if a disallowed
                                      value is specified. * While dataSource only
                                      allows local objects, dataSourceRef allows objects
                                      in any namespaces. (Beta) Using this field requires
                                      the AnyVolumeDataSource feature gate to be enabled.
                                      (Alpha) Using the namespace field of dataSourceRef
                                      requires the CrossNamespaceVolumeDataSource
                                      feature gate to be enabled.'
                                    properties:
                                      apiGroup:
                                        description: APIGroup is the group for the
                                          resource being referenced. If APIGroup is
                                          not specified, the specified Kind must be
                                          in the core API group. For any other third-party
                                          types, APIGroup is required.
                                        type: string
                                      kind:
                                        description: Kind is the type of resource
                                          being referenced
                                        type: string
                                      name:
                                        description: Name is the name of resource
                                          being referenced
                                        type: string
                                      namespace:
                                        description: Namespace is the namespace of
                                          resource being referenced Note that when
                                          a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant
                                          object is required in the referent namespace
                                          to allow that namespace's owner to accept
                                          the reference. See the ReferenceGrant documentation
                                          for details. (Alpha) This field requires
                                          the CrossNamespaceVolumeDataSource feature
                                          gate to be enabled.
                                        type: string
                                    required:
                                    - kind
                                    - name
                                    type: object
                                  resources:
                                    description: 'resources represents the minimum
                                      resources the volume should have. If RecoverVolumeExpansionFailure
                                      feature is enabled users are allowed to specify
                                      resource requirements that are lower than previous
                                      value but must still be higher than capacity
                                      recorded in the status field of the claim. More
                                      info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources'
                                    properties:
                                      claims:
                                        description: "Claims lists the names of resources,
                                          defined in spec.resourceClaims, that are
                                          used by this container. \n This is an alpha
                                          field and requires enabling the DynamicResourceAllocation
                                          feature gate. \n This field is immutable.
                                          It can only be set for containers."
                                        items:
                                          description: ResourceClaim references one
                                            entry in PodSpec.ResourceClaims.
                                          properties:
                                            name:
                                              description: Name must match the name
                                                of one entry in pod.spec.resourceClaims
                                                of the Pod where this field is used.
                                                It makes that resource available inside
                                                a container.
                                              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
                                        description: 'Limits describes the maximum
                                          amount of compute resources allowed. More
                                          info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                                        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
                                        description: 'Requests describes the minimum
                                          amount of compute resources required. If
                                          Requests is omitted for a container, it
                                          defaults to Limits if that is explicitly
                                          specified, otherwise to an implementation-defined
                                          value. Requests cannot exceed Limits. More
                                          info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                                        type: object
                                    type: object
                                  selector:
                                    description: selector is a label query over volumes
                                      to consider for binding.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: A label selector requirement
                                            is a selector that contains values, a
                                            key, and an operator that relates the
                                            key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: operator represents a key's
                                                relationship to a set of values. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: matchLabels is a map of {key,value}
                                          pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions,
                                          whose key field is "key", the operator is
                                          "In", and the values array contains only
                                          "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  storageClassName:
                                    description: 'storageClassName is the name of
                                      the StorageClass required by the claim. More
                                      info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1'
                                    type: string
                                  volumeMode:
                                    description: volumeMode defines what type of volume
                                      is required by the claim. Value of Filesystem
                                      is implied when not included in claim spec.
                                    type: string
                                  volumeName:
                                    description: volumeName is the binding reference
                                      to the PersistentVolume backing this claim.
                                    type: string
                                type: object
                              status:
                                description: 'status represents the current information/status
                                  of a persistent volume claim. Read-only. More info:
                                  https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims'
                                properties:
                                  accessModes:
                                    description: 'accessModes contains the actual
                                      access modes the volume backing the PVC has.
                                      More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1'
                                    items:
                                      type: string
                                    type: array
                                  allocatedResourceStatuses:
                                    additionalProperties:
                                      description: When a controller receives persistentvolume
                                        claim update with ClaimResourceStatus for
                                        a resource that it does not recognizes, then
                                        it should ignore that update and let other
                                        controllers handle it.
                                      type: string
                                    description: "allocatedResourceStatuses stores
                                      status of resource being resized for the given
                                      PVC. Key names follow standard Kubernetes label
                                      syntax. Valid values are either: * Un-prefixed
                                      keys: - storage - the capacity of the volume.
                                      * Custom resources must use implementation-defined
                                      prefixed names such as \"example.com/my-custom-resource\"
                                      Apart from above values - keys that are unprefixed
                                      or have kubernetes.io prefix are considered
                                      reserved and hence may not be used. \n ClaimResourceStatus
                                      can be in any of following states: - ControllerResizeInProgress:
                                      State set when resize controller starts resizing
                                      the volume in control-plane. - ControllerResizeFailed:
                                      State set when resize has failed in resize controller
                                      with a terminal error. - NodeResizePending:
                                      State set when resize controller has finished
                                      resizing the volume but further resizing of
                                      volume is needed on the node. - NodeResizeInProgress:
                                      State set when kubelet starts resizing the volume.
                                      - NodeResizeFailed: State set when resizing
                                      has failed in kubelet with a terminal error.
                                      Transient errors don't set NodeResizeFailed.
                                      For example: if expanding a PVC for more capacity
                                      - this field can be one of the following states:
                                      - pvc.status.allocatedResourceStatus['storage']
                                      = \"ControllerResizeInProgress\" - pvc.status.allocatedResourceStatus['storage']
                                      = \"ControllerResizeFailed\" - pvc.status.allocatedResourceStatus['storage']
                                      = \"NodeResizePending\" - pvc.status.allocatedResourceStatus['storage']
                                      = \"NodeResizeInProgress\" - pvc.status.allocatedResourceStatus['storage']
                                      = \"NodeResizeFailed\" When this field is not
                                      set, it means that no resize operation is in
                                      progress for the given PVC. \n A controller
                                      that receives PVC update with previously unknown
                                      resourceName or ClaimResourceStatus should ignore
                                      the update for the purpose it was designed.
                                      For example - a controller that only is responsible
                                      for resizing capacity of the volume, should
                                      ignore PVC updates that change other valid resources
                                      associated with PVC. \n This is an alpha field
                                      and requires enabling RecoverVolumeExpansionFailure
                                      feature."
                                    type: object
                                    x-kubernetes-map-type: granular
                                  allocatedResources:
                                    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
                                    description: "allocatedResources tracks the resources
                                      allocated to a PVC including its capacity. Key
                                      names follow standard Kubernetes label syntax.
                                      Valid values are either: * Un-prefixed keys:
                                      - storage - the capacity of the volume. * Custom
                                      resources must use implementation-defined prefixed
                                      names such as \"example.com/my-custom-resource\"
                                      Apart from above values - keys that are unprefixed
                                      or have kubernetes.io prefix are considered
                                      reserved and hence may not be used. \n Capacity
                                      reported here may be larger than the actual
                                      capacity when a volume expansion operation is
                                      requested. For storage quota, the larger value
                                      from allocatedResources and PVC.spec.resources
                                      is used. If allocatedResources is not set, PVC.spec.resources
                                      alone is used for quota calculation. If a volume
                                      expansion capacity request is lowered, allocatedResources
                                      is only lowered if there are no expansion operations
                                      in progress and if the actual volume capacity
                                      is equal or lower than the requested capacity.
                                      \n A controller that receives PVC update with
                                      previously unknown resourceName should ignore
                                      the update for the purpose it was designed.
                                      For example - a controller that only is responsible
                                      for resizing capacity of the volume, should
                                      ignore PVC updates that change other valid resources
                                      associated with PVC. \n This is an alpha field
                                      and requires enabling RecoverVolumeExpansionFailure
                                      feature."
                                    type: object
                                  capacity:
                                    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
                                    description: capacity represents the actual resources
                                      of the underlying volume.
                                    type: object
                                  conditions:
                                    description: conditions is the current Condition
                                      of persistent volume claim. If underlying persistent
                                      volume is being resized then the Condition will
                                      be set to 'ResizeStarted'.
                                    items:
                                      description: PersistentVolumeClaimCondition
                                        contains details about state of pvc
                                      properties:
                                        lastProbeTime:
                                          description: lastProbeTime is the time we
                                            probed the condition.
                                          format: date-time
                                          type: string
                                        lastTransitionTime:
                                          description: lastTransitionTime is the time
                                            the condition transitioned from one status
                                            to another.
                                          format: date-time
                                          type: string
                                        message:
                                          description: message is the human-readable
                                            message indicating details about last
                                            transition.
                                          type: string
                                        reason:
                                          description: reason is a unique, this should
                                            be a short, machine understandable string
                                            that gives the reason for condition's
                                            last transition. If it reports "ResizeStarted"
                                            that means the underlying persistent volume
                                            is being resized.
                                          type: string
                                        status:
                                          type: string
                                        type:
                                          description: PersistentVolumeClaimConditionType
                                            is a valid value of PersistentVolumeClaimCondition.Type
                                          type: string
                                      required:
                                      - status
                                      - type
                                      type: object
                                    type: array
                                  phase:
                                    description: phase represents the current phase
                                      of PersistentVolumeClaim.
                                    type: string
                                type: object
                            type: object
                          type: array
                      required:
                      - count
                      - name
                      - volumeClaimTemplates
                      type: object
                    nullable: true
                    type: array
                  store:
                    description: OSDStore is the backend storage type used for creating
                      the OSDs
                    properties:
                      type:
                        description: Type of backend storage to be used while creating
                          OSDs. If empty, then bluestore will be used
                        enum:
                        - bluestore
                        - bluestore-rdr
                        type: string
                      updateStore:
                        description: UpdateStore updates the backend store for existing
                          OSDs. It destroys each OSD one at a time, cleans up the
                          backing disk and prepares same OSD on that disk
                        pattern: ^$|^yes-really-update-store$
                        type: string
                    type: object
                  useAllDevices:
                    description: Whether to consume all the storage devices found
                      on a machine
                    type: boolean
                  useAllNodes:
                    type: boolean
                  volumeClaimTemplates:
                    description: PersistentVolumeClaims to use as storage
                    items:
                      description: PersistentVolumeClaim is a user's request for and
                        claim to a persistent volume
                      properties:
                        apiVersion:
                          description: 'APIVersion defines the versioned schema of
                            this representation of an object. Servers should convert
                            recognized schemas to the latest internal value, and may
                            reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
                          type: string
                        kind:
                          description: 'Kind is a string value representing the REST
                            resource this object represents. Servers may infer this
                            from the endpoint the client submits requests to. Cannot
                            be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                          type: string
                        metadata:
                          description: 'Standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata'
                          properties:
                            annotations:
                              additionalProperties:
                                type: string
                              type: object
                            finalizers:
                              items:
                                type: string
                              type: array
                            labels:
                              additionalProperties:
                                type: string
                              type: object
                            name:
                              type: string
                            namespace:
                              type: string
                          type: object
                        spec:
                          description: 'spec defines the desired characteristics of
                            a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims'
                          properties:
                            accessModes:
                              description: 'accessModes contains the desired access
                                modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1'
                              items:
                                type: string
                              type: array
                            dataSource:
                              description: 'dataSource field can be used to specify
                                either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
                                * An existing PVC (PersistentVolumeClaim) If the provisioner
                                or an external controller can support the specified
                                data source, it will create a new volume based on
                                the contents of the specified data source. When the
                                AnyVolumeDataSource feature gate is enabled, dataSource
                                contents will be copied to dataSourceRef, and dataSourceRef
                                contents will be copied to dataSource when dataSourceRef.namespace
                                is not specified. If the namespace is specified, then
                                dataSourceRef will not be copied to dataSource.'
                              properties:
                                apiGroup:
                                  description: APIGroup is the group for the resource
                                    being referenced. If APIGroup is not specified,
                                    the specified Kind must be in the core API group.
                                    For any other third-party types, APIGroup is required.
                                  type: string
                                kind:
                                  description: Kind is the type of resource being
                                    referenced
                                  type: string
                                name:
                                  description: Name is the name of resource being
                                    referenced
                                  type: string
                              required:
                              - kind
                              - name
                              type: object
                              x-kubernetes-map-type: atomic
                            dataSourceRef:
                              description: 'dataSourceRef specifies the object from
                                which to populate the volume with data, if a non-empty
                                volume is desired. This may be any object from a non-empty
                                API group (non core object) or a PersistentVolumeClaim
                                object. When this field is specified, volume binding
                                will only succeed if the type of the specified object
                                matches some installed volume populator or dynamic
                                provisioner. This field will replace the functionality
                                of the dataSource field and as such if both fields
                                are non-empty, they must have the same value. For
                                backwards compatibility, when namespace isn''t specified
                                in dataSourceRef, both fields (dataSource and dataSourceRef)
                                will be set to the same value automatically if one
                                of them is empty and the other is non-empty. When
                                namespace is specified in dataSourceRef, dataSource
                                isn''t set to the same value and must be empty. There
                                are three important differences between dataSource
                                and dataSourceRef: * While dataSource only allows
                                two specific types of objects, dataSourceRef allows
                                any non-core object, as well as PersistentVolumeClaim
                                objects. * While dataSource ignores disallowed values
                                (dropping them), dataSourceRef preserves all values,
                                and generates an error if a disallowed value is specified.
                                * While dataSource only allows local objects, dataSourceRef
                                allows objects in any namespaces. (Beta) Using this
                                field requires the AnyVolumeDataSource feature gate
                                to be enabled. (Alpha) Using the namespace field of
                                dataSourceRef requires the CrossNamespaceVolumeDataSource
                                feature gate to be enabled.'
                              properties:
                                apiGroup:
                                  description: APIGroup is the group for the resource
                                    being referenced. If APIGroup is not specified,
                                    the specified Kind must be in the core API group.
                                    For any other third-party types, APIGroup is required.
                                  type: string
                                kind:
                                  description: Kind is the type of resource being
                                    referenced
                                  type: string
                                name:
                                  description: Name is the name of resource being
                                    referenced
                                  type: string
                                namespace:
                                  description: Namespace is the namespace of resource
                                    being referenced Note that when a namespace is
                                    specified, a gateway.networking.k8s.io/ReferenceGrant
                                    object is required in the referent namespace to
                                    allow that namespace's owner to accept the reference.
                                    See the ReferenceGrant documentation for details.
                                    (Alpha) This field requires the CrossNamespaceVolumeDataSource
                                    feature gate to be enabled.
                                  type: string
                              required:
                              - kind
                              - name
                              type: object
                            resources:
                              description: 'resources represents the minimum resources
                                the volume should have. If RecoverVolumeExpansionFailure
                                feature is enabled users are allowed to specify resource
                                requirements that are lower than previous value but
                                must still be higher than capacity recorded in the
                                status field of the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources'
                              properties:
                                claims:
                                  description: "Claims lists the names of resources,
                                    defined in spec.resourceClaims, that are used
                                    by this container. \n This is an alpha field and
                                    requires enabling the DynamicResourceAllocation
                                    feature gate. \n This field is immutable. It can
                                    only be set for containers."
                                  items:
                                    description: ResourceClaim references one entry
                                      in PodSpec.ResourceClaims.
                                    properties:
                                      name:
                                        description: Name must match the name of one
                                          entry in pod.spec.resourceClaims of the
                                          Pod where this field is used. It makes that
                                          resource available inside a container.
                                        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
                                  description: 'Limits describes the maximum amount
                                    of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                                  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
                                  description: 'Requests describes the minimum amount
                                    of compute resources required. If Requests is
                                    omitted for a container, it defaults to Limits
                                    if that is explicitly specified, otherwise to
                                    an implementation-defined value. Requests cannot
                                    exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                                  type: object
                              type: object
                            selector:
                              description: selector is a label query over volumes
                                to consider for binding.
                              properties:
                                matchExpressions:
                                  description: matchExpressions is a list of label
                                    selector requirements. The requirements are ANDed.
                                  items:
                                    description: A label selector requirement is a
                                      selector that contains values, a key, and an
                                      operator that relates the key and values.
                                    properties:
                                      key:
                                        description: key is the label key that the
                                          selector applies to.
                                        type: string
                                      operator:
                                        description: operator represents a key's relationship
                                          to a set of values. Valid operators are
                                          In, NotIn, Exists and DoesNotExist.
                                        type: string
                                      values:
                                        description: values is an array of string
                                          values. If the operator is In or NotIn,
                                          the values array must be non-empty. If the
                                          operator is Exists or DoesNotExist, the
                                          values array must be empty. This array is
                                          replaced during a strategic merge patch.
                                        items:
                                          type: string
                                        type: array
                                    required:
                                    - key
                                    - operator
                                    type: object
                                  type: array
                                matchLabels:
                                  additionalProperties:
                                    type: string
                                  description: matchLabels is a map of {key,value}
                                    pairs. A single {key,value} in the matchLabels
                                    map is equivalent to an element of matchExpressions,
                                    whose key field is "key", the operator is "In",
                                    and the values array contains only "value". The
                                    requirements are ANDed.
                                  type: object
                              type: object
                              x-kubernetes-map-type: atomic
                            storageClassName:
                              description: 'storageClassName is the name of the StorageClass
                                required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1'
                              type: string
                            volumeMode:
                              description: volumeMode defines what type of volume
                                is required by the claim. Value of Filesystem is implied
                                when not included in claim spec.
                              type: string
                            volumeName:
                              description: volumeName is the binding reference to
                                the PersistentVolume backing this claim.
                              type: string
                          type: object
                        status:
                          description: 'status represents the current information/status
                            of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims'
                          properties:
                            accessModes:
                              description: 'accessModes contains the actual access
                                modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1'
                              items:
                                type: string
                              type: array
                            allocatedResourceStatuses:
                              additionalProperties:
                                description: When a controller receives persistentvolume
                                  claim update with ClaimResourceStatus for a resource
                                  that it does not recognizes, then it should ignore
                                  that update and let other controllers handle it.
                                type: string
                              description: "allocatedResourceStatuses stores status
                                of resource being resized for the given PVC. Key names
                                follow standard Kubernetes label syntax. Valid values
                                are either: * Un-prefixed keys: - storage - the capacity
                                of the volume. * Custom resources must use implementation-defined
                                prefixed names such as \"example.com/my-custom-resource\"
                                Apart from above values - keys that are unprefixed
                                or have kubernetes.io prefix are considered reserved
                                and hence may not be used. \n ClaimResourceStatus
                                can be in any of following states: - ControllerResizeInProgress:
                                State set when resize controller starts resizing the
                                volume in control-plane. - ControllerResizeFailed:
                                State set when resize has failed in resize controller
                                with a terminal error. - NodeResizePending: State
                                set when resize controller has finished resizing the
                                volume but further resizing of volume is needed on
                                the node. - NodeResizeInProgress: State set when kubelet
                                starts resizing the volume. - NodeResizeFailed: State
                                set when resizing has failed in kubelet with a terminal
                                error. Transient errors don't set NodeResizeFailed.
                                For example: if expanding a PVC for more capacity
                                - this field can be one of the following states: -
                                pvc.status.allocatedResourceStatus['storage'] = \"ControllerResizeInProgress\"
                                - pvc.status.allocatedResourceStatus['storage'] =
                                \"ControllerResizeFailed\" - pvc.status.allocatedResourceStatus['storage']
                                = \"NodeResizePending\" - pvc.status.allocatedResourceStatus['storage']
                                = \"NodeResizeInProgress\" - pvc.status.allocatedResourceStatus['storage']
                                = \"NodeResizeFailed\" When this field is not set,
                                it means that no resize operation is in progress for
                                the given PVC. \n A controller that receives PVC update
                                with previously unknown resourceName or ClaimResourceStatus
                                should ignore the update for the purpose it was designed.
                                For example - a controller that only is responsible
                                for resizing capacity of the volume, should ignore
                                PVC updates that change other valid resources associated
                                with PVC. \n This is an alpha field and requires enabling
                                RecoverVolumeExpansionFailure feature."
                              type: object
                              x-kubernetes-map-type: granular
                            allocatedResources:
                              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
                              description: "allocatedResources tracks the resources
                                allocated to a PVC including its capacity. Key names
                                follow standard Kubernetes label syntax. Valid values
                                are either: * Un-prefixed keys: - storage - the capacity
                                of the volume. * Custom resources must use implementation-defined
                                prefixed names such as \"example.com/my-custom-resource\"
                                Apart from above values - keys that are unprefixed
                                or have kubernetes.io prefix are considered reserved
                                and hence may not be used. \n Capacity reported here
                                may be larger than the actual capacity when a volume
                                expansion operation is requested. For storage quota,
                                the larger value from allocatedResources and PVC.spec.resources
                                is used. If allocatedResources is not set, PVC.spec.resources
                                alone is used for quota calculation. If a volume expansion
                                capacity request is lowered, allocatedResources is
                                only lowered if there are no expansion operations
                                in progress and if the actual volume capacity is equal
                                or lower than the requested capacity. \n A controller
                                that receives PVC update with previously unknown resourceName
                                should ignore the update for the purpose it was designed.
                                For example - a controller that only is responsible
                                for resizing capacity of the volume, should ignore
                                PVC updates that change other valid resources associated
                                with PVC. \n This is an alpha field and requires enabling
                                RecoverVolumeExpansionFailure feature."
                              type: object
                            capacity:
                              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
                              description: capacity represents the actual resources
                                of the underlying volume.
                              type: object
                            conditions:
                              description: conditions is the current Condition of
                                persistent volume claim. If underlying persistent
                                volume is being resized then the Condition will be
                                set to 'ResizeStarted'.
                              items:
                                description: PersistentVolumeClaimCondition contains
                                  details about state of pvc
                                properties:
                                  lastProbeTime:
                                    description: lastProbeTime is the time we probed
                                      the condition.
                                    format: date-time
                                    type: string
                                  lastTransitionTime:
                                    description: lastTransitionTime is the time the
                                      condition transitioned from one status to another.
                                    format: date-time
                                    type: string
                                  message:
                                    description: message is the human-readable message
                                      indicating details about last transition.
                                    type: string
                                  reason:
                                    description: reason is a unique, this should be
                                      a short, machine understandable string that
                                      gives the reason for condition's last transition.
                                      If it reports "ResizeStarted" that means the
                                      underlying persistent volume is being resized.
                                    type: string
                                  status:
                                    type: string
                                  type:
                                    description: PersistentVolumeClaimConditionType
                                      is a valid value of PersistentVolumeClaimCondition.Type
                                    type: string
                                required:
                                - status
                                - type
                                type: object
                              type: array
                            phase:
                              description: phase represents the current phase of PersistentVolumeClaim.
                              type: string
                          type: object
                      type: object
                    type: array
                type: object
              waitTimeoutForHealthyOSDInMinutes:
                description: WaitTimeoutForHealthyOSDInMinutes defines the time the
                  operator would wait before an OSD can be stopped for upgrade or
                  restart. If the timeout exceeds and OSD is not ok to stop, then
                  the operator would skip upgrade for the current OSD and proceed
                  with the next one if `continueUpgradeAfterChecksEvenIfNotHealthy`
                  is `false`. If `continueUpgradeAfterChecksEvenIfNotHealthy` is `true`,
                  then operator would continue with the upgrade of an OSD even if
                  its not ok to stop after the timeout. This timeout won't be applied
                  if `skipUpgradeChecks` is `true`. The default wait timeout is 10
                  minutes.
                format: int64
                type: integer
            type: object
          status:
            description: ClusterStatus represents the status of a Ceph cluster
            nullable: true
            properties:
              ceph:
                description: CephStatus is the details health of a Ceph Cluster
                properties:
                  capacity:
                    description: Capacity is the capacity information of a Ceph Cluster
                    properties:
                      bytesAvailable:
                        format: int64
                        type: integer
                      bytesTotal:
                        format: int64
                        type: integer
                      bytesUsed:
                        format: int64
                        type: integer
                      lastUpdated:
                        type: string
                    type: object
                  details:
                    additionalProperties:
                      description: CephHealthMessage represents the health message
                        of a Ceph Cluster
                      properties:
                        message:
                          type: string
                        severity:
                          type: string
                      required:
                      - message
                      - severity
                      type: object
                    type: object
                  fsid:
                    type: string
                  health:
                    type: string
                  lastChanged:
                    type: string
                  lastChecked:
                    type: string
                  previousHealth:
                    type: string
                  versions:
                    description: CephDaemonsVersions show the current ceph version
                      for different ceph daemons
                    properties:
                      cephfs-mirror:
                        additionalProperties:
                          type: integer
                        description: CephFSMirror shows CephFSMirror Ceph version
                        type: object
                      mds:
                        additionalProperties:
                          type: integer
                        description: Mds shows Mds Ceph version
                        type: object
                      mgr:
                        additionalProperties:
                          type: integer
                        description: Mgr shows Mgr Ceph version
                        type: object
                      mon:
                        additionalProperties:
                          type: integer
                        description: Mon shows Mon Ceph version
                        type: object
                      osd:
                        additionalProperties:
                          type: integer
                        description: Osd shows Osd Ceph version
                        type: object
                      overall:
                        additionalProperties:
                          type: integer
                        description: Overall shows overall Ceph version
                        type: object
                      rbd-mirror:
                        additionalProperties:
                          type: integer
                        description: RbdMirror shows RbdMirror Ceph version
                        type: object
                      rgw:
                        additionalProperties:
                          type: integer
                        description: Rgw shows Rgw Ceph version
                        type: object
                    type: object
                type: object
              conditions:
                items:
                  description: Condition represents a status condition on any Rook-Ceph
                    Custom Resource.
                  properties:
                    lastHeartbeatTime:
                      format: date-time
                      type: string
                    lastTransitionTime:
                      format: date-time
                      type: string
                    message:
                      type: string
                    reason:
                      description: ConditionReason is a reason for a condition
                      type: string
                    status:
                      type: string
                    type:
                      description: ConditionType represent a resource's status
                      type: string
                  type: object
                type: array
              message:
                type: string
              observedGeneration:
                description: ObservedGeneration is the latest generation observed
                  by the controller.
                format: int64
                type: integer
              phase:
                description: ConditionType represent a resource's status
                type: string
              state:
                description: ClusterState represents the state of a Ceph Cluster
                type: string
              storage:
                description: CephStorage represents flavors of Ceph Cluster Storage
                properties:
                  deviceClasses:
                    items:
                      description: DeviceClasses represents device classes of a Ceph
                        Cluster
                      properties:
                        name:
                          type: string
                      type: object
                    type: array
                  osd:
                    description: OSDStatus represents OSD status of the ceph Cluster
                    properties:
                      storeType:
                        additionalProperties:
                          type: integer
                        description: StoreType is a mapping between the OSD backend
                          stores and number of OSDs using these stores
                        type: object
                    type: object
                type: object
              version:
                description: ClusterVersion represents the version of a Ceph Cluster
                properties:
                  image:
                    type: string
                  version:
                    type: string
                type: object
            type: object
            x-kubernetes-preserve-unknown-fields: true
        required:
        - metadata
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: CephCluster
    listKind: CephClusterList
    plural: cephclusters
    singular: cephcluster
  conditions:
  - lastTransitionTime: "2023-09-08T15:16:44Z"
    message: no conflicts found
    reason: NoConflicts
    status: "True"
    type: NamesAccepted
  - lastTransitionTime: "2023-09-08T15:16:44Z"
    message: the initial names have been accepted
    reason: InitialNamesAccepted
    status: "True"
    type: Established
  storedVersions:
  - v1
