Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jthomperoo/predictive-horizontal-pod-autoscaler
Horizontal Pod Autoscaler built with predictive abilities using statistical models
https://github.com/jthomperoo/predictive-horizontal-pod-autoscaler
autoscaler autoscaling go golang horizontal-pod-autoscaler kubernetes operator operator-framework operator-sdk predictions predictive-analytics python replicas statistical-models statsmodels
Last synced: 6 days ago
JSON representation
Horizontal Pod Autoscaler built with predictive abilities using statistical models
- Host: GitHub
- URL: https://github.com/jthomperoo/predictive-horizontal-pod-autoscaler
- Owner: jthomperoo
- License: apache-2.0
- Created: 2019-12-08T23:55:40.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-10-11T23:24:48.000Z (over 1 year ago)
- Last Synced: 2025-01-14T06:07:51.132Z (13 days ago)
- Topics: autoscaler, autoscaling, go, golang, horizontal-pod-autoscaler, kubernetes, operator, operator-framework, operator-sdk, predictions, predictive-analytics, python, replicas, statistical-models, statsmodels
- Language: Go
- Homepage:
- Size: 438 KB
- Stars: 336
- Watchers: 8
- Forks: 29
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
[![Build](https://github.com/jthomperoo/predictive-horizontal-pod-autoscaler/workflows/main/badge.svg)](https://github.com/jthomperoo/predictive-horizontal-pod-autoscaler/actions)
[![go.dev](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat)](https://pkg.go.dev/github.com/jthomperoo/predictive-horizontal-pod-autoscaler)
[![Go Report Card](https://goreportcard.com/badge/github.com/jthomperoo/predictive-horizontal-pod-autoscaler)](https://goreportcard.com/report/github.com/jthomperoo/predictive-horizontal-pod-autoscaler)
[![Documentation Status](https://readthedocs.org/projects/predictive-horizontal-pod-autoscaler/badge/?version=latest)](https://predictive-horizontal-pod-autoscaler.readthedocs.io/en/latest)
[![License](https://img.shields.io/:license-apache-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)# Predictive Horizontal Pod Autoscaler
Predictive Horizontal Pod Autoscalers (PHPAs) are Horizontal Pod Autoscalers (HPAs) with extra predictive capabilities,
allowing you to autoscale using statistical models for ahead of time predictions.## Why would I use it?
PHPAs can better scaling results by making proactive decisions to scale up ahead of demand, meaning that a
resource does not have to wait for performance to degrade before autoscaling kicks in.## What systems would need it?
Any systems that have regular/predictable demand peaks/troughs.
Some use cases:
* A service that sees demand peak between 3pm and 5pm every week day, this is a regular and predictable load which
could be pre-empted.
* A service which sees a surge in demand at 12pm every day for 10 minutes, this is such a short time interval that
by the time a regular HPA made the decision to scale up there could already be major performance/availablity issues.PHPAs are not a silver bullet, and require tuning using real data for there to be any benefits of using it. A poorly
tuned PHPA could easily end up being worse than a normal HPA.## How does it work?
This project works by doing the same calculations as the Horizontal Pod Autoscaler does to determine how many replicas
a resource should have, then applies statistical models against the calculated replica count and the replica history.## Supported Kubernetes versions
The minimum Kubernetes version the autoscaler can run on is `v1.23` because it relies on the `autoscaling/v2` API which
was only available in `v1.23` and above.The autoscaler is only tested against the latest Kubernetes version - if there are bugs that affect older Kubernetes
versions we will try to fix them, but there is no guarantee of support.## Features
* Functionally identical to Horizontal Pod Autoscaler for calculating replica counts without prediction.
* Choice of statistical models to apply over Horizontal Pod Autoscaler replica counting logic.
* Holt-Winters Smoothing
* Linear Regression
* Allows customisation of Kubernetes autoscaling options without master node access. Can therefore work on managed
solutions such as EKS or GCP.
* CPU Initialization Period.
* Downscale Stabilization.
* Sync Period.## What does a Predictive Horizontal Pod Autoscaler look like?
PHPAs are designed to be as similar in configuration to Horizontal Pod Autoscalers as possible, with extra
configuration options.PHPAs have their own custom resource:
```yaml
apiVersion: jamiethompson.me/v1alpha1
kind: PredictiveHorizontalPodAutoscaler
metadata:
name: simple-linear
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
behavior:
scaleDown:
stabilizationWindowSeconds: 0
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 50
type: Utilization
models:
- type: Linear
name: simple-linear
linear:
lookAhead: 10000
historySize: 6
```This PHPA acts like a Horizontal Pod Autoscaler and autoscales to try and keep the target resource's CPU utilization at
50%, but with the extra predictive layer of a linear regression model applied to the results.## Installation
The operator for managing Predictive Horizontal Pod Autoscalers can be installed using Helm:
```bash
VERSION=v0.13.2
HELM_CHART=predictive-horizontal-pod-autoscaler-operator
helm install ${HELM_CHART} https://github.com/jthomperoo/predictive-horizontal-pod-autoscaler/releases/download/${VERSION}/predictive-horizontal-pod-autoscaler-${VERSION}.tgz
```## Quick start
Check out the [getting started
guide](https://predictive-horizontal-pod-autoscaler.readthedocs.io/en/latest/user-guide/getting-started/) and the
[examples](./examples/) for ways to use Predictive Horizontal Pod Autoscalers.## More information
See the [wiki for more information, such as guides and
references](https://predictive-horizontal-pod-autoscaler.readthedocs.io/en/latest/).See the [`examples/` directory](./examples) for working code samples.
## Developing this project
Developing this project requires these dependencies:
* [Go](https://golang.org/doc/install) >= `1.20`
* [Python](https://www.python.org/downloads/) == `3.8.x`
* [Helm](https://helm.sh/) == `3.9.x`Any Python dependencies must be installed by running:
```bash
pip install -r requirements-dev.txt
```This extensively uses the the [jthomperoo/k8shorizmetrics](https://github.com/jthomperoo/k8shorizmetrics) library
to gather metrics and to evaluate them as the Kubernetes Horizontal Pod Autoscaler does.It is recommended to test locally using a local Kubernetes managment system, such as
[k3d](https://github.com/rancher/k3d) (allows running a small Kubernetes cluster locally using Docker).You can deploy a PHPA example (see the [`examples/` directory](./examples) for choices) to test your changes.
### Commands
* `make run` - runs the PHPA locally against the cluster configured in your kubeconfig file.
* `make docker` - builds the PHPA image.
* `make lint` - lints the code.
* `make format` - beautifies the code, must be run to pass the CI.
* `make test` - runs the unit tests.
* `make doc` - hosts the documentation locally at .
* `make coverage` - opens up any generated coverage reports in the browser.