¿Qué vamos a ver?
Basado en la documentación oficial de K8s (licencia CC-BY-4.0).
>_.source <(kubectl completion bash)
Comprueba que funciona escribiendo kubectl y presionando la tecla "TAB" 2 veces.Crea un namespace para aislar los recursos de este ejercicio del resto de recursos en tu clúster:
kubectl create namespace lab-hpa
deployments/demo-app.yaml con este manifiesto:apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: demo-app
spec:
replicas: 1
selector:
matchLabels:
run: app
template:
metadata:
labels:
run: app
spec:
containers:
- image: gcr.io/google-samples/hello-app:1.0
name: app
ports:
- containerPort: 8080
protocol: TCP
kubectl apply -f deployments/demo-app.yaml -n lab-hpa
kubectl get pods -n lab-hpa
kubectl describe deployments demo-app -n lab-hpa
kubectl expose deployment demo-app --target-port 8080 --type NodePort -n lab-hpa
kubectl get service demo-app -n lab-hpa
kubectl describe deployment demo-app -n lab-hpa
kubectl autoscale deployment demo-app --max 4 --min 1 --cpu-percent 10 -n lab-hpa
kubectl get horizontalpodautoscaler -n lab-hpa
kubectl describe horizontalpodautoscaler demo-app -n lab-hpa
Para comprobarlo, necesitamos generar carga sobre la aplicación para que escale, lo que haremos con una aplicación de generación de carga.
deployments/load-generator.yaml con este manifiesto:apiVersion: apps/v1
kind: Deployment
metadata:
name: load-generator
spec:
replicas: 4
selector:
matchLabels:
app: load_generator
template:
metadata:
labels:
app: load_generator
spec:
containers:
- name: load_generator
image: k8s.gcr.io/busybox
args:
- /bin/sh
- -c
- while true; do wget -q -O- http://web:8080; done
kubectl apply -f deployments/load-generator.yaml -n lab-hpa
kubectl get pods -n lab-hpa
kubectl describe deployments load-generator -n lab-hpa
Una vez que el generador de carga comienza a generar tráfico, el Despliegue de la aplicación comienza a incrementarse.kubectl get hpa demo-app -n lab-hpa -w
kubectl delete deployment load-generator -n lab-hpa
kubectl get deployments -n lab-hpa
kubectl get deployment demo-app -n lab-hpa -w
Elimina el namespace, lo cual eliminará todos los recursos:
kubectl delete namespace lab-hpa
En esta práctica hemos visto cómo: