Kubernetes klastrite uuendamine ilma seiskamiseta

Kubernetes klastrite uuendamine ilma seiskamiseta

Teie Kubernetes-klastri uuendusprotsess

Kubernetes-klastri kasutamise ajal tekib varem vÔi hiljem vajadus töökindlate sÔlmede uuendamiseks. See vÔib hÔlmata pakettuuendusi, tuumauuendusi vÔi uute virtuaalmasinate piltide rakendamist. Kuberneteses tÀhendab see "Voluntary Disruption". "Vabatahtlik katkestus".

See postitus on osa neljast postitusest:

  1. See postitus.
  2. Podide korrektne vĂ€ljalĂŒlitamine Kubernetes-klastri raames
  3. Pod'i edasilĂŒkatud sulgemine selle kustutamisel
  4. Kuidas vÀltida Kubernetes-klastri tööseisakuid PodDisruptionBudgets'i abil

(mÀrkus tÔlkijale: kaasnevad artiklid on oodata varsti)

Selles artiklis kirjeldame kÔiki tööriistu, mida Kubernetes pakub teie klastri sÔlmede nullaja töökatkestuse saavutamiseks.

Probleemi mÀÀratlemine

Alguses kasutame esialgset lĂ€henemist, et mÀÀratleda probleeme ja hinnata nende lĂ€henemiste vĂ”imalikke riske, kogudes teadmisi iga probleemiga tegelemiseks, millega kogu tsĂŒkli vĂ€ltel silmitsi seisame. Tulemuseks on konfiguratsioon, mis kasutab elutsĂŒkli konksu, valmiduse proove ja Pod disruption budgets'i meie nullaja töökatkestuse saavutamiseks.

Meie teekonna alustamiseks vĂ”tame konkreetselt nĂ€iteks. Oletame, et meil on kahe sĂ”lmega Kubernetes-klaster, kus töötab rakendus kahe pod’iga, mis asuvad. Teenused:

Kubernetes klastrite uuendamine ilma seiskamiseta

Hakkame pihta kahe pod'iga, kus Nginx ja teenus on kÀivitatud meie kahes Kubernetes-klastri sÔlmes.

Soovime uuendada kahe töökindla sĂ”lme tuumaversiooni meie klastris. Kuidas me seda teeme? Lihtsaim lahendus oleks laadida uued sĂ”lmed uuendatud seadistusega ja seejĂ€rel vĂ€lja lĂŒlitada vanad sĂ”lmed, samal ajal uute sisselĂŒkkamisega. Kuigi see töötab, tekivad sellise lĂ€henemisega mĂ”ned probleemid:

  • Kui vĂ€lja lĂŒlitate vanad sĂ”lmed, siis nende peal töötavad pod’id lĂŒlituvad samuti vĂ€lja. Mis saab, kui pod’id tuleb Ă”igeks vĂ€ljalĂŒlitamiseks puhastada? Teie kasutatav virtualiseerimissĂŒsteem ei pruugi oodata puhastusprotsessi lĂ”puleviimist.
  • Mis juhtub, kui lĂŒlitate vĂ€lja kĂ”ik sĂ”lmed korraga? Saate mĂ€rkimisvÀÀrse tööseisaku, kui pod’id liiguvad uutele sĂ”lmedele.

Me vajame Ă”iget viisi podide migreerimiseks vanadelt noodidelt ning samal ajal peame olema kindlad, et ĂŒkski meie töösisestest protsessidest ei kĂ€ivitu muudatuste tegemise ajal nodide kohta. VĂ”i kui teeme kogu klastri asenduse, nagu nĂ€ites (st asendame VM-pildid), tahame töötavad rakendused vana nodide pealt uutele ĂŒle kanda. MĂ”lemal juhul soovime vĂ€ltida uute podide ajastamist vanadele nodidele ja seejĂ€rel kĂ”igi töötavate podide ĂŒmberpaigutamist. Selle saavutamiseks saame kasutada kĂ€sku kubectl drain.

KĂ”ikide podide ĂŒmberpaigutamine nodilt

Drain-operatsioon vÔimaldab nÔustada kÔiki podide nodilt. Drain'i kÀivitamisel mÀrgitakse node kui unschedulable (lipp NoSchedule). See takistab uudsete podide tekke. SeejÀrel drain hakkab podide node'ilt vÀlja tÔstma, lÔpetades konteinerid, mis on hetkel nodis töötavad, edastades neile signaali TERM konteineritele podis.

Kuigi kubectl drain Kuigi see toimetab podide ĂŒmberpaigutamisega hĂ€sti, on veel kaks tegurit, mis vĂ”ivad pĂ”hjustada drain operatsiooni ebaĂ”nnestumise:

  • Teie rakendus peab suutma Ă”iget moodi lĂ”petada signaali saamisel. TERM Kui podid tĂ”stetakse vĂ€lja, saadab Kubernetes signaali TERM konteineritele ja ootab nende lĂ”petamist mÀÀratud aja jooksul, pĂ€rast mida, kui nad ei ole lĂ”petanud, lĂ”petatakse need jĂ”u abil. Igatahes, kui teie konteiner ei tĂ”lgenda signaali Ă”igesti, vĂ”ite ikkagi lĂ”petada podid vale moodi, kui nad on mingil konkreetsel hetkel töös (nt kĂ€ib tehing andmebaasis).
  • Te kaotate kĂ”ik podid, kus asub teie rakendus. See vĂ”ib olla ajal, mil uued konteinerid alustavad tööd uutelt nodidelt, vĂ”i kui teie podid on juurutatud ilma kontrolleriteta, ei pruugi need ĂŒldse uuesti kĂ€ivituda.

VĂ€ltige seisakuaega

Kuna soovime minimaalset seisaku aega vabatahtliku tÔrke korral, nÀiteks nodi drain operatsiooni tÔttu, pakub Kubernetes jÀrgmisi tÔrkeid vÀhendamise vÔimalusi:

TsĂŒkli teistes osades kasutame neid Kubernetes funktsioone podide ĂŒleviimise tagajĂ€rgede leevendamiseks. PĂ”himĂ”tte jĂ€lgimise lihtsustamiseks 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 config on a minimal example Deployment, which manages nginx pods in the cluster. Furthermore, the configuration describes a resource Teenused, which can be used to access the nginx pods in the cluster.

Throughout this cycle, we will iteratively expand this configuration so that in the end it includes all capabilities provided by Kubernetes to minimize downtime.

To obtain a fully implemented and tested version of Kubernetes cluster updates for zero downtime on AWS and other resources, visit Gruntwork.io.

Vaata ka teisi artikleid meie blogis:

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster