Nëntë këshilla për rritjen e performancës së Kubernetes

Nëntë këshilla për rritjen e performancës së Kubernetes

Përshëndetje të gjithëve! Unë quhem Oleg Sidorenko, punoj në kompaninë DomKlik si drejtues i ekipit të infrastrukturës. Ne kemi operuar "Kubik" në prodhimin për më shumë se tre vjet, dhe gjatë kësaj kohe kemi kaluar shumë momente të ndryshme interesante me të. Sot do t'ju tregoj se si me një qasje të duhur mund të nxjerrim më shumë performancë nga Kubernetes 'vanilje' për klasterin tuaj. Gati, gati, filluam!

Të gjithë e dini mirë se Kubernetes është një sistem i shkallëzueshëm me kod të hapur për orkestrimin e kontejnerëve; ose, ndryshe, 5 binarë që bëjnë magji duke menaxhuar ciklin e jetës së mikroservicëve tuaj në ambientin e serverit. Për më tepër, është një mjet mjaft fleksibël që mund të ndërtohet si një ndërtues Lego, për maksimumin e personalizimit për detyra të ndryshme.

Dhe gjithçka duket mirë: lëshoni serverët në klaster si dru në oxhak, dhe asnjë shqetësim. Por nëse jeni për ekologjinë, do të mendoni: "Si mund të mbaj zjarrin në sobë dhe të kursej pyllin?". Në fjalë të tjera, si të gjeni mënyra për të përmirësuar infrastrukturën dhe për të ulur shpenzimet.

1. Ndiqni burimet e ekipeve dhe aplikacioneve

Nëntë këshilla për rritjen e performancës së Kubernetes

Një nga metodat më të zakonshme, por efektive, është vendosja e requests/limits. Ndani aplikacionet sipas namespace-ve, dhe namespace-t sipas ekipeve të zhvillimit. Caktoni aplikacionit para se të bëni deploy vlerat për konsumin e kohës së procesorit, memories dhe ruajtjes efemere.

resources:
   requests:
     memory: 2Gi
     cpu: 250m
   limits:
     memory: 4Gi
     cpu: 500m

Me pĂ«rvojĂ« kemi arritur nĂ« pĂ«rfundimin: nuk ka sens tĂ« shtriheni kĂ«rkesat nga kufijtĂ« pĂ«r mĂ« shumĂ« se dy herĂ«. VĂ«llimi i klasterit llogaritet nĂ« bazĂ« tĂ« kĂ«rkesave, dhe nĂ«se do tĂ« caktoni ndryshim burimesh tek aplikacionet, pĂ«r shembull, 5-10 herĂ«, imagjinoni çfarĂ« do tĂ« ndodhĂ« me nodĂ«n tuaj kur ajo mbushet me pod dhe papritur merr ngarkesĂ«. AsgjĂ« e mirĂ«. Si minimum, throttling, dhe si maksimum, do t’i thoni lamtumirĂ« punonjĂ«sit dhe do tĂ« merrni njĂ« ngarkesĂ« ciklike nĂ« nodat e tjera pasi pod-et tĂ« fillojnĂ« tĂ« migrojnĂ«.

PĂ«r mĂ« tepĂ«r, me anĂ« tĂ« limitranges mund tĂ« caktoni fillimisht pĂ«r kontejnerin vlera pĂ«r burimet — minimale, maksimale dhe me tĂ« dhĂ«na:

➜  ~ kubectl describe limitranges --namespace ops
Name:       limit-range
Namespace:  ops
Type        Resource           Min   Max   Default Request  Default Limit  Max Limit/Request Ratio
----        --------           ---   ---   ---------------  -------------  -----------------------
Container   cpu                50m   10    100m             100m           2
Container   ephemeral-storage  12Mi  8Gi   128Mi            4Gi            -
Container   memory             64Mi  40Gi  128Mi            128Mi          2

Mos harrosh të kufizoni burimet e hapësirës emërtimi, në mënyrë që një ekip të mos marrë të gjitha burimet e klasterit:

➜  ~ kubectl describe resourcequotas --namespace ops
Name:                   resource-quota
Namespace:              ops
Resource                Used          Hard
--------                ----          ----
limits.cpu              77250m        80
limits.memory           124814367488  150Gi
pods                    31            45
requests.cpu            53850m        80
requests.memory         75613234944   150Gi
services                26            50
services.loadbalancers  0             0
services.nodeports      0             0

Siç shihet nga përshkrimi resourcequotas, nëse ekipi ops dëshiron të vendosë pod-e që do konsumonin edhe 10 cpu, planifikuesi nuk do të lejojë këtë të ndodhë dhe do të japë një gabim:

Gabim krijimi: pod-et "nginx-proxy-9967d8d78-nh4fs" janë të ndaluara: tejkalon kuotën: resource-quota, e kërkuar: limits.cpu=5,requests.cpu=5, e përdorur: limits.cpu=77250m,requests.cpu=53850m, e kufizuar: limits.cpu=10,requests.cpu=10

Për të zgjidhur një problem të tillë, mund të shkruani një mjet, për shembull, si këtë, i cili di të ruajë dhe komitojë gjendjen e burimeve të ekipeve.

2. Zgjidhni ruajtjen e optimizuar të skedarëve

Nëntë këshilla për rritjen e performancës së Kubernetes

Këtu do të doja të prekja temën e volumeve të përhershëm dhe nëndiskutimin e sistemit të diskut të nodave worker të Kubernetes. Shpresoj që askush të mos përdorë "Kub" në HDD në prodhim, por herë pas here, edhe një SSD i zakonshëm bëhet i pamjaftueshëm. Kemi hasur në një problem të tillë, që log-ët e shkatërronin diskun në operacionet e hyrjes-daljes, dhe këtu nuk ka shumë opsione zgjidhjeje:

  • PĂ«rdorimi i SSD-ve me performancĂ« tĂ« lartĂ« ose kalimi nĂ« NVMe (nĂ«se ju menaxhoni vetĂ« harduerin tuaj).

  • Reducimi i nivelit tĂ« regjistrimit.

  • BĂ«rja e "balancimit tĂ« mençur" tĂ« pod-eve, qĂ« dĂ«mtojnĂ« disku (podAntiAffinity).

Screenshot-i më sipër tregon se çfarë ndodh me diskun gjatë përdorimit të nginx-ingress-controller, kur regjistrimi i access_logs është aktiv (~12 mijë regjistrime/sekun). Një gjendje e tillë, natyrisht, mund të çojë në degradim të të gjitha aplikacioneve në këtë nod.

Sa pĂ«r PV-tĂ«, fatkeqĂ«sisht, nuk kam provuar tĂ« gjitha llojrat VĂ«llimet pĂ«rhershme. PĂ«rdorni opsionin mĂ« tĂ« mirĂ« qĂ« ju pĂ«rshtatet. Historikisht, njĂ« pjesĂ« e vogĂ«l e shĂ«rbimeve ka nevojĂ« pĂ«r vĂ«llime RWX, dhe prej kohĂ«sh kemi pĂ«rdorur ruajtjen NFS pĂ«r kĂ«tĂ« qĂ«llim. E lirĂ« dhe... mjafton. Sigurisht, kemi pasur mjaft probleme me tĂ« – pra, e dimĂ«, por kemi mĂ«suar ta optimizojmĂ«, dhe tani nuk kemi mĂ« dhimbje koke. NĂ«se Ă«shtĂ« e mundur, kaloni nĂ« ruajtjen objekt S3.

3. Mblidhni imazhe të optimizuara

Nëntë këshilla për rritjen e performancës së Kubernetes

Më mirë është të përdorë imazhe të optimizuara për kontejnerët, në mënyrë që Kubernetes të mund t'i marrë ato më shpejt dhe t'i ekzekutojë më eficient. 

