---
apiVersion: operators.coreos.com/v1alpha1
kind: ClusterServiceVersion
metadata:
  annotations:
    alm-examples: |
      [
        {
          "apiVersion": "operator.openshift.io/v1",
          "kind": "KubeDescheduler",
          "metadata": {
            "name": "cluster",
            "namespace": "openshift-kube-descheduler-operator"
          },
          "spec": {
            "deschedulingIntervalSeconds": 3600,
            "managementState": "Managed",
            "mode": "Predictive",
            "profiles": ["AffinityAndTaints"]
          }
        }
      ]
    capabilities: Basic Install
    categories: OpenShift Optional
    certified: "false"
    console.openshift.io/operator-monitoring-default: "true"
    containerImage: registry.redhat.io/kube-descheduler-operator/kube-descheduler-rhel9-operator@sha256:fe39ef6a8427b7d219f82f8d9bc2c92d4401531988f0de9e173c791e9d46bdd5
    createdAt: 2025/05/12
    description: An operator to run descheduler in Openshift cluster.
    features.operators.openshift.io/cnf: "false"
    features.operators.openshift.io/cni: "false"
    features.operators.openshift.io/csi: "false"
    features.operators.openshift.io/disconnected: "true"
    features.operators.openshift.io/fips-compliant: "true"
    features.operators.openshift.io/proxy-aware: "false"
    features.operators.openshift.io/tls-profiles: "false"
    features.operators.openshift.io/token-auth-aws: "false"
    features.operators.openshift.io/token-auth-azure: "false"
    features.operators.openshift.io/token-auth-gcp: "false"
    olm.operatorGroup: descheduler-operator
    olm.operatorNamespace: openshift-kube-descheduler-operator
    olm.skipRange: '>=5.1.0 <5.2.0'
    olm.targetNamespaces: openshift-kube-descheduler-operator
    operatorframework.io/cluster-monitoring: "true"
    operatorframework.io/properties: '{"properties":[{"type":"olm.gvk","value":{"group":"operator.openshift.io","kind":"KubeDescheduler","version":"v1"}},{"type":"olm.package","value":{"packageName":"cluster-kube-descheduler-operator","version":"5.2.0"}}]}'
    operatorframework.io/suggested-namespace: openshift-kube-descheduler-operator
    operators.openshift.io/valid-subscription: '["OpenShift Kubernetes Engine", "OpenShift
      Container Platform", "OpenShift Platform Plus"]'
    repository: https://github.com/openshift/cluster-kube-descheduler-operator
    support: Red Hat, Inc.
  creationTimestamp: "2025-10-27T12:41:42Z"
  finalizers:
  - operators.coreos.com/csv-cleanup
  generation: 1
  labels:
    olm.managed: "true"
    operatorframework.io/arch.amd64: supported
    operatorframework.io/arch.arm64: supported
    operatorframework.io/arch.ppc64le: supported
    operatorframework.io/arch.s390x: supported
    operators.coreos.com/cluster-kube-descheduler-operator.openshift-kube-descheduler-op: ""
  managedFields:
  - apiVersion: operators.coreos.com/v1alpha1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:alm-examples: {}
          f:capabilities: {}
          f:categories: {}
          f:certified: {}
          f:console.openshift.io/operator-monitoring-default: {}
          f:containerImage: {}
          f:createdAt: {}
          f:description: {}
          f:features.operators.openshift.io/cnf: {}
          f:features.operators.openshift.io/cni: {}
          f:features.operators.openshift.io/csi: {}
          f:features.operators.openshift.io/disconnected: {}
          f:features.operators.openshift.io/fips-compliant: {}
          f:features.operators.openshift.io/proxy-aware: {}
          f:features.operators.openshift.io/tls-profiles: {}
          f:features.operators.openshift.io/token-auth-aws: {}
          f:features.operators.openshift.io/token-auth-azure: {}
          f:features.operators.openshift.io/token-auth-gcp: {}
          f:olm.skipRange: {}
          f:operatorframework.io/cluster-monitoring: {}
          f:operatorframework.io/properties: {}
          f:operatorframework.io/suggested-namespace: {}
          f:operators.openshift.io/valid-subscription: {}
          f:repository: {}
          f:support: {}
        f:labels:
          .: {}
          f:olm.managed: {}
          f:operatorframework.io/arch.amd64: {}
          f:operatorframework.io/arch.arm64: {}
          f:operatorframework.io/arch.ppc64le: {}
          f:operatorframework.io/arch.s390x: {}
      f:spec:
        .: {}
        f:apiservicedefinitions: {}
        f:cleanup:
          .: {}
          f:enabled: {}
        f:customresourcedefinitions:
          .: {}
          f:owned: {}
        f:description: {}
        f:displayName: {}
        f:icon: {}
        f:install:
          .: {}
          f:spec:
            .: {}
            f:clusterPermissions: {}
            f:deployments: {}
          f:strategy: {}
        f:installModes: {}
        f:keywords: {}
        f:labels:
          .: {}
          f:olm-owner-enterprise-app: {}
          f:olm-status-descriptors: {}
        f:links: {}
        f:maintainers: {}
        f:maturity: {}
        f:minKubeVersion: {}
        f:provider:
          .: {}
          f:name: {}
        f:relatedImages: {}
        f:replaces: {}
        f:skips: {}
        f:version: {}
    manager: catalog
    operation: Update
    time: "2025-10-27T12:41:42Z"
  - apiVersion: operators.coreos.com/v1alpha1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          f:olm.operatorGroup: {}
          f:olm.operatorNamespace: {}
          f:olm.targetNamespaces: {}
        f:finalizers:
          .: {}
          v:"operators.coreos.com/csv-cleanup": {}
        f:labels:
          f:operators.coreos.com/cluster-kube-descheduler-operator.openshift-kube-descheduler-op: {}
    manager: olm
    operation: Update
    time: "2025-10-27T12:41:43Z"
  - apiVersion: operators.coreos.com/v1alpha1
    fieldsType: FieldsV1
    fieldsV1:
      f:status:
        .: {}
        f:cleanup: {}
        f:conditions: {}
        f:lastTransitionTime: {}
        f:lastUpdateTime: {}
        f:message: {}
        f:phase: {}
        f:reason: {}
        f:requirementStatus: {}
    manager: olm
    operation: Update
    subresource: status
    time: "2025-10-27T12:41:49Z"
  name: clusterkubedescheduleroperator.v5.2.0
  namespace: openshift-kube-descheduler-operator
  resourceVersion: "54021"
  uid: 75799612-45f5-4555-a597-e1be98a89bbd
