Cosa fa effettivamente Kubernetes? [chiuso]


134

Kubernetes viene fatturato come "scheduler / orchestrator" del cluster contenitore, ma non ho idea di cosa significhi. Dopo aver letto il sito Kubernetes e la (vaga) wiki di GitHub, il meglio che posso dire è che in qualche modo riesce a capire quali VM sono disponibili / in grado di far funzionare il tuo contenitore Docker, e quindi li distribuisce lì. Ma questa è solo la mia ipotesi, e non ho visto alcuna verbosità concreta nella loro documentazione per supportarlo.

Cos'è esattamente Kubernetes e quali sono alcuni problemi specifici che risolve?


Dato che tutti i progetti del mondo docker (kubernetes / flotta / sciame / ecc.) Hanno difficoltà a spiegare cosa fanno e cosa li distingue, penso che una domanda un po 'ambiziosa sia tutto ciò che gli utenti possono fornire ... Uno chiede "qual è la differenza tra flotta e kubernetes" e la risposta è "puoi usare la flotta per lanciare kubernetes". Bummer. ;-)
Torsten Bronger,

3
Penso che sia una domanda perfettamente valida e sottolinea alcune brevi lacune nel documento. Chiuderlo come troppo ampio è un disservizio. L'approccio migliore per me è stato semplicemente quello di scaricare la base di codice k8s e andare lì ad esempio per scoprire cos'è un pod. Questo mi ha aiutato molto.
Beezer,

Risposte:


113

Lo scopo di Kubernetes è di semplificare l'organizzazione e la pianificazione dell'applicazione su una flotta di macchine. Ad alto livello è un sistema operativo per il tuo cluster.

Fondamentalmente, ti consente di non preoccuparti di quale macchina specifica nel tuo datacenter esegue ciascuna applicazione. Inoltre fornisce primitive generiche per il controllo dello stato e la replica della tua applicazione su queste macchine, oltre a servizi per il cablaggio della tua applicazione in micro-servizi in modo che ogni livello nella tua applicazione sia disaccoppiato da altri livelli in modo da poter ridimensionare / aggiornare / mantenerli indipendentemente.

Mentre è possibile fare molte di queste cose a livello di applicazione, tali soluzioni tendono ad essere una tantum e fragili, è molto meglio avere una separazione delle preoccupazioni, in cui un sistema di orchestrazione si preoccupa di come eseguire l'applicazione e ti preoccupi di il codice che costituisce la tua applicazione.


3
Grazie @brendan (+1) - la tua risposta sicuramente aiuta. Una domanda di follow-up però: non è questo ciò che fa Apache Mesos? Kubernetes e Mesos sono in competizione tra loro? In caso contrario, potrebbero essere utilizzati in concerto tra loro (e in tal caso, come)? Grazie ancora!
Smeeb

