Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Come posso risolvere i problemi di dimensionamento del provider di capacità Amazon ECS?
Ho creato un provider di capacità per il mio cluster Amazon Elastic Container Service (Amazon ECS) con il tipo di avvio Amazon Elastic Compute Cloud (Amazon EC2). Tuttavia, il provider di capacità non esegue le operazioni di dimensionamento come previsto.
Breve descrizione
I seguenti problemi impediscono al provider di capacità di Amazon EC2 di aumentare o ridurre orizzontalmente in modo automatico:
- Non hai associato il servizio Amazon ECS al provider di capacità.
- Non hai collegato le policy di dimensionamento del provider di capacità al gruppo Amazon EC2 Auto Scaling.
- Non hai configurato correttamente la percentuale di capacità di destinazione.
- Utilizzi il dimensionamento gestito per il provider di capacità e al gruppo EC2 Auto Scaling sono collegate policy di dimensionamento personalizzate.
- Il gruppo Amazon EC2 Auto Scaling ha avviato l'istanza di container, ma non può entrare a far parte del cluster.
- Le tue istanze di container non riescono a ridursi orizzontalmente o verticalmente.
- Il provider di capacità è bloccato nello stato Operazione non riuscita.
- Il gruppo Auto Scaling è bloccato in un ciclo di aumento e riduzione.
Risoluzione
Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Verifica di aver associato il servizio Amazon ECS al provider di capacità
Per confermare se hai associato il servizio Amazon ECS al provider di capacità, esegui questo comando AWS CLI describe-services:
aws ecs describe-services --cluster example-cluster --services example-service --region example-region --query 'services[].capacityProviderStrategy'
Nota: sostituisci example-cluster con il nome del tuo cluster, example-service con il nome del tuo servizio e example-region con la tua Regione AWS.
Se hai associato il servizio Amazon ECS al provider di capacità, riceverai un output simile al seguente esempio:
[ [ { "capacityProvider": "example-capacity-provider", "weight": 1, "base": 1 } ] ]
Assicurati che il valore capacityProviderStrategy non sia [].
Per aggiungere un provider di capacità al servizio, esegui questo comando update-service:
aws ecs update-service --cluster example-cluster --service example-service --region example-region --capacity-provider-strategy capacityProvider=capacity-provide-name,weight=weight-value,base=base-value --force-new-deployment
Nota: sostituisci example-cluster con il nome del tuo cluster, example-service con il nome del tuo servizio, example-region con la tua Regione e capacity-provider-name con il nome del tuo provider di capacità. Inoltre, sostituisci weight-value con le attività totali che utilizzano il provider di capacità e base-value con il numero minimo di attività che il provider di capacità deve eseguire.
Puoi anche usare la console Amazon ECS per aggiornare il servizio.
Assicurati di aver collegato le policy di dimensionamento del provider di capacità al gruppo Auto Scaling
Quando associ un provider di capacità a un gruppo Auto Scaling, Amazon ECS crea una policy di dimensionamento che modifica la capacità in base al carico del cluster.
Per risolvere i problemi relativi alle policy di dimensionamento, esamina gli eventi AWS CloudTrail per le chiamate API PutScalingPolicy, UpdateAutoScalingGroup, CreateCapacityProvider e UpdateCapacityProvider. Assicurati che la policy possa essere associata al gruppo Auto Scaling e che il provider di capacità funzioni come previsto.
Per verificare che il gruppo Auto Scaling sia un collegamento al cluster, esegui questo comando describe-clusters:
aws ecs describe-clusters --clusters example-cluster --include ATTACHMENTS --region example-region --query 'clusters[].attachments[]'
Nota: sostituisci example-cluster con il nome del tuo cluster e example-region con la tua Regione.
Esempio di output:
[ { "id": "100a23456-5f0b-4abc-b998-d6789d111a", "type": "as_policy", "status": "CREATED", "details": [ { "name": "capacityProviderName", "value": "example-capacityProvider" }, { "name": "scalingPlanName", "value": "ECSManagedAutoScalingPlan-bb60c8fa-3ed7-4808-b39c-abcdef2345" } ] } ]
Se utilizzi una policy di dimensionamento gestita, completa i seguenti passaggi per verificare se hai collegato la policy al gruppo Auto Scaling:
- Apri la console Amazon ECS.
- Nel pannello di navigazione, scegliCluster.
- Seleziona il tuo cluster.
- Scegli la scheda Infrastruttura.
- Scegli la scheda Provider di capacità.
- Seleziona il gruppo Auto Scaling.
Nota: questa azione ti reindirizza alla pagina Gruppi Auto Scaling nella console Amazon EC2. - Scegli la scheda Dimensionamento automatico.
- Scegli Operazioni, quindi seleziona Modifica policy di dimensionamento dinamico.
- Nel campo JSON di parametri personalizzati, verifica che la policy includa la metrica CapacityProviderReservation.
Verifica la configurazione della percentuale di capacità di destinazione
Verifica la metrica CapacityProviderReservation di Amazon CloudWatch per consentire al tuo provider di capacità di monitorare l'utilizzo delle sue istanze di container. La policy di dimensionamento per il monitoraggio della destinazione associata al gruppo Auto Scaling regola il numero di istanze in esecuzione per assicurarsi che CapacityProviderReservation corrisponda al valore della capacità di destinazione. Ad esempio, se imposti la capacità di destinazione sul 100%, Amazon ECS utilizza tutte le istanze e riduce orizzontalmente le istanze che non eseguono attività.
Per impostare una capacità aggiuntiva, aggiorna Imposta capacità di destinazione impostando un valore inferiore a 100.
Assicurati che l'istanza avviata dal gruppo Auto Scaling possa connettersi al cluster
Se la tua istanza non può connettersi al cluster, consulta Perché la mia istanza Amazon EC2 non può connettersi al cluster Amazon ECS?
Assicurati che le istanze di container non siano protette dalle operazioni di riduzione orizzontale o verticale
Per i provider di capacità che utilizzano la protezione dalla terminazione gestita, Amazon ECS blocca la terminazione delle istanze Amazon EC2 che eseguono attività durante un'operazione di riduzione orizzontale.
Per arrestare tutte le attività in esecuzione e consentire al gruppo Auto Scaling di terminare l'istanza EC2, utilizza la console Amazon ECS per svuotare l'istanza. Oppure esegui questo comando update-container-instances-state:
aws ecs update-container-instances-state --cluster example-cluster --container-instances example-container --status DRAINING --region example-region
**Nota:**sostituisci examples-cluster con il nome del tuo cluster, example-container con la tua istanza di container e example-region con la tua Regione.
Se le attività vengono ancora eseguite sull'istanza di container dopo lo svuotamento, consulta In che modo è possibile risolvere i problemi relativi alle attività di Amazon ECS che richiedono molto tempo per interrompersi quando l'istanza di container è impostata su SVUOTAMENTO?
Per risolvere ulteriormente i problemi di protezione dalla terminazione gestita, consulta Come posso risolvere l'errore "L'impostazione di protezione dalla terminazione gestita per il provider di capacità non è valida" in Amazon ECS?
Se le protezioni di dimensionamento bloccano le operazioni di riduzione verticale nell'istanza, nella cronologia delle attività di Auto Scaling compare il seguente messaggio di errore:
"Could not scale to desired capacity because all remaining instances are protected from scale-in."
Per risolvere il problema, controlla i tuoi strumenti o gli strumenti di terze parti, come Terraform o GitLab. Assicurati che non rimuovano il tag AmazonECSManaged dal gruppo Auto Scaling. Amazon ECS richiede questo tag per gestire il dimensionamento. Per verificare se manca il tag AmazonECSManaged, controlla se nella cronologia degli eventi CloudTrail è presente l'evento SetInstanceProtection. Se l'evento setInstanceProtection è presente, devi aggiungere nuovamente il tag al tuo gruppo Auto Scaling.
Verifica lo stato del provider di capacità
Quando utilizzi un provider di capacità, è consigliabile creare un nuovo gruppo Auto Scaling e non riutilizzare un gruppo esistente. Le istanze con stato In esecuzione associate al gruppo esistente e registrate in un cluster Amazon ECS potrebbero non venire registrate correttamente.
Per visualizzare lo stato del provider di capacità, esegui il comando describe-capacity-providers:
aws ecs describe-capacity-providers \ --capacity-providers MyCapacityProvider
Se lo stato del provider di capacità è INATTIVO, il provider di capacità è stato eliminato.
Inoltre, esamina gli eventi CloudTrail per individuare eventuali errori correlati all'API CreateCapacityProvider.
Assicurati che il gruppo Auto Scaling non sia bloccato in un ciclo di aumento e riduzione
Quando la capacità di destinazione specificata nella policy di dimensionamento dei servizi Amazon ECS aumenta, il gruppo Auto Scaling aumenta orizzontalmente e avvia le istanze. Tuttavia, se il valore della metrica diminuisce dopo il picco improvviso, il gruppo Auto Scaling riduce orizzontalmente le istanze. Se la capacità di destinazione oscilla frequentemente in un breve arco di tempo, il gruppo Auto Scaling rimane bloccato in un ciclo di aumento e riduzione. Per evitare il problema, configura il valore della capacità di destinazione in base al carico di lavoro.
Informazioni correlate
Deep dive on Amazon ECS cluster auto scaling (Approfondimento sul dimensionamento automatico dei cluster Amazon ECS)
Come posso risolvere gli errori quando elimino un provider di capacità in Amazon ECS?
