feat: add hpa-vpa (#23)

pull/14/head
Rémy-Christophe Schermesser 5 years ago committed by GitHub
parent 8d30971869
commit 83a374193f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,46 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hpa-example
spec:
replicas: 1
selector:
matchLabels:
app: hpa-example
template:
metadata:
labels:
app: hpa-example
spec:
containers:
- name: hpa-example
image: k8s.gcr.io/hpa-example
ports:
- containerPort: 80
resources:
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: hpa-example
spec:
ports:
- port: 80
selector:
app: hpa-example
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: hpa-example
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: hpa-example
targetCPUUtilizationPercentage: 50

@ -1,13 +0,0 @@
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: simple-hpa
spec:
maxReplicas: 10
minReplicas: 3
scaleTargetRef:
apiVersion: extensions/v1beta1
kind: Deployment
name: simple-deployment
targetCPUUtilizationPercentage: 80

@ -1,5 +1,7 @@
# HPA, VPA
## HPA
HPA means `Horizontal Pod Autoscaler`. It automatically scales the number of pods in a replication controller, deployment or replica set based on observed CPU utilization (or, with custom metrics support, on some other application-provided metrics).
Let's take an example with CPU usage:
@ -13,9 +15,9 @@ spec:
maxReplicas: 10
minReplicas: 3
scaleTargetRef:
apiVersion: extensions/v1beta1
apiVersion: apps/v1
kind: Deployment
name: simple-deployment
name: my-deployment
targetCPUUtilizationPercentage: 80
```
@ -24,3 +26,71 @@ targetCPUUtilizationPercentage: 80
* `minReplicas`: the minimum number of pods running
* `scaleTargetRef`: what this HPA targets, here a `Deployment` named `simple-deployment`
* `targetCPUUtilizationPercentage`: the percentage of CPU utilization to cross to activate the HPA
Let's see an HPA in action. This exemple is inspired by [the official Kubernetes documentation](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/).
To see it in action, we need to have a workload that consumes some CPU. We'll use an image that is CPU intensive: https://hub.docker.com/r/googlecontainer/hpa-example.
This image computes the square root of numbers:
```php
<?php
$x = 0.0001;
for ($i = 0; $i <= 1000000; $i++) {
$x += sqrt($x);
}
echo "OK!";
?>
```
First, you need to active the [`metric-server`](https://github.com/kubernetes-incubator/metrics-server/) on minikube:
```sh
minikube addons enable metrics-server
```
Review and apply the file [01-hpa.yml](./01-hpa.yml).
Now let's generate some load on our service:
```sh
kubectl run -i --tty load-generator --image=busybox /bin/sh
```
Then run in this terminal:
```sh
while true; do wget -q -O- http://hpa-example; done
```
In another terminal look at the state of the pods and the hpa, remember the `-w` flag on `kubectl`.
Wait a bit and see how it changes the pods and the hpa.
Stop the load generator, again, wait a bit and see how it changes the pods and the hpa.
## VPA
VPA means `Vertical Pod Autoscaler`. It automatically find the right resources for pods in a replication controller, deployment or replica set based on observed CPU utilization.
This feature is in beta, understand you can install it in your cluster but it's not integrate with the standard k8s source code.
If you are adventurous you can try it by:
1. Install [metrics-server](https://github.com/kubernetes-incubator/metrics-server#deployment).
1. Install the [vpa](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler).
1. Try the exemple from the [vpa github repo](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler#test-your-installation)
## Exercices
Nothing to see here.
## Clean up
```bash
kubectl delete service,deployment,pod,crd,vpa --all
```
## Links
* https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/

Loading…
Cancel
Save