¿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-quality-of-service
Cuando K8s crea un Pod, le asigna una de las siguientes clases de Calidad de Servicio (QoS):
Para obtener la clase de QoS de "garantizado" para un Pod, cada Contenedor del mismo:
Para crear un Pod con dicha clase de QoS:
pods/qos-pod-guaranteed.yaml con este manifiesto:apiVersion: v1
kind: Pod
metadata:
name: qos-demo-guaranteed
spec:
containers:
- name: qos-demo-ctr
image: nginx
resources:
limits:
memory: "200Mi"
cpu: "700m"
requests:
memory: "200Mi"
cpu: "700m"
kubectl apply -f pods/qos-pod-guaranteed.yaml -n lab-quality-of-service
kubectl get pods -n lab-quality-of-service
kubectl top pod qos-demo-guaranteed -n lab-quality-of-service
kubectl get pods qos-demo-guaranteed -n lab-quality-of-service -o yaml
Busca la línea que comienza por "qosClass"
kubectl get pods qos-demo-guaranteed -n lab-quality-of-service -o yaml | grep qosClass
Un Pod obtendrá la clase de QoS de "burstable" si:
Para crear un Pod con dicha clase de QoS:
pods/qos-pod-burstable.yaml con este manifiesto:apiVersion: v1
kind: Pod
metadata:
name: qos-demo-burstable
spec:
containers:
- name: qos-demo-ctr
image: nginx
resources:
limits:
memory: "200Mi"
requests:
memory: "100Mi"
kubectl apply -f pods/qos-pod-burstable.yaml -n lab-quality-of-service
kubectl get pods -n lab-quality-of-service
kubectl top pod qos-demo-burstable -n lab-quality-of-service
kubectl get pods qos-demo-burstable -n lab-quality-of-service -o yaml
Busca la línea que comienza por "qosClass"
kubectl get pods qos-demo-burstable -n lab-quality-of-service -o yaml | grep qosClass
Un Pod obtendrá la clase de QoS de "mejor esfuerzo" si no cumple los requisitos para el resto de clases, ésto es, si sus Contenedores no tienen ninguna petición o límite de recursos.
Para crear un Pod con dicha clase de QoS:
pods/qos-pod-besteffort.yaml con este manifiesto:apiVersion: v1
kind: Pod
metadata:
name: qos-demo-besteffort
spec:
containers:
- name: qos-demo-ctr
image: nginx
kubectl apply -f pods/qos-pod-besteffort.yaml -n lab-quality-of-service
kubectl get pods -n lab-quality-of-service
kubectl top pod qos-demo-besteffort -n lab-quality-of-service
kubectl get pods qos-demo-besteffort -n lab-quality-of-service -o yaml
Busca la línea que comienza por "qosClass"
kubectl get pods qos-demo-besteffort -n lab-quality-of-service -o yaml | grep qosClass
Crea un Pod con 2 Contenedores con la siguiente configuración. ¿Qué clase de QoS tendrá asignada?
Archivo pods/qos-pod-2containers.yaml:
apiVersion: v1
kind: Pod
metadata:
name: qos-demo-challenge
spec:
containers:
- name: qos-demo-ctr-1
image: nginx
resources:
requests:
memory: "200Mi"
- name: qos-demo-ctr-2
image: redis
Elimina el namespace, lo cual eliminará todos los recursos:
kubectl delete namespace lab-quality-of-service
En esta práctica hemos visto cómo: