¡Participa de la Maratón Behind the Code, la competencia de programación más desafiante! Inscríbete aqui

Desplegar una aplicación desde una imagen propia de Docker en Kubernetes en IBM Cloud

Introducción

En este tutorial vamos a ver el potencial de Docker y Kubernetes usados conjuntamente, aprenderemos a crear y modificar una imágen de Docker, subirla al repositorio en Docker Hub y actualizarla. Luego vamos a usar esa imagen para hacer un despliegue en un Cluster de Kubernetes en IBM Cloud, revisar los pods y escalar la fuerza de trabajo. Por último vamos a exponer la aplicación para poder acceder de manera externa, verificar el funcionamiento y también haremos algunos cambios en el servicio para probar la actualización del mismo y que podamos seguir accediendo a la aplicación.

Módulos de esta ruta de aprendizaje

Completa estos tutoriales para obtener las habilidades prácticas y el conocimiento.

Título Tiempo Descripción
1 Desplegar WordPress en Kubernetes en IBM Cloud 30 minutos Aprender a desplegar uno de los más conocidos frameworks de sitios webs como lo es WordPress
2 Desplegar una aplicación desde una imagen propia de Docker en Kubernetes en IBM Cloud 30 – 60 minutos Aprenderemos a crear y modificar una imágen de Docker, subirla al repositorio en Docker Hub y actualizarla
3 Ubuntu Lab: Como crear un único Pod en un Clúster de Kubernetes Menos de 30 minutos Vamos a ver cómo implementar un Pod de Ubuntu en Kubernetes en IBM Cloud, con el objetivo de tener un Laboratorio para pruebas.
4 Monitoreo en Kubernetes: Crear una instacia de Grafana en Kubernetes y acceder externamente 30 minutos Vamos a ver cómo configurar un panel de Grafana en un Clúster de Kubernetes en IBM Cloud, usando Prometheus como herramienta de análisis de datos.
5 Aplicación PHP con MongoDB en Kubernetes 30 minutos Vamos a ver cómo implementar una aplicación PHP tipo Libro de Visitas con varios niveles utilizando Kubernetes y Docker, con una instancia única de MongoDB para almacenar las entradas del libro de visitas y varias instancias de frontend web.
6 Kubernetes en lo Profundo, tres elementos importantes 30 minutos Vamos a ver tres elementos que son muy importantes para ir profundizando en el uso de Kubernetes.

Requisitos

  • Sistema de gestión de paquetes de Node.js npm. Obtener npm/Node.js!
  • Docker y comando docker. Obtener Docker
  • Acceso a Docker Hub (en el caso de querer usar su propia imagen). Docker Hub
  • Una cuenta gratuita de IBM Cloud. Te podes registrar acá si no tenes una aun.
  • Un Cluster de Kubernetes gratuito. Obtener acá
  • Tener habilitados los comandos ibmcloud y kubectl. Configurar CLI
  • Puedes encontrar el repositorio con los archivos necesarios y ejemplificativos aquí

Tiempo estimado

El tiempo estimado que puede llevar este tutorial es de 30 minutos a 60 minutos con todos los requerimientos.

Este tutorial se divide en tres secciones

  1. Node App
  2. Docker
  3. Kubernetes

1. Node App

  1. En el directorio del proyecto, crear un paquete vacío e inicializar Node.js: npm init -y
  2. Instalar el modulo para aplicaciones web de Node.js Express: npm install express
  3. Dejar en el mismo directorio el archivo index.js

Nota: Si no se puede o quiere instalar Node.js, se puede usar el contenido del archivo KubeNode.zip. Descomprimirlo en el mismo directorio.

2. Docker

  1. Vamos a usar el archivo dockerfile que tiene que estar en el mismo directorio que se está utilizando.
  2. Construir la imagen Docker: docker build -t <dockeruser>/node-hello-app .
  3. Correr el contenedor localmente para probar: docker run --rm -d -p 3000:3000 <dockeruser>/node-hello-app
  4. Revisar los contenedores que están corriendo: docker ps
    Nota: Se puede revisar en http://localhost:3000
  5. Terminar las tareas de contenedor: docker stop <CONTAINER_ID>
  6. Subir la imagen al repositorio en Docker Hub: docker push <dockeruser>/node-hello-app

EXTRA: Prueba de actualización:

  • Editar el archivo index.js y reemplazar la palabra Hola por la palabra Hello.
  • Reconstruir la imagen y prestar atención del uso de las capas anteriores: docker build -t <dockeruser>/node-hello-app.

3. Kubernetes

  1. Ver los nodos que se están ejecutando: kubectl get nodes
  2. Crear un despliegue usando la imagen que creamos: kubectl create deployment --image <dockeruser>/node-hello-app node-app
    Nota: Si no se puede/quiere instalar Docker, se puede usar la imagen marcelorum/node-hello-app creada para este fin.
  3. Exponer el despliegue como una replica NodePort: kubectl expose deployment node-app --type=NodePort --port 3000
  4. Revisar el servicio creado y el peurto asignado: kubectl get services
  5. Para obtener la IP Pública: kubectl get nodes -o wide

Felicitaciones! Ahora podemos usar el enlace http://[Public IP]:[PORT] para acceder al servicio.

EXTRA: Prueba de esfuerzo:

  • Listar los pods activos: kubectl get pods
  • Escalar hasta 3 replicas: kubectl scale deployment node-app --replicas 3
  • Listar los pods activos: kubectl get pods

EXTRA: Prueba de modificación del Servicio:

  • Editar el servicio: «`kubectl edit service node-app

    Nota: Se sale del editor escribiendo :wq«`

  • Reemplazar el puerto: port: 3000 a port: 80

  • Reemplazar el tipo: type: NodePort con type: LoadBalancer
  • Verificar que el servicio se haya actualizado: kubectl get service
  • Usar el enlace http://[Public IP]:[PORT] para verificar.

Resumen

En este tutorial aprendimos a crear una imagen de Docker y subirla al repositorio, luego usar esa imagen para hacer un despliegue en un Cluster de Kubernetes en IBM Cloud. Además vimos el comportamiento al realizar modificaciones en la imagen de Docker y en los Servicios de Kubernetes y también a escalar la aplicación con más réplicas.

Enlaces Interesantes