
Deklica na skuterju. Ilustracija , logotip Nomad od
Kubernetes je 300-kilogramska gorila za orkestracijo kontejnerjev. Deluje v nekaterih največjih sistemih kontejnerjev na svetu, vendar je precej draga.
Zlasti draga za majhne ekipe, ki bodo morale porabiti veliko časa za vzdrževanje in strmo učno krivuljo. Za našo ekipo štirih članov je to preveč stroškov. Zato smo začeli iskati alternative in se zaljubili v .
Kaj potrebujemo
Naša ekipa podpira vrsto običajnih storitev za spremljanje in analizo delovanja: API končne točke za metrike napisane v Go, izvoz Prometheus, analizo logov, kot je Logstash in , ter baze podatkov, kot so InfluxDB ali Elasticsearch. Vsaka od teh storitev deluje v svojem kontejnerju. Potrebujemo preprost sistem, da vse to ohranimo v delovnem stanju.
Začeli smo s seznamom zahtev za orkestracijo kontejnerjev:
- Zagon niza storitev na več strojih.
- Pregled zagnanih storitev.
- Povezave med storitvami.
- Samodejno ponovno zagon, če storitev ne deluje.
- Vzdrževanje infrastrukture z majhno ekipo.
Poleg tega bodo naslednje stvari prijetne, vendar neobvezne dodatke:
- Označevanje naprav glede na njihove sposobnosti (na primer, označevanje naprav z hitrimi diski za težke storitve vnosa in izhoda).
- Možnost zagona storitev neodvisno od orkestratorja (na primer, med razvojem).
- Skupno mesto za izmenjavo konfiguracij in skrivnosti.
- Končna točka za metrike in loge.
Zakaj nam Kubernetes ne ustreza
Ko smo izdelovali prototip s Kubernetes, smo opazili, da smo dodajali vedno bolj zapletene plasti logike, na katere smo se brezpogojno zanašali.
Na primer, Kubernetes podpira vgrajene konfiguracije storitev preko . Lahko se hitro zapleteš, še posebej pri združevanju več datotek konfiguracije ali dodajanju dodatnih storitev v pod. Kubernetes (ali V tem primeru) omogoča dinamično uvajanje zunanjih konfiguracij za delitev interesov. Vendar pa to povzroči strogo povezavo med vašim projektom in Kubernetes. Kljub temu so Helm in ConfigMaps dodatne možnosti, zato jih ni nujno uporabljati. Preprosto lahko skopirate konfiguracijo v Docker sliko. Kljub temu je privlačno iti po tej poti in zgraditi nepotrebne abstrakcije, zaradi katerih boste morda kasneje obžalovali.
Poleg tega se ekosistem Kubernetes hitro razvija. Potrebno je veliko časa in energije, da ostanete na tekočem z najboljšimi praksami in najnovejšimi orodji. Kubectl, minikube, kubeadm, helm, tiller, kops, oc - seznam se nadaljuje in nadaljuje. Na začetku dela niso potrebna vsa ta orodja, vendar ne veste, kaj boste potrebovali, zato je treba biti obveščen o vsem. Zaradi tega je krivulja učenja precej strma.
Kdaj uporabiti Kubernetes
Pri nas v podjetju mnogi uporabljajo Kubernetes in so z njim precej zadovoljni. Ti primerki so pod nadzorom Googla ali Amazona, ki imata dovolj sredstev za podporo.
Kubernetes prihaja z , ki naredijo obsežno orkestracijo kontejnerjev bolj obvladljivo:
- Podrobno .
- dodajajo logiko v klaster. To so preprosto programi, ki komunicirajo z Kubernetes API.
- ! Kubernetes lahko skalira storitve po potrebi, s pomočjo metrik storitev in brez ročnega posredovanja.
Vprašanje je, ali res potrebujete vse te funkcije. Ni mogoče le zanašati se na abstrakcije; .
Naša ekipa zagotavlja večino storitev na daljavo (zaradi tesne povezave z osnovno infrastrukturo), zato nismo želeli postavljati lastnega klasterja Kubernetes. Želeli smo preprosto nuditi storitve.
Baterije niso vključene
Nomad je 20% orkestracije, ki prinaša 80% potrebnega. Vse, kar počne, je upravljanje z namestitvami. Nomad skrbi za namestitve, ponovno zažene kontejnerje v primeru napak… in to je vse.
Ves pomen Nomada je v tem, da to počne: minimumnobenega podrobnega upravljanja pravic ali , tako je posebej zasnovano. Ti komponenti se zagotavljajo s strani ali niso na voljo sploh.
Mislim da je Nomad pronašao savršen kompromis između jednostavnosti korištenja i korisnosti. Dobar je za male, neovisne usluge. Ako je potrebna veća kontrola, morat ćete ih pokrenuti sami ili koristiti drugi pristup. Nomad je enostavno orkestrator.
Najbolje kod Nomada je što je lako zamenjati. Veza sa dobavljačem je gotovo nepostojeća, jer se njegove funkcije lako integriraju u bilo koji drugi sustav koji upravlja uslugama. Rade jednostavno kao obični binarni program na svakoj mašini u klasteru, to je sve!
Ekosistem Nomada sastoji se od slabo povezanih komponenti
Prava snaga Nomada leži u njegovom ekosistemu. Vrlo se dobro integrira s drugim — potpuno neobaveznim — proizvodima, kao što su (skladište ključeva i vrednosti) ili (upravljanje tajnama). Unutar datoteke Nomad postoje sekcije za dohvaćanje podataka iz tih usluga:
template {
data = <<EOH
LOG_LEVEL="{{key "service/geo-api/log-verbosity"}}"
API_KEY="{{with secret "secret/geo-api-key"}}{{.Data.value}}{{end}}"
EOH
destination = "secrets/file.env"
env = true
} Ovdje čitamo ključ service/geo-api/log-verbosity iz Consul-a i tokom rada ga predstavljamo kao varijablu okruženja LOG_LEVEL. Također predstavljamo ključ secret/geo-api-key iz Vault-a kao API_KEY. Jednostavno, ali moćno!
Zahvaljujući svojoj jednostavnosti, Nomad se lako proširuje drugim uslugama putem API-ja. Na primjer, podržavaju se oznake za zadatke. Obeležavamo sve usluge sa metrikama oznakom trv-metrics. Tako Prometheus lako pronalazi te usluge putem Consul-a i periodično proverava krajnju tačku /metrics za nove podatke. Isto se može učiniti, na primjer, za logove, koristeći .
Postoji mnogo drugih primera proširivosti:
- Pokretanje zadatka Jenkins-a putem hook-a, a Consul prati ponovni deploy zadatka Nomad-a kada dođe do promene u konfiguraciji usluge.
- Ceph dodaje u Nomad distribuirani datotečni sistem.
- za balansiranje opterećenja.
Sve to omogućava bez velike vezanosti za dobavljača.
Iskreno upozorenje
Nijedan sistem nije savršen. Ne preporučujem da odmah uvrstite najnovije funkcije u produkciju. Naravno, postoje greške i nedostajuće funkcije, ali to se odnosi i na Kubernetes.
V primerjavi s Kubernetesom skupnost Nomada ni tako velika. Kubernetes ima že okoli 75.000 commitov in 2.000 prispevkov, medtem ko ima Nomad okoli 14.000 commitov in 300 prispevkov. Nomadu bo težko vzdrževati korak s hitrostjo Kubernetes, vendar morda to niti ni potrebno! Gre za bolj specializiran sistem, manjša skupnost pa pomeni, da bo vaš pull request verjetneje opazen in sprejet v primerjavi s Kubernetes.
Резюме
Zaključek: ne uporabljajte Kubernetes samo zato, ker to počnejo vsi. Temeljito ocenite svoje zahteve in preverite, katero orodje je bolj koristno.
Če načrtujete uvedbo velike količine enotnih storitev na obsežni infrastrukturi, je Kubernetes dobra izbira. Samo ne pozabite na dodatno zapletenost in stroške vzdrževanja. Nekaterih stroškov se lahko izognete z uporabo upravljanega okolja Kubernetes, kot je ili .
Če preprosto iščete zanesljivega orkestratorja, ki ga je enostavno vzdrževati in razširjati, zakaj ne bi poskusili z Nomad? Morda vas bo presenetilo, kako daleč vas lahko to pripelje.
Če Kubernetes primerjamo z avtomobilom, bo Nomad skuter. Včasih potrebujete eno, včasih drugo. Obe imata pravico do obstoja.
Izvor: habr.com
