3 minute read
Introduction to StormForge Optimize
StormForge Optimize is a tool for experimenting with application configurations in Kubernetes. With StormForge Optimize Controller installed on your cluster, you can run experiments that patch cluster state and measure the outcome via one or more metrics.
When used with the API, the StormForge Optimize Controller tunes your Kubernetes applications automatically using machine learning.
Without the API,
stormforge and the StormForge Optimize Controller can be used to manually experiment on your cluster, or integrated into existing automation workflows.
Although StormForge Optimize was developed to tune performance, it can run non-performance-related experiments on your application as well. This documentation describes the concepts and capabilities of StormForge Optimize generically, and typically includes performance-related examples for relevant concepts.
Motivation: Managing Resources in Kubernetes
This page borrows concepts and terminology from the Kubernetes Concepts documentation.
Kubernetes has several built-in mechanisms for managing container compute resources. To begin, Pods may specify CPU and memory requests and limits for each of their containers.
Once containers have these limits set, Kubernetes can leverage them in several ways:
- The Kubernetes scheduler uses the resource requests to efficiently schedule pods onto nodes based on resource needs and availability (“bin packing”).
- If pods exceed their CPU or memory limits, Kubernetes may evict them from their host node.
- When used in combination with Quality of Service (QoS) classes or pod priority, Kubernetes can go a step further, choosing which pods to schedule and evict based on the quality of service they require.
- To accommodate demand on pods, Kubernetes can “horizontally” scale them out by adding more replicas via Horizontal Pod Autoscaling (HPA). The HPA controller examines the CPU resource request and calculates utilization as a fraction of the requested amount to determine when to scale. If utilization is higher or lower than the target, it adds or removes pods.
While powerful, these tools are missing some aspects of resources untuned:
- Developers must devise CPU and memory requests and limits themselves, perhaps based on performance analysis locally or in a developer environment (Scaling resources rather than replicas is sometimes referred to as Vertical Pod Scaling.)
- Kubernetes cannot adjust application-specific settings that may have significant impact on performance from workload to workload.
For instance: JVM heap size, shard size in Elasticsearch, or working memory on a self-hosted database would not be exposed through a consistent interface in Kubernetes, even if they may be set by environment variables or through a
StormForge Optimize was developed to address these shortcomings. It supports flexibly parameterizing application manifests; running trials with specific values filled into those manifests; taking measurements to determine the efficacy of trials; and grouping those trials into overarching experiments.
StormForge Optimize is composed of three parts:
- The StormForge Optimize Controller, which runs on your cluster,
stormforge, a CLI tool for interacting with the manager, and
- An API that automatically generates suggested configurations for your application.
The StormForge Optimize Controller is a Kubernetes operator written in Go.
It is comprised of several Custom Resource Definitions (CRDs) and a manager that runs in your cluster in a dedicated namespace.
The CRDs allow you to create Experiment and Trial objects in your cluster.
The controller manages those experiments and trials, and communicates with the StormForge Server if configured to do so.
The manager can be installed on your cluster using
stormforge init (see Installation).
The StormForge Optimize Tool
stormforge is a command-line tool for interacting with the controller.
It can be used to install the manager, create trials by assigning parameters interactively, and more.
It is meant to be used in combination with
If you are on a StormForge Optimize free, core or enterprise plan, you can configure your cluster to connect to a StormForge Optimize API. The API produces experiment suggestions automatically.
Follow the links below to get started.