KubeHero docs

CRD reference

BudgetPolicy, CeilingPolicy, RightsizingPolicy — every field, every default.

Three CRDs under apiVersion: kubehero.kubehero.io/v1. Each one is reconciled by the operator.

BudgetPolicy

Declarative spending intent for a set of workloads.

apiVersion: kubehero.kubehero.io/v1
kind: BudgetPolicy
metadata:
  name: prod-monthly
spec:
  scope:
    clusterSelector:
      matchLabels: { env: prod }
  ceiling: "$100000/mo"
  hardStop: true
  humanArm: true
  escalation:
    - action: hpa.cap
      ratioPercent: 50
      waitAfter: "2m"
    - action: pod.evict
      waitAfter: "3m"
    - action: alert
      channels: ["slack://ops-oncall"]
  alertChannels:
    - "slack://ops"
    - "pagerduty://prod-p1"
FieldTypeDefaultNotes
scope.clusterSelectorLabelSelectorallClusters this policy applies to.
scope.namespaceSelectorLabelSelectorallNamespaces within matched clusters.
ceilingstringrequiredHuman-readable limit: $100000/mo · $300/hr.
hardStopboolfalseIf false, policy is advisory / alert-only.
humanArmbooltrueRequires CLI kubehero cap --arm before any escalation step runs.
escalation[]EscalationStep[]Ordered steps — hpa.cap, pod.evict, nodepool.cordon, alert.
alertChannels[]string[]Channels that receive threshold-crossing notifications (default: 50/80/95/100%).

CeilingPolicy

A burn-rate triggered enforcement policy that references a BudgetPolicy.

apiVersion: kubehero.kubehero.io/v1
kind: CeilingPolicy
metadata:
  name: prod-burn-rate-2x
spec:
  budgetRef: prod-monthly
  trigger:
    burnRateMilli: 2000   # 2.0x
    window: "5m"
  escalation:
    - action: hpa.cap
      ratioPercent: 40
      waitAfter: "2m"
  cooldown: "10m"
  humanArm: true

RightsizingPolicy

How aggressively to recommend / auto-apply rightsizing.

apiVersion: kubehero.kubehero.io/v1
kind: RightsizingPolicy
metadata:
  name: non-prod-auto
spec:
  scope:
    namespaceSelector:
      matchLabels: { env: dev }
  mode: apply
  targetUtilization: 60
  safety:
    minReplicas: 1
    p95HeadroomPct: 40
    observationWindow: "14d"
    maxChangePerDay: 3
FieldTypeDefaultNotes
moderecommend · apply · shadowrequired
targetUtilizationint 1–10060Target p95 CPU utilization %.
safety.minReplicasint1Never scale below this.
safety.p95HeadroomPctint40Leave N% headroom above p95.
safety.observationWindowduration14dHow far back to measure.
safety.maxChangePerDayint3Thrash guard.

Applying policies

Both kubehero apply -f and kubectl apply -f work. The operator reconciles within a few seconds.