Pods, ReplicaSets y Deployments

Clase 6 de 24Curso de Kubernetes

Resumen

¿Cómo acceder a los recursos en Kubernetes con Kubectl?

Cuando trabajamos con Kubernetes, el comando Kubectl es nuestra puerta de entrada para interactuar con los recursos. Para comenzar, es fundamental ver cómo acceder a los pods:

  • Obtener Pods: ejecuta Kubectl get pods. Si no especificas un name space, se utilizará el name space por defecto.

Ahora, ¿qué sabemos sobre los name spaces?

  • Validar Name Spaces: usa Kubectl get namespaces para ver los espacios de nombre existentes, que incluyen default, kube-node-lease, kube-public, y kube-system.

Estos name spaces, especialmente los que empiezan con kube, son para uso interno de Kubernetes. Pero, si deseas crear nuevos name spaces:

  • Crear Name Space: implementa create namespace o su forma corta create ns .

¿Cómo gestionar pods eficientemente?

Al trabajar con pods, se manejan dos enfoques: imperativo y declarativo. Dichos enfoques ofrecen diferentes formas para crear y gestionar pods, y queremos compartir algunos ejemplos.

Enfoque imperativo con Kubectl

Para ilustrar la creación de pods de forma imperativa, utilizaremos comandos de la CLI (Interfaz de Línea de Comandos):

kubectl run nginx --image=nginx --restart=Never --port=80

Al ejecutar esto, Kubernetes asume varios parámetros por defecto, como dirección IP y el ID del contenedor. Posteriormente, validamos con:

  • Describir un Pod: Kubectl describe pod . Aquí verás condiciones y estados del pod.

Enfoque declarativo con archivos YAML

Kubernetes también se puede manejar declarativamente con archivos YAML que detallan configuraciones específicas. Estos archivos son especialmente útiles para la automatización y la gestión de infraestructura como código.

¿Cómo escalar aplicaciones con réplica sets?

A medida que intentes escalar aplicaciones, los replica sets entran en juego. Estos se encargan de gestionar múltiples instancias de pods.

Creación de un replica set

Para crear un replica set, utiliza un archivo YAML con la siguiente estructura:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: example-replicaset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

Implementa con:

kubectl apply -f replicasets.yaml

Verificación y mantenimiento

  • Observar Replica Sets: Kubectl get replicasets.
  • Eliminar un Pod: al borrarlo, la réplica set automáticamente creará uno nuevo para mantener el número deseado de réplicas.

¿Qué papel juegan los deployments en Kubernetes?

Los deployments actúan como la capa superior, gestionando replica sets y facilitando control sobre las aplicaciones.

Beneficios de un deployment

Un deployment permite:

  1. Actualización continua: implementar nuevas versiones sin interrumpir el servicio.
  2. Rollback automático: revertir actualizaciones fallidas.

Creación de un deployment

Utiliza el siguiente YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-deployment
spec:
  replicas: 4
  selector:
    matchLabels:
      app: hello-app
  template:
    metadata:
      labels:
        app: hello-app
    spec:
      containers:
      - name: hello-app
        image: google-samples/hello-app:1.0
        ports:
        - containerPort: 8080

Implementa con:

kubectl apply -f deployment.yaml

Actualización de imágenes

Para actualizar la imagen a una versión más reciente, utiliza:

kubectl set image deployment/example-deployment hello-app=google-samples/hello-app:2.0

Validación y seguimiento

  • Ver counter en deployments y replica sets: Kubectl get deployments y Kubectl get replicasets.
  • Deshacer actualizaciones: kubectl rollout undo deployment/example-deployment.

¿Cómo se expone el tráfico a Kubernetes?

Para gestionar el tráfico entre nuestra máquina local y los pods, se utilizan comandos de port-forward:

kubectl port-forward deployment/example-deployment 8080:8080

Esto redirecciona el tráfico al puerto 8080 del deployment, permitiéndote verificar en el navegador con localhost:8080.

Invito a todos a compartir qué les ha parecido este flujo de trabajo con Kubernetes y cómo podrían incorporarlo en sus proyectos futuros. Estos conocimientos son solo el comienzo para dominar el despliegue y gestión de aplicaciones en la nube.