K8s/Kubernetes: AWS vs GCP vs Azure
Pubblicato: 2022-03-11Kubernetes (spesso stilizzati "K8") ha vinto la battaglia degli strumenti di orchestrazione dei container anni fa. Tuttavia, ci sono ancora molti modi per implementare Kubernetes oggi e farlo funzionare con varie infrastrutture e molti strumenti, alcuni mantenuti meglio di altri. Forse lo sviluppo più interessante su questo fronte, tuttavia, è che i principali fornitori di servizi cloud hanno deciso di rilasciare le proprie versioni di Kubernetes gestite:
- Microsoft Azure offre il servizio Azure Kubernetes (AKS)
- AWS offre Amazon Elastic Kubernetes Service (EKS)
- Google Cloud offre Google Kubernetes Engine (GKE)
Dal punto di vista DevOps, cosa offrono queste piattaforme? Mantengono le loro promesse? Come si confrontano il loro tempo di creazione e altri benchmark? Quanto bene si integrano con le rispettive piattaforme, in particolare con i loro strumenti CLI? Com'è mantenerli e lavorare con loro? Di seguito, approfondiremo queste domande e altro ancora.
Nota: per i lettori che desiderano spiegare i concetti di un cluster Kubernetes prima di continuare a leggere, Dmitriy Kononov offre un'eccellente introduzione.
AKS vs. EKS vs. GKE: funzionalità pubblicizzate
Abbiamo deciso di raggruppare in silos le diverse funzionalità disponibili per ciascuna versione di Kubernetes gestita:
- Panoramica globale
- Rete
- Scalabilità e prestazioni
- Sicurezza e monitoraggio
- Ecosistema
- Prezzo
Nota: questi dettagli possono cambiare nel tempo poiché i fornitori di servizi cloud aggiornano regolarmente i loro prodotti.
Panoramica globale
Aspetto di servizio | AKS | EKS | GKE |
---|---|---|---|
Anno di pubblicazione | 2017 | 2018 | 2014 |
Ultima versione | 1.15.11 (predefinito) - 1.18.2 (anteprima) | 1.16.8 (predefinito) | 1.14.10 (predefinito) - 1.16.9 |
Componenti specifici | Oms-agente, tunnelfront | nodo aws | fluentd, fluentd-gcp-scaler, event-exporter, l7-default-backend |
Aggiornamento del piano di controllo Kubernetes | Manuale | Manuale | Automatizzato (predefinito) o manuale |
Aggiornamenti dei lavoratori | Manuale | Sì (facile con i gruppi di nodi gestiti) | Sì: automatizzato e manuale, messa a punto possibile |
SLA | 99,95% con zona di disponibilità, 99,9% senza | 99,9 percento per EKS (master), 99,99 percento per EC2 (nodi) | 99,95% all'interno di una regione, 99,5% all'interno di una zona |
Supporto nativo dei fantasmi | No | No | No (ma installazione nativa di Istio) |
Prezzo dell'aereo di controllo Kubernetes | Libero | $ 0,10/ora | $ 0,10/ora |
Kubernetes stesso era il progetto di Google, quindi ha senso che siano stati i primi a proporre una versione ospitata nel 2014.
Dei tre confrontati qui, Azure è stato il successivo con AKS e ha avuto del tempo per migliorare: se ricordi acs-engine, che era stato utilizzato per eseguire il provisioning di Kubernetes su Azure alcuni anni fa, apprezzerai lo sforzo di Microsoft per la sua sostituzione, aks-motore.
AWS è stato l'ultimo a lanciare la propria versione, EKS, quindi a volte può sembrare in ritardo sul fronte delle funzionalità, ma stanno recuperando terreno.
In termini di prezzi, ovviamente, le cose sono sempre in movimento e Google ha deciso di aderire ad AWS al suo prezzo di $ 0,10/ora, a partire da giugno 2020. Azure è l'outsider qui distribuendo gratuitamente il servizio AKS, ma non è chiaro come a lungo che possa durare.
Un'altra differenza principale risiede nella funzionalità di aggiornamento del cluster. Gli aggiornamenti più automatizzati sono in GKE e sono attivati per impostazione predefinita. Tuttavia, AKS e EKS sono simili tra loro, nel senso che entrambi richiedono richieste manuali per poter aggiornare i nodi master o di lavoro.
Rete
Aspetto di servizio | AKS | EKS | GKE |
---|---|---|---|
Politiche di rete | Sì: criteri di rete di Azure o Calico | Necessità di installare Calico | Sì: nativo tramite Calico |
Bilancio del carico | Bilanciatore del carico SKU di base o standard | Bilanciatore del carico classico e di rete | Bilanciatore del carico nativo del container |
Rete di servizio | Nessuno fuori dagli schemi | AWS App Mesh (basato su Envoy) | Istio (out of the box, ma beta) |
Supporto DNS | Personalizzazione CoreDNS | CoreDNS + Route53 all'interno di VPC | CoreDNS + Google Cloud DNS |
Dal punto di vista della rete, i tre fornitori di servizi cloud sono molto vicini tra loro. Tutti consentono ai clienti di implementare politiche di rete con Calico, ad esempio. Per quanto riguarda il bilanciamento del carico, tutti implementano la propria integrazione con le proprie risorse di bilanciamento del carico e danno agli ingegneri la possibilità di scegliere cosa utilizzare.
La principale differenza qui trovata si basa sul valore aggiunto della rete di servizi. AKS non supporta alcuna rete di servizi pronta all'uso (sebbene gli ingegneri possano installare manualmente Istio). AWS ha sviluppato la propria rete di servizi chiamata App Mesh. Infine, Google ha rilasciato la propria integrazione con Istio (sebbene ancora in versione beta) che i clienti possono aggiungere direttamente durante la creazione del cluster.
La migliore scommessa: GKE
Scalabilità e prestazioni
Aspetto di servizio | AKS | EKS | GKE |
---|---|---|---|
Nodi di metallo nudo | No | sì | No |
Numero massimo di nodi per cluster | 1.000 | 1.000 | 5.000 |
Cluster ad alta disponibilità | No | Sì per il piano di controllo, manuale in tutta la A alla Z per i lavoratori | Sì tramite cluster regionale, master e worker vengono replicati |
Ridimensionamento automatico | Sì tramite scalabilità automatica del cluster | Sì tramite scalabilità automatica del cluster | Sì tramite scalabilità automatica del cluster |
Scalabilità automatica del pod verticale | No | sì | sì |
Pool di nodi | sì | sì | sì |
Nodi GPU | sì | sì | sì |
In loco | Disponibile tramite Azure ARC (beta) | No | GKE in loco tramite Anthos GKE |
Per quanto riguarda le prestazioni e la scalabilità di GKE rispetto a AKS rispetto a EKS, GKE sembra essere in vantaggio. In effetti, supporta il maggior numero di nodi (5.000) e offre un'ampia documentazione su come ridimensionare correttamente un cluster. Tutte le funzionalità per l'alta disponibilità sono disponibili e sono facili da mettere a punto. Inoltre, GKE ha recentemente rilasciato Anthos, un progetto per creare un ecosistema attorno a GKE e alle sue funzionalità; con Anthos, puoi distribuire GKE in locale.
Tuttavia, AWS ha un vantaggio fondamentale: è l'unico a consentire ai nodi bare-metal di eseguire il tuo cluster Kubernetes.
A partire da giugno 2020, AKS non dispone di un'elevata disponibilità per il master, che è un aspetto importante da considerare. Ma, come sempre, le cose potrebbero presto cambiare.
La migliore scommessa: GKE
Sicurezza e monitoraggio
Aspetto di servizio | AKS | EKS | GKE |
---|---|---|---|
Crittografia dei segreti delle app | No | Sì, possibile tramite AWS KMS | Sì, possibile tramite Cloud KMS |
Conformità | HIPAA, SOC, ISO, PCI DSS | HIPAA, SOC, ISO, PCI DSS | HIPAA, SOC, ISO, PCI DSS |
RBAC | sì | Sì, e una forte integrazione con IAM | sì |
Monitoraggio | Funzionalità di integrità del contenitore di monitoraggio di Azure | Monitoraggio del piano di controllo Kubernetes connesso a Cloudwatch, Container Insights Metrics per nodi | Monitoraggio del motore Kubernetes e integrazione con Prometheus |
In termini di conformità, tutti e tre i fornitori di servizi cloud sono equivalenti. Tuttavia, in termini di sicurezza, EKS e GKE forniscono un altro livello di sicurezza con i loro servizi di gestione delle chiavi incorporati.
Per quanto riguarda il monitoraggio, Azure e Google Cloud forniscono il proprio ecosistema di monitoraggio attorno a Kubernetes. Vale la pena notare che quello di Google è stato recentemente aggiornato per utilizzare Kubernetes Engine Monitoring, progettato specificamente per Kubernetes.
Azure fornisce il proprio sistema di monitoraggio dei contenitori, originariamente creato per un ecosistema di contenitori di base non Kubernetes. Hanno aggiunto il monitoraggio per alcune metriche e risorse specifiche di Kubernetes (stato del cluster, distribuzioni) in modalità di anteprima, a partire da giugno 2020.
AWS offre un monitoraggio leggero per il piano di controllo direttamente in Cloudwatch. Per monitorare i lavoratori, puoi utilizzare Kubernetes Container Insights Metrics fornito tramite un agente CloudWatch specifico che puoi installare nel cluster.
La migliore scommessa: GKE
Ecosistema
Aspetto di servizio | AKS | EKS | GKE |
---|---|---|---|
Mercato | Azure Marketplace (ma nessuna chiara integrazione AKS) | AWS Marketplace (oltre 250 app) | Google Marketplace (oltre 90 app) |
Supporto Infrastructure-as-Code (IaC). | Modulo Terraforma Modulo Ansible | Modulo Terraforma Modulo Ansible | Modulo Terraforma Modulo Ansible |
Documentazione | Community debole ma completa e forte (oltre 2000 post di Stack Overflow) | Community non molto completa ma forte (oltre 1.500 post di Stack Overflow) | Ampia documentazione ufficiale e community molto forte (oltre 4.000 post di Stack Overflow) |
Supporto CLI | Completare | Completo, più uno speciale strumento separato eksctl (coperto di seguito) | Completare |
In termini di ecosistemi, i tre fornitori hanno punti di forza e risorse diversi. AKS ora ha una documentazione molto completa sulla sua piattaforma ed è il secondo in termini di post su Stack Overflow. EKS ha il minor numero di post su Stack Overflow, ma beneficia della forza di AWS Marketplace. GKE, in quanto piattaforma più antica, ha il maggior numero di post su Stack Overflow e un numero decente di app sul suo mercato, ma anche la documentazione più completa.

