Saltar a contenido

Referencia de rendimiento.yaml

rendimiento.yaml, en la raíz del repositorio de una aplicación, es el único archivo que rendimiento necesita. El asistente escribe una primera versión; después es código como cualquier otro: edítelo en una solicitud de incorporación, y el cambio se despliega al integrarlo. Se analiza de forma estricta (un campo desconocido o mal escrito es un error), se completan los valores predeterminados y cada problema se reporta de una vez con su ruta (services[1].port …). El tipo en Go es spec.Spec, en internal/spec/spec.go.

Un ejemplo completo

# Todo es opcional excepto services[].name.
postgres: { version: "17", size: 10Gi }       # ajustes para needs: [postgres]
redis: { maxMemory: 128mb }                   # ajustes para needs: [redis]

services:
  - name: web                                 # una etiqueta DNS: minúsculas, dígitos, guiones
    path: web                                 # carpeta que se construye (predeterminado ".")
    port: 3000                                # el puerto en el que escucha la aplicación (predeterminado 8080)
    domain: shop.joserod.space                # dirección HTTPS pública (DNS + certificado)
    aliases: [www.shop.joserod.space]         # más hosts, el mismo certificado
    size: medium                              # small | medium | large
    replicas: 2                               # más de 1 = despliegues sin interrupciones
    health: { path: /api/health }             # disponibilidad + vida
    env: { NODE_ENV: production }
    secrets: [shop-web]                       # secretos completos como variables de entorno
    needs: [redis, { service: api }]          # se inyectan REDIS_URL y API_URL
    test: { image: "node:20", command: "npm ci && npm test" }

  - name: api
    path: api
    port: 8000
    routes: [shop.joserod.space/api]          # una ruta en el host de web
    needs: [postgres]                         # se inyectan DATABASE_URL + PG*
    secretEnv: { STRIPE_KEY: shop-api/stripe } # una variable tomada de la clave de un secreto
    resources: { memory: 512Mi, memoryLimit: 1Gi }
    build: { builder: railpack, start: "uvicorn main:app --host 0.0.0.0 --port 8000" }

  - name: models
    image: dustynv/ollama:r36.4.0             # una imagen lista para usar: no se construye nada
    port: 11434
    gpu: 1
    volume: { size: 20Gi, mount: /root/.ollama }
    lan: { ip: 192.168.1.50 }                 # también se alcanza en la red doméstica
    catalog:
      title: Ollama
      env: OLLAMA_HOST

jobs:
  - name: nightly-report
    schedule: "0 6 * * *"
    timeZone: America/New_York
    service: api                              # se ejecuta con la imagen de api
    command: [python, report.py]

tasks:
  - name: mobile                              # un comando que se ejecuta como paso de integración continua
    image: node:20-bookworm
    path: mobile                              # solo se ejecuta cuando cambia mobile/
    command: npx --yes eas-cli build --platform all --non-interactive --no-wait
    secretEnv: { EXPO_TOKEN: expo/token }

Nivel superior

Campo Tipo Predeterminado Qué significa
services lista obligatorio Los servicios de la aplicación (al menos uno).
jobs lista ninguno Tareas programadas (CronJobs).
builds lista ninguna Imágenes que se construyen y prueban pero no se despliegan (Imágenes).
tasks lista ninguno Comandos que se ejecutan como pasos de integración continua (Tareas).
verify objeto activa, 5 min, con reversión Cómo se verifica cada versión después de publicarse: window (segundos, 60–3600), rollback (false solo reporta), disabled (Confiabilidad).
sharedNamespace booleano false El espacio de nombres de la aplicación pertenece a otra cosa (por ejemplo, ArgoCD): debe existir, y rendimiento nunca lo crea, lo etiqueta, se adueña de él ni lo elimina.
postgres objeto vea necesidades Ajustes para needs: [postgres].
redis objeto vea necesidades Ajustes para needs: [redis].

Servicios

Identidad y origen

Campo Tipo Predeterminado Qué significa
name texto obligatorio Etiqueta DNS; única en la aplicación. También es el nombre del Deployment y del Service.
path texto . Carpeta del repositorio que se construye, relativa a la raíz.
image texto ninguna Ejecutar esta imagen lista para usar en lugar de construir (por ejemplo postgres:15-alpine). Sin pasos de construcción ni de pruebas.
watch lista de rutas ninguna Otras carpetas cuyos cambios también deben reconstruir este servicio (código compartido).
language texto detectado Solo informativo (se muestra en la interfaz).

Construcción y pruebas

Campo Tipo Predeterminado Qué significa
build.builder dockerfile | railpack automático Automático: el Dockerfile si la carpeta tiene uno, si no, Railpack.
build.dockerfile texto Dockerfile Ruta del Dockerfile, relativa a path.
build.args mapa ninguno Argumentos de construcción (los ARG del Dockerfile), o entorno de construcción para Railpack. GIT_SHA siempre se pasa a los Dockerfiles.
build.start texto detectado Solo Railpack: el comando de inicio.
test.image texto — Imagen en la que corren las pruebas.
test.command texto — Comando de la terminal, ejecutado en la carpeta del servicio; un código de salida distinto de cero hace fallar la ejecución y omite la construcción.
test.size, test.resources como en el servicio 250m / 256Mi, límite 2Gi Las solicitudes y los límites del pod de pruebas.
test.timeout segundos STEP_TIMEOUT Solo más corto que el límite de la plataforma.
test.env mapa ninguno Variables de entorno para las pruebas.
test.postgres booleano false Un PostgreSQL desechable junto a las pruebas, en DATABASE_URL (Pruebas).
test.cache booleano false Conservar /cache entre ejecuciones; Go, npm y pip lo usan (Pruebas).

Ejecución

Campo Tipo Predeterminado Qué significa
port entero 8080 El puerto en el que escucha la aplicación. PORT se define con él.
replicas entero 0–10 1 Pods. Más de uno da despliegues sin interrupciones.
size small | medium | large small Tamaño predefinido de recursos (abajo).
resources objeto ninguno Sobrescribir cualquiera de cpu, memory (solicitudes), cpuLimit, memoryLimit; un límite puede ser none.
health.path texto ninguna Comprobación HTTP GET de disponibilidad y de vida.
health.tcp booleano false Comprobar que el puerto acepta conexiones (bases de datos, servicios que no son HTTP).
health.timeout entero 1–60 1 Segundos por comprobación.
command, args listas los de la imagen Sobrescribir el punto de entrada y los argumentos.
gpu entero 0–8 0 GPU que se piden (una sola réplica). El perfil de GPU del clúster agrega la clase de ejecución, los controladores y la memoria compartida.

Sin health, se usa una comprobación TCP de disponibilidad en el puerto, así el tráfico solo llega a un pod cuando ya escucha.

Tamaño CPU solicitada Memoria solicitada Límite de CPU Límite de memoria
small 50m 64Mi 500m 256Mi
medium 100m 256Mi 1 512Mi
large 250m 512Mi 2 1Gi

Configuración y secretos

Campo Tipo Qué significa
env mapa Variables de entorno simples.
secrets lista de nombres Cargar Secrets completos como variables de entorno (envFrom). Los secretos que falten no bloquean al pod. Los valores se definen en la página Configuración de la aplicación o vienen de un secreto sellado.
secretEnv mapa VAR: secreto/clave Una variable tomada de una clave de un Secret.
secretFiles lista de {secret, mount} Montar un Secret como archivos de solo lectura.
configFiles lista de {configMap, mount} Montar un ConfigMap existente como archivos de solo lectura.

Almacenamiento

Campo Tipo Predeterminado Qué significa
volume.size cantidad — Un volumen nuevo de Longhorn (<servicio>-data) de este tamaño.
volume.mount ruta obligatorio Dónde montarlo.
volume.existingClaim nombre ninguno Montar en su lugar un PersistentVolumeClaim existente (conserva sus datos; se usa al migrar).
volume.fsGroup entero 1001 en imágenes construidas, ninguno en las listas para usar Grupo que puede escribir en el volumen; -1 lo desactiva.

Un servicio con volumen usa la estrategia Recreate (un volumen se conecta a un solo pod a la vez), así que sus actualizaciones tienen un hueco breve. Los volúmenes nunca se eliminan al quitarlos del archivo.

Exposición

Campo Tipo Qué significa
domain nombre de host Dirección HTTPS pública: una entrada, un certificado y un registro DNS.
aliases nombres de host Más hosts con el mismo certificado (requiere domain).
routes lista de host/ruta Mandar a este servicio una ruta en un host que pertenece a otro servicio de esta aplicación, por ejemplo shop.joserod.space/api.
tlsSecret nombre Nombre del secreto del certificado (predeterminado <nombre>-tls); conserve uno existente al migrar.
ingress.name nombre Conservar el nombre de un Ingress existente al migrar.
ingress.annotations mapa Ajustes adicionales nginx.ingress.kubernetes.io/* (límites de peticiones, tamaño del cuerpo, CORS…). Se rechazan los fragmentos de código.
ingress.tlsSecrets mapa host: secreto Poner algunos hosts en su propio certificado.
streaming booleano Respuestas sin búfer y de larga duración (eventos enviados por el servidor, respuestas de inteligencia artificial en tiempo real, websockets).
lan.ip IPv4 privada Exponer también en la red doméstica a través de MetalLB, en esta dirección (de su grupo; vacía deja que él la elija).
lan.port entero Puerto en esa dirección (predeterminado 80). La página de la aplicación y el panel ligan a la dirección en cuanto MetalLB la asigna.

Necesidades

needs enumera aquello de lo que depende el servicio. Vea Necesidades y catálogo de servicios.

Forma Provee Se inyecta
postgres el Postgres de la aplicación DATABASE_URL, PGHOST, PGPORT, PGUSER, PGPASSWORD, PGDATABASE
redis la caché Redis de la aplicación REDIS_URL
{service: espacio/nombre} o {service: nombre} la dirección de otro servicio <NOMBRE>_URL
cualquiera de las anteriores con env: VAR ({postgres: {env: DB_URL}}) lo mismo en VAR

Las variables que usted define en env o en secretEnv siempre tienen prioridad.

Catálogo

Cómo se describe el servicio en la página Servicios, para las demás aplicaciones:

Campo Qué significa
catalog.title, catalog.description Se muestran en lugar del nombre.
catalog.category database, messaging, ai, storage, monitoring, web, devtools o platform (si no, se deduce).
catalog.env La variable en la que quienes lo llaman suelen poner la dirección (por ejemplo OLLAMA_HOST).
catalog.path Se agrega a la dirección en el valor sugerido (por ejemplo /analyze).
catalog.docs Liga a la documentación de la API.
catalog.endpoints Líneas cortas como POST /analyze: classify a message.

Postgres y Redis

Campo Predeterminado Qué significa
postgres.version 17 Versión mayor de postgres:<v>-alpine.
postgres.size 5Gi Tamaño del volumen.
postgres.resources 100m / 256Mi, límite 512Mi Sobrescrituras.
redis.version 7 Versión de redis:<v>-alpine.
redis.maxMemory 64mb Tamaño de la caché; se desalojan las claves menos usadas recientemente.
redis.resources 50m / 64Mi, límite 256Mi Sobrescrituras.

Tareas programadas

Campo Tipo Predeterminado Qué significa
name texto ≤ 52 obligatorio Único entre tareas programadas y servicios.
schedule cron obligatorio Cron estándar de 5 campos o del estilo @daily.
timeZone nombre IANA hora del clúster (UTC) Por ejemplo America/New_York.
service / path / image exactamente uno — Usar la imagen publicada de un servicio, construir esta carpeta o ejecutar una imagen lista para usar.
watch, build como en los servicios Para las tareas programadas con path.
command, args listas Qué ejecutar.
size, resources como en los servicios small
timeout segundos ninguno Detener una ejecución pasado este tiempo.
env, secretEnv, secrets como en los servicios

Imágenes (builds)

Imágenes que se construyen en cada ejecución como las de un servicio, pero no se despliegan; sus resúmenes (digests) se guardan con cada versión (Imágenes que no son servicios).

Campo Tipo Predeterminado Qué significa
name texto ≤ 40 obligatorio Único entre servicios, tareas programadas, imágenes y tareas. Los pasos son <nombre>:test y <nombre>:build; la imagen es <registro>/<aplicación>-<nombre>.
path, watch como en los servicios . Qué se construye y qué cuenta como cambio.
build como en los servicios Dockerfile
test como en los servicios ninguna Corre antes de la construcción.

Tareas

Comandos que se ejecutan como pasos de integración continua; vea Tareas para saber cuándo corren y cómo funcionan los secretos.

Campo Tipo Predeterminado Qué significa
name texto ≤ 40 obligatorio Único entre servicios, tareas programadas, imágenes y tareas. El paso es <nombre>:task.
stage build | pre-deploy | post-deploy build build: un paso de integración continua. pre-deploy: después de la construcción, antes del despliegue; una falla detiene la versión (previas al despliegue). post-deploy: contra la versión en vivo, como parte de la verificación; una falla la revierte (posteriores al despliegue).
service nombre de servicio — Previas y posteriores al despliegue: ejecutar con la imagen nueva de este servicio y su entorno (en lugar de image).
image imagen obligatorio (build) En qué corre el comando. Las tareas posteriores al despliegue indican image o service.
command texto obligatorio Se ejecuta con sh -c.
path texto . Carpeta de trabajo, relativa a la raíz del repositorio; también lo que cuenta como cambio.
watch lista de rutas ninguna Más rutas cuyos cambios ejecutan la tarea.
after lista ninguna Servicios e imágenes (su construcción) y tareas a los que hay que esperar.
when deploy | always deploy deploy: solo los envíos a la rama principal. always: cada ejecución, incluidas las ramas y las solicitudes de incorporación. (No on:, que YAML lee como true.)
optional booleano false Una falla no hace fallar la ejecución.
size, resources como en los servicios medium
timeout segundos STEP_TIMEOUT Solo puede ser menor que el límite de la plataforma.
env, secrets, secretEnv como en los servicios Los secretos se leen del espacio de nombres de la aplicación cuando empieza el paso.