Optimizimi do të thotë që imazhet:

  • pĂ«rmbajnĂ« vetĂ«m njĂ« aplikacion ose kryejnĂ« vetĂ«m njĂ« funksion;

  • janĂ« tĂ« vogla, sepse imazhet e mĂ«dha çohen mĂ« dobĂ«t nĂ« rrjet;

  • kanĂ« pika pĂ«r verifikimin e funksionimit dhe gatishmĂ«risĂ«, me tĂ« cilat Kubernetes mund tĂ« ndĂ«rmarrĂ« disa veprime nĂ« rast ndĂ«rprerjesh;

  • pĂ«rdorin sisteme operative miqĂ«sore me kontejnerĂ«t (si Alpine ose CoreOS), tĂ« cilat janĂ« mĂ« tĂ« qĂ«ndrueshme ndaj gabimeve tĂ« konfigurimit;

  • pĂ«rdorin ndĂ«rtimin nĂ« shumĂ« etapa, nĂ« mĂ«nyrĂ« qĂ« tĂ« mund tĂ« publikoni vetĂ«m aplikacionet e kompiluar, jo burimet pĂ«rkatĂ«se.

Ka shumĂ« vegla dhe shĂ«rbime qĂ« lejojnĂ« tĂ« kontrolloni dhe optimizoni imazhet nĂ« kohĂ« reale. ËshtĂ« e rĂ«ndĂ«sishme t'i mbani gjithmonĂ« tĂ« azhurnuara dhe tĂ« verifikuara pĂ«r sigurinĂ«. NĂ« fund merrni:

  1. Uljen e ngarkesës rrjetore në të gjithë klastrin.

  2. Reduktimin e kohës së nisjes së kontejnerit.

  3. Një volum më të vogël të gjithë regjistrit tuaj Docker.

4. Përdorni caches DNS

Nëntë këshilla për rritjen e performancës së Kubernetes

Nëse flasim për ngarkesa të larta, pa optimizimin e sistemit DNS të klastri, është shumë e vështirë të funksionosh. Disa kohë më parë, zhvilluesit e Kubernetes mbështetën zgjidhjen e tyre kube-dns. Ajo u implementua edhe tek ne, por kjo software nuk u optimizua dhe nuk jepte performancën e kërkuar, edhe pse, siç duket, detyra ishte e thjeshtë. Më pas doli coredns, në të cilin kaluam dhe nuk patëm më ndonjë problem. Më vonë, ai u bë shërbimi DNS për default në K8s. Në një moment, arritëm deri në 40,000 rps në sistemin DNS dhe kjo zgjidhje nuk mjaftonte më. Por, për një rast të lumtur, doli Nodelocaldns, gjithashtu e njohur si node local cache, gjithashtu NodeLocal DNSCache.

Pse e përdorim këtë? Në bërthamën e Linux ka një defekt, i cili gjatë qasjeve të shumta përmes conntrack NAT me UDP çon në një gjendje garash për të shkruar në tabelat conntrack, dhe një pjesë e trafikut përmes NAT humbasin (çdo qasje përmes Shërbimit është NAT). Nodelocaldns e zgjidh këtë problem duke eliminuar NAT dhe duke e përmirësuar lidhjen në TCP me DNS në rrjedhën kryesore, si dhe duke bërë keƥimin lokal të kërkesave DNS për rrjedhat (përfshirë një keƥ negativ prej 5 sekondash).

5. Shkallëzoni podet horizontalisht dhe verticalisht automatikisht

Nëntë këshilla për rritjen e performancës së Kubernetes

A mund të thoni me siguri se të gjitha mikroshërbimet tuaja janë gati për rritjen pesë- deri në tri-fish të ngarkesës? Si të alokoni burimet për aplikacionet tuaja? Të mbani disa pode të aktivizuara mbi ngarkesën operative mund të rezultojë e tepërt, ndërsa të mbani në kufijtë e ngushtë - rrezikoni të keni një pushim nga rritja e papritur e trafikut për shërbimin. Një mesatare e artë ndihmon të arrihet me përfshirjen e shërbimeve si Horizontal Pod Autoscaler dhe Vertical Pod Autoscaler.

VPA lejon që automatikisht të rritni requests/limits e konteinerëve tuaj në pod në varësi të përdorimit të vërtetë. Siç mund të jetë e dobishme? Nëse keni pode, të cilat nga ndonjë arsye nuk mund të shkallëzohen horizontalisht (çka nuk është shumë e besueshme), atëherë mund të provoni të besoni në ndryshimin e burimeve të tij nga VPA. Karakteristika e tij është në sistemin e rekomandimeve të bazuara në të dhëna historike dhe aktuale nga metric-server, kështu që, nëse nuk dëshirani të ndryshoni automatikisht requests/limits, atëherë mund të thjesht të ndihmoni të ndiqni burimet e rekomanduara për kontejnerët tuaj dhe të optimizoni cilësimet për kursimin e CPU-së dhe memories në klaster.

Nëntë këshilla për rritjen e performancës së KubernetesImazhi është marrë nga https://levelup.gitconnected.com/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231

Planifikuesi nĂ« Kubernetes gjithmonĂ« bazohet nĂ« requests. ÇfarĂ«do vlerĂ« qĂ« i vendosni atje, planifikuesi do tĂ« kĂ«rkojĂ« njĂ« nod tĂ« pĂ«rshtatshĂ«m, duke u nisur nga ajo. Vlerat limits i nevojiten kubletit pĂ«r tĂ« kuptuar kur duhet tĂ« ngadalĂ«sojĂ« ose tĂ« vrasĂ« pod-in. Dhe pĂ«r saqĂ« parametri i rĂ«ndĂ«sishĂ«m Ă«shtĂ« vlera e requests, VPA do tĂ« punojĂ« me tĂ«. Sa herĂ« qĂ« jepni shkallĂ«zim vertical pĂ«r aplikacionin, specifikoni se çfarĂ« duhet tĂ« jenĂ« requests. Por çfarĂ« do tĂ« ndodhĂ« me limits? Ky parametĂ«r do tĂ« shkallĂ«zohet gjithashtu proporcionalisht.

Për shembull, këtu janë cilësimet normale të podit:

burimet:
   kërkesat:
     memoria: 250Mi
     cpu: 200m
   kufijtë:
     memoria: 500Mi
     cpu: 350m

Mekanizmi i rekomandimeve përcakton se aplikacioni juaj ka nevojë për 300m CPU dhe 500Mi për të funksionuar normalisht. Ju do të merrni këto cilësime:

burimet:
   kërkesat:
     memoria: 500Mi
     cpu: 300m
   kufijtë:
     memoria: 1000Mi
     cpu: 525m

Siç u përmend më lart, kjo është skalimi proporcional që buron nga raporti i kërkesave/kufijve në manifest:

  • CPU: 200m → 300m: raporti 1:1.75;

  • Memoria: 250Mi → 500Mi: raporti 1:2.

Sa i përket HPA, në këtë rast mekanizmi i funksionimit është më transparent. Vendosen kufij të metrikave, për shembull, të procesorit dhe memorisë, dhe nëse mesatarja e të gjitha kopjeve kalon kufirin, aplikacioni shkallëzohet me +1 pod deri sa vlera të bie poshtë kufirit, ose derisa të arrihet numri maksimal i kopjeve.

Nëntë këshilla për rritjen e performancës së KubernetesImazhi është marrë nga https://levelup.gitconnected.com/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231

Përveç metrikave standarde, si procesori dhe memoria, ju mund të konfiguroni kufijtë për metrikat tuaja të personalizuara nga Prometheus dhe të punoni me to, nëse e konsideroni këtë si përcaktimin më të saktë për kur duhet të shkallëzoni aplikacionin tuaj. Pasi aplikacioni të stabilizohet poshtë kufirit të caktuar të metrikës, HPA do të fillojë të shkallëzojë podët poshtë deri në numrin minimal të kopjeve ose deri në një gjendje kur ngarkesa do të kënaqë kufirin e caktuar.

6. Mos harroni për Node Affinity dhe Pod Affinity

Nëntë këshilla për rritjen e performancës së Kubernetes

Jo të gjitha nodet funksionojnë në pajisje të njëjta, dhe jo të gjitha podët kanë nevojë të ekzekutojnë aplikacione që kërkojnë llogaritje intensive. Kubernetes lejon të përcaktoni specializimin e nodave dhe podëve me anë të Node Affinity dhe Pod Affinity.

