Kubernetes klastrite uuendamine ilma seisakuta

Kubernetes klastrite uuendamine ilma seisakuta

Teie Kubernetes-klastri vÀrskendamise protsess

Kubernetes-klastri kasutamise kÀigus tekib vajadus vÀrskendada töötavaid sÔlmi. See vÔib hÔlmata paketihalduse vÀrskendusi, tuuma uuendamist vÔi uute virtuaalmasinate piltide juurutamist. Kubernetes'e terminoloogias nimetatakse seda "Vabatahtlik katkestus".

See postitus on osa neljast postitusest:

  1. See postitus.
  2. Kubernetes-klastri pod'ide Ôigete lÔpetamisprotseduuride jÀrgimine
  3. Pod'i edasilĂŒkatud lĂ”petamine selle eemaldamisel
  4. Kuidas vÀltida Kubernetes-klastri töökatkestusi PodDisruptionBudgets'i abil

(nĂ€it. tĂ”lke ĂŒlejÀÀnud artiklite kohta oodake varsti)

Selles artiklis kÀsitleme kÔiki tööriistu, mida Kubernetes pakub, et saavutada nullaegse töökatkestus teie klastri töötavatele sÔlmedele.

Probleemi mÀÀratlemine

Alguses kasutame me lihtsat lÀhenemist, et tuvastada probleeme ja hinnata selle lÀhenemise vÔimalikke riske, samas kogume teadmisi iga probleemi lahendamiseks, millega seni silmitsi seisame. Tulemuseks on konfiguratsioon, kus on kasutusel lifecycle hooks, readiness probes ja Pod disruption budgets, et saavutada null seisakuaega.

Et alustada oma teekonda, vĂ”tame konkreetsena nĂ€itena nĂ€iteks. Oletame, et meil on Kubernetes klaster, kus on kaks sĂ”lme ja kĂ€imas on rakendus, millel on kaks pod’i, mis asuvad Teenused:

Kubernetes klastrite uuendamine ilma seisakuta

Alustame kahe pod’iga, kus töötab Nginx ja Service meie kahe Kubernetes klastris oleva sĂ”lme peal.

Soovime uuendada kahe töö sĂ”lme tuumaversiooni meie klastris. Kuidas seda teha? Lihtsaim lahendus oleks kĂ€ivitada uued sĂ”lmed uuendatud konfiguratsiooniga ja seejĂ€rel vĂ€lja lĂŒlitada vanad sĂ”lmed, samal ajal kui uusi kĂ€ivitame. Kuigi see toimib, on sellise lĂ€henemisega mitmeid probleeme:

  • Kui te vĂ€ljalĂŒlitate vanad sĂ”lmed, siis vĂ€ljalĂŒlitatakse ka nendel töötavad pod’id. Mis juhtub, kui pod’id tuleb Ă”igeks vĂ€ljalĂŒlitamiseks puhastada? Teie kasutatav virtualiseerimissĂŒsteem ei pruugi oodata puhastusprotsessi lĂ”puni.
  • Mis juhtub, kui te vĂ€lja lĂŒlitate kĂ”ik sĂ”lmed korraga? Saate korraliku seisaku, kuni pod’id liiguvad uutele sĂ”lmedele.

Meile on vajalik viis pod’ide Ă”igeks migreerimiseks vanadelt sĂ”lmedelt, olles samal ajal kindlad, et ĂŒkski meie tööprotsess ei tööta, kui me teeme muudatusi sĂ”lmele. VĂ”i kui me teeme klusteri tĂ€ieliku asendamise, nagu nĂ€ites (st asendame virtuaalmasinate kujundid), tahame viia töötavad rakendused vanadelt sĂ”lmedelt uutele. MĂ”lemal juhul soovime takistada uute pod’ide planeerimist vanadele sĂ”lmedele ning seejĂ€rel evakueerida kĂ”ik töötavad pod’id nendelt. Nende eesmĂ€rkide saavutamiseks saame kasutada kĂ€sku kubectl drain.

KĂ”ikide pod’ide ĂŒmberjaotamine sĂ”lmest

KĂ€sk drain vĂ”imaldab kĂ”ik pod’id sĂ”lmest ĂŒmber jaotada. Drain'i tĂ€itmise protsessis mĂ€rgitakse sĂ”lm kui unschedulable (lipp NoSchedule). See on takistab uute pod'ide tekkimist. SeejĂ€rel drain hakkab pod'e nodest vĂ€lja viima, lĂ”petades konteinerite töö, mis on hetkel nodis kĂ€imas, saates signaali TERM konteineritele pod’is.

Kuigi kubectl drain drainimisega saadakse hÀsti hakkama, kuid on veel kaks tegurit, mis vÔivad pÔhjustada operatsiooni drain ebaÔnnestumise:

  • Teie rakendus peab oskama korrektselt lĂ”petada signaali saamisel. TERM Kui pod'id viiakse vĂ€lja, saadab Kubernetes signaali TERM konteineritele ja ootab nende Ă€ralangemist mÀÀratud aja jooksul, pĂ€rast mida, kui nad ei ole lĂ”petanud, lĂ”petab nad jĂ”hkralt. Igatahes, kui teie konteiner ei reageeri signaalile Ă”igesti, vĂ”ite ikkagi pod'ed lĂ”petada vale viisiga, kui nad on konkreetsel hetkel töös (nĂ€iteks, kui andmebaasis toimub tehing).
  • Te kaotate kĂ”ik pod'id, kus teie rakendus asub. See vĂ”ib olla hetkeks kĂ€ttesaamatu, kui uued konteinerid kĂ€ivitatakse uutest nodidest, vĂ”i kui teie pod'id on juurutatud ilma kontrolleriteta, vĂ”ivad nad ĂŒldse mitte uuesti kĂ€ivituda.

VĂ€ltige seisakuid

Kubernetes pakub jÀrgmisi vÔimalusi tÔrgete töötlemiseks, et minimeerida seisaku aega, mis on pÔhjustatud nÀiteks node'i drain operatsioonist, nagu nÀiteks vabatahtlik katkestus.

ÜlejÀÀnud elutsĂŒkli jooksul kasutame neid Kubernetes'e funktsioone, et leevendada pod'ide ĂŒleviimise tagajĂ€rgi. Et peamist mĂ”tet lihtsam jĂ€lgida, kasutame ĂŒlaltoodud nĂ€idet jĂ€rgmise ressursikonfiguratsiooniga:

---
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
 labels:
   app: nginx
spec:
 replicas: 2
 selector:
   matchLabels:
     app: nginx
 template:
   metadata:
     labels:
       app: nginx
   spec:
     containers:
     - name: nginx
       image: nginx:1.15
       ports:
       - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
 name: nginx-service
spec:
 selector:
   app: nginx
 ports:
 - protocol: TCP
   targetPort: 80
   port: 80

See konfiguratsioon on minimaalne nÀide Deployment, mis haldab nginx pod'e klastris. Lisaks kirjeldab konfiguratsioon ressursi Teenused, mida saab kasutada nginx pod'idele klastris juurdepÀÀsu saamiseks.

Kogu elutsĂŒkli jooksul laiendame iteratiivselt seda konfiguratsiooni, et lĂ”pus sisaldaks see kĂ”iki vĂ”imalusi, mida Kubernetes pakub seisaku aja vĂ€hendamiseks.

Ette nĂ€ha tĂ€ielikult rakendatud ja testitud versioon Kubernetes klastri uuendustest nullaja katkestustega AWS ja muudes ressurssides, kĂŒlastage Gruntwork.io.

Vaata ka teisi artikleid meie blogis:

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster