Skip to content

Kestra

Con Kestra es posible organizar y orquestar flujos de trabajo, procesos de negocio en integración continua. Esto se hace mediante su platforma que contine un editor y un interfaz de usuario que puede ilustrar los pasos de las tareas. Este documento busca una pauta esencial para los primeros pasos y prueba de concepto inicial.

Instalación de Kestra

Se puede instalar Kestra de modo local teniendo Java 17 (o 21) previamente instalado y descargando su binario desde el sitio oficial.

Instalación de Kestra en Linux & macOS

Una vez se tiene descargado el paquete de Kestra, podemos considerar las siguientes sentencias para Linux & macOS:

bash
mkdir kestra-local
mv ./kestra kestra-local/
cd kestra-local
./kestra plugins install io.kestra.plugin:plugin-script-powershell:LATEST io.kestra.plugin:plugin-script-python:LATEST io.kestra.plugin:plugin-ansible:LATEST io.kestra.plugin:plugin-fs:LATEST io.kestra.plugin:plugin-script-node:LATEST io.kestra.plugin:plugin-script-groovy:LATEST io.kestra.plugin:plugin-script-shell:LATEST io.kestra.plugin:plugin-terraform:LATEST io.kestra.plugin:plugin-git:LATEST io.kestra.plugin:plugin-docker:LATEST io.kestra.plugin:plugin-jdbc-duckdb:LATEST

./kestra server local

Se debe ubicar primero el archivo descargado (kestra o kestra.jar) en la capeta de trabajo contenedora para proyectos.
Se puede lanzar también en modo de servidor Standalone así: ./kestra server standalone

Instalación de Kestra en Windows

Una vez se tiene descargado el paquete de Kestra, podemos considerar las siguientes sentencias para Windows:

bash
mkdir kestra-local
mv ./kestra ./kestra-local/kestra.bat
cd kestra-local
./kestra.bat plugins install io.kestra.plugin:plugin-script-powershell:LATEST io.kestra.plugin:plugin-script-python:LATEST io.kestra.plugin:plugin-ansible:LATEST io.kestra.plugin:plugin-fs:LATEST io.kestra.plugin:plugin-script-node:LATEST io.kestra.plugin:plugin-script-groovy:LATEST io.kestra.plugin:plugin-script-shell:LATEST io.kestra.plugin:plugin-terraform:LATEST io.kestra.plugin:plugin-git:LATEST io.kestra.plugin:plugin-docker:LATEST io.kestra.plugin:plugin-jdbc-duckdb:LATEST

./kestra.bat server local

Se debe ubicar primero el archivo descargado (kestra o kestra.jar) en la capeta de trabajo contenedora para proyectos.

Acceso a la interfaz web

Una vez iniciado el servidor, puedes acceder a la interfaz web de Kestra desde:

http://localhost:8080

Ejemplo de flujo inicial sencillo

En Kestra, los flujos se definen en archivos YAML. Veamos un ejemplo básico que ejecuta un comando shell:

yaml
id: hello-world
namespace: dev.tutorial

tasks:
  - id: hello
    type: io.kestra.plugin.core.log.Log
    message: Hello World from Kestra!

  - id: current-date
    type: io.kestra.plugin.scripts.shell.Commands
    commands:
      - date
      - echo "Current user: $(whoami)"

  - id: python-task
    type: io.kestra.plugin.scripts.python.Script
    script: |
      print("Hello from Python!")
      import datetime
      print(f"Current time: {datetime.datetime.now()}")

Para ejecutar este flujo:

  1. Copia el contenido YAML
  2. En la interfaz web, ve a Flows > Create
  3. Pega el contenido y guarda
  4. Ejecuta el flujo con Execute

Flujo con variables y condiciones

yaml
id: conditional-flow
namespace: dev.tutorial

inputs:
  - id: environment
    type: STRING
    defaults: development

tasks:
  - id: check-environment
    type: io.kestra.plugin.core.log.Log
    message: "Running in {{ inputs.environment }} environment"

  - id: production-task
    type: io.kestra.plugin.scripts.shell.Commands
    disabled: "{{ inputs.environment != 'production' }}"
    commands:
      - echo "This runs only in production"

  - id: development-task
    type: io.kestra.plugin.scripts.shell.Commands
    disabled: "{{ inputs.environment == 'production' }}"
    commands:
      - echo "This runs in development"

Usando Ollama con Kestra para flujos de IA

Semejante a n8n, podemos integrar Ollama con Kestra para crear flujos con inteligencia artificial. Primero, asegúrate de tener Ollama instalado y ejecutándose:

bash
# Instalar Ollama (Linux/macOS)
curl -fsSL https://ollama.com/install.sh | sh

# Descargar modelo
ollama pull llama3.2:3b

# Verificar que esté corriendo
ollama list

Flujo de IA para Asistente de viajes

Crearemos un flujo que actúa como asistente de viajes usando Ollama:

yaml
id: ai-travel-assistant
namespace: dev.ai

description: AI Travel Assistant using Ollama

inputs:
  - id: user_question
    type: STRING
    defaults: "Cuéntame algo interesante sobre Japón"

tasks:
  - id: prepare-prompt
    type: io.kestra.plugin.core.log.Log
    message: "Processing question: {{ inputs.user_question }}"

  - id: call-ollama
    type: io.kestra.plugin.scripts.python.Script
    docker:
      image: python:3.11-slim
    beforeCommands:
      - pip install requests
    script: |
      import requests
      import json
      
      # System prompt
      system_prompt = """Eres un asistente experto en viajes y turismo. 
      Proporciona información interesante, curiosidades y recomendaciones 
      sobre destinos turísticos. Responde de manera clara, concisa y amigable 
      en máximo 3 oraciones."""
      
      # User question
      user_question = "{{ inputs.user_question }}"
      
      # Call Ollama API
      url = "http://host.docker.internal:11434/api/generate"
      payload = {
          "model": "llama3.2:3b",
          "prompt": f"{system_prompt}\n\nPregunta: {user_question}\n\nRespuesta:",
          "stream": False
      }
      
      response = requests.post(url, json=payload)
      result = response.json()
      
      print("=== AI Response ===")
      print(result['response'])
      print("===================")
      
      # Output for next tasks
      with open('{{ outputDir }}/ai_response.txt', 'w') as f:
          f.write(result['response'])

  - id: log-response
    type: io.kestra.plugin.core.log.Log
    message: "AI response generated successfully"

Triggers y automatización

Puedes programar flujos para ejecutarse automáticamente:

yaml
id: scheduled-ai-report
namespace: dev.ai

triggers:
  - id: daily-schedule
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "0 9 * * *"  # Daily at 9 AM

tasks:
  - id: generate-report
    type: io.kestra.plugin.scripts.python.Script
    script: |
      import datetime
      print(f"Daily AI report generated at {datetime.datetime.now()}")

Buenas prácticas para continuar con Kestra

  • Usar namespaces: Organizar flujos por proyecto o equipo
  • Variables de entorno: Configurar credenciales y URLs
  • Docker: Aislar dependencias en contenedores
  • Logs: Usar tareas de log para debugging
  • Inputs: Hacer flujos reutilizables con parámetros
  • Error handling: Implementar reintentos y notificaciones

Kestra es ideal para orquestar flujos complejos que combinan scripts, APIs y servicios de IA, proporcionando una plataforma robusta para automatización empresarial con capacidades de inteligencia artificial integradas.