Nëse keni nodo që janë të përshtatshme për operacione me intensitet të lartë llogaritjesh, për efikasitet maksimal, është më mirë të lidhni aplikacionet me nodat përkatëse. Përdorni nodeSelector me etiketën e nodit.

Supozoni se keni dy nodet: një me CPUType=HIGHFREQ dhe një numër të madh të bërthamave të shpejta, dhe tjetra me MemoryType=HIGHMEMORY një sasi të madhe memorje dhe performancë më të lartë. Më e lehtë është të caktoni zhvendosjen e podit në nodën HIGHFREQ, duke shtuar në seksionin spec një selector të tillë:



nodeSelector:
	CPUType: HIGHFREQ

Një mënyrë më e shtrenjtë dhe specifike për ta bërë këtë është të përdorni nodeAffinity në fushën affinity në seksionin spec. Ka dy mundësi:

  • requiredDuringSchedulingIgnoredDuringExecution: konfigurimi i fortĂ« (planifikuesi do tĂ« zhvendosĂ« podĂ«t vetĂ«m nĂ« nodat specifike (dhe askund tjetĂ«r));

  • preferredDuringSchedulingIgnoredDuringExecution: konfigurimi i butĂ« (planifikuesi do tĂ« pĂ«rpiqet tĂ« vendosĂ« nĂ« nodet specifike, dhe nĂ«se dĂ«shton, do tĂ« provojĂ« tĂ« vendosĂ« nĂ« nodin tjetĂ«r tĂ« disponueshĂ«m).

Mund të përcaktoni një sintaksë të caktuar për menaxhimin e etiketave të nodit, për shembull, Në, JoNë, Ekziston, NukEkziston, Gt ose Lt. Megjithatë, kujdesuni që metodat e ndërlikuara në lista të gjata etiketash do ta ngadalësojnë vendimmarrjen në situata kritike. Me fjalë të tjera, mos e komplikoni.

Siç u përmend më lart, Kubernetes lejon të përcaktoni lidhjen e pod-ëve të tanishëm. Kështu, mund të bëni që pod të caktuar të funksionojnë së bashku me pod të tjerë në të njëjtën zonë të disponueshmërisë (e rëndësishme për re) ose në nodet.

Në podAffinity fushat affinity në seksionin spec janë të njëjtat fusha si në rastin e nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution dhe preferredDuringSchedulingIgnoredDuringExecution. E vetmja dallim është se matchExpressions do të lidhe pod-et në nodën ku tashmë ekzekutohet një pod me atë etiketë.

Po ashtu, Kubernetes ofron fushën podAntiAffinity, e cila, përkundrazi, nuk lidh pod-in me nodën me pod-të specifike.

Sa pĂ«r shprehjet nodeAffinity mund tĂ« japim kĂ«shilla tĂ« njĂ«jta: pĂ«rpiquni tĂ« ruani thjeshtĂ«sinĂ« dhe logjikĂ«n e rregullave, nuk duhet tĂ« pĂ«rpiqeni tĂ« mbingarkoni specifikimin e pod-Ă«ve me njĂ« grup tĂ« ndĂ«rlikuar rregullash. ËshtĂ« shumĂ« e lehtĂ« tĂ« krijosh njĂ« rregull qĂ« nuk pĂ«rputhet me kushtet e klasterit, duke krijuar njĂ« ngarkesĂ« tĂ« tepĂ«rt pĂ«r planifikuesin dhe duke ulur performancĂ«n e pĂ«rgjithshme.

7. Taints & Tolerations

Ka një tjetër mënyrë për të menaxhuar planifikuesin. Nëse keni një klaster të madh me qindra nod-e dhe mijëra mikroshërbime, atëherë është shumë e vështirë të mos lejoni që disa pod-e të vendosen në nodet e caktuara.

Në këtë ndihmon mekanizmi taints - rregullat ndaluese. Për shembull, mund të ndaloni nodet e caktuara nga ekzekutimi i pod-eve në disa skenarë. Për të aplikuar taint në një nod të caktuar, duhet të përdorni opsionin taint në kubectl. Shkruani çelësin dhe vlerën, dhe pastaj taint si NoSchedule ose NoExecute:

