EKS clusters started with Banzai Cloud Pipeline can have spot and on-demand instances mixed. Such a cluster can be very volatile, instances - and therefore pods and deployments - can come and go, so it’s usually risky to run workloads or services on these type of clusters. But clusters started with Pipeline have some special watchguards and features that help achieve a higher availability while still benefiting from the lower cost of spot instances.

Deployments can be configured to keep some percent of replicas safe from spot interruptions, by scheduling them to regular instances in the cluster. So even in the case of a serious spot instance outage, the deployment remains available with a reduced number of replicas. This is achieved through a custom scheduler that takes node labels and specific pod annotations into account when running the predicates against nodes.

Configuring deployments

If you have a cluster that has at least one spot instance, then an additional configuration form will appear on the Create Deployment form. Pipeline will list all the Deployments, StatefulSets and ReplicaSets in the corresponding Helm chart, and you'll be able to configure the minimum percentage of replicas that need to be scheduled to regular instances.

Example

You want to deploy your front-end application, that's served by nginx. The corresponding Helm chart contains a Deployment Kubernetes resource, and you want it to contain 3 pod replicas for load-balancing.

In this case you can set the minimum percentage on regular instances to 30. It means that at least 1 of your 3 replicas will be scheduled to a regular instance. So even if your spot instances are interrupted then while the other replicas are being rescheduled, your application won't have a downtime, only the throughput of your deployment may be degraded because of fewer replicas for a limited amount of time.

Background

You can read more about the implementation of this feature in this blog post