2
@smeeb Mesos e Kubernetes si completano a vicenda (quest'ultimo è supportato come framework Mesos). Mesos offre una gestione delle risorse più sofisticata. In altre parole, Kubernetes consente a Mesos di decidere quale host viene utilizzato, in base alla capacità disponibile. Mesos supporta altri framework. Se leggi i documenti, vedrai che Marathon è un altro modo per avviare container su un cluster di server gestito Mesos.
Mark O'Connor il

18

Mentre leggi dalla sua pagina Github :

Kubernetes è un sistema open source per la gestione di applicazioni containerizzate su più host, fornendo meccanismi di base per la distribuzione, la manutenzione e il ridimensionamento delle applicazioni.

Kubernetes è:

lean: lightweight, simple, accessible
portable: public, private, hybrid, multi cloud
extensible: modular, pluggable, hookable, composable
self-healing: auto-placement, auto-restart, auto-replication

Kubernetes si basa su un decennio e mezzo di esperienza in Google nella gestione di carichi di lavoro di produzione su larga scala, combinati con le migliori idee e pratiche della comunità.

Per me Kubernetes è uno strumento di orchestrazione container di Google. Grazie al suo design è possibile implementare la compatibilità con qualsiasi motore contenitore, ma penso che ora sia limitato a Docker. Ci sono alcuni concetti importanti nella sua architettura:

Kubernetes funziona con i seguenti concetti:

I cluster sono le risorse di calcolo su cui sono costruiti i contenitori. Kubernetes può funzionare ovunque! Consulta le Guide introduttive per istruzioni su una varietà di servizi.

I pod sono un gruppo raggruppato di contenitori Docker con volumi condivisi. Sono le unità dispiegabili più piccole che possono essere create, programmate e gestite con Kubernetes. I pod possono essere creati singolarmente, ma è consigliabile utilizzare un controller di replica anche se si crea un singolo pod. Maggiori informazioni sui baccelli.

I controller di replica gestiscono il ciclo di vita dei pod. Assicurano che un determinato numero di pod sia in esecuzione in qualsiasi momento, creando o uccidendo i pod come richiesto. Ulteriori informazioni sui controller di replica.

I servizi forniscono un nome e un indirizzo singoli e stabili per un set di pod. Agiscono come bilanciatori di carico di base. Maggiori informazioni sui servizi.

Le etichette vengono utilizzate per organizzare e selezionare gruppi di oggetti in base a coppie chiave: valore. Maggiori informazioni sulle etichette.

Quindi, hai un gruppo di macchine che formano un cluster in cui vengono eseguiti i contenitori. Puoi anche definire un gruppo di container che forniscono un servizio, in modo analogo a come fai con altri strumenti come fig (es: webapp pod può essere un server rails e un database postgres). Hai anche altri strumenti per garantire che un certo numero di container / pod di un servizio sia in esecuzione contemporaneamente, un archivio di valori-chiave, una sorta di bilanciamento del carico integrato ...

Se sai qualcosa sul coreos, è una soluzione molto simile ma di Google. Algo Kubernetes ha una buona integrazione con Google Cloud Engine.


2
Grazie @jcortejoso (+1) - tuttavia ho alcune domande di follow-up se non ti dispiace: (1) dici che Kubernetes è simile a CoreOS, ma da Google. Ciò implica che Kubernetes e CoreOS risolvono lo stesso problema. Ma dal [sito Web di Kubernetes] (), dice che puoi installare Kubernetes su CoreOS. Quindi che cos'è?!? Kubernetes è uguale a CoreOS o Kubernetes funziona su CoreOS e risolve un problema specifico?
smeeb,

1
Inoltre (2) non vedo ancora il valore nell'orchestrazione di Kubernetes qui. Afferma che puoi usare Kubernetes per definire un gruppo di contenitori che forniscono un servizio, il che mi fa chiedermi due cose separate: (2a) non potrei semplicemente fare questo tipo di clustering a livello di app e mettere la mia app dietro un bilanciamento del carico nginx? E (2b) è tutto ciò che c'è da "orchestrazione"? Per me, ancora una volta, sembra solo un bilanciamento del carico che potrebbe essere facilmente raggiunto a livello di app. Pensieri? Grazie ancora per la meravigliosa risposta!
smeeb,

1
Se kubernetes è "leggero", mi chiedo quale sarebbe la soluzione grassa.
Torsten Bronger

@smeeb Non ho molta familiarità con nginx (quindi perdona la mia ingenuità), ma non credo che nginx riavvierà un server che si è bloccato; e se un computer (o un intero datacenter) si arresta, nginx non riavvierà l'app su un altro computer. kubernetes ti assicurerà di mantenere sempre n numero di "pod" in esecuzione da qualche parte, e non importa dove o come.
kgreenek

10

Kubernetes offre le stesse funzionalità delle API Infrastruttura come servizio, ma si rivolge a contenitori pianificati in modo dinamico anziché a macchine virtuali e come sistemi Platform as a Service, ma con una maggiore flessibilità, tra cui:

  • montaggio di sistemi di stoccaggio,
  • distribuire segreti,
  • controllo dello stato delle applicazioni,
  • replicare istanze dell'applicazione,
  • ridimensionamento automatico orizzontale,
  • denominazione e scoperta,
  • bilancio del carico,
  • aggiornamenti continui,
  • monitoraggio delle risorse,
  • accesso al registro e ingestione,
  • supporto per introspezione e debug e
  • identità e autorizzazione.

Se utilizzi già altri meccanismi per l'individuazione del servizio, la distribuzione segreta, il bilanciamento del carico, il monitoraggio, ecc., Ovviamente puoi continuare a usarli, ma miriamo a semplificare la transizione a Kubernetes dai sistemi IaaS e PaaS esistenti fornendo questo funzionalità.

https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/#why-do-i-need-kubernetes-and-what-can-it-do

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.