¿Qué es Kubernetes?

Kubernetes es un sistema de orquestación de contenedores de código abierto que automatiza el despliegue, escalado y gestión de aplicaciones containerizadas. Aunque Docker permite ejecutar contenedores, Kubernetes es lo que necesitas cuando tienes muchos contenedores en múltiples servidores y necesitas que se hablen entre sí, se escalen automáticamente y se recuperen de fallos.

Kubernetes maneja todo: qué contenedor corre dónde, cuántas réplicas necesitas, cómo acceder a ellos desde la red, y cómo actualizar la aplicación sin downtime. Es la plataforma estándar de la industria para production en la nube.

Conceptos Fundamentales: Pods

Un Pod es la unidad más pequeña en Kubernetes. Generalmente contiene un contenedor Docker, pero puede tener múltiples contenedores si necesitan compartir red. Todos los contenedores en un pod comparten una dirección IP. Los pods son efímeros: se crean y destruyen constantemente. Nunca deberías crear pods directamente; usas abstracciones de nivel superior como Deployments.

Un pod es como una envoltura alrededor de tu contenedor que le da identidad de red y le permite comunicarse con otros pods en el cluster. Dentro de un pod, los contenedores pueden comunicarse a través de localhost.

Desplegando Aplicaciones: Deployments

Un Deployment es una abstracción de Kubernetes que describe cómo debería verse tu aplicación. Especificas la imagen Docker, cuántas réplicas quieres, límites de recursos y política de actualización. Kubernetes garantiza que siempre hay el número especificado de pods corriendo, reemplazando los que fallen.

Los Deployments son declarativos: describes el estado deseado y Kubernetes lo hace realidad. Quieres 3 copias de tu app ejecutando la imagen v1.2? Solo lo declaras en el Deployment y Kubernetes crea exactamente 3 pods.

Exponiendo Aplicaciones: Services

Los pods tienen IPs que cambian constantemente. Los Services solucionan esto proporcionando una dirección IP estable y un DNS para acceder a tus pods. Un Service agrupa múltiples pods y los expone a través de una IP y puerto únicos. Hay varios tipos: ClusterIP para comunicación interna, NodePort para acceso externo, y LoadBalancer para cloud.

Sin Services, tu aplicación sería inaccesible. Con Services, puedes balancear carga automáticamente entre réplicas y permitir que otros servicios y usuarios externos accedan a tu aplicación de forma confiable.

Setup Local: Minikube

Minikube es Kubernetes en una máquina virtual local. Perfecto para desarrollo y aprendizaje. Instala minikube, luego ejecuta "minikube start" para crear un cluster Kubernetes completamente funcional en tu laptop. Tiene todo: kubelet, etcd, API server. Luego usa "kubectl" (el cliente de Kubernetes) para interactuar con el cluster.

Con minikube puedes experimentar sin gastar dinero en AWS o GCP. Es la forma ideal de aprender Kubernetes sin presión de producción.

Usando kubectl

kubectl es la herramienta de línea de comandos para Kubernetes. Con kubectl creas, actualizas, eliminas y monitoreas recursos. Algunos comandos útiles: kubectl create deployment my-app --image=myimage crea un deployment, kubectl get pods lista todos los pods, kubectl logs pod-name muestra logs, kubectl port-forward service/my-app 8080:8080 accede a un servicio localmente.

La mayoría del trabajo con Kubernetes se hace con kubectl. Aprender sus comandos básicos es esencial.

Configuración con YAML

En production no usas comandos imperativos. En su lugar, describes tu infraestructura en archivos YAML declarativos. Un archivo YAML describe un Deployment especificando imagen, réplicas, volúmenes, variables de ambiente y más. Luego "kubectl apply -f deployment.yaml" crea o actualiza los recursos.

Los archivos YAML se versionan en git junto con el código. Es "infraestructura como código". Cambias el YAML, lo commiteas, Kubernetes actualiza automáticamente tu aplicación.

Escalado Automático

Kubernetes puede escalar automáticamente tu aplicación basado en métricas como CPU o memoria. El Horizontal Pod Autoscaler observa el uso de recursos y ajusta el número de réplicas automáticamente. Si la CPU excede el 80%, Kubernetes crea más pods. Si baja, destruye pods.

Esto significa tu aplicación se auto-escala sin intervención manual. En horas pico tienes muchas réplicas, en horas bajas menos. Pagas solo por lo que usas en AWS o GCP.

Próximos Pasos

Comienza con minikube. Aprende kubectl. Escribe YAML para Deployments y Services. Luego explora Persistent Volumes para datos, Ingress para routing HTTP avanzado, y ConfigMaps para configuración. El programa Cloud & DevOps de Argentina Tech Academy cubre todo esto en profundidad con proyectos reales en AWS y Google Cloud. Te preparamos para certificación AWS Solutions Architect. Transformá tu carrera en DevOps hoy mismo.