Crear una agrupación
Dimensionamiento y curación
Cambiar una plantilla
Una dirección pública compartida
Crear una agrupación
- Console
- API
- CLI
- Go
template es la configuración de inicio, en la misma forma que toma una instancia independiente create — mismos nombres de campo, mismos tipos, mismos significados. No hay un recurso de plantilla de lanzamiento separado para crear, publicar o compartir; la plantilla pertenece al grupo.
Se requieren un flavor y una subred primaria: template.flavor y template.networks[0].subnet. El índice 0 es la NIC principal; el resto son extras.
Referencias y respuestas de roles de IAM
Las solicitudes de creación y reemplazo aceptantemplate.iam_role como un UUID, CRN o cadena de nombre exacto para un rol en tu cuenta. Adjuntar el rol requiere iam:PassRole y autorización de confianza de instancia; consulte Roles e identidad de instancia.
Las respuestas de la agrupación devuelven un resumen de rol opcional dentro de template, en lugar de iam_role_id. Este extracto de respuesta muestra la identidad del archivo adjunto:
id, crn y name y es visible con acceso de lectura de la agrupación, sin iam:GetRole. Excluye los campos de rol confidenciales, como las políticas. template.iam_role se omite cuando no hay ningún rol adjunto, el rol se ha eliminado o pertenece a otra cuenta. La apertura de los detalles de IAM del rol todavía requiere iam:GetRole.
Referencias y respuestas de subred
Las solicitudes de creación y reemplazo tomantemplate.networks[].subnet como una cadena: un UUID o un CRN completo de VPC/subred. Un nombre de subred sin más no es suficiente, porque los nombres de subred solo son únicos dentro de su VPC.
Las respuestas de grupo incrustan toda la subred en cada NIC de plantilla, en lugar del anterior subnet_id. La incrustación lleva la VPC principal y el resumen de la tabla de rutas nullable descrito en ubicación de subred:
subnet.name y subnet.vpc.name son legibles directamente desde el grupo; no se necesita ninguna subred o VPC separada para mostrar dónde aterrizan las réplicas. En el SDK de Go estos son nic.Subnet y nic.Subnet.VPC.
subnet es null cuando la subred referenciada ya no se resuelve, como una subred eliminada después de que se almacenó la plantilla. Trate esto como una ubicación no disponible en lugar de “sin subred”: muéstrelo como no disponible y actualícelo antes de actuar sobre él. La plantilla todavía nombra una subred en la que el grupo no puede iniciarse, por lo que el siguiente reemplazo que lanza falla.
La imagen se resuelve una vez
template.image toma las mismas tres formas que instance create — un id, name:version, o un name desnudo. A diferencia de la creación de instancias, la referencia se resuelve una vez, cuando se crea el grupo (o cuando se reemplaza la plantilla), y el id de imagen resultante es lo que arranca cada réplica, incluidos los reemplazos generados meses después.
Eso es deliberado. Una etiqueta re-resuelta por réplica permitiría a un miembro curado arrancar una compilación más nueva que sus hermanos, y un grupo cuyos miembros no son idénticos es la premisa de la ruptura primitiva silenciosa. Para mover un grupo a una nueva compilación, cambie la plantilla y actualice.
Cómo se llaman las réplicas
Cada réplica recibe un número de secuencia, estable mientras tenga el espacio, y se llama<pool-name>-<sequence_num> — web-asg-0, web-asg-1, y así sucesivamente. Un reemplazo se hace cargo del número liberado.
GET /v1/instance-pools/{pool_id}/instances Devoluciones completas Instance Los objetos en
instances, más paginación metaCada objeto incluye su estado, direcciones, tipo de instancia, imagen y rol; no necesita una solicitud de instancia separada para cada miembro. Lee la secuencia de réplicas desde la lista de instancias de nivel superior. metadata["basalt:pool:sequence_num"]. Su valor es una cadena, incluyendo
"0" para la primera ranura.
Filtrar esta lista con name, crn, current_state, flavor o image. También acepta limit y marker. Mientras meta.has_more es true, solicita la siguiente página usando meta.marker como marker, manteniendo los mismos filtros y límites. Recoge instances de cada página para listar todos los miembros coincidentes.
web no puede coexistir con una instancia que ya hayas nombrado web-0. Los nombres de grupo son de 1 a 127 caracteres de letras, dígitos, punto, guion y subrayado, únicos por cuenta.Discos y direcciones por réplica
template.volumes crea un disco con cada réplica y lo recupera con esa réplica. delete_on_termination es por defecto true; póngalo en false y una réplica escalada, reemplazada o destruida con el pool libera su volumen de nuevo a available en lugar de destruirlo.
template.networks[0].floating_ip_assignment le da a cada réplica su propia IP flotante en su NIC principal, asignada a medida que el grupo se escala hacia afuera y liberada a medida que se escala hacia adentro. Una NIC en template.networks[] lleva su propia bandera, por lo que una interfaz secundaria puede ser la pública. Cada dirección cuenta contra su cuota floating_ips.
Eso es algo diferente de la dirección compartida del grupo —
Ver más abajo.
Dimensionamiento y convergencia
Los tres campos de dimensionamiento son enteros mutables. Los valores resultantes deben satisfacer0 ≤ min_count ≤ desired_count ≤ max_count ≤ 100. En crear solamente, los límites omitidos por defecto a desired_count.
En PATCH, los límites omitidos mantienen sus valores almacenados. Si omite desired_count, el objetivo actual se sujeta en los nuevos límites: elevar el mínimo por encima de él eleva el objetivo; bajar el máximo por debajo de él baja el objetivo. Un objetivo que ya está dentro de los límites no cambia.
Si envía explícitamente desired_count, debe ajustarse a los límites resultantes. El tamaño no válido devuelve 400 sin aplicar ninguna parte de la actualización, incluidas las etiquetas o una plantilla enviada con ella. Cero es válido, incluyendo ambos límites en cero. El redimensionamiento no reemplaza la plantilla de lanzamiento ni solicita una actualización.
Estos controles se aplican a los grupos administrados por el cliente. Los grupos de propiedad de un servicio administrado no se pueden redimensionar a través de la API de grupo de instancias; usa los controles de ese servicio.
Escalado automático
Una política deautoscaling ajusta desired_count dentro de los límites configurados. La misma política está disponible en load balancers. La creación o actualización de una directiva no cambia la plantilla de inicio.
El seguimiento de objetivos de CPU requiere min_count de al menos 1.
- Console
- API
- CLI
- Go
telemetry:ReadMetrics; ese permiso se comprueba de nuevo mientras se ejecuta la política. Solo son válidas las métricas de la cuenta y la región del grupo.
expected_series debe coincidir con el número de series seleccionadas; una serie faltante impide la escala. Las métricas de contador pueden usar sample_aggregation: "rate" para tener en cuenta los reajustes antes de que las tasas se combinen en las series.
Publicar un cero nuevo cuando la cola está vacía. Los datos que faltan, están obsoletos o incompletos nunca significan cero y no pueden eliminar la capacidad. Las métricas de demanda personalizadas pueden hacer crecer un grupo desde cero; las políticas de CPU no pueden. Con varias métricas, la recomendación de capacidad válida más grande gana. Los datos que faltan aún permiten una recomendación de escalado válida de otra métrica.
El calentamiento predeterminado es de 180 segundos, el tiempo de reutilización es de 60 segundos y la estabilización de reducción es de 300 segundos. Cada decisión añade como máximo cuatro instancias o elimina como máximo una. Estos límites y drain_seconds (por defecto 120) son configurables. El tiempo de enfriamiento y la estabilización permanecen en vigor durante los reinicios del servicio. Lea autoscaling_status.reason y autoscaling_status.history para la condición de espera actual y los cambios recientes de capacidad.
Aún puedes cambiar el tamaño manualmente. La evaluación automática se reanuda después del tiempo de reutilización. Para detener los cambios automáticos, envíe la política con enabled: false; su configuración de métrica se conserva cuando se envía de vuelta. Las políticas se reemplazan en su totalidad, por lo que debe incluir la configuración de la métrica cuando inhabilite una.
La escalabilidad inicial marca primero un miembro como retirado y lo retira de los conjuntos de backend del balanceador de carga y de las IP flotantes compartidas. La eliminación espera el acuse de recibo de retiro y el período de gracia de drenaje. Esto no invoca un gancho de cierre de aplicación; los trabajos de larga ejecución deben tolerar la terminación de la instancia. Las sesiones TCP, UDP y WebSocket de larga duración pueden terminar en el plazo de drenaje. Los cambios en la membresía de reenvío de IP flotante compartida también pueden cambiar la ubicación de la conexión durante la retirada.
Ajuste de los límites
La siguiente secuencia comienza con un mínimo de 2, el deseado 3 y el máximo 6. Eleva el objetivo a 4, lo baja a 2 y luego escala a cero. Escalar a cero retira a todos los miembros; sus discos siguendelete_on_termination.
- Console
- API
- CLI
- Go
201 inmediatamente. Las instancias son generadas por un reconciliador de fondo, que es también lo que converge el grupo hacia desired_count cada vez que lo cambias, así que observa el grupo en lugar de esperar miembros en la respuesta de creación.
Cuatro contadores le dicen dónde se encuentra una agrupación, y confundir dos de ellos es la fuente habitual de una falsa alarma:
status: "active" significa member_count == desired_count — el grupo tiene los miembros que se le pidieron. No es una afirmación de que todos ellos están arriba. Un grupo puede ser active con live_count por debajo de desired_count cuando los miembros se han detenido. Lee live_count para la vivacidad.scaling significa que no mantiene su objetivo y está convergiendo: después de una creación, después de un cambio en desired_count, y durante la duración de una actualización. error significa un error de error activo — lea cada entrada en faults — y todavía está reconciliado: el grupo sigue siendo reintentado. deleting es un desmontaje en curso.POOL_LAUNCH_FAILED, POOL_SCALE_OUT_FAILED, POOL_SCALE_IN_FAILED) se borran cuando el grupo alcanza su objetivo. Un cambio de tamaño posterior no los borra primero: un grupo que no pudo generarse y se está escalando de nuevo aún no ha demostrado que el error está detrás de él.
Qué se reemplaza y qué no
Cada paso, el grupo reemplaza cualquier miembro cuyocurrent_state es error o deleted, y cualquier enlace cuya instancia se ha eliminado de debajo de él. El reemplazo toma el número de secuencia liberado y se inicia desde la plantilla actual del grupo.
Escalar elimina los números de secuencia más altos primero, por lo que una escala de 5 a 3 retira -4 y -3. Cada retiro ejecuta la eliminación de instancia completa, por lo que su cuota, sus volúmenes y sus direcciones se manejan exactamente como para una instancia independiente.
Las réplicas se distribuyen entre los hosts: mejor esfuerzo. Cada nueva réplica evita los hosts que sus hermanos ya ocupan, pero cuando la flota no tiene espacio, la propagación se elimina en lugar de que el lanzamiento falle, por lo que las réplicas pueden terminar compartiendo un host.
Cambiar la plantilla
PATCH /v1/instance-pools/{pool_id} cambia desired_count, min_count, max_count, autoscaling, las tags del pool, la template, o cualquier combinación. Cada campo es opcional; el envío de ninguno de ellos es un 400 en lugar de un silencioso no-op.
- Console
- API
- CLI
- Go
PATCH reemplaza la plantilla por completo, al guardar cualquiera de las dos tarjetas de plantilla se reenvía toda la configuración almacenada: la consola convierte la subred integrada de cada NIC de nuevo a su ID para que no se pierda ninguna interfaz. Si la subred de cualquier NIC no se resuelve, informa a la interfaz y no envía nada, en lugar de guardar una plantilla corta de una NIC.template.iam_role al id o crn del resumen. No devuelva el objeto de resumen. Omitir iam_role de un reemplazo borra el adjunto para futuros lanzamientos.
De igual manera, convierta la subnet incrustada de cada NIC de respuesta a su cadena id o crn en la solicitud de reemplazo — vea referencias y respuestas de subred. Una subred nula necesita una referencia de reemplazo válida; no copie los objetos de respuesta directamente en la solicitud. Haga esto para cada entrada de networks, no solo la primaria: una NIC extra que se ha eliminado porque su subred no pudo convertirse es una interfaz sin la que se inicia la próxima réplica.
Un cambio de plantilla decide lo que el grupo lanza a continuación. Las instancias que ya se están ejecutando mantienen lo que arrancaron, porque una máquina virtual en vivo no puede cambiar el tipo de instancia, el nivel, la subred o sus etiquetas en su lugar.
Así que entre la edición y un roll, el grupo tiene legítimamente miembros de dos plantillas diferentes. stale_instance_count es cuántas instancias hay en la más antigua, y un valor diferente a cero es la señal de que un cambio de plantilla aún no se ha implementado.
PATCH que reemplaza silenciosamente a cada miembro en ejecución borraría — una operación destructiva que lleva la forma de una edición.Rodando la agrupación
- Console
- API
- CLI
- Go
- Abra Instance pools y seleccione su grupo.
- Elija Roll instances junto a Scale.
- Confirme el reemplazo de cada miembro en ejecución en una plantilla antigua o desconocida. Los miembros de la plantilla actual se conservan. Sin margen de sobrecarga, el rollo espera; use Scale para aumentar Maximum count por encima de Desired count (hasta 100).
- Observa Roll in progress e Stale instances. Un conteo de cero no significa que el rollo haya terminado mientras que Roll in progress permanece.
202 con el grupo tal como está, y reemplaza todos los miembros no lanzados desde la plantilla actual, incluyendo cualquiera que sea anterior al seguimiento de plantillas. Asíncrono, y deliberadamente así: cada reemplazo es un arranque de VM, y una solicitud que esperaba se agotaría mucho antes de que un grupo de cualquier tamaño terminara.
Un miembro por pase
Y solo una vez que la agrupación está entera
La capacidad no se hunde
desired_count no se toca — el aumento se deriva, no se escribe en lo que usted pidió.refresh_in_progress y stale_instance_count para el progreso del rollo, y member_count y live_count para la capacidad. Un conteo de cero obsoletos solo significa que ningún miembro usa una plantilla antigua. Después de que se borre el indicador de actualización, es posible que el grupo aún necesite quitar su miembro de aumento y converger al deseado. Espere a que la bandera sea false, status: "active", y ambos conteos sean iguales antes de tratar la capacidad como liquidada.
Si se vuelve a preguntar mientras se está ejecutando un rollo, se acepta y no se reinicia.
Dos conjuntos de etiquetas
Un grupo lleva dos mapas de etiquetas y responden a preguntas diferentes.tags
basalt:ResourceTag/<key> y utilizado para la atribución de costos. Toma efecto inmediatamente, no toca ninguna instancia y reemplaza todo el conjunto — un objeto vacío los borra, un campo omitido los deja solos.Etiquetas de template.tags
template.tags solo es la forma más fácil de terminar con un grupo cuyos miembros llevan dos conjuntos de etiquetas diferentes, lo que importa si una política de IAM o un informe de costos tiene claves en ellos. stale_instance_count es cuántas instancias aún están en el conjunto antiguo.
Una dirección para toda la agrupación
POST /v1/instance-pools/{pool_id}/floating-ips vincula una IP flotante que ya ha asignado al grupo. Una IP pública, respondida por cada réplica — una dirección anycast — en oposición a template.networks[0].floating_ip_assignment, que da a cada réplica la suya propia.
- Console
- API
- CLI
- Go
attached_to de la IP flotante nombra el CRN canónico del grupo, incluso cuando members está vacío. Todas las réplicas activas pueden convertirse en miembros, incluidas las réplicas del mismo host. Lea la interfaz embebida y los resúmenes de instancia en members para identificarlos; vea Leyendo los enlaces.
La membresía se mantiene para usted: un miembro de escalada se une, un miembro de escalada se va, un miembro reemplazado se intercambia. No hay que realizar ningún acoplamiento por réplica, y los propios acoplamiento y desconectado del servicio de red se rechazan en la dirección de un grupo; use estos dos extremos.
No es un balanceador de carga
Con más de un miembro, el borde de la región elige un miembro por conexión, mediante el hash de las direcciones y puertos del flujo, y cada paquete de esa conexión va a la misma. Eso extiende las conexiones a través de instancias independientes y sobrevive a la pérdida de un host.Requisitos y retiro
La IP flotante debe ser unattached (attached_to: null) y suya, y la subred del grupo debe ya enrutar 0.0.0.0/0 a una puerta de enlace de internet. La adjunción es idempotente: volver a adjuntar la misma dirección al mismo grupo la devuelve sin cambios. Un 409 significa que la dirección ya está adjunta a algo, o ya pertenece a otro grupo.
DELETE /v1/instance-pools/{pool_id}/floating-ips/{floating_ip_id} detiene el enrutamiento de la dirección al grupo. En la consola es la acción de fila en la pestaña Floating IPs, confirmada como Detach floating IP.
DELETE /v1/floating-ips/{floating_ip_id}. Desconectar uno del grupo no contiene respuestas 204.GET /v1/instance-pools/{pool_id}/floating-ips lista las direcciones compartidas con sus miembros actuales en floating_ips, más paginación meta, usando la misma forma de respuesta que la lista de IP flotante de nivel superior. Acepta name, crn, limit y marker. Las IP flotantes no tienen nombre, por lo que si se proporciona name se devuelve una lista vacía. Mientras meta.has_more es true, pasa meta.marker como marker en la siguiente solicitud, preservando los filtros y el límite, y recolecta floating_ips de cada página.
Las direcciones por réplica no están aquí, pertenecen a la réplica y se leen desde la lista de NIC de la instancia.
Eliminar un grupo
- Console
- API
- CLI
- Go
204.
Eliminar el grupo es la única forma de eliminar sus miembros: eliminar una réplica directamente solo libera su número de secuencia, y el grupo genera un reemplazo para ella en la siguiente pasada.
Permisos
Cada operación de grupo autoriza contracrn:compute:<region>:<account>:instance-pool/<name>, que es el valor que una declaración de política de IAM debe nombrar para ampliar un permiso a un grupo.
compute:UpdateInstancePool, la misma acción que un PATCH, no como una acción propia. Por lo tanto, otorgar a alguien la capacidad de editar un grupo también le otorga la capacidad de rodarlo, lo que reemplaza a todos los miembros en ejecución.compute:CreateInstance del principal — y su iam:PassRole en template.iam_role, si la plantilla tiene uno — es lo que se ejecuta bajo cada curación y escalado posterior. Consulte policies y roles.
Solución de problemas
La agrupación dice activa pero la capacidad está baja
La agrupación dice activa pero la capacidad está baja
active significa member_count == desired_count, no que los miembros estén activos. Lee live_count. Un espacio entre ellos son los miembros que existen y no se están ejecutando (detenidos, todavía arrancando o enclavados) y el grupo no reemplaza a un miembro detenido.Una actualización no está progresando
Una actualización no está progresando
max_count con desired_count. Si no hay espacio libre para sobretensiones, aumente el máximo por encima del deseado (hasta 100). La actualización permanece solicitada y se reanuda sin otra llamada de actualización. Los cambios de límites durante una actualización pueden ponerlo en este estado de espera; el escalado normal continúa.Con espacio libre, el rollo espera un reemplazo por encima del deseado con cada miembro corriendo antes de retirar al siguiente. Si la nueva plantilla no arranca, el rollo se detiene allí por diseño en lugar de vaciar el grupo — compruebe los faults de la réplica más reciente y su salida de consola.stale_instance_count deja de caer tan pronto como eso sucede, y refresh_in_progress permanece verdadero.Edité la plantilla y nada cambió
Edité la plantilla y nada cambió
template.iam_role al id o crn del resumen. No devuelva el objeto de resumen. Omitir iam_role de un reemplazo borra el adjunto para futuros lanzamientos.Un cambio de plantilla decide qué lanza el grupo a continuación; las instancias que ya se están ejecutando mantienen lo que arrancaron. stale_instance_count los cuenta, y POST /v1/instance-pools/{pool_id}/refresh los actualiza.La plantilla perdió una tarjeta de red o un volumen de datos
La plantilla perdió una tarjeta de red o un volumen de datos
template en un PATCH reemplaza por completo la configuración almacenada: se borra todo lo que se omita. Vuelve a leer el pool y prepara la solicitud completa de reemplazo, convirtiendo el resumen del rol en una referencia de cadena, como se describe en Cambiar la plantilla.La dirección compartida tiene menos miembros que el grupo tiene réplicas
La dirección compartida tiene menos miembros que el grupo tiene réplicas
health y la reason de cada miembro por separado: los miembros que arrancan o fallan permanecen en la lista pero no reciben tráfico. Una lista de miembros vacía no borra la propiedad attached_to del grupo.Adjuntar una IP flotante al grupo de respuestas 400
Adjuntar una IP flotante al grupo de respuestas 400
409 es diferente — es una dirección ya adjunta a otra cosa, o ya poseída por otro grupo.Una réplica que borré volvió
Una réplica que borré volvió
desired_count, por lo que la eliminación de un miembro se lee como deriva y se rellena en el número de secuencia liberado. Baja desired_count, o elimina el grupo.Crear o cambiar el tamaño de la agrupación responde 400 en el tamaño
Crear o cambiar el tamaño de la agrupación responde 400 en el tamaño
0 ≤ min_count ≤ max_count ≤ 100. Un desired_count explícito debe caer dentro de esos límites. Al crear, los límites omitidos se establecen por defecto en los deseados; al actualizar, conservan los límites almacenados. Omita lo deseado en la actualización para sujetarlo automáticamente. El tamaño no válido no aplica ninguna de las actualizaciones. Para crecer más allá del máximo original, aumente max_count antes o junto con desired.
