Files
homelab-gitops/apps/descheduler/README.md
T

28 lines
1.4 KiB
Markdown

# Odroid CPU rebalancing
The upstream Descheduler chart runs every five minutes. `values.yaml` is the
policy; the bootstrap Application selects its chart version.
The policy uses Metrics Server CPU usage: nodes below 40% are possible
receivers and nodes above 75% are possible eviction sources. Kubernetes still
chooses replacement placement. It does not live-migrate processes or guarantee
that a replacement lands on a different node.
Each cycle permits at most two evictions overall, one per node and namespace.
Pods must be at least one hour old, belong to a controller with at least two
replicas, have a PodDisruptionBudget, have no PVC, and fit another eligible
node. Only the six Odroids are eligible. Storage, networking, monitoring,
certificate management, and GitOps namespaces are excluded. EmptyDir alone is
not a protection for these replicated stateless workloads.
Start with `cmdOptions.dry-run: true`, inspect Job logs, then remove that option
to allow evictions. To stop balancing, set `suspend: true` in values and let Argo
sync. Existing running Jobs must finish before suspension takes full effect.
Review after changes to workload mix; do not remove PVC and infrastructure
protections to force a more even CPU graph. CPU requests determine whether a
replacement can fit even when observed utilization is low.
Live evictions enabled on 2026-11-01 after successful dry-run cycles.
The review selected replicated dashboard/ingress pods and respected the caps.