Skip to content

Scale based on k8s native events #4876

Open
@Omar-Bishtawi

Description

@Omar-Bishtawi

Proposal

the idea of this scaler is to scale workloads based on k8s native event.

Usecase

a sample use case for this scaler is with DeprovisioningBlocked event . this event is thrown when k8s isn't able to drain a node, there are multiple reasons for this one of them is due to PDB (Pod disruption budges) .

here is a sample event content that can be taken from kubectl get events -o json:

{
            "apiVersion": "v1",
            "count": 1,
            "eventTime": null,
            "firstTimestamp": "2023-08-13T08:47:00Z",
            "involvedObject": {
                "apiVersion": "karpenter.sh/v1alpha5",
                "kind": "Machine",
                "name": "RESOURCE_NAME",
                "resourceVersion": "1069644099",
                "uid": "ad90b678-0693-4ef1-929b-1091fa68e4ea"
            },
            "kind": "Event",
            "lastTimestamp": "2023-08-13T08:47:00Z",
            "message": "Cannot deprovision machine due to pdb {NAMESPACE}/{PDB_BANE} prevents pod evictions",
            "metadata": {
                "creationTimestamp": "2023-08-13T08:47:00Z",
                "name": "RESOURCE_NAME",
                "namespace": "default",
                "resourceVersion": "1070337960",
                "uid": "da73d9a0-7ecb-48f6-a9e0-47d359d9aee4"
            },
            "reason": "DeprovisioningBlocked",
            "reportingComponent": "",
            "reportingInstance": "",
            "source": {
                "component": "karpenter"
            },
            "type": "Normal"
        },

the scaler will be useful to resolve this issue and add new pod when this event is thrown which will allow the node to be drained since there is enough pods to maintain the PDB condition.

Scaler Source

K8s Events API

Scaling Mechanics

we can scale based on the response of k8s Events API .

here is a suggested format for the keda scaled object trigger:

triggers:
- type: kubernetes-events
  metadata:
    eventsFilters:
    - field: reason
      type: exact
      value: 'DeprovisioningBlocked'
    - field: message
      type: regex
      value: '.*due to pdb {NAMESPACE}.*}'
    eventCountThreshold: 3

Authentication Source

KEDA Service account (same as Kubernetes Workload scaler)

Anything else?

I'm willing to work on this scaler and create the PR for it if you don't have any notes on this.

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureAll issues for new features that have been committed tohelp wantedLooking for support from communityscalerstale-bot-ignoreAll issues that should not be automatically closed by our stale bot

    Type

    No type

    Projects

    • Status

      Proposed

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions