Pod Compatibility for Joulie
Joulie uses Kubernetes scheduling constraints as the single source of truth for workload placement intent.
Power profile supply is exposed on node label:
joulie.io/power-profile=performancejoulie.io/power-profile=ecojoulie.io/draining=true|false(independent transition flag)
Workload behavior:
performanceworkload (recommended): requirejoulie.io/power-profile NotIn ["eco"]ecoworkload: requirejoulie.io/power-profile=eco- unconstrained workload: no power-profile affinity, can run on either profile
Best-effort Pod (unconstrained, starting point)
This is the default and recommended starting spec. Do not set power-profile affinity: Kubernetes can schedule the pod on either eco or performance nodes.
| |
Performance Pod (recommended, lines to add)
| |
Why this is recommended:
- it avoids eco nodes while still allowing high-performance nodes which are not managed by Joulie;
- explicitly requiring
performancecan exclude unlabeled nodes that are still valid for performance workloads and are managed by Joulie.
Eco-only Pod (advanced, lines to add)
This is an advanced/rare pattern. Use it only when you explicitly need jobs to run on eco supply. In most cases, users should either:
- use
NotIn ["eco"]for performance-sensitive pods, or - keep pods unconstrained (best-effort) and let Joulie manage power behavior.
If you choose eco-only, exclude actively draining nodes with joulie.io/draining NotIn ["true"].
That is more robust than requiring draining=false, because unlabeled nodes are still eligible while draining=true remains excluded.
| |
Reference manifests:
GPU resource requests
GPU scheduling resources (nvidia.com/gpu, amd.com/gpu) are independent from Joulie power-profile labels.
- request GPU resources as usual in pod/container resources,
- keep Joulie intent guidance based on power-profile constraints (
NotIn ["eco"]for performance-sensitive workloads), - remember Joulie GPU capping is node-level (not per-container GPU slicing).