Zaroz
Guías de Workloads

Escala un Workload a más unidades

Esta guía continúa desde Despliega un Workload desde una imagen pública. Lee antes Políticas fija y autoescalada si "unidades" es nuevo para ti.

Usa el ayudante api de la guía de despliegue y estas variables: PROJECT_ID (de la suscripción) y SERVICE_ID (la instancia de servicio). Las rutas están bajo /projects/{project_id}/service-instances/{id}/units.

TerminalCode
export UNITS="$ZAROZ_API/projects/$PROJECT_ID/service-instances/$SERVICE_ID/units"

Estado de la API

Las rutas de unidades las usa la consola y están marcadas como solo consola en la referencia de la API. Aceptan tu token de sesión o un token de acceso personal.

1. Mira lo que tienes

TerminalCode
curl -s "$UNITS" -H "Authorization: Bearer $ZAROZ_TOKEN" | jq '{scalable, max_units, included_units, multi_unit_in_use, volume_locked}'
TypeScriptCode
const base = `/projects/${projectId}/service-instances/${serviceId}/units`; const units = await api("GET", base); console.log(units.scalable, units.max_units, units.included_units, units.volume_locked); for (const u of units.data) console.log(u.ordinal, u.state, u.billing_class);
Code
base = f"/projects/{project_id}/service-instances/{service_id}/units" units = api("GET", base) print(units["scalable"], units["max_units"], units["included_units"], units["volume_locked"]) for u in units["data"]: print(u["ordinal"], u["state"], u["billing_class"])

scalable debe ser true y volume_locked false. billing_class es included para las unidades que cubre el plan y extra para el resto.

2. Cotiza una política fija de 3 unidades

Una cotización no guarda nada.

TerminalCode
curl -s -X POST "$UNITS/policy/quote" \ -H "Authorization: Bearer $ZAROZ_TOKEN" -H "Content-Type: application/json" \ -d '{"mode":"fixed","min_units":3}'
TypeScriptCode
const quote = await api("POST", `${base}/policy/quote`, { mode: "fixed", min_units: 3 }); console.log(quote.extra_units, quote.hourly_cents, quote.monthly_cents);
Code
quote = api("POST", f"{base}/policy/quote", {"mode": "fixed", "min_units": 3}) print(quote["extra_units"], quote["hourly_cents"], quote["monthly_cents"])

Enviar solo min_units pone max_units en el mismo número. monthly_cents es lo máximo que puede costar esa política en un mes; la aritmética está en Facturación.

3. Aplícala

TerminalCode
curl -s -X PATCH "$UNITS/policy" \ -H "Authorization: Bearer $ZAROZ_TOKEN" -H "Content-Type: application/json" \ -d '{"mode":"fixed","min_units":3}'
TypeScriptCode
const policy = await api("PATCH", `${base}/policy`, { mode: "fixed", min_units: 3 }); console.log(policy.mode, policy.min_units, policy.max_units);
Code
policy = api("PATCH", f"{base}/policy", {"mode": "fixed", "min_units": 3}) print(policy["mode"], policy["min_units"], policy["max_units"])

Una política fija se aplica al instante: arrancan dos unidades. Vuelve a listar las unidades y verás cómo su state pasa a running.

4. Autoescala entre 1 y 4, con un objetivo del 60 % de CPU

TerminalCode
curl -s -X PATCH "$UNITS/policy" \ -H "Authorization: Bearer $ZAROZ_TOKEN" -H "Content-Type: application/json" \ -d '{"mode":"autoscaled","min_units":1,"max_units":4,"cpu_target_percent":60,"spend_cap_cents":1500}'
TypeScriptCode
await api("PATCH", `${base}/policy`, { mode: "autoscaled", min_units: 1, max_units: 4, cpu_target_percent: 60, spend_cap_cents: 1500, });
Code
api("PATCH", f"{base}/policy", { "mode": "autoscaled", "min_units": 1, "max_units": 4, "cpu_target_percent": 60, "spend_cap_cents": 1500, })

Una política autoescalada necesita un objetivo de CPU, un objetivo de memoria o una regla de horario. Los campos omitidos conservan su valor; envía null para borrar uno que admita nulos, por ejemplo "spend_cap_cents": null.

5. Observa lo que hace

Las decisiones dicen qué hizo el autoescalador y por qué; la serie de recuento muestra cuántas unidades se ejecutaron.

TerminalCode
curl -s "$UNITS/decisions?page_size=5" -H "Authorization: Bearer $ZAROZ_TOKEN" | jq '.data[] | {at, action, summary}' curl -s "$UNITS/count?window=24h" -H "Authorization: Bearer $ZAROZ_TOKEN" | jq '{included, markers}'
TypeScriptCode
const decisions = await api("GET", `${base}/decisions?page_size=5`); for (const d of decisions.data) console.log(d.at, d.action, d.summary); const count = await api("GET", `${base}/count?window=24h`); console.log(count.included, count.markers.length);
Code
decisions = api("GET", f"{base}/decisions", page_size=5) for d in decisions["data"]: print(d["at"], d["action"], d["summary"]) count = api("GET", f"{base}/count", window="24h") print(count["included"], len(count["markers"]))

6. Vuelve a una unidad

TerminalCode
curl -s -X PATCH "$UNITS/policy" \ -H "Authorization: Bearer $ZAROZ_TOKEN" -H "Content-Type: application/json" \ -d '{"mode":"fixed","min_units":1}'
TypeScriptCode
await api("PATCH", `${base}/policy`, { mode: "fixed", min_units: 1 });
Code
api("PATCH", f"{base}/policy", {"mode": "fixed", "min_units": 1})

Las unidades que se retiran dejan de facturarse al instante. Si se rechaza un cambio, el campo details empieza con un código de motivo, por ejemplo volume_locks_to_one_unit o un límite (mira Límites).

Last modified on