¿Qué vamos a ver?

What You'll Learn

Basado en la documentación oficial de K8s (licencia CC-BY-4.0).

  1. Accede a console.cloud.google.com
  2. Loguéate con tu cuenta de usuario elegida para el curso.
  3. Una vez ya en la consola, en la esquina superior izquierda busca un desplegable con 3 hexágonos pequeños para seleccionar tu proyecto.
  4. Ábrelo y selecciona tu proyecto asignado. Puedes tener que hacer click en el desplegable de organizaciones y cambiar a Sin organización.
  5. Te recomendamos dividir el escritorio horizontalmente en dos ventanas, una con la consola y/o Cloud Shell y otra con las instrucciones.
  6. Activa Cloud Shell en el icono de la parte superior derecha >_.
  7. Puedes configurar la completación de comandos para kubectl con la tecla "TAB":
    source <(kubectl completion bash)
    
    Comprueba que funciona escribiendo kubectl y presionando la tecla "TAB" 2 veces.

Crea un namespace

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.

  1. Crea el archivo 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"]
    
  2. Crea el Pod:
    kubectl apply -f pods/memory-request-limit.yaml -n lab-recursos-pod
    
  3. Verifica que está ejecutándose:
    kubectl get pods -n lab-recursos-pod
    
  4. Comprueba las métricas de uso de recursos del 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.

  1. Crea el archivo 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"]
    
  2. Crea el Pod:
    kubectl apply -f pods/memory-request-limit2.yaml -n lab-recursos-pod
    
  3. Verifica que está ejecutándose:
    kubectl get pods -n lab-recursos-pod
    
  4. Comprueba las métricas de uso de recursos del Pod:
    kubectl top pod memory-demo-2 -n lab-recursos-pod
    
  5. Vigila la ejecución del Pod hasta que sea eliminado:
    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.

  1. Crea el archivo 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"]
    
  2. Crea el Pod:
    kubectl apply -f pods/memory-request-limit3.yaml -n lab-recursos-pod
    
  3. Examina el estado del pod:
    kubectl get pods -n lab-recursos-pod
    

Podrás comprobar que queda en estado PENDING indefinidamente.

Eliminar los recursos usados

Elimina el namespace, lo cual eliminará todos los recursos:

kubectl delete namespace lab-recursos-pod

En esta práctica hemos visto cómo:

What we've covered