Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra la disponibilità elevata per la distribuzione di applicazioni a più livelli nei cluster Servizio Azure Kubernetes (AKS). Descrive i meccanismi e le architetture HA di Kubernetes e fornisce una checklist e linee guida per identificare ed eliminare i singoli punti di guasto dell'HA.
Esistono due attività fondamentali per implementare l'alta disponibilità per le applicazioni AKS:
- Identificare tutti i singoli punti di errore nell'applicazione.
- Eliminare i singoli punti di errore.
Per eliminare singoli punti di errore, è necessaria una soluzione a disponibilità elevata.
I quattro pilastri dell'HA
Quattro pilastri dell'HA sono presenti in ogni sistema ad alta disponibilità:
- Redundancy
- Monitoraggio
- Recupero
- Checkpoint
Si consideri la seguente applicazione AKS multilivello, in cui il traffico arriva al livello della logica di business, il livello dati conserva lo stato e l'applicazione restituisce risposte agli utenti.
Identificare singoli punti di errore
Per identificare singoli punti di errore, iniziare determinando il percorso critico tra le richieste client e i componenti che servono tali richieste. Qualsiasi componente in questo percorso che non è gestito secondo i quattro pilastri dell'alta disponibilità, oppure secondo i tre pilastri se si tratta di un componente senza stato e senza checkpoint, è un singolo punto di guasto. Anche un componente replicato viene considerato un singolo punto di errore se non viene monitorato, perché l'errore non viene rilevato automaticamente.
Eliminare singoli punti di errore
Per eliminare singoli punti di errore, distribuire l'applicazione per replicare i componenti del percorso critico e usare servizi di bilanciamento del carico, monitoraggio e meccanismi di ripristino. Kubernetes può gestire tutte queste attività.
Scaricare un file di Visio di questo diagramma.
In un'applicazione replicata:
- I componenti del livello business vengono replicati con diversi numeri di repliche per componente, a seconda delle prestazioni e del carico di lavoro.
- È inoltre possibile replicare il livello dati dietro un bilanciatore del carico.
Kubernetes offre diversi costrutti e meccanismi, ad esempio il bilanciamento del carico e le probe di integrità, che consentono di implementare i pilastri dell'alta disponibilità. La seguente checklist e la relativa discussione suddividono questi costrutti e meccanismi in categorie che si mappano sui quattro pilastri dell'alta disponibilità.
Elenco di controllo per la disponibilità elevata di Kubernetes
A parte la gestione dello stato, Kubernetes fa un ottimo lavoro nel garantire l'alta disponibilità delle applicazioni. L'elenco di controllo della disponibilità elevata elenca le configurazioni comuni che è possibile usare per ottimizzare la gestione della disponibilità elevata di Kubernetes. Per usare l'elenco di controllo, valutare la distribuzione di Kubernetes con i meccanismi e i costrutti seguenti e implementare eventuali elementi mancanti.
| Pilastro HA | Soluzione |
|---|---|
| Redundancy | ☐ Tipo di controller Kubernetes ☐ Numero di repliche ☐ Pianificazione dell'anti-affinità |
| Monitoraggio | ☐ Probe di vitalità ☐ Probe di idoneità ☐ Probe di avvio |
| Recupero | ☐ Tipo di servizio ☐ Elezioni leader ☐ Criteri di riavvio ☐ Hook di pre-interruzione |
| Checkpoint | ☐ Richieste di volumi persistenti ☐ Volumi permanenti |
Redundancy
La ridondanza riduce la presenza di un singolo punto di errore. Hai bisogno di ridondanza a tutti i livelli di un'applicazione. Per ottenere la ridondanza, si replica un componente di un determinato livello con una o più repliche identiche.
Tipo di controller. Configurazione:
kind: Deployment. Kubernetes offre diversi controller che possono gestire il ciclo di vita del pod dell'applicazione. Il controller più diffuso èDeployment.Statefulset, un altro controller, è utile quando è necessario mantenere l'identità del pod dopo un ripristino. Altri controller, comeReplicasets, non forniscono la stessa utile funzionalità, come il rollback, cheDeploymentoffre.Numero di repliche. Configurazione:
spec.replicas. Impostando il numero di repliche a una sola, si configura un modello di standby a freddo. Se si usa un modello cold standby, quando si verifica un errore, una nuova istanza inizia da zero, che influisce sulla disponibilità. Questo modello potrebbe funzionare per componenti con carichi di lavoro a basso volume, ma valuta di replicare i componenti stateless ad alto volume.Specificando i limiti delle richieste di risorse,
spec.containers[].resourcesè possibile aggiungere la scalabilità automatica orizzontale dei pod (HPA), che fa sì che Kubernetes possa aumentare o ridurre automaticamente il numero di repliche in base alle soglie di utilizzo delle risorse definite dall'utente. HPA consente di evitare scenari in cui un aumento del carico impedisce all'applicazione di gestire le richieste a causa dell'overload.Pianificazione dell'anti-affinità. Configurazione:
spec.affinity.podAntiAffinity. Un tipico cluster Kubernetes a livello di produzione include nodi distribuiti in più zone di disponibilità, che è possibile configurare usando un .topologyKeyI pod dello stesso deployment dovrebbero avere un'anti-affinità preferenziale o soft tra loro. Questa configurazione garantisce che i pod pianificano i nodi in zone di disponibilità diverse.Un cluster AKS può avere più pool di nodi, ognuno con dimensioni e specifiche diverse per i set di scalabilità di macchine virtuali. Ad esempio, è possibile ospitare i pod di database nei nodi con unità SSD (Solid State Drive) veloci e ospitare i pod di Machine Learning nei nodi con unità di elaborazione grafica (GPU).
Monitoraggio
Se non monitori l'applicazione, la ridondanza può diventare inefficace. È necessario un meccanismo di monitoraggio costante per garantire che il carico di lavoro raggiunga una replica integra.
Probe di vitalità, configurazione
spec.containers.livenessProbe, monitorano lo stato di salute dei pod. Se un contenitore ha esito negativo o si chiude, Kubernetes può rilevarlo. Quando l'attività ha esito negativo, Kubernetes riavvia il contenitore.Probe di idoneità, configurazione
spec.containers.readinessProbe, determinare se inviare traffico al pod. Se i pod di una distribuzione non sono pronti, non faranno parte degli endpoint del servizio Kubernetes che astraggono la distribuzione e pertanto non saranno utili. È importante impostare con attenzione le probe di readiness, perché non causano un riavvio, ma vengono usate per escludere i pod dalla ricezione del traffico finché non sono pronti.Probe di avvio, configurazione
spec.containers.startupProbe, servono principalmente a evitare falsi positivi per la prontezza e l'integrità nelle applicazioni con avvio lento. Dopo che il probe di avvio ha esito positivo, viene avviato il probe di attività.
Azure fornisce informazioni più approfondite che consentono di impostare avvisi in base all'integrità del cluster.
Recupero
Lo scopo principale del monitoraggio è attivare il ripristino quando rileva un errore. Un processo di ripristino prevede tre fasi:
- Isolare e reindirizzare: Assicurarsi che la replica difettosa non riceva traffico e indirizzare il carico di lavoro alle repliche integre.
- Riparazione: Riavviare la replica difettosa. In questo modo è possibile correggere gli errori temporanei.
- Ricongiungersi: Dopo il ripristino, se il monitoraggio ritiene integro la replica, ricongiunti la replica ad altre repliche per gestire il carico di lavoro.
Kubernetes fornisce i meccanismi seguenti per implementare queste fasi:
Tipo di servizio. Configurazione:
spec.type. Esporre i pod tramite un servizio può essere classificato come ridondanza o ripristino. In alcuni casi, tuttavia, è possibile usare una distribuzione a replica singola. Ci sono ancora vantaggi nell'esporre i pod tramite un servizio, anche se non è presente alcun bilanciamento del carico.Il vantaggio principale dell'uso del servizio è che le voci DNS (Domain Name System) vengono aggiornate automaticamente con gli endpoint del servizio Kubernetes. Un pod con contenitori i cui probe di integrità non hanno esito positivo non riceverà traffico tramite AKS. Sebbene la capacità di bilanciamento del carico dei servizi ClusterIP di Kubernetes sia rudimentale, è possibile abbinare un servizio headless a Ingress o ad altre soluzioni di service mesh per bilanciare meglio la distribuzione del carico.
Il meccanismo tramite cui il traffico esterno raggiunge il cluster AKS esula dall'ambito di Kubernetes. È possibile gestire il traffico esterno usando servizi come gateway applicazione di Azure.
Elezioni leader. È preferibile implementare alcuni componenti come singleton. L'utilità di pianificazione è uno di questi componenti, perché due utilità di pianificazione attive possono entrare in conflitto tra loro. L'utilizzo di un singleton espone l'applicazione a problemi legati al cold standby. Per abilitare il warm standby di un pod, è possibile usare l'elezione del leader, in cui un solo pod, il leader, gestisce le richieste.
Criteri di riavvio. Configurazione:
spec.restartPolicy. Il criterio di riavvio si applica a tutti i contenitori del pod. Deve essere presente una giustificazione valida per l'impostazione di questo attributo suNever. Alcuni container contattano un server di licenze ogni volta che vengono avviati e potresti voler evitare i costi aggiuntivi dovuti a riavvii eccessivi.Hook di pre-arresto Configurazione:
spec.containers.lifecycle.preStop. Gli hook pre-stop vengono eseguiti prima che al container venga inviato un segnaleSIGTERM. Uno script di pre-arresto può essere semplice come un comando di sospensione di 30 secondi.Ad esempio, quando un'applicazione gestita da un HPA viene ridotta, le richieste in corso potrebbero essere terminate bruscamente, a meno che l'applicazione non disponga di un gestore
SIGTERMche completi l'elaborazione delle richieste prima di terminare. Un hook pre-stop rimuove l'endpoint del pod dall'endpoint del servizio e, di conseguenza, la voce DNS. Mentre il pre-stop hook è in esecuzione, non possono essere inviate nuove richieste al pod. L'hook pre-stop consente al pod di completare l'elaborazione delle richieste in corso senza riceverne di nuove. Gli hook pre-stop sono un modo semplice per ridurre al minimo le richieste perse senza modificare il codice dell'applicazione.
Checkpoint
Le applicazioni moderne contengono molti componenti senza stato, ma le applicazioni completamente senza stato sono ancora rare. La maggior parte delle applicazioni verifica il proprio stato nel livello dati. Kubernetes non fornisce intenzionalmente alcun meccanismo per gestire lo stato dell'applicazione. La gestione dello stato è un'attività complessa che non fa parte della gestione dei contenitori.
È possibile rendere persistente lo stato dell'applicazione in tre livelli:
Il livello dei record di dati archivia i dati in un database. Ogni record di database può essere replicato in più istanze di database. I record di database sono la forma dominante di persistenza dello stato, soprattutto nei database cloud gestiti come Azure Cosmos DB.
Il livello del file system in genere replica i file di dati, ad esempio i file di write-ahead logging (WAL). La maggior parte dei provider di servizi cloud offre plug-in per le proprie soluzioni. Ad esempio, File di Azure fornisce un plug-in.
Il livello del disco rende persistenti i dati a livello di blocco, che offre flessibilità per definire il file system da usare, come in archiviazione su disco di Azure.
I volumi Kubernetes , i volumi persistenti e le attestazioni di volume persistente possono rendere persistente lo stato dell'applicazione a livello di file system o disco. Il modello più comune per archiviare lo stato è ancora il livello dei record di dati.
Disponibilità elevata e ripristino di emergenza
Sia per l'alta disponibilità che per il disaster recovery (DR), la scelta della topologia di rete e delle soluzioni di bilanciamento del carico è importante.
Tuttavia, il disaster recovery richiede la distribuzione del servizio in più aree geografiche a livello dell'intero servizio, con soluzioni di bilanciamento del carico tra aree di Azure. L'applicazione viene distribuita in più aree o in ogni area viene distribuita un'intera istanza dell'applicazione. La scelta dipende dal tipo di applicazione, dall'architettura dell'applicazione e dalla tolleranza di latenza tra i componenti.
L'alta disponibilità trae vantaggio dalle distribuzioni multizona all'interno delle aree di Azure anziché dall'uso di più aree. Il diagramma seguente illustra la differenza tra le zone di disponibilità e le regioni per HA e DR.
Scaricare un file di Visio di questa architettura.
Questo articolo si concentra su HA a livello di applicazione all’interno di un singolo cluster AKS. Per altre informazioni sul ripristino di emergenza (DR) nelle distribuzioni multi-cluster di AKS, vedere Baseline di AKS per cluster in più aree geografiche.
Altre considerazioni
Per mantenere l'alta disponibilità dell'applicazione, assicuratevi che il piano di controllo di Kubernetes, incluso il server API e il controller manager, sia altamente disponibile. Usa il livello tariffario Standard o Premium per garantire l'alta disponibilità.
Una strategia di consolidamento delle risorse è in diretto contrasto con il pilastro della ridondanza HA. Pertanto, è necessario analizzare attentamente il costo della ridondanza. Il calcolatore prezzi Azure può essere utile.
Contributors
Microsoft gestisce questo articolo. I seguenti collaboratori hanno scritto questo articolo.
Autore principale:
- Ali Kanso | Principal Software Engineer
Altri contributori:
- Ayobami Ayodeji | Responsabile senior del programma
- Patra Kinsumano | Partner Group Engineering Manager
- Oscar L Pla Alvarez | Domain Solution Architect
- Karthik Sankara Subramanian | Ingegnere software II
Per visualizzare i profili LinkedIn non pubblici, accedere a LinkedIn.
Passaggi successivi
- Modello di cluster Kubernetes a disponibilità elevata
- Aree e zone di disponibilità
- Quote, restrizioni relative alle dimensioni delle macchine virtuali e disponibilità delle aree in AKS
- Procedure consigliate di architettura per AKS