Capítulo 1.5 - Conceptos Fundamentales
Objetivos de Aprendizaje
Al finalizar este capítulo, usted será capaz de:
- Comprender qué es un Pod
- Explicar el rol de un Deployment
- Comprender los Services y sus tipos
- Utilizar los Namespaces para la organización
Introducción
Kubernetes utiliza varios conceptos fundamentales que usted usará constantemente. Este capítulo presenta los más importantes: Pods, Deployments, Services y Namespaces.
Pods: La Unidad Atómica
Definición
Un Pod es la unidad más pequeña desplegable en Kubernetes.
Características de un Pod
Puntos clave:
- Un Pod = 1 o más contenedores
- Los contenedores en un Pod comparten:
- La dirección IP
- Los volúmenes
- El espacio de nombres de red
- Los Pods son efímeros (pueden ser recreados)
Ejemplo de Pod
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
Deployments: Gestión del Ciclo de Vida
Definición
Un Deployment describe el estado deseado de su aplicación.
Funcionalidades de un Deployment
Ventajas:
- Gestiona los réplicas automáticamente
- Rolling updates (sin interrupciones)
- Rollback en caso de problema
- Auto-recuperación
Ejemplo de Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
Services: Exposición de Aplicaciones
Definición
Un Service expone un conjunto de Pods como un servicio de red estable.
Problema resuelto:
- Los Pods tienen IPs efímeras
- Los Pods pueden ser recreados
- ¿Cómo mantener una dirección estable?
Solución: El Service proporciona una IP estable y un nombre DNS
Tipos de Services
1. ClusterIP (Por defecto)
- Servicio interno al cluster
- Accesible solo desde el cluster
- Utiliza el DNS interno
2. NodePort
- Expone en un puerto (30000-32767) de cada nodo
- Accesible desde el exterior
- Puerto único en todos los nodos
3. LoadBalancer
- Expone a través de un load balancer cloud
- IP pública automática
- Disponible en AWS, Azure, GCP
Ejemplo de Service
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
Namespaces: Aislamiento Lógico
Definición
Los Namespaces permiten dividir un cluster en varios entornos virtuales.
Ventajas de los Namespaces
Casos de uso:
- Separar dev/staging/prod
- Aislar equipos
- Gestionar cuotas de recursos
- Aplicar políticas de seguridad
Namespaces por Defecto
Kubernetes crea varios namespaces por defecto:
- default: Namespace por defecto para sus recursos
- kube-system: Componentes del sistema Kubernetes
- kube-public: Recursos públicos
- kube-node-lease: Heartbeats de los nodos
Ejemplo de Uso
# Crear un namespace
kubectl create namespace production
# Desplegar en un namespace
kubectl apply -f deployment.yaml -n production
# Listar los pods en un namespace
kubectl get pods -n production
Relaciones Entre los Conceptos
Vista General
Jerarquía:
- Namespace: Contiene todo
- Deployment: Gestiona los Pods
- ReplicaSet: Mantiene el número de réplicas
- Pods: Ejecutan los contenedores
- Service: Expone los Pods
Resumen del Capítulo
En este capítulo, usted ha aprendido:
Pod: Unidad más pequeña desplegable, 1+ contenedores
Deployment: Gestiona el ciclo de vida, réplicas, actualizaciones
Service: Expone los Pods con una IP estable
Tipos de Services: ClusterIP, NodePort, LoadBalancer
Namespaces: Aislamiento lógico, organización
Relaciones: Namespace → Deployment → Pods → Service
Próximos Pasos
Ahora que domina los conceptos fundamentales:
Lab 1.1: Primer Deployment (práctica)
Quiz Módulo 1: Validar sus conocimientos
Capítulo creado el: Diciembre 2024