Le migliori scommesse: GKE e EKS
Prezzo
Aspetto di servizio | AKS | EKS | GKE |
---|---|---|---|
Limite di utilizzo gratuito | $ 170 del valore | Non idoneo per il livello gratuito | $ 300 del valore |
Costo dell'aereo di controllo Kubernetes | Libero | $ 0,10/ora | $ 0,10/ora (giugno 2020) |
Prezzo ridotto (istanza spot/nodi prerilasciabili) | sì | sì | sì |
Esempio di prezzo per un mese | $ 342 3 nodi D2 | $ 300 3 t3.nodi grandi | $ 190 3 nodi n1-standard-2 |
Per quanto riguarda il prezzo complessivo, anche con la mossa di GKE di implementare il prezzo di $ 0,10/ora per qualsiasi cluster, rimane di gran lunga il cloud più economico. Questo grazie a qualcosa di specifico di Google: sconti sull'uso sostenuto, che vengono applicati ogni volta che l'utilizzo mensile delle risorse on demand raggiunge un determinato minimo.
È importante notare che la riga del prezzo di esempio non tiene conto del traffico verso il cluster Kubernetes che il provider di servizi cloud può addebitare.
Il motivo per cui AWS non consente l'uso del loro livello gratuito per testare un cluster EKS è che EKS richiede macchine più grandi del livello tX.micro e il prezzo orario di EKS non è nel livello gratuito.
Tuttavia, può essere comunque economico testare una di queste opzioni Kubernetes gestite con un carico decente utilizzando i nodi spot/prerilasciabili di ciascun provider cloud: questa tattica farà risparmiare facilmente dall'80 al 90 percento sul prezzo finale. (Ovviamente, non è consigliabile eseguire carichi di produzione con stato su tali macchine!)
Funzionalità pubblicizzate e vantaggio di Google
Osservando le diverse funzionalità pubblicizzate online, sembra che ci sia una correlazione tra da quanto tempo la versione gestita di Kubernetes è sul mercato e il numero di funzionalità. Come accennato, il fatto che Google sia stato l'iniziatore del progetto Kubernetes sembra essere un innegabile vantaggio, che si traduce in una migliore e più forte integrazione con la propria piattaforma cloud.
Ma AKS ed EKS non sono da sottovalutare man mano che maturano; entrambi possono sfruttare le loro caratteristiche uniche. Ad esempio, AWS è l'unico ad avere l'integrazione di nodi bare-metal e vanta anche il maggior numero di applicazioni nel suo mercato.
Ora che le funzionalità pubblicizzate per ciascuna offerta Kubernetes sono chiare, facciamo un tuffo più profondo con alcuni test pratici.
Kubernetes: AWS vs GCP vs Azure in pratica
La pubblicità è una cosa, ma come si confrontano le diverse piattaforme quando si tratta di servire carichi di produzione? In qualità di ingegnere del cloud, conosco l'importanza del tempo necessario per la generazione e l'eliminazione di un cluster durante l'applicazione dell'infrastruttura come codice. Ma volevo anche esplorare le possibilità di ciascuna CLI e commentare quanto sia facile (o meno) ogni provider di cloud rende generare un cluster.
Esperienza utente per la creazione di cluster
AKS
In AKS, la generazione di un cluster è simile alla creazione di un'istanza in AWS. Basta trovare il menu AKS e passare attraverso una successione di menu diversi. Una volta convalidata la configurazione, è possibile creare il cluster, un processo in due fasi. È molto semplice e gli ingegneri possono avviare facilmente e rapidamente un cluster con le impostazioni predefinite.
EKS
La creazione di cluster è decisamente più complessa su EKS rispetto a AKS. Prima di tutto, e per impostazione predefinita, AWS richiede prima un viaggio a IAM per creare un nuovo ruolo per il piano di controllo Kubernetes e assegnargli l'ingegnere. È anche importante notare che questa creazione del cluster non include la creazione dei nodi, quindi quando ho misurato in media 11 minuti, questo è solo per la creazione del master. La creazione del gruppo di nodi è un altro passaggio per l'amministratore, che necessita ancora una volta di un ruolo per i lavoratori con tre policy necessarie da realizzare tramite il pannello di controllo IAM.
GKE
Per me, l'esperienza di creare un cluster manualmente è molto piacevole su GKE. Dopo aver trovato Kubernetes Engine in Google Cloud Console, fai clic per creare un cluster. Diverse categorie di impostazioni vengono visualizzate in un menu a sinistra. Google precompilerà il nuovo cluster con un pool di nodi predefinito facilmente modificabile. Ultimo ma non meno importante, GKE ha il tempo di spawn dei cluster più veloce, il che ci porta al tavolo successivo.
È ora di generare un cluster
Aspetto di servizio | AKS | EKS | GKE |
---|---|---|---|
Dimensione | 3 nodi (Ds2-v2), ciascuno con 2 vCPU, 7 GB di RAM | 3 nodi t3.grande | 3 nodi n1-standard-2 |
Tempo (m:ss) | Media 5:45 per un cluster completo | 11:06 per il master più 2:40 per il gruppo di nodi (totale 13:46 per un cluster completo) | Media 2:42 per un cluster completo |
Ho eseguito questi test nella stessa regione (Francoforte e Europa occidentale per AKS) per rimuovere il possibile impatto di questa differenza sul tempo di spawn. Ho anche provato a selezionare la stessa dimensione per i nodi per il cluster: tre nodi, ciascuno con due vCPU e sette o otto GB di memoria, una dimensione standard per eseguire un piccolo carico su Kubernetes e iniziare a sperimentare. Ho creato ogni cluster tre volte per calcolare una media.
In questi test, GKE è rimasto molto avanti con un tempo di deposizione delle uova sempre inferiore ai tre minuti.
Kubernetes: Panoramica di AWS e GCP e dell'interfaccia a riga di comando di Azure
Non tutte le CLI sono uguali, ma in questo caso tutte e tre le CLI sono in realtà moduli di una CLI più grande. Com'è essere operativi con la toolchain CLI di ciascun provider cloud?
AKS CLI (via az
)
Dopo aver installato az
tooling, quindi il modulo AKS (tramite az aks install-cli
), gli ingegneri devono autorizzare l'interfaccia della riga di comando a comunicare con l'account Azure del progetto. Si tratta di ottenere le credenziali per aggiornare il file kubeconfig locale tramite un semplice az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
.
Allo stesso modo, per creare un cluster: az aks create --resource-group myResourceGroup --name myAKSCluster
EKS CLI (tramite aws
o eksctl
)
Su AWS, troviamo un approccio diverso: esistono due diversi strumenti CLI ufficiali per gestire i cluster EKS. Come sempre, aws
può connettersi alle risorse AWS, in particolare ai cluster. È possibile ottenere le credenziali in un kubeconfig locale tramite: aws eks update-kubeconfig --name cluster-test
.
Tuttavia, gli ingegneri possono anche utilizzare eksctl
, sviluppato da Weaveworks e scritto in Go, per creare e gestire facilmente un cluster EKS. Un grande vantaggio offerto da EKS agli ingegneri del cloud è che possono combinarlo con i file di configurazione YAML per creare l'infrastruttura come codice (IaC) poiché funziona con CloudFormation. È sicuramente una risorsa da considerare quando si integra un cluster EKS in un'infrastruttura più ampia su AWS.
Creare un cluster tramite eksctl
è facile come eksctl create cluster
, non sono richiesti altri parametri.
CLI GKE (tramite gcloud
)
Per GKE, i passaggi sono molto simili: installa gcloud
, quindi autenticati tramite gcloud init
. Le possibilità da lì: gli ingegneri possono creare, eliminare, descrivere, ottenere credenziali, ridimensionare, aggiornare o aggiornare un cluster o elencare i cluster.
La sintassi per creare un cluster con gcloud
è semplice: gcloud container clusters create myGCloudCluster --num-nodes=1
AKS vs. EKS vs. GKE: risultati del test drive
In pratica, possiamo vedere che GKE è sicuramente il più veloce per creare un cluster di base, sia in termini di semplicità della console che di tempo di spawn del cluster. Dal punto di vista UX, con il pulsante di connessione accanto al cluster, che rende anche la connessione più semplice a un cluster.
In termini di strumenti CLI, i tre fornitori di cloud hanno implementato funzionalità simili; tuttavia, possiamo porre l'accento sullo strumento aggiuntivo fornito da Weaveworks per EKS. eksctl
è lo strumento perfetto per implementare l'infrastruttura come codice sulla tua infrastruttura AWS preesistente, combinando altri servizi con EKS.
Le offerte gestite di Kubernetes vanno avanti: AWS vs GCP vs Azure
Per coloro che hanno appena iniziato nel mondo di Kubernetes, l'implementazione di riferimento per me è GKE, poiché è la più semplice. È facile da configurare, ha un'esperienza utente semplice e veloce per lo spawn ed è ben integrato nell'ecosistema di Google Cloud Platform.
Anche se AWS è stato l'ultimo a unirsi alla gara, ha alcuni vantaggi innegabili, come i nodi bare metal e il semplice fatto che è integrato con il provider con la più grande condivisione mentale.
Infine, AKS ha fatto grandi progressi dalla sua creazione. Probabilmente la parità degli strumenti e delle funzionalità non richiederà molto tempo, lasciando nel frattempo spazio al processo per l'innovazione. E come per qualsiasi offerta Kubernetes gestita, per chi è già sulla piattaforma principale, l'integrazione sarà un punto di forza.
Una volta che un team ha scelto un provider cloud Kubernetes, potrebbe essere interessante esaminare le esperienze degli altri team, in particolare i fallimenti. Questi post mortem sono un riflesso di casi del mondo reale, sempre un buon punto di partenza per sviluppare le proprie best practice all'avanguardia. Aspetto i tuoi commenti qui sotto!