28 lines
1.4 KiB
Markdown
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.
|