K8s/Kubernetes: AWS vs GCP vs Azure

Pubblicato: 2022-03-11

Kubernetes (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 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
Pool di nodi
Nodi GPU
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ì, e una forte integrazione con IAM
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)
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!

Correlati: un confronto della mesh del servizio Kubernetes