@@ -33,20 +33,15 @@ Documentation for other releases can be found at
...
@@ -33,20 +33,15 @@ Documentation for other releases can be found at
# Horizontal Pod Autoscaler
# Horizontal Pod Autoscaler
Horizontal pod autoscaling is an experimental feature in Kubernetes 1.1.
Horizontal pod autoscaling is a[beta](../../../docs/api.md#api-versioning) feature in Kubernetes 1.1.
It allows the number of pods in a replication controller or deployment to scale automatically based on observed CPU or memory usage.
It allows the number of pods in a replication controller or deployment to scale automatically based on observed CPU usage.
<b>Please note that the current API is tentative and will be subject to change before a stable version is released.</b>
In the future also other metrics will be supported.
In this document we explain how this feature works by walking you through an example of enabling horizontal pod autoscaling with the php-apache server.
In this document we explain how this feature works by walking you through an example of enabling horizontal pod autoscaling with the php-apache server.
## Prerequisites
## Prerequisites
This example requires a running Kubernetes cluster in the version 1.1 with `extensions` API enabled on API server (``--runtime-config=extensions/v1beta1=true``),
This example requires a running Kubernetes cluster and kubectl in the version at least 1.1.
and experimental controllers turned on in controller manager (``--enable-experimental=true``).
This can be simply achieved on GCE by exporting ``KUBE_ENABLE_EXPERIMENTAL_API=true`` before running ```kube-up.sh``` script.
The required version of kubectl is also 1.1.
## Step One: Run & expose php-apache server
## Step One: Run & expose php-apache server
...
@@ -57,12 +52,11 @@ It defines [index.php](image/index.php) page which performs some CPU intensive c
...
@@ -57,12 +52,11 @@ It defines [index.php](image/index.php) page which performs some CPU intensive c
First, we will start a replication controller running the image and expose it as an external service:
First, we will start a replication controller running the image and expose it as an external service:
Now, we will wait some time and verify that both the replication controller and the service were correctly created and are running. We will also determine the IP address of the service:
Now, we will wait some time and verify that both the replication controller and the service were correctly created and are running. We will also determine the IP address of the service:
@@ -105,50 +99,45 @@ Now that the server is running, we will create a horizontal pod autoscaler for i
...
@@ -105,50 +99,45 @@ Now that the server is running, we will create a horizontal pod autoscaler for i
To create it, we will use the [hpa-php-apache.yaml](hpa-php-apache.yaml) file, which looks like this:
To create it, we will use the [hpa-php-apache.yaml](hpa-php-apache.yaml) file, which looks like this:
```yaml
```yaml
apiVersion:extensions/v1beta1
apiVersion:extensions/v1beta1
kind:HorizontalPodAutoscaler
kind:HorizontalPodAutoscaler
metadata:
metadata:
name:php-apache
name:php-apache
namespace:default
namespace:default
spec:
spec:
maxReplicas:10
minReplicas:1
scaleRef:
scaleRef:
kind:ReplicationController
kind:ReplicationController
name:php-apache
name:php-apache
namespace:default
namespace:default
target:
minReplicas:1
quantity:100m
maxReplicas:10
resource:cpu
cpuUtilization:
targetPercentage:50
```
```
This defines a horizontal pod autoscaler that maintains between 1 and 10 replicas of the Pods
This defines a horizontal pod autoscaler that maintains between 1 and 10 replicas of the Pods
controlled by the php-apache replication controller you created in the first step of these instructions.
controlled by the php-apache replication controller you created in the first step of these instructions.
Roughly speaking, the horizontal autoscaler will increase and decrease the number of replicas
Roughly speaking, the horizontal autoscaler will increase and decrease the number of replicas
(via the replication controller) so as to maintain an average CPU utilization across all Pods of 100 millicores.
(via the replication controller) so as to maintain an average CPU utilization across all Pods of 50%
(since each pod requests 200 milli-cores in [rc-php-apache.yaml](rc-php-apache.yaml), this means average CPU utilization of 100 milli-cores).
See [here](../../../docs/proposals/horizontal-pod-autoscaler.md#autoscaling-algorithm) for more details on the algorithm.
See [here](../../../docs/proposals/horizontal-pod-autoscaler.md#autoscaling-algorithm) for more details on the algorithm.
Please be aware that this configuration sets the target CPU consumption to 100 milli-cores, while in [rc-php-apache.yaml](rc-php-apache.yaml) each pod requests 200 milli-cores.
As a general rule, the autoscaler's target should be lower than the request.
Otherwise, overloaded pods may not be able to consume more than the autoscaler's target utilization,
thereby preventing the autoscaler from seeing high enough utilization to trigger it to scale up.
We will create the autoscaler by executing the following command:
We will create the autoscaler by executing the following command: