Scalabilità del carico di lavoro - AWS Guida prescrittiva

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Scalabilità del carico di lavoro

La scalabilità del carico di lavoro in Kubernetes è essenziale per mantenere le prestazioni delle applicazioni e l'efficienza delle risorse in ambienti dinamici. La scalabilità aiuta a garantire che le applicazioni siano in grado di gestire carichi di lavoro diversi senza un peggioramento delle prestazioni. Kubernetes offre la possibilità di aumentare o ridurre automaticamente le risorse in base a metriche in tempo reale, consentendo alle organizzazioni di rispondere rapidamente ai cambiamenti del traffico. Questa elasticità non solo migliora l'esperienza utente, ma ottimizza anche l'utilizzo delle risorse, contribuendo a ridurre al minimo i costi associati a risorse sottoutilizzate o sovrafornite.

Inoltre, un'efficace scalabilità del carico di lavoro supporta l'elevata disponibilità, garantendo che le applicazioni rimangano reattive anche nei periodi di picco della domanda. La scalabilità del carico di lavoro in Kubernetes consente alle organizzazioni di utilizzare meglio le risorse cloud adattando dinamicamente la capacità per soddisfare le esigenze attuali.

Questa sezione illustra i seguenti tipi di scalabilità del carico di lavoro:

Horizontal Pod Autoscaler

L'Horizontal Pod Autoscaler (HPA) è una funzionalità di Kubernetes che regola automaticamente il numero di repliche dei pod in una distribuzione, un controller di replica o un set stateful, in base all'utilizzo della CPU osservato o ad altre metriche selezionate. L'HPA assicura che le applicazioni possano gestire livelli di traffico e carico di lavoro fluttuanti senza la necessità di un intervento manuale. L'HPA offre un mezzo per preservare prestazioni ottimali facendo al contempo un uso efficace delle risorse disponibili.

In contesti in cui la domanda degli utenti potrebbe variare considerevolmente nel tempo, le app Web, i microservizi e APIs l'HPA sono particolarmente utili.

L'Horizontal Pod Autoscaler offre le seguenti funzionalità chiave:

  • Scalabilità automatica: HPA aumenta o diminuisce automaticamente il numero di repliche dei pod in risposta a metriche in tempo reale, garantendo la scalabilità delle applicazioni per soddisfare la domanda degli utenti.

  • Decisioni basate su metriche: per impostazione predefinita, la scalabilità HPA si basa sull'utilizzo della CPU. Tuttavia, può anche utilizzare metriche personalizzate, come l'utilizzo della memoria o metriche specifiche dell'applicazione, consentendo strategie di scalabilità più personalizzate.

  • Parametri configurabili: è possibile scegliere il numero minimo e massimo di repliche e le percentuali di utilizzo desiderate, in modo da poter decidere la severità del ridimensionamento.

  • Integrazione con Kubernetes: per monitorare e modificare le risorse, HPA collabora con altri elementi dell'ecosistema Kubernetes, tra cui Metrics Server, l'API Kubernetes e gli adattatori di metrica personalizzati.

  • Migliore utilizzo delle risorse: HPA aiuta a garantire che le risorse vengano utilizzate in modo efficace, riducendo i costi e migliorando le prestazioni, modificando dinamicamente il numero di pod.

Cluster Proportional Autoscaler

Il Cluster Proportional Autoscaler (CPA) è un componente Kubernetes progettato per regolare automaticamente il numero di repliche dei pod in un cluster in base al numero di nodi disponibili. A differenza degli autoscaler tradizionali che scalano in base a metriche di utilizzo delle risorse (come CPU e memoria), CPA ridimensiona i carichi di lavoro in proporzione alla dimensione del cluster stesso.

Questo approccio è particolarmente utile per le applicazioni che devono mantenere un certo livello di ridondanza o disponibilità rispetto alle dimensioni del cluster, come CoredNS e altri servizi di infrastruttura. Alcuni dei principali casi d'uso del CPA includono:

  • Sovra-approvvigionamento

  • Scalabilità orizzontale dei servizi della piattaforma di base

  • Scalabilità orizzontale dei carichi di lavoro perché CPA non richiede un server di metrica o un adattatore Prometheus

Automatizzando il processo di scalabilità, CPA aiuta le aziende a mantenere una distribuzione equilibrata del carico di lavoro, aumentare l'efficienza delle risorse e garantire che le applicazioni siano adeguatamente fornite per soddisfare la domanda degli utenti.

Cluster Proportional Autoscaler offre le seguenti funzionalità chiave:

  • Scalabilità basata sui nodi: CPA ridimensiona le repliche in base al numero di nodi del cluster che è possibile pianificare, consentendo alle applicazioni di espandersi o contrarsi in proporzione alla dimensione del cluster.

  • Adattamento proporzionato: per garantire che l'applicazione possa scalare in base alle variazioni delle dimensioni del cluster, l'autoscaler stabilisce una relazione proporzionata tra il numero di nodi e il numero di repliche. Questa relazione viene utilizzata per calcolare il numero desiderato di repliche per un carico di lavoro.

  • Integrazione con i componenti Kubernetes: CPA funziona con componenti Kubernetes standard come Horizontal Pod Autoscaler (HPA), ma si concentra specificamente sul numero di nodi piuttosto che sulle metriche di utilizzo delle risorse. Questa integrazione consente una strategia di scalabilità più completa.

  • Client API Golang: per monitorare il numero di nodi e i relativi core disponibili, CPA utilizza i client API Golang che vengono eseguiti all'interno dei pod e comunicano con il server API Kubernetes.

  • Parametri configurabili: utilizzando aConfigMap, gli utenti possono impostare soglie e parametri di scala utilizzati da CPA per modificarne il comportamento e assicurarsi che segua il piano di scalabilità previsto.

Event-Driven Autoscaler basato su Kubernetes

Event Driven Autoscaler (KEDA) basato su Kubernetes è un progetto open source che consente la scalabilità dei carichi di lavoro Kubernetes in base al numero di eventi da elaborare. KEDA migliora la scalabilità delle applicazioni consentendo loro di rispondere in modo dinamico a carichi di lavoro diversi, in particolare quelli basati sugli eventi.

Automatizzando il processo di scalabilità in base agli eventi, KEDA aiuta le organizzazioni a ottimizzare l'utilizzo delle risorse, migliorare le prestazioni delle applicazioni e ridurre i costi associati all'over-provisioning. Questo approccio è particolarmente utile per le applicazioni che presentano modelli di traffico diversi, come microservizi, funzioni serverless e sistemi di elaborazione dati in tempo reale.

KEDA offre le seguenti funzionalità chiave:

  • Scalabilità basata sugli eventi: KEDA consente di definire regole di ridimensionamento basate su fonti di eventi esterne, come code di messaggi, richieste HTTP o metriche personalizzate. Questa funzionalità aiuta a garantire la scalabilità delle applicazioni in risposta alla domanda in tempo reale.

  • Componente leggero: KEDA è un componente leggero e monouso che non richiede molta configurazione o sovraccarico per essere facilmente integrato nei cluster Kubernetes esistenti.

  • Integrazione con Kubernetes: KEDA estende le funzionalità dei componenti nativi di Kubernetes, come Horizontal Pod Autoscaler (HPA). KEDA aggiunge funzionalità di scalabilità basate sugli eventi a questi componenti, migliorandoli anziché sostituendoli.

  • Supporto per più fonti di eventi: KEDA è compatibile con un'ampia gamma di sorgenti di eventi, tra cui piattaforme di messaggistica popolari come RabbitMQ, Apache Kafka e altre. Grazie a questa adattabilità, puoi personalizzare la scalabilità per adattarla alla tua architettura unica basata sugli eventi.

  • Scaler personalizzati: utilizzando gli scaler personalizzati, è possibile designare metriche specifiche che KEDA può utilizzare per avviare azioni di scalabilità in risposta a logiche o requisiti aziendali specifici.

  • Configurazione dichiarativa: in linea con i principi di Kubernetes, puoi utilizzare KEDA per descrivere il comportamento di scalabilità in modo dichiarativo utilizzando risorse personalizzate di Kubernetes per definire come dovrebbe avvenire la scalabilità.