
[Musica]
ciao a tutti, vi ringrazio tanto per essere venuti
al mio discorso sono super entusiasta di essere qui
e parliamo di dati distribuiti
negozi e kubernetes e alcuni
concetti di kubernetes che aiutano a farlo
più facile e di qualche altro piuttosto nuovo
cose distribuite interessate e
kubernetes I am Alina hall in cui vivo
Seattle Sono uno sviluppatore di cloud senior
difendere Microsoft lavorando su Azure
concentrandosi sui big data e distribuito
sistemi Mi piace molto anche provando
cose nuove e sperimentando cose
così come in questo discorso e come partenza
punto assumerò che tu sia in grado di
creare un cluster kubernetes ci sono
molti modi per farlo con diversi cloud
fornitori o dimensioni della macchina e altro
impostazioni che ho usato come contenitore
servizio come servizio alla comunità
creato con terraform per la mia installazione in
questo discorso ma se stai usando qualcosa
altrimenti non dovrebbe importare affatto
essere equivalente e lo saremo anche noi
usando Cassandra in questo discorso come un
esempio per coloro che non hanno lavorato
con Cassandra farò una breve
panoramica ma ho un blog più approfondito
postare su di esso e lo condividerò più tardi
alla fine del discorso un’altra cosa tu
probabilmente avrà bisogno anche di coraggio o a
senso di avventura
perché combinando tecnologia come
kubernetes e qualcosa come Cassandra
un sistema che richiede stabilità
persistenza che potrebbe non sembrare
tutti sarebbero immediatamente disponibili
per fare questo senza pensare
conseguenze quindi quando parliamo di dati
e database sono probabilmente uno di
le parti più importanti di qualsiasi sistema
e non vorremmo trattare con nessuno
perdita di dati o trascorrere ore di recupero da
un errore che può causare significativi
quantità di denaro quindi in genere non lo farei
utilizzare la tecnologia in produzione a meno che
Sono sicuro al 100%
probabilmente non è possibile essere al 100%
fiducioso in tutto tranne che in generale
messaggio è che se non si è sicuri
abbastanza e se il sistema come database
il sistema che stai usando funziona bene quando
macchine fisiche o macchine virtuali o
qualsiasi altra cosa e poi quello potrebbe essere un
buon modo per andare ma questo discorso non lo è
di questo parleremo di
contenitori e kubernetes e come può
renderlo sempre più veloce e più veloce
farlo funzionare, ma non lo farà
gestione quotidiana molto semplificata
e operazioni sul tuo cluster di database
quindi ora parliamo di perché e quando
potrebbe essere una buona idea di flessibilità e
possibilità che potrebbero essere gli occhi nativi
in realtà hanno provato a portare a
portare a un servizio di kubernetes più frequente
implementazioni ne riduce anche alcune
sforzi operativi che devono essere messi
nel recupero dei singoli servizi e
automatizza molte operazioni comuni a
sostenere una vita sana di servizi e
è generalmente abbastanza conveniente da gestire
più servizi complessivamente, quindi cos’è
il vantaggio dell’esecuzione di una versione distribuita
database su Kubernetes bene potrebbe
impiega molto tempo per impostare correttamente il tuo
sistema di database che utilizza macchine fisiche
o macchine virtuali e una volta ottenuto
installato e funzionante molto probabilmente
lasciarlo attivo e funzionante e non lo farebbe
voglio pasticciarlo se stiamo pensando
su containerizzato nel nostro database
distribuzione è molto veloce e facile da
metterlo in esecuzione in modo che non avrà
per tenerlo lì quando è inutilizzato
richiede solo pochi minuti per distribuirlo
e di distruggerlo quindi è perfetto per
Cluster di test Devin ma ci sono
aziende che usano kubernetes per
database in produzione oggi anche così
ecco un piano di parlare parecchie cose
per coprire ma prima prima di tutto lo so
che alcuni di voi potrebbero averne un po ‘
conoscenza di Cassandra e
soprattutto dopo il discorso di Eric, ma se così fosse
non ce l’ho, farò un breve e
rapido aggiornamento quindi andrebbe
Cassandra Cassandra è molto potente
database distribuito è molto altamente
disponibile scalabile davvero bene è un
Sistema AP in termini di teorema cap e
essere più specifici
usa un cluster di topologia ad anello per cui quando
i nuovi dati arrivano già al cluster
sa quale nodo di mettere l’entrata in
perché ogni nodo nel cluster è
responsabile di specifici hash limitati
vanno dall’anello del cerchio hash generale
e anche in base alla chiave di partizione di
i dati sappiamo quale nodo è
responsabile di questi dati, ma la maggior parte
probabilmente l’ inserimento dei dati sarà archiviato
più di un nodo se la replica
il fattore è più di uno è anche a
sistema altamente disponibile che è
senza padrone e tutti i nodi possono agire come a
coordinatore per esempio se ce n’è
richiesta di inserimento dati che è memorizzata su
nodo a che è arrivato attraverso il nodo B e
se il nodo uovo è andato giù su di noi in modo imprevisto
allora il nodo B memorizzerebbe la richiesta con
modifiche necessarie nella sua tabella dei suggerimenti e
non appena il nodo a ritorna al nodo
B saprà trovare un circa il
chiedere così anche se Cassandra è un
Sistema AV non significa che siamo sempre
dobbiamo sacrificare la coerenza che possiamo
anche ottimizzare la coerenza per query
livello in modo che la regola generale che abbiamo per
query coerenti è il quorum di scrittura plus
3 forum dovrebbe essere più di un
fattore di replicazione e l’importante
la cosa è che possiamo ottenere molto velocemente
legge se interrogiamo per chiave di partizione
perché tutti i dati sono memorizzati sul
lo stesso insieme allo stesso livello
fisicamente così
sì i diritti sono piuttosto veloci perché loro
sono scritti in due immutabili append-only
permesso log e anche al comune
struttura familiare chiamata tabella mem che
risiede nella memoria e quando arriva
pieno lampeggia su disco in un formato
chiamato
Tabella SS e siamo troppi tavoli SS
vengono compattati in SS più grandi
il tavolo è un’intuizione piuttosto buona
su ciò che ora è Cassandra Kubernetes
è un sistema distribuito per correre di più
sistemi distribuiti containerizzati I
direi alcune delle caratteristiche che esso
fornisce la nostra pianificazione e risorse
gestione
scaling Robux segreti di auto-guarigione
esecuzione di lavori di scoperta di servizi e
più ha anche un concetto di nodi e
Il nodo pod non è stato creato da
kubernetes è creato esternamente come
cercando di utilizzare il cloud Oracle di Azure su
fornire i nodi ma è un oggetto dentro
kubernetes e kubernetes ne fanno alcuni
controlla per assicurarsi che quel nodo sia valido
e ogni nodo ha servizi necessari per
eseguire pod e ci sono alcuni gestiti lì
alcuni componenti di gestione sono così
servizi sconosciuti includono cubelet che
controlla che i contenitori stiano correndo
e sano c’è un runtime continuo
come docker e cubo proxy per
inoltro di connessioni in modo che i nodi possano avere
uno o più pod in esecuzione e pod è un
gruppo di uno o più contenitori che è
in pratica l’unità più semplice che puoi
distribuire su kubernetes può avere un IP
indirizzo o volumi allegati è solo un
modo semplice per eseguire il tuo contenitore così
i nodi possono anche essere nodi principali e così via
quando inviamo le nostre definizioni di risorse
che è come un file giallo o un JSON
file o attraverso i grafici home in sostanza noi
avere un server API che attende la lettura
e scrivere richieste
e il ciclo di controllo che controlla guarda
lo stato corrente del cluster nel
stato desiderato e porta lo stato attuale
allo stato desiderato e c’è a
scheduler che guarda i pod che non lo fanno
non hanno progettato e li assegna al
nodo e come Eric ha detto che c’è
CD che è la chiave altamente disponibile
value store per i dati del cluster ora un pod
da soli sono piuttosto deboli comunque
sono perfetti per costruire
altre astrazioni e kubernetes per
distribuzioni di esempio o set di repliche
che è un’astrazione in baccelli che
manterrà sempre un certo numero di pod
funzionante in ogni momento se qualcosa va
sbagliato con un pod che creerà
un altro che è grande per i servizi
è bello ma non sono pensati contenitori
essere effimero e usato per gli apolidi
servizi standard di contenitori tipo di sono
significava essere apolidi ed effimeri
non dimenticherà i tuoi dati in caso di
riavvio o un errore, quindi non è un bene
idea di salvare qualsiasi cosa per il sistema
ha bisogno di persistenza su di loro ora come fa
questo ci fa bene se vogliamo correre
database distribuiti quindi perché quelli
sono sicuramente un sistema che ha bisogno di stabilità
persistenza guardiamo cos’altro era
qui fuori
Ho detto che i pod possono avere volumi
allegato in modo che un volume possa memorizzare dati ma
la durata del volume è limitata da
la vita del pod che lo possiede
il volume in realtà sopravvive ai contenitori
entro i baccelli del contenitore ricomincia
i dati non andrebbero persi kubernetes
supporta molti tipi di volumi e tu
può attaccare molti di loro a un pod
quindi cosa succede se proviamo distribuzioni o
contenitori replicati con volumi se noi
guardalo un po ‘oltre, lo notiamo
avere volumi non è abbastanza per
qualsiasi database distribuito perché lì
sono alcune ipotesi che devono essere
fatto
sui nodi del cluster di database prima
in realtà creiamo il cluster così alcuni
dei nodi dovrebbero essere dovrebbero avere ruoli
come un seguace del leader o potremmo avere
qualche naso designato come nodi seme e
abbiamo bisogno che siano così individuabili
i contenitori standard non sono persistenti
anche combinato con volumi di kubernetes
ci sono alcuni problemi che abbiamo notato
con cui iniziano i baccelli
nomi non deterministici e casuali che
non sono abbastanza prevedibili e loro
iniziare in ordine casuale imprevedibile
stesso con cancellazione e terminazione e
ridimensionamento in modo che non possiamo davvero fare quelli
ipotesi di sistema distribuito così
gli insiemi di repliche con i volumi non funzioneranno
noi
hmm quindi prima di creare il database
cluster dobbiamo averne certi
garanzie circa i nodi di database che
dovrebbe avere nomi individuabili di cui hanno bisogno
per iniziare in ordine prevedibile per noi e
hanno bisogno di avere archiviazione persistente così
diamo un’occhiata a un altro rampicante più pulito
concetto che aiuta a renderlo possibile
si chiama stateful set straight hole
i set sono simili ai precedenti
distribuzioni in un modo che loro sempre
mantenere un certo numero di pod di repliche
correndo ma sono diversi perché
hanno un’identità quindi ogni baccello lo farà
iniziare con una rete unica e stabile
identificatore che avrà stabile e
archiviazione persistente allegata e lì
sarà un collegamento persistente dal pod a
archiviazione e tutti i pod in
anche il set di stato inizia nello stesso modo
ordina e finisci al contrario
ordine e viene conservato così se guardiamo
alla possibile architettura dell’uso
set di stati con, diciamo, Cassandra
e kubernetes potrebbe sembrare qualcosa
come questo dove abbiamo Cooper Natives
abbiamo alcuni baccelli ascendenti ciascuno di loro
ha indice ordinale
e ognuno di essi ha una memoria persistente
in allegato ora in realtà scompattiamo il
definizione di un set di stati che conosciamo
cosa garantisce ma cosa fa cosa
è davvero così inizia con a
servizio senza testa questo è un tipo di
servizio che è chiamato senza testa perché
non ha bisogno di un cluster IP disponibile
e non eseguiamo alcun bilanciamento del carico con
la definizione del servizio ha un selettore
e quando si accede al servizio il DNS
è configurato fondamentalmente per restituire una lista
di un record o indirizzi che puntano
direttamente a quei baccelli che hanno il
stesso selettore e abbiamo bisogno per gestire
l’identità di rete per quelli stateful
baccelli per creare un servizio senza testa noi
per esempio, ad esempio, possiamo usare Cassandra a
modello simile che definisce un tipo
servizio e definisce che l’ IP del cluster è
nessuno etichettato per Sandra e il porto 1942
quindi ora parliamo del reale
archiviazione per un senso stateful quando pod
nello stato ha detto di aver creato ciascuno di
Richiedono una memoria per la richiesta di archiviazione
la classe è un altro concetto di kubernet che
aiuta gli utenti a scegliere tra i tipi di
archiviazione disponibile per il cluster lì
sono essi potrebbero essere diverse a seconda
l’ambiente e l’infrastruttura
per esempio stai facendo scorrere l’olio in modo così azzurro
fornisce i tuoi dischi e i tuoi file
potrebbero essere diversi dai prezzi
prospettiva come standard o premium
riuscito a correre gestito si può anche
crea le tue classi di memoria se
necessario potrebbe sembrare qualcosa del genere
dove abbiamo un modello con definizione
di una classe di archiviazione e definiamo il
fornire o digitare tipo di archiviazione dell’account
e altri parametri
quindi sappiamo che gli utenti possono scegliere la memoria
in base alle classi di archiviazione e a ciascuna di esse
pod nel palco di Cassandra si imposterà
inizializzato come richiede effettivamente
quella memoria quindi ci sono persistenti
volumi e possono essere forniti
qui staticamente o dinamicamente
stiamo parlando di provisioning dinamico
e con lo stato di provisioning dinamico impostato
ha una definizione di volume persistente
affermare che è una richiesta di archiviazione
dopo che la richiesta ha avuto esito positivo
il volume persistente è dinamico
fornito per ciascun pod in base a
la classe di archiviazione che ha richiesto a
la richiesta di volume persistente è una specie di
simile a un pod nel contesto del pod
richiede risorse di nodi come la memoria
quantità e cose come questa e
richieste di richieste di volume persistenti
risorse di volume persistenti come dimensioni o
modalità di accesso e crea persistente
volumi che fornisce un’API per gli utenti
e gli amministratori in realtà astratti
i dettagli i dettagli sottostanti di
l’ implementazione dello storage via
dagli utenti e da come viene consumato
questo è molto conveniente così persistente
i volumi sono come volumi ma i loro
il ciclo di vita è indipendente da a
ciclo di vita del baccello così ora diamo un’occhiata
alla storia del volume persistente e a
richiesta di volume persistente quindi immaginiamo noi
avere un set di stati e c’è un primo
pod inizializzato e questo pot ha
una definizione di un volume persistente
reclamo con un certo tipo di archiviazione e
dice che sto richiedendo il mio archivio basato su
la classe di archiviazione quindi c’è a
Provvisorio dinamico per cui monitorare
affermazioni persistenti sul volume che sono
quindi non associato a nessun volume persistente
creerà un nuovo volume persistente
basato sul personaggio
bastoni e in base alla classe di archiviazione
che il pod ha richiesto e dopo
il reclamo relativo al volume persistente finirà
nello stato legato e il pod sarà
allegato a quel volume ora diamo un’occhiata
alla definizione attuale di uno stato
è abbastanza grande qui, ma il principale
parte c’è una richiesta di volume parziale
modelli che descrivono il volume
rivendicare il nome della classe di archiviazione in modalità accesso
la risorsa è richiesta ce ne sono alcuni
numero di parametri specifici standard di
repliche e anche alcuni nodi seme e
diamo un’occhiata a un esempio di come
in realtà creare un set di stato il
il vero processo di distribuzione così ho fatto
per prima cosa un po ‘più veloce possiamo creare un
servizio senza testa utilizzando il cubo CTL
creare il comando, quindi dopo averlo fatto
stanno creando set stateful da quello
definizione del modello quindi dopo è
creato possiamo monitorare lo stato del
set di stati usando i set di stati get
comando e vediamo che ce n’è uno per
Cassandra ricorda le repliche desiderate
come cinque corrente è uno che è in sospeso
questo significa che possiamo descrivere il pod e
guarda cosa sta succedendo e lo vediamo
v’è una richiesta di volume persistente
in realtà non è obbligato a vedere cosa c’è
andando avanti con il volume persistente
affermiamo che possiamo usare il cubo CTL ancora in PVC
comando e qui è un nuovo persistente
il reclamo del volume in uno stato in sospeso che possiamo
naturalmente ottenere maggiori dettagli sul
Resistibile e affermare che è essere
creato se lo descriviamo
e vediamo che sta usando il nostro
premio gestito di classe di memoria designato
in sospeso di tipo disco di Azure , quindi se vogliamo
per vedere i dettagli sulla memoria
classe che le nostre richieste di risarcimento vedranno
che il nostro gruppo ha il seguente
disponibile e possiamo guardare ancora oltre
nella definizione della classe di memoria
se usiamo la classe di archiviazione descritta
comando e fondamentalmente ha l’ intero
definizione di quel nome di classe di memoria
provisioning ID account di archiviazione spazio così
ricontrolliamo come sono i baccelli
facendo ottenere i pod che il contenitore sta creando
e questo significa che il nostro persistente
la richiesta di volume è probabilmente già vincolata
ed è legato ciò significa che c’è
un volume persistente creato e non c’è
un comando ancora TV in cui mostra il
volumi persistenti e sicuramente vincolati
e fondamentalmente quello che possiamo fare è monitorare
baccelli per la creazione finché non avremo il
numero esatto di repliche che ci aspettiamo
quindi ecco un altro in attesa che siano
andando a essere creato uno per uno nel
ordine in linea di fondo e possiamo anche
guarda quanto sono persistenti le dichiarazioni sul volume
creato così come si trasferisce da in sospeso
stato a stato legato ora abbiamo bisogno
fondamentalmente cinque di loro e l’ho fatto a
un po ‘ più veloce ma puoi vedere per quanto tempo
serve per il provisioning
volumi persistenti se lo sono già
creato e uno dei pod viene rimosso
o qualcosa succede con esso per caso
allora sarà più veloce perché il
i volumi persistenti sono già stati creati
e dovrà solo essere allegato e
finalmente dovremmo avere tutti e quattro i
di loro
correndo basta prendere un secondo così quattro di
loro stanno correndo e possiamo solo confermare
ottenendo lo stato dell’intero
lo stato imposterà il numero desiderato e cinque
la corrente è cinque quindi una delle opzioni per
sperimentare con Cassandra e Kubernetes
senza inviare alcun servizio è a
creare un servizio di tipo load balancer
e questo esporrà un indirizzo IP
possiamo raggiungere il nostro stadio è stato impostato da esso
buono per interagire con gli esperimenti
ma non è bello lasciarlo aperto così
scriviamo solo i dati su Cassandra
quindi ti mostrerò un esempio con
utilizzando la mia macchina per scrivere dati su
Cassandra e Kubernetes quindi ho deciso di farlo
usa alcuni dati pubblici e perché vivo
a Seattle ho ottenuto un set di dati di apertura
indirizzi e sto andando a tipo di
attualmente li scrivo in Cassandra a
basta testare questo set di dati così ho intenzione di farlo
utilizzare una programmazione funzionale nitida
lingua e CLI interattiva perché
è comodo e perché non fare in modo che
eccomi nel mio ambiente di codice
importando alcune librerie e qui ho
una definizione del tipo per il CSV
file sto usando quattro indirizzi che deduce
il tipo dai dati e poi io sono
ottenere gli indirizzi e inizializzare
funzione per connettersi al cluster Cassandra
per creare due uno spazio chiave che sto andando
da usare per il mio tavolo e una funzione
inizializzare la tabella e un mucchio di
altre funzioni di cui ho bisogno per scrivere
i dati in modo parallelo e poi io sono
utilizzando l’ indirizzo IP esterno per connettersi
a Cassandra e ottenere la sessione in modo che
Posso effettivamente eseguire quelle funzioni
sono te
creare alloggi che si trova di fronte a questo
sessione che crea la tabella degli indirizzi in
Casandra e poi chiamando la funzione
per mantenere gli indirizzi in parallelo e
solo prendendo i primi 100 solo il nostro test
e dovrebbe scriverli tutti in parallelo
Spero che funzioni ed è funzionante
e lo ha fatto ora che possiamo farlo
cosa simile con i lavori di Kubernetes che
è un altro concetto che ci consente di iniziare
i pod e li eseguono fino al completamento anche
configurare determinati parametri come
riavviare i limiti delle risorse della politica e altro
cose e possiamo creare tante
kubernetes lavori come vogliamo e come nostri
le risorse del cluster di kubernetes lo consentono
torniamo al che gli indirizzi esempio
e dove scriviamo i dati in Cassandra
e prova a farlo funzionare con kubernetes
lavori quindi ecco un file di definizione del lavoro
dove sono e questo fondamentalmente confezionato
il mio script di sherab in un contenitore e
fatto accettare tre parametri perché
stiamo scrivendo dati in Cassandra in
parallelamente volevamo fondamentalmente dividere
dati e blocchi e scrivere e avere ciascuno
lavoro per una parte quindi sto usando il
contenitore si chiama lavoro f-sharp e
Sto indicando il comando per eseguirlo
script con i parametri corretti che
accetta il numero di offset dei record su
processo e incremento se vogliamo anche
utilizzare una concorrenza continua opzionalmente ora
come possiamo inviare input diversi
parametri per ciascun lavoro corrispondente
beh, Bash è la risposta che sto definendo
alcune variabili per impostare il passo del conteggio del lavoro
e incrementare e sto usando quello sharp
modello di lavoro da popolare per crearne molti
file ma con i parametri corretti
popolata
così bello vediamo come funziona in azione
lasciami andare al mio codice qui sono acuto okay
così io sono residente nella directory di quel
progetto e qui è un F affilato lavoro yamo
file lo stesso che ho mostrato in precedenza e
ecco lo script dei lavori preparati che
esegue la creazione di file di lavoro e
quello che vogliamo fare è voler eseguire
che prepara i lavori
script che crea molti file e noi
può vedere che c’è una directory di lavori
e se ci navighiamo lo vediamo
quelli sono i modelli di lavoro reali che
dobbiamo usare quindi diamo un’occhiata a uno di
loro come sette ok così e qui notiamo
che ci sono tre parametri
popolato con i dati corretti utilizzati
l’immagine del contenitore finalmente da inviare
quei lavori che possiamo usare cubi video creati
nuovi lavori
in questo comando creerà tutto il
altri lavori da quella directory di lavori ora
possiamo controllare lo stato dei lavori usando
il comando get job lo vediamo lì
sono dieci di loro tutti hanno successo
significa che stanno tutti correndo e non lo sono
successo ancora perché non lo sono
completato ancora ma cosa succede sotto il
cappa è che ogni lavoro crea un baccello e
vediamo che ci sono dieci creatori di pod
e stanno correndo possiamo sempre guardare
in ciò che sta accadendo nel pod e
ottenerlo per nome e si vede che si tratta di
creato dall’immagine che era
indicato nel file del modello ma noi
puoi anche vedere cosa sta facendo il piatto
in tempo reale e monitorare lo stato del nostro
lavoro oh whoops non ho copiato il nome
otteniamo correttamente un pod casuale
oh è completato, quindi possiamo ancora guardare
ai registri anche dopo il lavoro
completato e qui vediamo l’output di
il lavoro ma finalmente lo stato dei lavori
è visibile qui e se non abbiamo bisogno
loro più possiamo sempre cancellare tutti
loro e questo è come funziona così ora
torniamo alle diapositive e
sì e tra l’altro il codice per questo
l’esempio è su github dopo la nostra coda di lavoro
se vuoi provarlo su o
controlla le cose da notare sui set di stati
i volumi persistenti non sono automaticamente
rimosso quando si rimuove un set stateful
è fatto apposta nel caso qualcosa
succede alla stalla che non lo farai
perdere tutti i tuoi dati e persistente
i volumi per ora e le serie stateful erano a
risorsa migliore e prima dei kubernetes
1.9 ora sono fuori e alcune persone usano
in produzione e prima di considerare
usandolo in produzione, per favore, passa attraverso
problemi github che esistono e assicurati
che non ci sono problemi critici lì
quindi c’è anche un concetto di nodo
affinità che Eric ha menzionato durante il suo
parlare che significa che possiamo dire quale
i pod possono essere eseguiti con altri pod sullo stesso
nodo e altre impostazioni flessibili così
c’è molta flessibilità in questo
come sai andiamo un po ‘
argomento diverso ma è ancora molto
simili possiamo eseguire lavori scintilla su
kubernetes dalla versione 2.3 e II
ho deciso di provarlo con Cassandra
Kubernetes quindi qualcuno ha sentito parlare di scintilla
amico sa cosa SPARC va bene piuttosto a
poche persone quindi SPARC è una fonte aperta
progetto per calcoli distribuiti esso
è simile a Duke MapReduce ma
è molto più veloce cerca di conservare i dati
in memoria forma un aciclico diretto
grafico del calcolo consecutivo
fasi e consente di ottimizzare i dati
operazioni e come minimizzare lo shuffling
dati in giro e altre cose che puoi fare
stream processing machine learning
attività di ETL sulla scienza dei dati e altro ancora
i lavori di scintilla solitamente sono presentati è
utilizzando il comando spark invia riga di comando
dove possiamo passare un file jar o Python
archivio e quindi sì così in precedenza tu
può correre si potrebbe far scoccare sulla risorsa
manager come filato o mezzos ma come me
menzionato dal rilascio 2.0 lo è
supportato su kubernetes come schedulatore
quindi quando si invia effettivamente un
applicazione al cluster con scintilla
presentare che saranno un coordinatore
processo chiamato spark driver e
sta gestendo l’intero processo di lavoro
e parla con molti altri processi
che sono chiamati esecutori di scintilla che
che fanno il lavoro fornito da un lavoro e
sono l’implementazione della fisarmonica
implementato come pod kubernetes così lo farò
mostraci un bell’esempio di scintilla da corsa
lavori su Kubernetes e utilizzo di Cassandra
scrivere alcuni dati e recuperarne alcuni
dati così prima che lo faccia ce ne sono alcuni
cose che ho fatto prima che io possa
effettivamente presentare un lavoro usando la scintilla
kubernetes quindi hai bisogno di un kubernetes
cluster ma è necessario anche creare un
scintilla immagine e che è possibile fare
se clonate un repo github di scintilla
seleziona il ramo 2.3 o successivo e tu
puoi costruire il sorgente usando Maven o SBT
se si passa l’interruttore kubernetes e
poi ci sono alcuni script di supporto che
aiutarti a costruire l’immagine della finestra mobile e
spingerlo al registro del contenitore di
la tua scelta che possiamo indicare quando noi
utilizzare un comando di invio scintilla in modo che
kubernetes sa quale contenitore usare
durante la corsa
baccelli di driver ed esecutore per scintilla così
e dobbiamo anche indicare la dipendenza
come gli archivi della dipendenza dal lavoro e nel
versione attuale di spark on kubernetes
non è possibile includere locale
file con comando di invio scintilla quindi il tuo
le dipendenze devono essere lontane
accessibile o preconfezionato nel
immagine del contenitore Ho provato entrambi in questo
esempio sto usando pre-costruito
dipendenze quindi la differenza è molto
piccolo devi solo aggiungere i due punti locali
Tagliare il prefisso della barra all’URL della dipendenza
quindi qual è la demo della demo
come un esempio pratico a volte tu
bisogno di determinare quali episodi di serie TV
per riapprezzare in base alle tue preferenze
Ad esempio, ha raccolto Game of Thrones
okay, quindi potresti avere un preferito
personaggio o una cosa preferita che è
discusso e ho un esempio in cui
puoi eseguire un lavoro e indicare il
parola chiave di tua preferenza vorrei scansionare
attraverso le sceneggiature di Game of Thrones
Stagione uno o tutte le stagioni e
costruire un modello di raccomandazione con
episodi classificati di ciò che di loro
si potrebbe desiderare di vedere prima e sono
usando Cassandra per salvare la ricerca
risultati se qualcuno già cercato
una parola chiave di preferenza quindi abbiamo solo
prendilo da Cassandra se nessuno lo ha
cercato la parola chiave che possiamo fare
scintilla il lavoro e calcola, quindi andiamo a
il codice e ti mostrerò di cosa si tratta
quindi questo è un progetto di Scala che ho
confezionato utilizzando l’ assembly SBT in a
file jar perché ho bisogno di un jar da inviare
usando la scintilla, ci sono alcuni
le dipendenze qui è una parola chiave che è
quello che ho citato e qui è un
informazioni di connessione per Cassandra
Cluster di Cassandra e sto usando solo il
parola Cassandra perché questo sta per
eseguire con il cluster di collegamento Kubernetes e tutti
il cluster di Cassandra è disponibile da
questo nome abbiamo uno spazio chiave che è
chiamato sicuro recommender e il tavolo
chiamato raccomandazioni di caricare il
scintilla contesto di collegamento a Cassandra
cluster e controllando se c’è già
informazioni per quella parola chiave se c’è
niente ci stiamo fondamentalmente guardando
alle sceneggiature del programma TV e
rimuovendo tutte le parole di arresto e la costruzione
un modello di conteggio vettoriale che direbbe
noi quali episodi abbiamo il più grande
occorrenze del riferimento curativo noi
indicato e finalmente lo scriviamo
informazioni su Cassandra e
chiudere tutte le connessioni così da fare
funziona ci sono alcune cose qui io
bisogno di avviare una società cubana questo proxy
in modo che io possa parlare con i Kubernetes usando
localhost e Here ho intenzione di eseguire il
scintille di comando medio ma prima di tutto io
è necessario definire una parola chiave, quindi qual è il tuo
il gioco preferito del personaggio dei troni da
la prima stagione
Tyrian non più favoriti okay okay così
stiamo definendo una variabile qui e qui
è un comando di invio scintilla
stiamo indicando la distribuzione dell’URL principale
cluster modus che indica la nostra classe
è responsabile per la funzionalità e
Ho la mia immagine di contenitore di scintilla che io
ho pre-costruito e incluso il mio barattolo in
ma sto aggiungendo anche il vaso per Sparky
Connettore Sandra e includendo il
parola chiave ora se iniziamo questo possiamo
inizia a guardare i pod kubernetes whoops
prendi i baccelli
quindi ecco un contenitore creato per il
driver e sta inizializzando ora se noi
guarda di nuovo qui è già in esecuzione così
questo significa che ci sono qui nel nostro caso
ci sono due pod esecutore creati per
scintilla che fa scoccare la scintilla e costruire
fuori il modello di raccomandazione così loro
sono stati inizializzati ma ora lo sono
correre e svolgere il lavoro e
finalmente vediamo qui il contenitore
è terminato nelle fasi riuscite così
vediamo che gli esecutori stanno terminando
ed i risultati sono in realtà sta per essere
raccolto sul driver che è in a
stato completato non sarà rimosso così
possiamo sempre controllare i log qui e
ecco i risultati
così gli episodi da guardare con raccomandata
Tyrion sono così questo è questo
fondamentalmente l’output e possiamo vedere alcuni
altre informazioni sul lavoro di scintilla
quindi se alla fine non ce ne saranno
baccelli dell’esecutore ma il driver rimarrà
rimani qui così ora torniamo al
scivoli
così sta facendo funzionare bene i kubernetes scintillanti
idea che potrebbe essere una buona idea per esempio
per un ambiente di prova o se lo vorrebbe
piace provare una versione personalizzata di
scintilla molto velocemente o se già
avere un cluster di kubernetes e tu hai
alcuni cicli di riserva che potresti desiderare
utilizzare per l’esecuzione di lavori scintilla o nel
a lungo termine se non si vuole veramente
avere troppi orchestratori, se tu
hanno già kubernetes e scintille
bene su Kubernetes basta usarlo
kubernetes dovrei eseguirlo in produzione
probabilmente non ancora perché è molto nuovo
ma andrà meglio e possiamo aiutare
rendilo migliore che ci sia attivo
sviluppo in corso in questo spazio e
si può ancora avere voce in capitolo su di esso, se si
voglio cambiare il modo in cui i lavori scintilla sono
sta per essere implementato su kubernetes
e un’altra nota importante è che lo è
abbastanza diverso dalla corsa a
scintilla autonoma su kubernetes così qui
non abbiamo davvero il master in giro
tutto il tempo questi sono nativi del cloud
scintilla di posti di lavoro in cui abbiamo solo driver e
Esecutori in esecuzione mentre il lavoro è
correndo dopo che il lavoro è stato completato
di tutte queste cose sono state completate
il conducente rimane in uno stato completato e
gli esecutori sono completamente terminati e
il codice per questo è qui che va
Scintilla di Cassandra se vuoi vedere come
funziona e ci sono alcune risorse
che potrebbe essere un utile post sul blog
L’ altro di Cassandra è stato un discorso che ho tenuto
sugli algoritmi di sistema distribuito I
avere un articolo sugli insiemi stabili e
tutte le demo sono in github
quindi spero che ti sia divertito sì e questo è
io sono Leyna hall una nuvola senior
sostenitore dello sviluppatore che lavora su Azure
precedentemente lavorato presso Microsoft Research
e prima ho vissuto in Europa e
ha lavorato a molti progetti legati al grande
sistemi di distribuzione dati anche funzionali
programmazione e apprendimento automatico e
questo è tutto vi ringrazio molto si può
seguimi su Twitter i miei DMS sono aperti per
qualsiasi domanda
[Applausi]
ciao a tutti, vi ringrazio tanto per essere venuti
al mio discorso sono super entusiasta di essere qui
e parliamo di dati distribuiti
negozi e kubernetes e alcuni
concetti di kubernetes che aiutano a farlo
più facile e di qualche altro piuttosto nuovo
cose distribuite interessate e
kubernetes I am Alina hall in cui vivo
Seattle Sono uno sviluppatore di cloud senior
difendere Microsoft lavorando su Azure
concentrandosi sui big data e distribuito
sistemi Mi piace molto anche provando
cose nuove e sperimentando cose
così come in questo discorso e come partenza
punto assumerò che tu sia in grado di
creare un cluster kubernetes ci sono
molti modi per farlo con diversi cloud
fornitori o dimensioni della macchina e altro
impostazioni che ho usato come contenitore
servizio come servizio alla comunità
creato con terraform per la mia installazione in
questo discorso ma se stai usando qualcosa
altrimenti non dovrebbe importare affatto
essere equivalente e lo saremo anche noi
usando Cassandra in questo discorso come un
esempio per coloro che non hanno lavorato
con Cassandra farò una breve
panoramica ma ho un blog più approfondito
postare su di esso e lo condividerò più tardi
alla fine del discorso un’altra cosa tu
probabilmente avrà bisogno anche di coraggio o a
senso di avventura
perché combinando tecnologia come
kubernetes e qualcosa come Cassandra
un sistema che richiede stabilità
persistenza che potrebbe non sembrare
tutti sarebbero immediatamente disponibili
per fare questo senza pensare
conseguenze quindi quando parliamo di dati
e database sono probabilmente uno di
le parti più importanti di qualsiasi sistema
e non vorremmo trattare con nessuno
perdita di dati o trascorrere ore di recupero da
un errore che può causare significativi
quantità di denaro quindi in genere non lo farei
utilizzare la tecnologia in produzione a meno che
Sono sicuro al 100%
probabilmente non è possibile essere al 100%
fiducioso in tutto tranne che in generale
messaggio è che se non si è sicuri
abbastanza e se il sistema come database
il sistema che stai usando funziona bene quando
macchine fisiche o macchine virtuali o
qualsiasi altra cosa e poi quello potrebbe essere un
buon modo per andare ma questo discorso non lo è
di questo parleremo di
contenitori e kubernetes e come può
renderlo sempre più veloce e più veloce
farlo funzionare, ma non lo farà
gestione quotidiana molto semplificata
e operazioni sul tuo cluster di database
quindi ora parliamo di perché e quando
potrebbe essere una buona idea di flessibilità e
possibilità che potrebbero essere gli occhi nativi
in realtà hanno provato a portare a
portare a un servizio di kubernetes più frequente
implementazioni ne riduce anche alcune
sforzi operativi che devono essere messi
nel recupero dei singoli servizi e
automatizza molte operazioni comuni a
sostenere una vita sana di servizi e
è generalmente abbastanza conveniente da gestire
più servizi complessivamente, quindi cos’è
il vantaggio dell’esecuzione di una versione distribuita
database su Kubernetes bene potrebbe
impiega molto tempo per impostare correttamente il tuo
sistema di database che utilizza macchine fisiche
o macchine virtuali e una volta ottenuto
installato e funzionante molto probabilmente
lasciarlo attivo e funzionante e non lo farebbe
voglio pasticciarlo se stiamo pensando
su containerizzato nel nostro database
distribuzione è molto veloce e facile da
metterlo in esecuzione in modo che non avrà
per tenerlo lì quando è inutilizzato
richiede solo pochi minuti per distribuirlo
e di distruggerlo quindi è perfetto per
Cluster di test Devin ma ci sono
aziende che usano kubernetes per
database in produzione oggi anche così
ecco un piano di parlare parecchie cose
per coprire ma prima prima di tutto lo so
che alcuni di voi potrebbero averne un po ‘
conoscenza di Cassandra e
soprattutto dopo il discorso di Eric, ma se così fosse
non ce l’ho, farò un breve e
rapido aggiornamento quindi andrebbe
Cassandra Cassandra è molto potente
database distribuito è molto altamente
disponibile scalabile davvero bene è un
Sistema AP in termini di teorema cap e
essere più specifici
usa un cluster di topologia ad anello per cui quando
i nuovi dati arrivano già al cluster
sa quale nodo di mettere l’entrata in
perché ogni nodo nel cluster è
responsabile di specifici hash limitati
vanno dall’anello del cerchio hash generale
e anche in base alla chiave di partizione di
i dati sappiamo quale nodo è
responsabile di questi dati, ma la maggior parte
probabilmente l’ inserimento dei dati sarà archiviato
più di un nodo se la replica
il fattore è più di uno è anche a
sistema altamente disponibile che è
senza padrone e tutti i nodi possono agire come a
coordinatore per esempio se ce n’è
richiesta di inserimento dati che è memorizzata su
nodo a che è arrivato attraverso il nodo B e
se il nodo uovo è andato giù su di noi in modo imprevisto
allora il nodo B memorizzerebbe la richiesta con
modifiche necessarie nella sua tabella dei suggerimenti e
non appena il nodo a ritorna al nodo
B saprà trovare un circa il
chiedere così anche se Cassandra è un
Sistema AV non significa che siamo sempre
dobbiamo sacrificare la coerenza che possiamo
anche ottimizzare la coerenza per query
livello in modo che la regola generale che abbiamo per
query coerenti è il quorum di scrittura plus
3 forum dovrebbe essere più di un
fattore di replicazione e l’importante
la cosa è che possiamo ottenere molto velocemente
legge se interrogiamo per chiave di partizione
perché tutti i dati sono memorizzati sul
lo stesso insieme allo stesso livello
fisicamente così
sì i diritti sono piuttosto veloci perché loro
sono scritti in due immutabili append-only
permesso log e anche al comune
struttura familiare chiamata tabella mem che
risiede nella memoria e quando arriva
pieno lampeggia su disco in un formato
chiamato
Tabella SS e siamo troppi tavoli SS
vengono compattati in SS più grandi
il tavolo è un’intuizione piuttosto buona
su ciò che ora è Cassandra Kubernetes
è un sistema distribuito per correre di più
sistemi distribuiti containerizzati I
direi alcune delle caratteristiche che esso
fornisce la nostra pianificazione e risorse
gestione
scaling Robux segreti di auto-guarigione
esecuzione di lavori di scoperta di servizi e
più ha anche un concetto di nodi e
Il nodo pod non è stato creato da
kubernetes è creato esternamente come
cercando di utilizzare il cloud Oracle di Azure su
fornire i nodi ma è un oggetto dentro
kubernetes e kubernetes ne fanno alcuni
controlla per assicurarsi che quel nodo sia valido
e ogni nodo ha servizi necessari per
eseguire pod e ci sono alcuni gestiti lì
alcuni componenti di gestione sono così
servizi sconosciuti includono cubelet che
controlla che i contenitori stiano correndo
e sano c’è un runtime continuo
come docker e cubo proxy per
inoltro di connessioni in modo che i nodi possano avere
uno o più pod in esecuzione e pod è un
gruppo di uno o più contenitori che è
in pratica l’unità più semplice che puoi
distribuire su kubernetes può avere un IP
indirizzo o volumi allegati è solo un
modo semplice per eseguire il tuo contenitore così
i nodi possono anche essere nodi principali e così via
quando inviamo le nostre definizioni di risorse
che è come un file giallo o un JSON
file o attraverso i grafici home in sostanza noi
avere un server API che attende la lettura
e scrivere richieste
e il ciclo di controllo che controlla guarda
lo stato corrente del cluster nel
stato desiderato e porta lo stato attuale
allo stato desiderato e c’è a
scheduler che guarda i pod che non lo fanno
non hanno progettato e li assegna al
nodo e come Eric ha detto che c’è
CD che è la chiave altamente disponibile
value store per i dati del cluster ora un pod
da soli sono piuttosto deboli comunque
sono perfetti per costruire
altre astrazioni e kubernetes per
distribuzioni di esempio o set di repliche
che è un’astrazione in baccelli che
manterrà sempre un certo numero di pod
funzionante in ogni momento se qualcosa va
sbagliato con un pod che creerà
un altro che è grande per i servizi
è bello ma non sono pensati contenitori
essere effimero e usato per gli apolidi
servizi standard di contenitori tipo di sono
significava essere apolidi ed effimeri
non dimenticherà i tuoi dati in caso di
riavvio o un errore, quindi non è un bene
idea di salvare qualsiasi cosa per il sistema
ha bisogno di persistenza su di loro ora come fa
questo ci fa bene se vogliamo correre
database distribuiti quindi perché quelli
sono sicuramente un sistema che ha bisogno di stabilità
persistenza guardiamo cos’altro era
qui fuori
Ho detto che i pod possono avere volumi
allegato in modo che un volume possa memorizzare dati ma
la durata del volume è limitata da
la vita del pod che lo possiede
il volume in realtà sopravvive ai contenitori
entro i baccelli del contenitore ricomincia
i dati non andrebbero persi kubernetes
supporta molti tipi di volumi e tu
può attaccare molti di loro a un pod
quindi cosa succede se proviamo distribuzioni o
contenitori replicati con volumi se noi
guardalo un po ‘oltre, lo notiamo
avere volumi non è abbastanza per
qualsiasi database distribuito perché lì
sono alcune ipotesi che devono essere
fatto
sui nodi del cluster di database prima
in realtà creiamo il cluster così alcuni
dei nodi dovrebbero essere dovrebbero avere ruoli
come un seguace del leader o potremmo avere
qualche naso designato come nodi seme e
abbiamo bisogno che siano così individuabili
i contenitori standard non sono persistenti
anche combinato con volumi di kubernetes
ci sono alcuni problemi che abbiamo notato
con cui iniziano i baccelli
nomi non deterministici e casuali che
non sono abbastanza prevedibili e loro
iniziare in ordine casuale imprevedibile
stesso con cancellazione e terminazione e
ridimensionamento in modo che non possiamo davvero fare quelli
ipotesi di sistema distribuito così
gli insiemi di repliche con i volumi non funzioneranno
noi
hmm quindi prima di creare il database
cluster dobbiamo averne certi
garanzie circa i nodi di database che
dovrebbe avere nomi individuabili di cui hanno bisogno
per iniziare in ordine prevedibile per noi e
hanno bisogno di avere archiviazione persistente così
diamo un’occhiata a un altro rampicante più pulito
concetto che aiuta a renderlo possibile
si chiama stateful set straight hole
i set sono simili ai precedenti
distribuzioni in un modo che loro sempre
mantenere un certo numero di pod di repliche
correndo ma sono diversi perché
hanno un’identità quindi ogni baccello lo farà
iniziare con una rete unica e stabile
identificatore che avrà stabile e
archiviazione persistente allegata e lì
sarà un collegamento persistente dal pod a
archiviazione e tutti i pod in
anche il set di stato inizia nello stesso modo
ordina e finisci al contrario
ordine e viene conservato così se guardiamo
alla possibile architettura dell’uso
set di stati con, diciamo, Cassandra
e kubernetes potrebbe sembrare qualcosa
come questo dove abbiamo Cooper Natives
abbiamo alcuni baccelli ascendenti ciascuno di loro
ha indice ordinale
e ognuno di essi ha una memoria persistente
in allegato ora in realtà scompattiamo il
definizione di un set di stati che conosciamo
cosa garantisce ma cosa fa cosa
è davvero così inizia con a
servizio senza testa questo è un tipo di
servizio che è chiamato senza testa perché
non ha bisogno di un cluster IP disponibile
e non eseguiamo alcun bilanciamento del carico con
la definizione del servizio ha un selettore
e quando si accede al servizio il DNS
è configurato fondamentalmente per restituire una lista
di un record o indirizzi che puntano
direttamente a quei baccelli che hanno il
stesso selettore e abbiamo bisogno per gestire
l’identità di rete per quelli stateful
baccelli per creare un servizio senza testa noi
per esempio, ad esempio, possiamo usare Cassandra a
modello simile che definisce un tipo
servizio e definisce che l’ IP del cluster è
nessuno etichettato per Sandra e il porto 1942
quindi ora parliamo del reale
archiviazione per un senso stateful quando pod
nello stato ha detto di aver creato ciascuno di
Richiedono una memoria per la richiesta di archiviazione
la classe è un altro concetto di kubernet che
aiuta gli utenti a scegliere tra i tipi di
archiviazione disponibile per il cluster lì
sono essi potrebbero essere diverse a seconda
l’ambiente e l’infrastruttura
per esempio stai facendo scorrere l’olio in modo così azzurro
fornisce i tuoi dischi e i tuoi file
potrebbero essere diversi dai prezzi
prospettiva come standard o premium
riuscito a correre gestito si può anche
crea le tue classi di memoria se
necessario potrebbe sembrare qualcosa del genere
dove abbiamo un modello con definizione
di una classe di archiviazione e definiamo il
fornire o digitare tipo di archiviazione dell’account
e altri parametri
quindi sappiamo che gli utenti possono scegliere la memoria
in base alle classi di archiviazione e a ciascuna di esse
pod nel palco di Cassandra si imposterà
inizializzato come richiede effettivamente
quella memoria quindi ci sono persistenti
volumi e possono essere forniti
qui staticamente o dinamicamente
stiamo parlando di provisioning dinamico
e con lo stato di provisioning dinamico impostato
ha una definizione di volume persistente
affermare che è una richiesta di archiviazione
dopo che la richiesta ha avuto esito positivo
il volume persistente è dinamico
fornito per ciascun pod in base a
la classe di archiviazione che ha richiesto a
la richiesta di volume persistente è una specie di
simile a un pod nel contesto del pod
richiede risorse di nodi come la memoria
quantità e cose come questa e
richieste di richieste di volume persistenti
risorse di volume persistenti come dimensioni o
modalità di accesso e crea persistente
volumi che fornisce un’API per gli utenti
e gli amministratori in realtà astratti
i dettagli i dettagli sottostanti di
l’ implementazione dello storage via
dagli utenti e da come viene consumato
questo è molto conveniente così persistente
i volumi sono come volumi ma i loro
il ciclo di vita è indipendente da a
ciclo di vita del baccello così ora diamo un’occhiata
alla storia del volume persistente e a
richiesta di volume persistente quindi immaginiamo noi
avere un set di stati e c’è un primo
pod inizializzato e questo pot ha
una definizione di un volume persistente
reclamo con un certo tipo di archiviazione e
dice che sto richiedendo il mio archivio basato su
la classe di archiviazione quindi c’è a
Provvisorio dinamico per cui monitorare
affermazioni persistenti sul volume che sono
quindi non associato a nessun volume persistente
creerà un nuovo volume persistente
basato sul personaggio
bastoni e in base alla classe di archiviazione
che il pod ha richiesto e dopo
il reclamo relativo al volume persistente finirà
nello stato legato e il pod sarà
allegato a quel volume ora diamo un’occhiata
alla definizione attuale di uno stato
è abbastanza grande qui, ma il principale
parte c’è una richiesta di volume parziale
modelli che descrivono il volume
rivendicare il nome della classe di archiviazione in modalità accesso
la risorsa è richiesta ce ne sono alcuni
numero di parametri specifici standard di
repliche e anche alcuni nodi seme e
diamo un’occhiata a un esempio di come
in realtà creare un set di stato il
il vero processo di distribuzione così ho fatto
per prima cosa un po ‘più veloce possiamo creare un
servizio senza testa utilizzando il cubo CTL
creare il comando, quindi dopo averlo fatto
stanno creando set stateful da quello
definizione del modello quindi dopo è
creato possiamo monitorare lo stato del
set di stati usando i set di stati get
comando e vediamo che ce n’è uno per
Cassandra ricorda le repliche desiderate
come cinque corrente è uno che è in sospeso
questo significa che possiamo descrivere il pod e
guarda cosa sta succedendo e lo vediamo
v’è una richiesta di volume persistente
in realtà non è obbligato a vedere cosa c’è
andando avanti con il volume persistente
affermiamo che possiamo usare il cubo CTL ancora in PVC
comando e qui è un nuovo persistente
il reclamo del volume in uno stato in sospeso che possiamo
naturalmente ottenere maggiori dettagli sul
Resistibile e affermare che è essere
creato se lo descriviamo
e vediamo che sta usando il nostro
premio gestito di classe di memoria designato
in sospeso di tipo disco di Azure , quindi se vogliamo
per vedere i dettagli sulla memoria
classe che le nostre richieste di risarcimento vedranno
che il nostro gruppo ha il seguente
disponibile e possiamo guardare ancora oltre
nella definizione della classe di memoria
se usiamo la classe di archiviazione descritta
comando e fondamentalmente ha l’ intero
definizione di quel nome di classe di memoria
provisioning ID account di archiviazione spazio così
ricontrolliamo come sono i baccelli
facendo ottenere i pod che il contenitore sta creando
e questo significa che il nostro persistente
la richiesta di volume è probabilmente già vincolata
ed è legato ciò significa che c’è
un volume persistente creato e non c’è
un comando ancora TV in cui mostra il
volumi persistenti e sicuramente vincolati
e fondamentalmente quello che possiamo fare è monitorare
baccelli per la creazione finché non avremo il
numero esatto di repliche che ci aspettiamo
quindi ecco un altro in attesa che siano
andando a essere creato uno per uno nel
ordine in linea di fondo e possiamo anche
guarda quanto sono persistenti le dichiarazioni sul volume
creato così come si trasferisce da in sospeso
stato a stato legato ora abbiamo bisogno
fondamentalmente cinque di loro e l’ho fatto a
un po ‘ più veloce ma puoi vedere per quanto tempo
serve per il provisioning
volumi persistenti se lo sono già
creato e uno dei pod viene rimosso
o qualcosa succede con esso per caso
allora sarà più veloce perché il
i volumi persistenti sono già stati creati
e dovrà solo essere allegato e
finalmente dovremmo avere tutti e quattro i
di loro
correndo basta prendere un secondo così quattro di
loro stanno correndo e possiamo solo confermare
ottenendo lo stato dell’intero
lo stato imposterà il numero desiderato e cinque
la corrente è cinque quindi una delle opzioni per
sperimentare con Cassandra e Kubernetes
senza inviare alcun servizio è a
creare un servizio di tipo load balancer
e questo esporrà un indirizzo IP
possiamo raggiungere il nostro stadio è stato impostato da esso
buono per interagire con gli esperimenti
ma non è bello lasciarlo aperto così
scriviamo solo i dati su Cassandra
quindi ti mostrerò un esempio con
utilizzando la mia macchina per scrivere dati su
Cassandra e Kubernetes quindi ho deciso di farlo
usa alcuni dati pubblici e perché vivo
a Seattle ho ottenuto un set di dati di apertura
indirizzi e sto andando a tipo di
attualmente li scrivo in Cassandra a
basta testare questo set di dati così ho intenzione di farlo
utilizzare una programmazione funzionale nitida
lingua e CLI interattiva perché
è comodo e perché non fare in modo che
eccomi nel mio ambiente di codice
importando alcune librerie e qui ho
una definizione del tipo per il CSV
file sto usando quattro indirizzi che deduce
il tipo dai dati e poi io sono
ottenere gli indirizzi e inizializzare
funzione per connettersi al cluster Cassandra
per creare due uno spazio chiave che sto andando
da usare per il mio tavolo e una funzione
inizializzare la tabella e un mucchio di
altre funzioni di cui ho bisogno per scrivere
i dati in modo parallelo e poi io sono
utilizzando l’ indirizzo IP esterno per connettersi
a Cassandra e ottenere la sessione in modo che
Posso effettivamente eseguire quelle funzioni
sono te
creare alloggi che si trova di fronte a questo
sessione che crea la tabella degli indirizzi in
Casandra e poi chiamando la funzione
per mantenere gli indirizzi in parallelo e
solo prendendo i primi 100 solo il nostro test
e dovrebbe scriverli tutti in parallelo
Spero che funzioni ed è funzionante
e lo ha fatto ora che possiamo farlo
cosa simile con i lavori di Kubernetes che
è un altro concetto che ci consente di iniziare
i pod e li eseguono fino al completamento anche
configurare determinati parametri come
riavviare i limiti delle risorse della politica e altro
cose e possiamo creare tante
kubernetes lavori come vogliamo e come nostri
le risorse del cluster di kubernetes lo consentono
torniamo al che gli indirizzi esempio
e dove scriviamo i dati in Cassandra
e prova a farlo funzionare con kubernetes
lavori quindi ecco un file di definizione del lavoro
dove sono e questo fondamentalmente confezionato
il mio script di sherab in un contenitore e
fatto accettare tre parametri perché
stiamo scrivendo dati in Cassandra in
parallelamente volevamo fondamentalmente dividere
dati e blocchi e scrivere e avere ciascuno
lavoro per una parte quindi sto usando il
contenitore si chiama lavoro f-sharp e
Sto indicando il comando per eseguirlo
script con i parametri corretti che
accetta il numero di offset dei record su
processo e incremento se vogliamo anche
utilizzare una concorrenza continua opzionalmente ora
come possiamo inviare input diversi
parametri per ciascun lavoro corrispondente
beh, Bash è la risposta che sto definendo
alcune variabili per impostare il passo del conteggio del lavoro
e incrementare e sto usando quello sharp
modello di lavoro da popolare per crearne molti
file ma con i parametri corretti
popolata
così bello vediamo come funziona in azione
lasciami andare al mio codice qui sono acuto okay
così io sono residente nella directory di quel
progetto e qui è un F affilato lavoro yamo
file lo stesso che ho mostrato in precedenza e
ecco lo script dei lavori preparati che
esegue la creazione di file di lavoro e
quello che vogliamo fare è voler eseguire
che prepara i lavori
script che crea molti file e noi
può vedere che c’è una directory di lavori
e se ci navighiamo lo vediamo
quelli sono i modelli di lavoro reali che
dobbiamo usare quindi diamo un’occhiata a uno di
loro come sette ok così e qui notiamo
che ci sono tre parametri
popolato con i dati corretti utilizzati
l’immagine del contenitore finalmente da inviare
quei lavori che possiamo usare cubi video creati
nuovi lavori
in questo comando creerà tutto il
altri lavori da quella directory di lavori ora
possiamo controllare lo stato dei lavori usando
il comando get job lo vediamo lì
sono dieci di loro tutti hanno successo
significa che stanno tutti correndo e non lo sono
successo ancora perché non lo sono
completato ancora ma cosa succede sotto il
cappa è che ogni lavoro crea un baccello e
vediamo che ci sono dieci creatori di pod
e stanno correndo possiamo sempre guardare
in ciò che sta accadendo nel pod e
ottenerlo per nome e si vede che si tratta di
creato dall’immagine che era
indicato nel file del modello ma noi
puoi anche vedere cosa sta facendo il piatto
in tempo reale e monitorare lo stato del nostro
lavoro oh whoops non ho copiato il nome
otteniamo correttamente un pod casuale
oh è completato, quindi possiamo ancora guardare
ai registri anche dopo il lavoro
completato e qui vediamo l’output di
il lavoro ma finalmente lo stato dei lavori
è visibile qui e se non abbiamo bisogno
loro più possiamo sempre cancellare tutti
loro e questo è come funziona così ora
torniamo alle diapositive e
sì e tra l’altro il codice per questo
l’esempio è su github dopo la nostra coda di lavoro
se vuoi provarlo su o
controlla le cose da notare sui set di stati
i volumi persistenti non sono automaticamente
rimosso quando si rimuove un set stateful
è fatto apposta nel caso qualcosa
succede alla stalla che non lo farai
perdere tutti i tuoi dati e persistente
i volumi per ora e le serie stateful erano a
risorsa migliore e prima dei kubernetes
1.9 ora sono fuori e alcune persone usano
in produzione e prima di considerare
usandolo in produzione, per favore, passa attraverso
problemi github che esistono e assicurati
che non ci sono problemi critici lì
quindi c’è anche un concetto di nodo
affinità che Eric ha menzionato durante il suo
parlare che significa che possiamo dire quale
i pod possono essere eseguiti con altri pod sullo stesso
nodo e altre impostazioni flessibili così
c’è molta flessibilità in questo
come sai andiamo un po ‘
argomento diverso ma è ancora molto
simili possiamo eseguire lavori scintilla su
kubernetes dalla versione 2.3 e II
ho deciso di provarlo con Cassandra
Kubernetes quindi qualcuno ha sentito parlare di scintilla
amico sa cosa SPARC va bene piuttosto a
poche persone quindi SPARC è una fonte aperta
progetto per calcoli distribuiti esso
è simile a Duke MapReduce ma
è molto più veloce cerca di conservare i dati
in memoria forma un aciclico diretto
grafico del calcolo consecutivo
fasi e consente di ottimizzare i dati
operazioni e come minimizzare lo shuffling
dati in giro e altre cose che puoi fare
stream processing machine learning
attività di ETL sulla scienza dei dati e altro ancora
i lavori di scintilla solitamente sono presentati è
utilizzando il comando spark invia riga di comando
dove possiamo passare un file jar o Python
archivio e quindi sì così in precedenza tu
può correre si potrebbe far scoccare sulla risorsa
manager come filato o mezzos ma come me
menzionato dal rilascio 2.0 lo è
supportato su kubernetes come schedulatore
quindi quando si invia effettivamente un
applicazione al cluster con scintilla
presentare che saranno un coordinatore
processo chiamato spark driver e
sta gestendo l’intero processo di lavoro
e parla con molti altri processi
che sono chiamati esecutori di scintilla che
che fanno il lavoro fornito da un lavoro e
sono l’implementazione della fisarmonica
implementato come pod kubernetes così lo farò
mostraci un bell’esempio di scintilla da corsa
lavori su Kubernetes e utilizzo di Cassandra
scrivere alcuni dati e recuperarne alcuni
dati così prima che lo faccia ce ne sono alcuni
cose che ho fatto prima che io possa
effettivamente presentare un lavoro usando la scintilla
kubernetes quindi hai bisogno di un kubernetes
cluster ma è necessario anche creare un
scintilla immagine e che è possibile fare
se clonate un repo github di scintilla
seleziona il ramo 2.3 o successivo e tu
puoi costruire il sorgente usando Maven o SBT
se si passa l’interruttore kubernetes e
poi ci sono alcuni script di supporto che
aiutarti a costruire l’immagine della finestra mobile e
spingerlo al registro del contenitore di
la tua scelta che possiamo indicare quando noi
utilizzare un comando di invio scintilla in modo che
kubernetes sa quale contenitore usare
durante la corsa
baccelli di driver ed esecutore per scintilla così
e dobbiamo anche indicare la dipendenza
come gli archivi della dipendenza dal lavoro e nel
versione attuale di spark on kubernetes
non è possibile includere locale
file con comando di invio scintilla quindi il tuo
le dipendenze devono essere lontane
accessibile o preconfezionato nel
immagine del contenitore Ho provato entrambi in questo
esempio sto usando pre-costruito
dipendenze quindi la differenza è molto
piccolo devi solo aggiungere i due punti locali
Tagliare il prefisso della barra all’URL della dipendenza
quindi qual è la demo della demo
come un esempio pratico a volte tu
bisogno di determinare quali episodi di serie TV
per riapprezzare in base alle tue preferenze
Ad esempio, ha raccolto Game of Thrones
okay, quindi potresti avere un preferito
personaggio o una cosa preferita che è
discusso e ho un esempio in cui
puoi eseguire un lavoro e indicare il
parola chiave di tua preferenza vorrei scansionare
attraverso le sceneggiature di Game of Thrones
Stagione uno o tutte le stagioni e
costruire un modello di raccomandazione con
episodi classificati di ciò che di loro
si potrebbe desiderare di vedere prima e sono
usando Cassandra per salvare la ricerca
risultati se qualcuno già cercato
una parola chiave di preferenza quindi abbiamo solo
prendilo da Cassandra se nessuno lo ha
cercato la parola chiave che possiamo fare
scintilla il lavoro e calcola, quindi andiamo a
il codice e ti mostrerò di cosa si tratta
quindi questo è un progetto di Scala che ho
confezionato utilizzando l’ assembly SBT in a
file jar perché ho bisogno di un jar da inviare
usando la scintilla, ci sono alcuni
le dipendenze qui è una parola chiave che è
quello che ho citato e qui è un
informazioni di connessione per Cassandra
Cluster di Cassandra e sto usando solo il
parola Cassandra perché questo sta per
eseguire con il cluster di collegamento Kubernetes e tutti
il cluster di Cassandra è disponibile da
questo nome abbiamo uno spazio chiave che è
chiamato sicuro recommender e il tavolo
chiamato raccomandazioni di caricare il
scintilla contesto di collegamento a Cassandra
cluster e controllando se c’è già
informazioni per quella parola chiave se c’è
niente ci stiamo fondamentalmente guardando
alle sceneggiature del programma TV e
rimuovendo tutte le parole di arresto e la costruzione
un modello di conteggio vettoriale che direbbe
noi quali episodi abbiamo il più grande
occorrenze del riferimento curativo noi
indicato e finalmente lo scriviamo
informazioni su Cassandra e
chiudere tutte le connessioni così da fare
funziona ci sono alcune cose qui io
bisogno di avviare una società cubana questo proxy
in modo che io possa parlare con i Kubernetes usando
localhost e Here ho intenzione di eseguire il
scintille di comando medio ma prima di tutto io
è necessario definire una parola chiave, quindi qual è il tuo
il gioco preferito del personaggio dei troni da
la prima stagione
Tyrian non più favoriti okay okay così
stiamo definendo una variabile qui e qui
è un comando di invio scintilla
stiamo indicando la distribuzione dell’URL principale
cluster modus che indica la nostra classe
è responsabile per la funzionalità e
Ho la mia immagine di contenitore di scintilla che io
ho pre-costruito e incluso il mio barattolo in
ma sto aggiungendo anche il vaso per Sparky
Connettore Sandra e includendo il
parola chiave ora se iniziamo questo possiamo
inizia a guardare i pod kubernetes whoops
prendi i baccelli
quindi ecco un contenitore creato per il
driver e sta inizializzando ora se noi
guarda di nuovo qui è già in esecuzione così
questo significa che ci sono qui nel nostro caso
ci sono due pod esecutore creati per
scintilla che fa scoccare la scintilla e costruire
fuori il modello di raccomandazione così loro
sono stati inizializzati ma ora lo sono
correre e svolgere il lavoro e
finalmente vediamo qui il contenitore
è terminato nelle fasi riuscite così
vediamo che gli esecutori stanno terminando
ed i risultati sono in realtà sta per essere
raccolto sul driver che è in a
stato completato non sarà rimosso così
possiamo sempre controllare i log qui e
ecco i risultati
così gli episodi da guardare con raccomandata
Tyrion sono così questo è questo
fondamentalmente l’output e possiamo vedere alcuni
altre informazioni sul lavoro di scintilla
quindi se alla fine non ce ne saranno
baccelli dell’esecutore ma il driver rimarrà
rimani qui così ora torniamo al
scivoli
così sta facendo funzionare bene i kubernetes scintillanti
idea che potrebbe essere una buona idea per esempio
per un ambiente di prova o se lo vorrebbe
piace provare una versione personalizzata di
scintilla molto velocemente o se già
avere un cluster di kubernetes e tu hai
alcuni cicli di riserva che potresti desiderare
utilizzare per l’esecuzione di lavori scintilla o nel
a lungo termine se non si vuole veramente
avere troppi orchestratori, se tu
hanno già kubernetes e scintille
bene su Kubernetes basta usarlo
kubernetes dovrei eseguirlo in produzione
probabilmente non ancora perché è molto nuovo
ma andrà meglio e possiamo aiutare
rendilo migliore che ci sia attivo
sviluppo in corso in questo spazio e
si può ancora avere voce in capitolo su di esso, se si
voglio cambiare il modo in cui i lavori scintilla sono
sta per essere implementato su kubernetes
e un’altra nota importante è che lo è
abbastanza diverso dalla corsa a
scintilla autonoma su kubernetes così qui
non abbiamo davvero il master in giro
tutto il tempo questi sono nativi del cloud
scintilla di posti di lavoro in cui abbiamo solo driver e
Esecutori in esecuzione mentre il lavoro è
correndo dopo che il lavoro è stato completato
di tutte queste cose sono state completate
il conducente rimane in uno stato completato e
gli esecutori sono completamente terminati e
il codice per questo è qui che va
Scintilla di Cassandra se vuoi vedere come
funziona e ci sono alcune risorse
che potrebbe essere un utile post sul blog
L’ altro di Cassandra è stato un discorso che ho tenuto
sugli algoritmi di sistema distribuito I
avere un articolo sugli insiemi stabili e
tutte le demo sono in github
quindi spero che ti sia divertito sì e questo è
io sono Leyna hall una nuvola senior
sostenitore dello sviluppatore che lavora su Azure
precedentemente lavorato presso Microsoft Research
e prima ho vissuto in Europa e
ha lavorato a molti progetti legati al grande
sistemi di distribuzione dati anche funzionali
programmazione e apprendimento automatico e
questo è tutto vi ringrazio molto si può
seguimi su Twitter i miei DMS sono aperti per
qualsiasi domanda
[Applausi]
Please follow and like us: