Introducción a Kubernetes: Los Fundamentos
Descubre los conceptos básicos de Kubernetes, su arquitectura y cómo está revolucionando el despliegue de aplicaciones en contenedores.
InSkillCoach
¿Qué es Kubernetes?
Kubernetes (K8s) es una plataforma de código abierto diseñada para automatizar el despliegue, el escalado y la operación de aplicaciones en contenedores. Desarrollado inicialmente por Google, actualmente lo mantiene la Cloud Native Computing Foundation (CNCF).
Kubernetes gestiona automáticamente los contenedores Docker (u otros runtimes de contenedores) agrupándolos en unidades lógicas para facilitar su gestión y su descubrimiento. Ofrece un enfoque declarativo para definir el estado deseado de tu infraestructura.
¿Por qué Kubernetes?
Ventajas clave
- Automatización: despliega y actualiza aplicaciones sin interrupciones del servicio.
- Escalabilidad: ajusta automáticamente el número de contenedores en función de la carga.
- Alta disponibilidad: distribuye los contenedores en varios nodos para evitar puntos únicos de fallo.
- Portabilidad: ejecuta tus aplicaciones de la misma manera en distintos entornos (desarrollo, pruebas, producción).
- Ahorro de costes: optimiza el uso de los recursos y reduce los costes de infraestructura.
Casos de uso
- Aplicaciones de microservicios
- Aplicaciones cloud-native
- Despliegues complejos
- Entornos multicloud
- Aplicaciones que requieren alta disponibilidad
Arquitectura de Kubernetes
Kubernetes sigue una arquitectura cliente-servidor con los siguientes componentes:
Componentes del plano de control (Control Plane)
- API Server: punto de entrada para todos los comandos y comunicaciones.
- etcd: base de datos distribuida que almacena todos los datos de configuración.
- Scheduler: determina qué nodos deben ejecutar qué pods.
- Controller Manager: gestiona los distintos controladores que regulan el estado del clúster.
- Cloud Controller Manager: se integra con los servicios en la nube (balanceadores de carga, volúmenes, etc.).
Componentes de los nodos (Nodes)
- Kubelet: agente que se ejecuta en cada nodo y garantiza la comunicación con el plano de control.
- Container Runtime: software que ejecuta los contenedores (Docker, containerd, CRI-O).
- Kube-proxy: gestiona las reglas de red y las conexiones.
- Pods: la unidad desplegable más pequeña de Kubernetes, que contiene uno o varios contenedores.
Conceptos fundamentales
Pods
Un pod es la unidad desplegable más pequeña de Kubernetes. Puede contener uno o varios contenedores que comparten:
- Un espacio de nombres de red
- Un espacio de nombres IPC
- Un espacio de nombres UTS
- Un espacio de nombres PID (opcional)
- Almacenamiento compartido (volúmenes)
Services
Un service es una abstracción que define un conjunto lógico de pods y una política para acceder a ellos. Los tipos de services incluyen:
- ClusterIP: expone el servicio en una IP interna del clúster
- NodePort: expone el servicio en el puerto de cada nodo
- LoadBalancer: expone el servicio al exterior mediante un balanceador de carga
- ExternalName: asocia el servicio a un nombre DNS externo
Despliegues (Deployments)
Un deployment proporciona actualizaciones declarativas para los pods y los ReplicaSets. Permite:
- Definir el número de réplicas deseadas
- Actualizar los pods de forma progresiva
- Volver a una versión anterior en caso de problema
ConfigMaps y Secrets
- ConfigMaps: almacenan datos no confidenciales en forma de pares clave-valor
- Secrets: almacenan datos sensibles (contraseñas, tokens, claves)
Volúmenes
Los volúmenes permiten persistir los datos de los contenedores. Kubernetes admite numerosos tipos de volúmenes:
- Volúmenes locales (emptyDir, hostPath)
- Volúmenes en la nube (AWS EBS, GCP Persistent Disk)
- Volúmenes de red (NFS, Ceph)
Primeros pasos con Kubernetes
Instalación de minikube
Minikube es una herramienta que te permite ejecutar Kubernetes en local:
# Installation de minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# Démarrage de minikube
minikube start
Instalación de kubectl
kubectl es la herramienta de línea de comandos para interactuar con Kubernetes:
# Installation de kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
Comandos básicos
# Vérifier la version de kubectl
kubectl version
# Lister les nœuds
kubectl get nodes
# Lister les pods
kubectl get pods
# Lister les services
kubectl get services
# Créer un déploiement
kubectl create deployment hello-world --image=gcr.io/google-samples/hello-app:1.0
# Exposer un service
kubectl expose deployment hello-world --type=LoadBalancer --port=8080
# Décrire un pod
kubectl describe pod <pod-name>
# Voir les logs d'un pod
kubectl logs <pod-name>
# Exécuter une commande dans un pod
kubectl exec -it <pod-name> -- /bin/bash
Conclusión
Kubernetes se ha convertido en el estándar de la industria para la orquestación de contenedores. Su capacidad para automatizar el despliegue, el escalado y la operación de aplicaciones en contenedores lo convierte en una herramienta indispensable para los equipos DevOps modernos.
En los próximos artículos exploraremos temas más avanzados, como:
- La creación de despliegues complejos
- La gestión de secretos y configuraciones
- La monitorización y el logging
- La seguridad en Kubernetes
- La integración con CI/CD
¡Mantente atento para aprender más sobre estos temas!
Acerca de InSkillCoach
Experto en formación y tecnologías
Coach especializado en tecnologías avanzadas e IA, impulsado por GNeurone Inc.
Certificaciones:
- AWS Certified Solutions Architect – Professional
- Certificaciones de Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
Comentarios
Los comentarios funcionan con GitHub Discussions
Inicia sesión con GitHub para participar en la discusión