spec:
  apiservicedefinitions: {}
  cleanup:
    enabled: false
  customresourcedefinitions:
    owned:
    - description: KubeDescheduler is the Schema for the deschedulers API
      displayName: Kube Descheduler
      kind: KubeDescheduler
      name: kubedeschedulers.operator.openshift.io
      version: v1
  description: |
    The Kube Descheduler Operator provides the ability to evict a running pod so that the pod can be rescheduled onto a more suitable node.

    There are several situations where descheduling can benefit your cluster:

    * Nodes are underutilized or overutilized.
    * Pod and node affinity requirements, such as taints or labels, have changed and the original scheduling decisions are no longer appropriate for certain nodes.
    * Node failure requires pods to be moved.
    * New nodes are added to clusters.

    ## Descheduler Profiles

    Once the operator is installed, you can configure one or more profiles to identify pods to evict. The scheduler will schedule the replacement of the evicted pods.

    The following profiles are available:

    * AffinityAndTaints
    * TopologyAndDuplicates
    * SoftTopologyAndDuplicates
    * LifecycleAndUtilization
    * LongLifecycle
    * CompactAndScale
    * EvictPodsWithPVC
    * EvictPodsWithLocalStorage

    These profiles are documented in detail in the [descheduler operator README](https://github.com/openshift/cluster-kube-descheduler-operator#profiles).

    ## Additional Parameters

    In addition to the profiles, the following parameters can be configured:

    * `deschedulingIntervalSeconds` - Set the number of seconds between descheduler runs. A value of `0` in this field runs the descheduler once and exits.
    * `mode` - Configures the descheduler to either evict pods or to simulate the eviction.
    * `profileCustomizations` - Allows certain profile parameters to be tweaked, such as `podLifetime` (see [README](https://github.com/openshift/cluster-kube-descheduler-operator#profile-customizations) for more info).
    * `evictionLimits` - Restricts the number of evictions during each descheduling run.
  displayName: Kube Descheduler Operator
  icon:
  - base64data: [encoded data, 5096 characters]
    mediatype: image/png
  install:
    spec:
      clusterPermissions:
      - rules:
        - apiGroups:
          - config.openshift.io
          resources:
          - schedulers
          verbs:
          - get
          - watch
          - list
        - apiGroups:
          - monitoring.coreos.com
          resources:
          - servicemonitors
          - prometheusrules
          verbs:
          - get
          - watch
          - list
          - create
          - update
          - patch
          - delete
          - deletecollection
        - apiGroups:
          - monitoring.coreos.com
          resourceNames:
          - k8s
          resources:
          - prometheuses/api
          verbs:
          - get
          - create
          - update
        - apiGroups:
          - operator.openshift.io
          resources:
          - kubedeschedulers
          - kubedeschedulers/status
          verbs:
          - get
          - watch
          - list
          - create
          - update
          - patch
          - delete
          - deletecollection
        - apiGroups:
          - ""
          resources:
          - services
          - configmaps
          - secrets
          - events
          - serviceaccounts
          verbs:
          - get
          - watch
          - list
          - create
          - update
          - patch
          - delete
          - deletecollection
        - apiGroups:
          - ""
          resources:
          - namespaces
          - pods
          verbs:
          - get
          - watch
          - list
        - apiGroups:
          - ""
          resources:
          - nodes
          verbs:
          - get
          - watch
          - list
          - patch
          - update
        - apiGroups:
          - ""
          resources:
          - pods/eviction
          verbs:
          - create
        - apiGroups:
          - rbac.authorization.k8s.io
          resources:
          - clusterroles
          - clusterrolebindings
          - roles
          - rolebindings
          verbs:
          - get
          - watch
          - list
          - create
          - update
          - patch
          - delete
          - deletecollection
        - apiGroups:
          - scheduling.k8s.io
          resources:
          - priorityclasses
          verbs:
          - get
          - watch
          - list
        - apiGroups:
          - policy
          resources:
          - poddisruptionbudgets
          verbs:
          - get
          - watch
          - list
        - apiGroups:
          - apps
          resources:
          - replicasets
          verbs:
          - get
          - watch
          - list
        - apiGroups:
          - apps
          resources:
          - deployments
          - deployments/scale
          verbs:
          - get
          - watch
          - list
          - create
          - update
          - patch
          - delete
          - deletecollection
        - apiGroups:
          - coordination.k8s.io
          resources:
          - leases
          verbs:
          - get
          - watch
          - list
          - create
          - update
          - patch
          - delete
        - apiGroups:
          - events.k8s.io
          resources:
          - events
          verbs:
          - get
          - watch
          - list
          - create
          - update
          - patch
          - delete
        - apiGroups:
          - config.openshift.io
          resources:
          - infrastructures
          - apiservers
          verbs:
          - get
          - watch
          - list
        - apiGroups:
          - route.openshift.io
          resources:
          - routes
          verbs:
          - get
          - watch
          - list
        - apiGroups:
          - ""
          resources:
          - endpoints
          verbs:
          - get
          - watch
          - list
        - apiGroups:
          - admissionregistration.k8s.io
          resources:
          - validatingadmissionpolicies
          - validatingadmissionpolicybindings
          verbs:
          - get
          - watch
          - list
          - create
          - update
          - patch
          - delete
          - deletecollection
        serviceAccountName: openshift-descheduler
      deployments:
      - name: descheduler-operator
        spec:
          replicas: 1
          selector:
            matchLabels:
              name: descheduler-operator
          strategy: {}
          template:
            metadata:
              creationTimestamp: null
              labels:
                name: descheduler-operator
            spec:
              containers:
              - args:
                - operator
                command:
                - cluster-kube-descheduler-operator
                env:
                - name: OPERATOR_POD_NAMESPACE
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.namespace
                - name: OPERAND_NAMESPACE
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.namespace
                - name: RELATED_IMAGE_OPERAND_IMAGE
                  value: registry.redhat.io/kube-descheduler-operator/descheduler-rhel9@sha256:b29107f415348a692ff7f5cf59235ec41d9b36929b5aa17188c0835ad40c5ba1
                - name: RELATED_IMAGE_SOFTTAINTER_IMAGE
                  value: registry.redhat.io/kube-descheduler-operator/kube-descheduler-rhel9-operator@sha256:fe39ef6a8427b7d219f82f8d9bc2c92d4401531988f0de9e173c791e9d46bdd5
                - name: OPERAND_VERSION
                  value: 5.2.0
                image: registry.redhat.io/kube-descheduler-operator/kube-descheduler-rhel9-operator@sha256:fe39ef6a8427b7d219f82f8d9bc2c92d4401531988f0de9e173c791e9d46bdd5
                imagePullPolicy: Always
                name: descheduler-operator
                ports:
                - containerPort: 60000
                  name: metrics
                  protocol: TCP
                resources:
                  requests:
                    cpu: 10m
                    memory: 50Mi
                securityContext:
                  allowPrivilegeEscalation: false
                  capabilities:
                    drop:
                    - ALL
                  readOnlyRootFilesystem: true
                volumeMounts:
                - mountPath: /tmp
                  name: tmp
              securityContext:
                runAsNonRoot: true
                seccompProfile:
                  type: RuntimeDefault
              serviceAccountName: openshift-descheduler
              volumes:
              - emptyDir: {}
                name: tmp
    strategy: deployment
  installModes:
  - supported: true
    type: OwnNamespace
  - supported: true
    type: SingleNamespace
  - supported: false
    type: MultiNamespace
  - supported: false
    type: AllNamespaces
  keywords:
  - scheduling
  - descheduler
  - workload
  labels:
    olm-owner-enterprise-app: cluster-kube-descheduler-operator
    olm-status-descriptors: cluster-kube-descheduler-operator.v5.2.0
  links:
  - name: Source Code
    url: https://github.com/openshift/cluster-kube-descheduler-operator
  maintainers:
  - email: support@redhat.com
    name: Red Hat
  maturity: beta
  minKubeVersion: 1.32.0
  provider:
    name: Red Hat, Inc.
  relatedImages:
  - image: registry.redhat.io/kube-descheduler-operator/descheduler-rhel9@sha256:b29107f415348a692ff7f5cf59235ec41d9b36929b5aa17188c0835ad40c5ba1
    name: descheduler-operand
  - image: registry.redhat.io/kube-descheduler-operator/kube-descheduler-rhel9-operator@sha256:fe39ef6a8427b7d219f82f8d9bc2c92d4401531988f0de9e173c791e9d46bdd5
    name: descheduler-operator
  replaces: clusterkubedescheduleroperator.v5.1.0
  skips:
  - clusterkubedescheduleroperator.v5.0.1
  - clusterkubedescheduleroperator.v5.0.2
  - clusterkubedescheduleroperator.v5.0.3
  - clusterkubedescheduleroperator.v5.0.4
  - clusterkubedescheduleroperator.v5.0.5
  - clusterkubedescheduleroperator.v5.0.6
  - clusterkubedescheduleroperator.v5.1.0
  - clusterkubedescheduleroperator.v5.1.1
  - clusterkubedescheduleroperator.v5.1.2
  - clusterkubedescheduleroperator.v5.1.3
  - clusterkubedescheduleroperator.v5.1.4
  - clusterkubedescheduleroperator.v5.1.5
  - clusterkubedescheduleroperator.v5.1.6
  version: 5.2.0
status:
  cleanup: {}
  conditions:
  - lastTransitionTime: "2025-10-27T12:41:42Z"
    lastUpdateTime: "2025-10-27T12:41:42Z"
    message: requirements not yet checked
    phase: Pending
    reason: RequirementsUnknown
  - lastTransitionTime: "2025-10-27T12:41:42Z"
    lastUpdateTime: "2025-10-27T12:41:42Z"
    message: one or more requirements couldn't be found
    phase: Pending
    reason: RequirementsNotMet
  - lastTransitionTime: "2025-10-27T12:41:42Z"
    lastUpdateTime: "2025-10-27T12:41:42Z"
    message: all requirements found, attempting install
    phase: InstallReady
    reason: AllRequirementsMet
  - lastTransitionTime: "2025-10-27T12:41:43Z"
    lastUpdateTime: "2025-10-27T12:41:43Z"
    message: waiting for install components to report healthy
    phase: Installing
    reason: InstallSucceeded
  - lastTransitionTime: "2025-10-27T12:41:43Z"
    lastUpdateTime: "2025-10-27T12:41:43Z"
    message: 'installing: waiting for deployment descheduler-operator to become ready:
      deployment "descheduler-operator" not available: Deployment does not have minimum
      availability.'
    phase: Installing
    reason: InstallWaiting
  - lastTransitionTime: "2025-10-27T12:41:49Z"
    lastUpdateTime: "2025-10-27T12:41:49Z"
    message: install strategy completed with no errors
    phase: Succeeded
    reason: InstallSucceeded
  lastTransitionTime: "2025-10-27T12:41:49Z"
  lastUpdateTime: "2025-10-27T12:41:49Z"
  message: install strategy completed with no errors
  phase: Succeeded
  reason: InstallSucceeded
  requirementStatus:
  - group: operators.coreos.com
    kind: ClusterServiceVersion
    message: CSV minKubeVersion (1.32.0) less than server version (v1.32.9)
    name: clusterkubedescheduleroperator.v5.2.0
    status: Present
    version: v1alpha1
  - group: apiextensions.k8s.io
    kind: CustomResourceDefinition
    message: CRD is present and Established condition is true
    name: kubedeschedulers.operator.openshift.io
    status: Present
    uuid: 4061d91e-ea64-4430-8483-1c53c605d6cb
    version: v1
  - dependents:
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list"],"apiGroups":["config.openshift.io"],"resources":["schedulers"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list","create","update","patch","delete","deletecollection"],"apiGroups":["monitoring.coreos.com"],"resources":["servicemonitors","prometheusrules"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","create","update"],"apiGroups":["monitoring.coreos.com"],"resources":["prometheuses/api"],"resourceNames":["k8s"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list","create","update","patch","delete","deletecollection"],"apiGroups":["operator.openshift.io"],"resources":["kubedeschedulers","kubedeschedulers/status"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list","create","update","patch","delete","deletecollection"],"apiGroups":[""],"resources":["services","configmaps","secrets","events","serviceaccounts"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list"],"apiGroups":[""],"resources":["namespaces","pods"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list","patch","update"],"apiGroups":[""],"resources":["nodes"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["create"],"apiGroups":[""],"resources":["pods/eviction"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list","create","update","patch","delete","deletecollection"],"apiGroups":["rbac.authorization.k8s.io"],"resources":["clusterroles","clusterrolebindings","roles","rolebindings"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list"],"apiGroups":["scheduling.k8s.io"],"resources":["priorityclasses"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list"],"apiGroups":["policy"],"resources":["poddisruptionbudgets"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list"],"apiGroups":["apps"],"resources":["replicasets"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list","create","update","patch","delete","deletecollection"],"apiGroups":["apps"],"resources":["deployments","deployments/scale"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list","create","update","patch","delete"],"apiGroups":["coordination.k8s.io"],"resources":["leases"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list","create","update","patch","delete"],"apiGroups":["events.k8s.io"],"resources":["events"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list"],"apiGroups":["config.openshift.io"],"resources":["infrastructures","apiservers"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list"],"apiGroups":["route.openshift.io"],"resources":["routes"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list"],"apiGroups":[""],"resources":["endpoints"]}
      status: Satisfied
      version: v1
    - group: rbac.authorization.k8s.io
      kind: PolicyRule
      message: cluster rule:{"verbs":["get","watch","list","create","update","patch","delete","deletecollection"],"apiGroups":["admissionregistration.k8s.io"],"resources":["validatingadmissionpolicies","validatingadmissionpolicybindings"]}
      status: Satisfied
      version: v1
    group: ""
    kind: ServiceAccount
    message: ""
    name: openshift-descheduler
    status: Present
    version: v1
