Laboratorio práctico CKA. Desplegar, Exponer, Escalar, Verificar comportamiento y Limpiar clúster.

Ejercicio: Despliega una aplicación básica con escalado

Objetivo

  1. Desplegar una aplicación de ejemplo (httpd, el servidor web Apache).
  2. Exponer la aplicación dentro del clúster mediante un Service.
  3. Escalar la aplicación para manejar más carga.
  4. Verificar el comportamiento de los pods y la distribución en los nodos.

1. Crea un Deployment para la aplicación

Crea un archivo YAML llamado httpd-deployment.yaml con el siguiente contenido:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd-deployment
  labels:
    app: httpd
spec:
  replicas: 2 # Inicia con 2 réplicas
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
      - name: httpd
        image: httpd:2.4 # Imagen oficial de Apache HTTP Server
        ports:
        - containerPort: 80

Este Deployment:

  • Despliega la imagen httpd:2.4 en 2 pods.
  • Usa la etiqueta app: httpd para identificar los pods.

Aplica este archivo con:

kubectl apply -f httpd-deployment.yaml

Verifica que los pods se estén ejecutando:

kubectl get pods

2. Crea un Service para exponer la aplicación

Ahora, crea un archivo YAML llamado httpd-service.yaml para exponer los pods
dentro del clúster:

apiVersion: v1
kind: Service
metadata:
name: httpd-service
spec:
selector:
app: httpd
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort

Este Service:

  • Selecciona los pods con la etiqueta app: httpd.
  • Expone el puerto 80 de los pods a un puerto accesible en los nodos (NodePort).

Aplica el archivo:

kubectl apply -f httpd-service.yaml

Verifica que el servicio se haya creado:

kubectl get service httpd-service

(El puerto 31111 (o el que Kubernetes asigne automáticamente)
será el puerto que puedes usar para acceder a la aplicación)

3. Accede a la aplicación

Obtén la dirección IP de uno de tus nodos (worker o master) e intenta acceder
a la aplicación usando el puerto del NodePort:

curl http://<NODE_IP>:31111

Deberías ver la página predeterminada de Apache HTTP Server.

4. Escala la aplicación

Ahora, escala el Deployment para manejar más tráfico.

Cambia el número de réplicas a 4:

kubectl scale deployment httpd-deployment --replicas=4

y Verifica que Kubernetes haya creado los nuevos pods:

5. Observa la distribución de pods:

Con el comando anterior (kubectl get pods -o wide), verifica en qué nodos están
corriendo los pods. Kubernetes debería haber distribuido los pods entre los nodos
disponibles.

6. Limpia el clúster:

kubectl delete -f httpd-deployment.yaml kubectl delete -f httpd-service.yaml


Si en algún momento quieres limpiar el clúster pero has perdido los archivos YAML
o no recuerdas cuáles recursos aplicaste, puedes identificar y eliminar los recursos
directamente desde el clúster utilizando los comandos de kubectl.

Aquí tienes un paso a paso para proceder:

1. Listar los recursos en el clúster

Usa los comandos de kubectl para listar los recursos existentes. Por ejemplo:

a) Listar Deployments

kubectl get deployments

Esto mostrará todos los Deployments activos en el clúster.

b) Listar Services

kubectl get services

Esto incluirá tanto servicios creados manualmente como servicios por defecto,

como kubernetes (que no deberías eliminar).

c) Listar Pods (si no están gestionados por un Deployment)


kubectl get pods

Esto mostrará los pods que no están gestionados por un controlador, como Deployments,

StatefulSets o DaemonSets.


2. Describir recursos para confirmar su propósito

Si no estás seguro de qué hace un recurso, puedes inspeccionarlo antes de eliminarlo:


kubectl describe deployment <nombre-del-deployment> kubectl describe service <nombre-del-service>

Esto te permitirá verificar etiquetas, imágenes de contenedor y otra información

útil para identificar si es seguro eliminarlo.


3. Eliminar los recursos identificados

Una vez que hayas identificado los recursos que deseas eliminar,

puedes eliminarlos con los siguientes comandos:

a) Eliminar un Deployment

kubectl delete deployment <nombre-del-deployment>

Por ejemplo:

kubectl delete deployment httpd-deployment

b) Eliminar un Service

kubectl delete service <nombre-del-service>

Por ejemplo:

kubectl delete service httpd-service

c) Eliminar Pods individuales

Si hay pods que no están gestionados por un controlador (como un Deployment o Job),

elimínalos directamente:

kubectl delete pod <nombre-del-pod>

4. Automatizar la limpieza de un namespace

Si los recursos que aplicaste estaban en un namespace específico

(por ejemplo, default),

puedes eliminar todos los recursos en ese namespace con un solo comando:

kubectl delete all --all -n <nombre-del-namespace>

Por ejemplo, para el namespace default:

kubectl delete all --all -n default

Esto elimina:

  • Pods
  • Services
  • Deployments
  • ReplicaSets
  • StatefulSets
  • DaemonSets
  • Jobs

5. Eliminar un namespace completo

Si los recursos se encuentran en un namespace personalizado y no en el namespace

default, puedes eliminar todo el namespace:

kubectl delete namespace <nombre-del-namespace>

Esto elimina todos los recursos dentro del namespace. Por ejemplo:

kubectl delete namespace test

6. Verifica la limpieza

Después de eliminar recursos, verifica que no queden recursos activos:

kubectl get all

Esto mostrará todos los recursos restantes en el namespace actual

(por defecto, default).


Consejo: Usa etiquetas para facilitar la limpieza

En el futuro, puedes etiquetar tus recursos cuando los crees.

Esto te permitirá identificarlos fácilmente más adelante. Por ejemplo:

metadata: labels: app: httpd

Luego puedes buscar y eliminar todos los recursos con esa etiqueta:

kubectl delete all -l app=httpd

Objetivos de aprendizaje:

  • Practicar cómo crear un Deployment para aplicaciones.
  • Aprender a exponer aplicaciones mediante un Service.
  • Escalar un Deployment y observar la distribución de pods entre los nodos.
  • Interactuar con los pods y servicios desde fuera del clúster.

Comentarios