Skip to main content

Kubernetes Cost Management for EKS, GKE and AKS

Cluster cost hides in two places: the nodes you pay for and the workloads that decide how many nodes you need.

Scheduling at the right level

ZopNight can stop Kubernetes cost at two levels:

  • Node pools and clusters. EKS, GKE and AKS are on the supported start/stop list; for EKS the stop scales node pools.
  • Namespaces. A namespace stop scales every Deployment and StatefulSet in it to zero and suspends its CronJobs. HorizontalPodAutoscalers and PodDisruptionBudgets are removed on stop and restored on start, together with the prior replica counts. System namespaces such as kube-* and default are refused before any cluster call is made. One implementation serves EKS, GKE and AKS.

Namespace scheduling lets a shared dev cluster keep running for one team while another team’s namespace sleeps.

Workload findings

A shared rule set runs on all three clouds:

  • Rightsizing: CPU or memory over-provisioned, read from the HorizontalPodAutoscaler reporting it wants fewer replicas than its minimum allows.
  • Idle: stopped Deployments, suspended CronJobs, CronJobs never scheduled.
  • Orphan: unbound PVCs, released PersistentVolumes, Services with no endpoints.
  • Reliability: missing requests or limits, missing probes, single-replica Deployments, HPAs pinned at maximum, nodes under memory or disk pressure.
  • Security: privileged containers, containers running as root, host networking, Ingress without TLS.

Node-level cost has its own rules, including EKS Underutilized Node, EKS Abandoned Node Group, GKE Node Pool Underutilized, AKS Node Pool Underutilized and Spot node pool opportunities on all three.

A single-replica Deployment can be fixed from ZopNight by scaling it to two replicas, but only as a guided change you review; ZopNight never auto-scales a workload someone chose to run as one.

Seeing what happened

Workload findings use control-plane events (scale, patch, apply) from EKS audit logs, the Azure Activity Log and GKE’s Cloud Logging, not just pod metrics. Live pod logs stream in the app, including the previous container’s logs when you are chasing a crash loop.

Service pages: EKS, GKE, AKS. Scheduling notes: EKS, GKE, AKS. Background: namespace-level scheduling.

faq

Questions we get a lot.

Can I stop one namespace without stopping the cluster?

Yes. A namespace stop scales its Deployments and StatefulSets to zero and suspends its CronJobs, and restores replicas, HPAs and PDBs on start. System namespaces are refused.

Is OpenShift supported the same way?

No. ROSA clusters are discovered and configurable through OpenShift Cluster Manager, but nothing on them is scheduled, because the worker nodes are managed by Red Hat.

Stop watching the waste.
Start cutting it.

See. Find. Fix. Automatic.

Connect your first cloud account in under 5 minutes. See your first remediation in under 7. No credit card required.

CDCR connect detect classify remediate
full audit every action traceable
read-only default access
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·