Iepriekšējā rakstā mēs izvietojām Kubernetes kopu ar vienu galveno un vienu darba mezglu. Kubernetes kopas galvenokārt attiecas uz divām lietām; Mezgli un pākstis. Pākstis ir konteinerizētās lietojumprogrammas, kuras vēlaties izvietot klasterī, un mezgli ir atsevišķi skaitļošanas serveri, kas ir atbildīgi par klastera pārvaldīšanu vai lietotņu palaišanu. Lai viss būtu vienkāršāk, mēs sākam ar bezvalstnieku lietojumprogrammu un ieviešam dažādus jēdzienus, piemēram, etiķetes un atlasītājus, kurus izmanto, lai pākstis sasietu savā starpā.
Ir arī citi svarīgi jēdzieni, piemēram, kopiju komplekti, pakalpojumi un izvietošana, kurus mēs mācīsimies šajā rakstā.
Tradicionālā lietotņu izvietošana
Ja paskatās uz tradicionālo pieeju tīmekļa lietotnes izvietošanai, mērogojamība ir kaut kas, kas jums būtu jāapsver pirms darba uzsākšanas. Ja jums ir nepieciešama atsevišķa datu bāze no tīmekļa priekšgala, labāk to darīt tūlīt, nevis darīt vēlāk. Vai plānojat palaist vairākas tīmekļa lietotnes?? Iepriekš labāk konfigurējiet reverso starpniekserveri.
Ar Kubernetes pieeja ir mainījusies. Izvietošanu var veikt, paturot prātā pašreizējās vajadzības, un vēlāk tā var būt apjomīga, augot jūsu biznesam. Konteinerizācija ļauj nošķirt būtiskus jūsu tīmekļa pakalpojumu komponentus, pat ja tie darbojas vienā mezglā. Vēlāk, mērogojot horizontāli (tas nozīmē, ka savai videi pievienojat vairāk serveru), jums vienkārši jāpagriež vairāk konteineru, un Kubernetes to ieplānos jums atbilstošajos mezglos. Apgrieztais starpniekserveris? Kubernetes dienesti iesaistīsies šīs problēmas risināšanā.
Pākstis
Vispirms pagriezīsim pāksti. Lai to izdarītu, mums būtu nepieciešams YAML fails, kas definētu dažādus pākšauga atribūtus.
apiVersion: v1veids: Pod
metadati:
nosaukums: nginx
spec:
konteineri:
- nosaukums: nginx
attēls: nginx: 1.7.9
ostas:
- containerPort: 80
Pievienojiet iepriekš a pāksts.yaml failu un saglabājiet to. Aplūkojot tekstu iepriekš, jūs varat redzēt, ka laipns mūsu radītais resurss ir pāksts. Mēs to nosaucām ninks, un attēls ir ninks: 1.7.9 kas pēc noklusējuma nozīmē, ka Kubernetes no Docker centrmezgla publiski pieejamajiem attēliem iegūs atbilstošo nginx attēlu.
Liela mēroga organizācijās K8 bieži tiek konfigurēts norādīt uz privātu reģistru, no kura tas var izvilkt atbilstošos konteinera attēlus.
Tagad, lai sāktu pod palaist:
$ kubectl izveidot -f pod.yamlJūs nevarat piekļūt pākšaugam ārpus klastera. Tas vēl nav pakļauts, un tas pastāv tikai kā vientuļš pāksts. Lai pārliecinātos, ka tā patiešām ir izvietota, palaidiet:
$ kubectl iegūst pākstis
Lai atbrīvotos no nosauktajām pākstīm ninks, palaidiet komandu:
$ kubectl izdzēst pod nginxIzvietošana
Iegūt tikai vienu funkcionējošu pāksti nav Kubernetes punkts, ideālā gadījumā mēs vēlētos, lai būtu vairākas pākšu kopijas, kas bieži tiek plānotas dažādos mezglos, tādēļ, ja viens vai vairāki mezgli neizdodas, pārējie pākstis joprojām būs jāņem palielinātu papildu slodzi.
Turklāt no attīstības viedokļa mums vajadzētu būt kaut kādam veidam, kā izvilkt pākstis ar jaunāku programmatūras versiju un padarīt vecākās pākstis pasīvās. Gadījumā, ja rodas problēma ar jaunāku pāksti, kuru mēs varam atgriezties, atgriežot vecākas pākstis un izdzēšot neizdevušos versiju. Izvietošana ļauj mums to izdarīt.
Šis ir ļoti izplatīts izvietojuma definēšanas veids:
apiVersion: apps / v1beta1veids: izvietošana
metadati:
nosaukums: nginx-izvietošana
spec:
kopijas: 2
veidne:
metadati:
etiķetes:
lietotne: nginx
spec:
konteineri:
- nosaukums: nginx
attēls: nginx: 1.7.9
ostas:
- containerPort: 80
Jūs, cita starpā, pamanīsit galveno vērtību pāri, kas ir:
etiķetes:
lietotne: ninks
Etiķetes ir svarīgas kopu pārvaldībai, jo tās palīdz izsekot daudziem pākstiem, kuriem visiem ir tāds pats pienākums. Pāksti tiek izveidoti pēc galvenā mezgla komandas, un tie sazinās ar galveno mezglu. Tomēr mums joprojām ir nepieciešams efektīvs veids, kā viņi var sarunāties savā starpā un strādāt kopā kā komanda.
Pakalpojumi
Katram pākstim ir sava iekšējā IP adrese, un tāds sakaru slānis kā Flannel palīdz pākstīm sazināties savā starpā. Šī IP adrese tomēr mainās diezgan daudz, un galu galā viss, kam ir daudz pākšu, ir ļaut tiem būt vienreizējiem. Pākstis bieži tiek nogalinātas un augšāmcēlušās.
Tagad rodas šāds jautājums - kā priekšējās daļas pākstis runās ar aizmugures pākstīm, kad klastera lietas ir tik dinamiskas?
Pakalpojumi nonāk attēlā, lai atrisinātu šo sarežģītību. Pakalpojums ir vēl viens bloks, kas darbojas kā slodzes līdzsvarotājs starp pākšaugu apakškopu un pārējo Kubernetes kopu. Tas saistās ar visām pākstīm, kurām ir pievienota īpaša etiķete, piemēram, datu bāze, un pēc tam tā tiek pakļauta pārējai kopai.
Piemēram, ja mums ir datu bāzes pakalpojums ar 10 datu bāzes pākšaugiem, dažas no datu bāzes pākstīm var parādīties vai tikt nogalinātas, taču pakalpojums nodrošinātu, ka pārējā klastera daļa saņem “pakalpojumu”, kas ir datu bāze. Pakalpojumus var izmantot arī, lai saskarne saskartos ar pārējo internetu.
Šeit ir tipiska pakalpojuma definīcija.
apiVersion: v1veids: Pakalpojums
metadati:
nosaukums: wordpress-mysql
etiķetes:
lietotne: wordpress
spec:
ostas:
- osta: 3306
atlasītājs:
lietotne: wordpress
līmenis: mysql
clusterIP: nav
Pākstis, kas apzīmētas ar WordPress ar norādīto mysql līmeni, ir tās, kuras šis serviss uzņems un pakļaus tīmekļa servera pākstīm tipiskai WordPress, kas iestatīta, izmantojot Kubernetes.
Piesardzības vārds
Izvietojot milzīgu daudzpakāpju lietotni, kas vērsta uz lielu patērētāju bāzi, kļūst ļoti vilinoši rakstīt daudz pakalpojumu (vai mikropakalpojumus, kā tie ir tautā zināmi). Lai gan tas ir elegants risinājums lielākajai daļai lietošanas gadījumu, lietas var ātri izkļūt no rokas.
Pakalpojumi, tāpat kā pākstis, ir pakļauti neveiksmēm. Vienīgā atšķirība ir tāda, ka tad, kad pakalpojums neizdodas, daudzi pākstis, kas ir pilnīgi funkcionāli, tiek padarīti bezjēdzīgi. Līdz ar to, ja jums ir plašs pakalpojumu (gan iekšējo, gan ārējo) savienojums un kaut kas neizdodas, kļūmes vietas noteikšana kļūtu neiespējama.
Pēc īkšķa noteikuma, ja jums ir aptuvena klastera vizualizācija vai ja varat izmantot programmatūru, piemēram, pilotu kabīni, lai apskatītu klasteru un saprastu to, iestatīšana ir laba. Kubernetes dienas beigās ir paredzēts, lai samazinātu sarežģītību, nevis uzlabotu to.