Esta documentación describe cómo desplegar y ejecutar el proyecto SmartPot en un entorno local utilizando Minikube y Kubernetes.
Antes de continuar, asegúrate de tener instalados y configurados los siguientes programas:
- Minikube: Instrucciones de instalación
- Kubectl: Instrucciones de instalación
- Docker (opcional, pero útil para imágenes locales): Instrucciones de instalación
Nota: Si aún no tienes Minikube instalado, puedes hacerlo siguiendo las instrucciones proporcionadas en el sitio oficial.
Note
Antes de realizar cualquier paso, asegúrate de haber iniciado Minikube en tu máquina. Si aún no lo has hecho, puedes iniciar Minikube con el siguiente comando:
minikube startEspera a que Minikube esté completamente iniciado antes de continuar con los siguientes pasos.
Para una forma rápida y sencilla de desplegar el proyecto en Minikube, puedes ejecutar el siguiente comando en tu terminal. Este comando descargará automáticamente el archivo k8s-deployment.yml desde el repositorio de GitHub y aplicará los recursos de Kubernetes:
curl -L https://raw.githubusercontent.com/SmartPotTech/.github/main/kubernetes/k8s-deployment.yml -o k8s-deployment.yml && kubectl apply -f k8s-deployment.ymlEste comando realiza lo siguiente:
- Descarga el archivo
k8s-deployment.ymldesde el repositorio de GitHub. - Aplica la configuración de Kubernetes para crear los recursos necesarios, como Pods, Servicios, Volúmenes, y Deployments.
Una vez que el comando haya finalizado, podrás acceder a los siguientes servicios:
- Base de Datos (MongoDB):
mongodb://admin:admin@localhost:27018/smartpot/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongo - API SmartPot:
http://localhost:8091 - Aplicación Web:
http://localhost:5173
Para obtener las URLs de acceso a los servicios de Minikube:
minikube service api-smartpot --url
minikube service web-smartpot --urlSi prefieres realizar el despliegue manualmente, sigue estos pasos detallados:
Primero, asegúrate de tener Minikube en ejecución:
minikube startEsto inicializa un clúster local de Kubernetes.
Descarga el archivo de despliegue de Kubernetes para configurar los servicios necesarios:
curl -L https://raw.githubusercontent.com/SmartPotTech/.github/main/k8s-deployment.yml -o k8s-deployment.ymlUna vez descargado el archivo k8s-deployment.yml, aplica la configuración de Kubernetes para crear los recursos en el clúster:
kubectl apply -f k8s-deployment.ymlEste comando creará los Pods, Deployments y Servicios necesarios, y también gestionará el almacenamiento persistente para MongoDB.
Después de que los recursos sean creados, puedes obtener las URLs de acceso a los servicios de Minikube con el siguiente comando:
minikube service api-smartpot --url
minikube service web-smartpot --urlEsto te dará las URLs donde puedes acceder a la API y a la aplicación web localmente.
Para detener los servicios de Kubernetes, puedes eliminar los recursos creados con el siguiente comando:
kubectl delete -f k8s-deployment.ymlEste comando eliminará todos los recursos definidos en el archivo de despliegue, como Pods y Servicios.
El archivo k8s-deployment.yml define varios recursos de Kubernetes que componen la infraestructura del proyecto SmartPot, incluidos los siguientes servicios:
- MongoDB (Base de Datos): Almacena los datos relacionados con los cultivos y sensores.
- API SmartPot (Backend): Expondrá los endpoints REST para interactuar con la base de datos.
- Web SmartPot (Frontend): Aplicación web que interactúa con la API para mostrar información sobre los cultivos.
El recurso PersistentVolume define la cantidad de almacenamiento que se asigna a la base de datos MongoDB. Asegura que los datos de la base de datos se mantengan entre reinicios del clúster.
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-data
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /mnt/data/mongoLa reclamación de volumen asegura que el contenedor de MongoDB obtenga el almacenamiento persistente necesario.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-data-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1GiEl Deployment para la API SmartPot define la cantidad de réplicas y la configuración del contenedor, como las variables de entorno necesarias para la conexión a la base de datos.
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-smartpot
spec:
replicas: 1
selector:
matchLabels:
app: api-smartpot
template:
metadata:
labels:
app: api-smartpot
spec:
containers:
- name: api-smartpot
image: sebastian190030/api-smartpot:latest
ports:
- containerPort: 8091El Service para la API SmartPot expone el contenedor para que sea accesible desde fuera del clúster de Minikube mediante un puerto específico.
apiVersion: v1
kind: Service
metadata:
name: api-smartpot
spec:
selector:
app: api-smartpot
ports:
- protocol: TCP
port: 8091
targetPort: 8091
type: NodePortEl Deployment para la aplicación web SmartPot configura el frontend de la aplicación.
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-smartpot
spec:
replicas: 1
selector:
matchLabels:
app: web-smartpot
template:
metadata:
labels:
app: web-smartpot
spec:
containers:
- name: web-smartpot
image: sebastian190030/web-smartpot:latest
ports:
- containerPort: 5173El Service para la aplicación web expone el contenedor para que sea accesible desde fuera del clúster de Minikube.
apiVersion: v1
kind: Service
metadata:
name: web-smartpot
spec:
selector:
app: web-smartpot
ports:
- protocol: TCP
port: 5173
targetPort: 5173
type: NodePort