$ kubectl taint nodes node10 node-role.kubernetes.io/ingress=true:NoSchedule

ËshtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se mekanizmi taint mbĂ«shtet tre efekte kryesore: NoSchedule, NoExecute dhe PreferNoSchedule.

  • NoSchedule do tĂ« thotĂ« se derisa nĂ« specifikimin e pod-it tĂ« mos ketĂ« njĂ« regjistrim pĂ«rkatĂ«s tolerations, ai nuk mund tĂ« vendoset nĂ« nodĂ« (nĂ« kĂ«tĂ« shembull node10).

  • PreferNoSchedule — version i thjeshtuar NoSchedule. NĂ« kĂ«tĂ« rast, planifikuesi do tĂ« pĂ«rpiqet tĂ« mos shpĂ«rndajĂ« pod-et qĂ« nuk kanĂ« regjistrimin pĂ«rkatĂ«s tolerations nĂ« nodĂ«, por kjo nuk Ă«shtĂ« njĂ« kufizim rigoroz. NĂ«se nĂ« klaster nuk ka burime, atĂ«herĂ« pod-et do tĂ« fillojnĂ« tĂ« vendosen nĂ« kĂ«tĂ« nodĂ«.

  • NoExecute — kjo efekt aktivizon evakuimin e menjĂ«hershĂ«m tĂ« podĂ«ve qĂ« nuk kanĂ« njĂ« regjistrim pĂ«rkatĂ«s tolerations.

ËshtĂ« interesante se kjo sjellje mund tĂ« anulohet pĂ«rmes mekanizmit tolerancave. Kjo Ă«shtĂ« e dobishme kur ka njĂ« nodĂ« "tĂ« ndaluar" dhe ju nevojitet tĂ« vendosni vetĂ«m shĂ«rbimet infrastrukturore mbi tĂ«. Si ta bĂ«ni kĂ«tĂ«? Lejoni vetĂ«m ato podĂ« pĂ«r tĂ« cilat ekziston njĂ« tolerancĂ« e pĂ«rshtatshme.

Ja si do të duket specifikimi i podit:

spec:
   tolerations:
     - key: "node-role.kubernetes.io/ingress"
        operator: "Equal"
        value: "true"
        effect: "NoSchedule"

Kjo nuk do të thotë se një herë tjetër, gjatë rindezjes së podit, ai do të bjerë pikërisht në këtë nodë, nuk është mekanizmi i Afinitetit të Nodhës dhe nodeSelector. Por duke kombinuar disa tipare, mund të arrini një konfigurim shumë fleksibël të planifikuesit.

8. Konfiguroni prioritetin e shpërndarjes së podëve

Fakti që keni konfigurimin e lidhjes së podëve me nodat, nuk do të thotë që të gjithë podët duhet të përpunohen me të njëjtin prioritet. Për shembull, mund të dëshironi të shpërndani disa podë më herët se të tjerët.

Kubernetes ofron mënyra të ndryshme për të konfiguracionin e prioritetit të podëve (Pod Priority and Preemption). Konfigurimi përbëhet nga disa pjesë: objekti PriorityClass dhe përshkrimi i fushës priorityClassName në specifikimin e podit. Le të shohim një shembull:

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 99999
globalDefault: false
description: "Kjo klasë prioriteti duhet të përdoret vetëm për podët shumë të rëndësishëm"

Ne krijojmë PriorityClass, i japim emrin, përshkrimin dhe vlerën e tij. Sa më e lartë vlera, aq më e lartë është prioriteti. Vlera mund të jetë çfarëdo numri të plotë 32-bitësh, më pak ose e barabartë me 1 000 000 000. Vlerat më të larta janë të rezervuara për podët kritikë të sistemit, të cilët zakonisht nuk mund të zënë vend. Zgjedhja do të ndodhë vetëm nëse podi me prioritet të lartë nuk ka vend për t'u shpërndarë, atëherë disa podë nga një nodë e caktuar do të evakuohen. Nëse ky mekanizëm është shumë i ashpër për ju, mund të shtoni opsionin preemptionPolicy: Never, dhe atëherë nuk do të ketë përjashtim, podi do të jetë i pari në radhë dhe do të presë derisa planifikuesi të gjejë për të burime të lira.

