Introduction

An overview of StormForge Optimize Pro

Optimize Pro has been deprecated.
But you can check out Optimize Live:

Introduction to StormForge Optimize Pro

StormForge Optimize Pro is a tool for experimenting with application configurations in Kubernetes. With StormForge Optimize Pro 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 Pro Controller tunes your Kubernetes applications automatically by using machine learning. Without the API, stormforge and the StormForge Optimize Pro Controller can be used to manually experiment on your cluster or integrated into existing automation workflows.

Although StormForge Optimize Pro 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 Pro 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.

After 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 (VPA).
  • 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 ConfigMap.

StormForge Optimize Pro 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.

Architecture

StormForge Optimize Pro is composed of three parts:

  1. The StormForge Optimize Pro Controller, which runs on your cluster
  2. The stormforge CLI tool for interacting with the manager
  3. An API that automatically generates suggested configurations for your application

The StormForge Optimize Pro Controller is a Kubernetes operator written in Go. It is composed of several Custom Resource Definitions (CRDs) and a manager that runs in your cluster in a dedicated namespace. The CRDs enable 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 install (see Installation).

The StormForge CLI, 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 kubectl.

If you are on a StormForge Optimize Pro free, core or enterprise plan, you can configure your cluster to connect to a StormForge API. The API produces experiment suggestions automatically.

Follow the links in the left navigation pane to get started.

Last modified February 12, 2024