¿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-recursos-pod
Vamos a crear un Pod con un Contenedor. El Contenedor tiene una petición de memoria de 100 MiB y un límite de memoria de 200 MiB.
pods/memory-request-limit.yaml con este manifiesto:apiVersion: v1
kind: Pod
metadata:
name: memory-demo
namespace: mem-example
spec:
containers:
- name: memory-demo-ctr
image: polinux/stress
resources:
limits:
memory: "200Mi"
requests:
memory: "100Mi"
command: ["stress"]
args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
kubectl apply -f pods/memory-request-limit.yaml -n lab-recursos-pod
kubectl get pods -n lab-recursos-pod
kubectl top pod memory-demo -n lab-recursos-pod
Si un Contenedor del Pod excede su límite de memoria, se convierte en candidato para ser eliminado y reiniciado.
pods/memory-request-limit2.yaml con este manifiesto:apiVersion: v1
kind: Pod
metadata:
name: memory-demo-2
namespace: mem-example
spec:
containers:
- name: memory-demo-2-ctr
image: polinux/stress
resources:
requests:
memory: "50Mi"
limits:
memory: "100Mi"
command: ["stress"]
args: ["--vm", "1", "--vm-bytes", "250M", "--vm-hang", "1"]
kubectl apply -f pods/memory-request-limit2.yaml -n lab-recursos-pod
kubectl get pods -n lab-recursos-pod
kubectl top pod memory-demo-2 -n lab-recursos-pod
kubectl get pods memory-demo-2 -n lab-recursos-pod -w
Si ya ha sido eliminado, recréalo de nuevo.Una vez sea eliminado, se reiniciará automáticamente, y será eliminado de nuevo.La asignación y ejecución de Pods depende de la petición de recursos del mismo, y los recursos disponibles en los nodos.
pods/memory-request-limit3.yaml con este manifiesto:apiVersion: v1
kind: Pod
metadata:
name: memory-demo-3
namespace: mem-example
spec:
containers:
- name: memory-demo-3-ctr
image: polinux/stress
resources:
limits:
memory: "1000Gi"
requests:
memory: "1000Gi"
command: ["stress"]
args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
kubectl apply -f pods/memory-request-limit3.yaml -n lab-recursos-pod
kubectl get pods -n lab-recursos-pod
Podrás comprobar que queda en estado PENDING indefinidamente.
Elimina el namespace, lo cual eliminará todos los recursos:
kubectl delete namespace lab-recursos-pod
En esta práctica hemos visto cómo: