En este tema, aprenderás cómo desplegar contenedores Docker en un clúster de Kubernetes. Kubernetes es una plataforma de orquestación de contenedores que automatiza el despliegue, la gestión y el escalado de aplicaciones en contenedores. Este módulo te guiará a través de los conceptos básicos y los pasos necesarios para desplegar tus contenedores Docker en Kubernetes.
Objetivos de Aprendizaje
- Comprender los conceptos básicos de Kubernetes.
- Configurar un clúster de Kubernetes.
- Crear y desplegar aplicaciones en contenedores en Kubernetes.
- Gestionar y escalar aplicaciones en Kubernetes.
Conceptos Básicos de Kubernetes
¿Qué es Kubernetes?
Kubernetes es una plataforma de código abierto para la automatización del despliegue, escalado y operación de aplicaciones en contenedores. Fue desarrollado originalmente por Google y ahora es mantenido por la Cloud Native Computing Foundation (CNCF).
Componentes Clave de Kubernetes
- Nodo: Una máquina (física o virtual) en el clúster de Kubernetes.
- Pod: La unidad más pequeña y simple en el modelo de objetos de Kubernetes. Un pod puede contener uno o más contenedores.
- Servicio: Una abstracción que define un conjunto lógico de pods y una política para acceder a ellos.
- Deployment: Un objeto que proporciona actualizaciones declarativas para pods y ReplicaSets.
- Namespace: Un mecanismo para dividir recursos de clúster entre múltiples usuarios.
Configurando un Clúster de Kubernetes
Instalación de Minikube
Minikube es una herramienta que permite ejecutar un clúster de Kubernetes localmente. Es ideal para el desarrollo y pruebas.
-
Instalar Minikube:
- En macOS:
brew install minikube
- En Linux:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube
- En Windows: Descarga el ejecutable desde Minikube Releases y agrégalo a tu PATH.
- En macOS:
-
Iniciar Minikube:
minikube start
Instalación de kubectl
kubectl
es la herramienta de línea de comandos para interactuar con Kubernetes.
- Instalar kubectl:
- En macOS:
brew install kubectl
- En Linux:
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x ./kubectl sudo mv ./kubectl /usr/local/bin/kubectl
- En Windows: Descarga el ejecutable desde Kubernetes Releases y agrégalo a tu PATH.
- En macOS:
Desplegando una Aplicación en Kubernetes
Creación de un Deployment
Un Deployment en Kubernetes gestiona un conjunto de pods idénticos. Vamos a crear un Deployment para una aplicación simple en contenedor Docker.
-
Archivo de Deployment (deployment.yaml):
apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: my-docker-image:latest ports: - containerPort: 80
-
Aplicar el Deployment:
kubectl apply -f deployment.yaml
Exponiendo el Deployment con un Servicio
Para acceder a los pods desde fuera del clúster, necesitas crear un Servicio.
-
Archivo de Servicio (service.yaml):
apiVersion: v1 kind: Service metadata: name: my-app-service spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer
-
Aplicar el Servicio:
kubectl apply -f service.yaml
Verificando el Despliegue
-
Listar Pods:
kubectl get pods
-
Listar Servicios:
kubectl get services
-
Acceder a la Aplicación:
- Si estás usando Minikube, obtén la URL del servicio:
minikube service my-app-service --url
- Si estás usando Minikube, obtén la URL del servicio:
Escalando la Aplicación
Para escalar la aplicación, puedes ajustar el número de réplicas en el Deployment.
-
Escalar el Deployment:
kubectl scale deployment my-app --replicas=5
-
Verificar el Escalado:
kubectl get pods
Ejercicio Práctico
Ejercicio
- Crea un clúster de Kubernetes usando Minikube.
- Despliega una aplicación Docker simple usando un Deployment.
- Exponla mediante un Servicio.
- Escala el Deployment a 5 réplicas.
Solución
-
Iniciar Minikube:
minikube start
-
Crear el Deployment:
# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: my-docker-image:latest ports: - containerPort: 80
kubectl apply -f deployment.yaml
-
Crear el Servicio:
# service.yaml apiVersion: v1 kind: Service metadata: name: my-app-service spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer
kubectl apply -f service.yaml
-
Escalar el Deployment:
kubectl scale deployment my-app --replicas=5
Conclusión
En este tema, has aprendido cómo desplegar contenedores Docker en un clúster de Kubernetes. Has configurado un clúster local usando Minikube, creado y desplegado un Deployment, expuesto tu aplicación mediante un Servicio y escalado el Deployment. Estos son los fundamentos para gestionar aplicaciones en contenedores a gran escala con Kubernetes. En el siguiente tema, profundizaremos en el escalado y balanceo de carga en Kubernetes.
Docker: De Principiante a Avanzado
Módulo 1: Introducción a Docker
- ¿Qué es Docker?
- Instalando Docker
- Arquitectura de Docker
- Comandos Básicos de Docker
- Entendiendo las Imágenes de Docker
- Creando tu Primer Contenedor Docker
Módulo 2: Trabajando con Imágenes Docker
- Docker Hub y Repositorios
- Construyendo Imágenes Docker
- Conceptos Básicos de Dockerfile
- Gestionando Imágenes Docker
- Etiquetado y Publicación de Imágenes
Módulo 3: Contenedores Docker
- Ejecutando Contenedores
- Ciclo de Vida del Contenedor
- Gestionando Contenedores
- Redes en Docker
- Persistencia de Datos con Volúmenes
Módulo 4: Docker Compose
- Introducción a Docker Compose
- Definiendo Servicios en Docker Compose
- Comandos de Docker Compose
- Aplicaciones Multi-Contenedor
- Variables de Entorno en Docker Compose
Módulo 5: Conceptos Avanzados de Docker
- Profundización en Redes Docker
- Opciones de Almacenamiento Docker
- Mejores Prácticas de Seguridad en Docker
- Optimizando Imágenes Docker
- Registro y Monitoreo en Docker
Módulo 6: Docker en Producción
- CI/CD con Docker
- Orquestando Contenedores con Docker Swarm
- Introducción a Kubernetes
- Desplegando Contenedores Docker en Kubernetes
- Escalado y Balanceo de Carga