Më pas krijojmë një pod, në të cilin specifikojmë emrin priorityClassName:

apiVersion: v1
kind: Pod
metadata:
  name: static-web
  labels:
    role: myrole
 spec:
  containers:
    - name: web
      image: nginx
      ports:
        - name: web
          containerPort: 80
          protocol: TCP
  priorityClassName: high-priority
          

ËshtĂ« e mundur tĂ« krijoni sa mĂ« shumĂ« klasa prioritete si tĂ« doni, megjithatĂ« rekomandohet tĂ« mos shpenzoni tepĂ«r mbi kĂ«tĂ« (tĂ« paktĂ«n tĂ« kufizoheni nĂ« prioritete tĂ« ulĂ«ta, mesatare dhe tĂ« larta).

Në këtë mënyrë, në rast nevoje do të jeni në gjendje të rrisni efikasitetin e përhapjes së shërbimeve kritike, si nginx-ingress-controller, coredns etj.

9. Optimizoni klusterin ETCD

Nëntë këshilla për rritjen e performancës së Kubernetes

ETCD mund tĂ« quhet truri i tĂ« gjithĂ« klusterit. ËshtĂ« shumĂ« e rĂ«ndĂ«sishme tĂ« mbani punĂ«n e kĂ«saj DB nĂ« nivele tĂ« larta, pasi pikĂ«risht nga ajo varet shpejtĂ«sia e operacioneve nĂ« "Kube". NjĂ« zgjidhje standarde dhe e mirĂ« do tĂ« ishte tĂ« mbani klusterin ETCD nĂ« nodat master, pĂ«r tĂ« pasur njĂ« vonesĂ« minimale deri te kube-apiserver. NĂ«se kjo nuk Ă«shtĂ« e mundur, vendosni ETCD sa mĂ« afĂ«r, duke pasur njĂ« kapacitet tĂ« mirĂ« kalimi midis pjesĂ«marrĂ«sve. Gjithashtu, vini re se sa shumĂ« nodet nga ETCD mund tĂ« bien pa dĂ«mtuar klusterin.

Nëntë këshilla për rritjen e performancës së Kubernetes

Mbani parasysh se një rritje e tepruar e numrit të pjesëmarrësve në kluster mund të përmirësojë qëndrueshmërinë në dëm të performancës, gjithçka duhet të jetë në masë.

Nëse flasim për konfigurimin e shërbimit, rekomandimet janë pak

  1. Të keni pajisje të mira, sipas madhësisë së klusterit (mund të lexoni këtu).

  2. Të rregulloni disa parametra, nëse e keni përhapur klusterin midis disa DC-ve ose nëse rrjeti dhe disqet tuaja lënë për të dëshiruar (mund të lexoni këtu).

Përfundim

NĂ« kĂ«tĂ« artikull janĂ« pĂ«rmendur pikat qĂ« ekipi ynĂ« pĂ«rpiqet tĂ« zbatojĂ«. Kjo nuk Ă«shtĂ« njĂ« pĂ«rshkrim hap pas hapi tĂ« veprimeve, por opsione qĂ« mund tĂ« jenĂ« tĂ« dobishme pĂ«r optimizimin e shpenzimeve operative nĂ« kluster. ËshtĂ« e qartĂ« se çdo kluster Ă«shtĂ« unik nĂ« mĂ«nyrĂ«n e vet, dhe zgjidhjet pĂ«r konfigurimin mund tĂ« ndryshojnĂ« ndjeshĂ«m, prandaj do tĂ« ishte interesante tĂ« merrnim feedback nga ju: si kujdeseni pĂ«r klusterin tuaj Kubernetes, çfarĂ« pĂ«rdorni pĂ«r ta pĂ«rmirĂ«suar funksionimin e tij. Ndani pĂ«rvojĂ«n tuaj nĂ« komentet, do tĂ« jetĂ« interesante ta dĂ«gjojmĂ«.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster