Hababka ugu Wanaagsan ee Kubernetes Konteenarada: Hubinta Caafimaadka

Hababka ugu Wanaagsan ee Kubernetes Konteenarada: Hubinta Caafimaadka

TL, DR

  • Si loo gaaro indho-indheyn sare oo ah weelasha iyo adeeg-yaraha, logyada iyo cabbirada aasaasiga ah kuma filna.
  • Soo kabashada degdega ah iyo adkeysi kordhinta, codsiyadu waa in lagu dabaqo Mabaadi'da Kormeerida Sare (HOP).
  • Heerka codsiga, NOP waxay u baahan tahay: qorid sax ah, la socodka dhow, hubinta fayodhawrka, iyo raadinta waxqabadka/kala guurka.
  • Isticmaal jeegaga sidii shay ka mid ah NOR diyaarsanaantaProbe ΠΈ nooleProbe Kubernetes.

Waa maxay Habka Hubinta Caafimaadka?

Markaad naqshadaynayso hawl muhiim ah oo aad loo heli karo, aad bay muhiim u tahay in laga fikiro dhinacan oo kale sida dulqaadka qaladka. Codsiga waxaa loo tixgaliyaa inuu u dulqaadan karo qaladka haddii uu si dhakhso ah uga soo kabsado guuldarada. Codsiga daruuriga ah ee caadiga ah wuxuu isticmaalaa qaab-dhismeedka microservices - halkaasoo qayb kasta la geliyo weel gaar ah. Iyo si loo hubiyo in codsiga k8s uu yahay mid si heer sare ah loo heli karo marka aad naqshadeyneyso koox, waxaad u baahan tahay inaad raacdo qaabab gaar ah. Waxaa ka mid ah Qaabka Hubinta Caafimaadka. Waxay qeexaysaa sida codsigu ula xidhiidho k8s inuu caafimaad qabo. Tani ma aha oo kaliya macluumaadka ku saabsan in boodhku socdo, laakiin sidoo kale ku saabsan sida ay u hesho iyo uga jawaabto codsiyada. Inta badan Kubernetes waxay ka warqabtaa caafimaadka boodhka, go'aamada ugu caqli badan ee ay ka qaadato habaynta taraafikada iyo isku dheelitirka culeyska. Markaa, Mabda'a Kormeerka Sare wuxuu u oggolaanayaa codsiga inuu kaga jawaabo codsiyada hab wakhti ku habboon.

Mabaadi'da Indho-indheynta Sare (HOP)

Mabda'a eegnow sare waa mid ka mid ah mabaadi'da naqshadaynta codsiyada weelaysan. Nashqadaynta adeega-yaraha, adeegyadu ma daneeyaan sida codsigooda loo habeeyo (iyo si sax ah), laakiin waxa muhiimka ahi waa sida ay jawaabaha uga helaan adeegyada. Tusaale ahaan, si loo xaqiijiyo isticmaalaha, hal weel ayaa codsi HTTP u soo diraya mid kale, isaga oo filaya jawaab qaab gaar ah - waa intaas. PythonJS sidoo kale way habayn kartaa codsiga, Python Flask ayaa ka jawaabi karta. Weelasha waa sida sanduuqyo madow oo ay ku jiraan waxyaabo qarsoon oo midba midka kale ku jira. Si kastaba ha ahaatee, mabda'a NOP wuxuu u baahan yahay adeeg kasta si uu u soo bandhigo meelo badan oo API ah oo tilmaamaya sida uu u caafimaad qabo, iyo sidoo kale diyaargarowga iyo heerka dulqaadka qaladka. Kubernetes waxay codsanaysaa tilmaamayaashan si ay uga fikirto tillaabooyinka soo socda ee isku-dheellitirka iyo isu-dheellitirka rarka.

Codsiga daruuriga ah ee si wanaagsan loo nashqadeeyay waxa uu diiwaangeliyaa dhacdooyinkiisa ugu muhiimsan isagoo isticmaalaya heerka I/O durdurrada STDERR iyo STDOUT. Waxa ku xiga adeeg caawiye, tusaale filebeat, logstash ama faseexatada, gaadhsiinta diiwaanada nidaamka la socodka dhexe (tusaale Prometheus) iyo nidaamka ururinta log (ELK software suite). Jaantuska hoose wuxuu muujinayaa sida codsiga daruurtu u shaqeeyo iyadoo la raacayo Habka Tijaabada Caafimaadka iyo Mabaadi'da Kormeerka Sare.

Hababka ugu Wanaagsan ee Kubernetes Konteenarada: Hubinta Caafimaadka

Sida loo dabaqo Habka Hubinta Caafimaadka ee Kubernetes?

Marka laga soo tago sanduuqa, k8s waxay la socdaan heerka boodhka iyagoo isticmaalaya mid ka mid ah kontaroolayaasha (Kala-baxyada, Dib u habeynta, DaemonSets, StatefulSets iwm, iwm.). Markii la ogaaday in boodhku u dhacay sabab qaar ka mid ah, kontarooluhu wuxuu isku dayaa inuu dib u bilaabo ama u wareejiyo noodh kale. Si kastaba ha ahaatee, boodhka ayaa laga yaabaa inuu sheego inuu kor u kacay oo shaqeynayo, laakiin lafteedu ma shaqeyneyso. Aan siino tusaale: Codsigaagu wuxuu u isticmaalaa Apache sida server-ka shabakadda, waxaad ku rakibtay qaybta dhowr qaybood oo kutlada ah. Maadaama maktabadda si khaldan loo habeeyey, dhammaan codsiyada arjiga waxay kaga jawaabaan koodka 500 (khaladaadka serverka gudaha). Marka la hubinayo dhalmada, hubinta heerka boodhka waxay ku siinaysaa natiijo guul leh, laakiin macaamiishu waxay u maleynayaan si ka duwan. Xaaladdan aan loo baahnayn waxaynu ku qeexi doonaa sida soo socota:

Hababka ugu Wanaagsan ee Kubernetes Konteenarada: Hubinta Caafimaadka

Tusaalahayaga, k8s ayaa sameeya hubinta shaqeynta. Xaqiijinta noocaan ah, kubeletku wuxuu si joogto ah u hubinayaa xaaladda habka weelka ku jira. Marka uu fahmo in hawshu joogsatay, dib ayuu u bilaabi doonaa. Haddii qaladka lagu xalin karo si fudud dib u bilaabista codsiga, iyo barnaamijka waxaa loogu talagalay in lagu xiro qalad kasta, markaa habka hubinta caafimaadka ayaa ah waxa kaliya ee aad u baahan tahay inaad raacdo NOP iyo Habka Imtixaanka Caafimaadka. Nixiga kaliya ayaa ah in aan dhammaan khaladaadka lagu tirtirin dib u bilaabista. Xaaladdan oo kale, k8s waxay bixisaa 2 siyaabood oo qoto dheer oo lagu garto dhibaatooyinka ku jira boodhka: nooleProbe ΠΈ diyaarsanaantaProbe.

LivenessProbe

Inta lagu jiro nooleProbe kubelet waxay qabataa 3 nooc oo jeegag ah: kaliya maaha inay go'aamiso in boodhka uu socdo, laakiin sidoo kale inay diyaar u tahay in la helo oo si waafi ah uga jawaabto codsiyada:

  • U samee codsi HTTP ah boodhka. Jawaabtu waa inay ka kooban tahay koodka jawaabta HTTP oo u dhexeeya 200 ilaa 399. Markaa, koodka 5xx iyo 4xx calaamad muujinaysa in boodhka ay dhibaato ka haysato, inkasta oo hawshu socoto.
  • Si aad u tijaabiso boodhadhka adeegyada aan ahayn HTTP (tusaale, boostada boostada ee Postfix), waxaad u baahan tahay inaad samaysato xidhiidh TCP ah.
  • U fuli amar aan sabab lahayn oo loogu talagalay pod (gudaha). Jeegga ayaa loo arkaa mid guulaystay haddii koodka dhammaystirka talisku yahay 0.

Tusaale ahaan sida tani u shaqeyso. Qeexitaanka boodhka soo socda waxa ku jira codsi NodeJS kaas oo tuuraya khalad 500 ah codsiyada HTTP. Si loo hubiyo in weelka dib loo bilaabay marka uu helayo khaladkaas, waxaanu isticmaalnaa cabirka livenessProbe:

apiVersion: v1
kind: Pod
metadata:
 name: node500
spec:
 containers:
   - image: magalix/node500
     name: node500
     ports:
       - containerPort: 3000
         protocol: TCP
     livenessProbe:
       httpGet:
         path: /
         port: 3000
       initialDelaySeconds: 5

Tani kama duwana qeexitaan kasta oo kale, laakiin waxaan ku daraynaa shay .spec.containers.livenessProbe. Halbeegga httpGet aqbala jidka loo diro codsiga HTTP GET (tusaale ahaan tani waa /, laakiin xaaladaha dagaalka waxaa jiri kara wax la mid ah /api/v1/status). LivenessProbe kale waxay aqbashaa cabbir initialDelaySeconds, kaas oo faraya hawlgalka xaqiijinta inuu sugo tiro cayiman oo ilbiriqsi ah. Dib u dhigista ayaa loo baahan yahay sababtoo ah weelku wuxuu u baahan yahay wakhti uu ku bilaabo, iyo marka dib loo bilaabo waa la heli karaa in muddo ah.

Si aad goobtan ugu dabaqdo kooxa, isticmaal:

kubectl apply -f pod.yaml

Dhowr ilbiriqsi ka dib, waxaad hubin kartaa waxa ku jira boodhka adoo isticmaalaya amarka soo socda:

kubectl describe pods node500

Dhamaadka wax soo saarka, raadi taasi waa waxa.

Sida aad arki karto, livenessProbe waxa ay bilawday codsi HTTP GET ah, weelku waxa uu dhaliyay khalad 500 ah (taas oo ah waxa loo qorsheeyay in la sameeyo), kubelet-ka ayaa dib u bilaabay.

Haddii aad la yaabban tahay sida codsiga NideJS loo qorsheeyay, halkan waa app.js iyo Dockerfile ee la isticmaalay:

app.js

var http = require('http');

var server = http.createServer(function(req, res) {
    res.writeHead(500, { "Content-type": "text/plain" });
    res.end("We have run into an errorn");
});

server.listen(3000, function() {
    console.log('Server is running at 3000')
})

Dockerfile

FROM node
COPY app.js /
EXPOSE 3000
ENTRYPOINT [ "node","/app.js" ]

Waa muhiim in tan la ogaado: livenessProbe waxay dib u bilaabi doontaa oo kaliya weelka haddii uu guuldareysto. Haddii dib u bilaabmi waydo khaladka ka hortagaya in weelka uu socdo, kubeletku ma awoodi doono inuu qaado tillaabo uu ku saxo dhibaatada.

diyaarsanaantaProbe

readinessProbe waxay u shaqeysaa si la mid ah livenessProbes (codsiyada GET, isgaarsiinta TCP iyo fulinta amarka), marka laga reebo falalka cilad-saarka. Weelka uu ku jiro cilladda dib looma bilaabo, laakiin waa ka go'doonsan tahay taraafikada soo socota. Bal qiyaas in mid ka mid ah weelasha uu samaynayo xisaabin badan ama uu ku jiro culays culus, taasoo keenaysa in wakhtiyada jawaab-celinta ay kordhiso. Marka laga hadlayo livenessProbe, hubinta helitaanka jawaabta ayaa la kiciyaa (iyada oo la marayo wakhtiga ka baxsigaSeconds check parameter), ka dib kubeletku wuxuu dib u bilaabayaa weelka. Marka la bilaabo, weelku wuxuu bilaabaa inuu qabto hawlo kheyraad ah oo dib loo bilaabo. Tani waxay muhiim u noqon kartaa codsiyada u baahan xawaaraha jawaabta. Tusaale ahaan, baabuur isagoo jidka ku jira oo sugaya jawaabta server-ka, jawaabta waa daahday - baabuurkuna wuxuu galay shil.

Aynu qorno qeexida dib-u-celintaProbe kaaso dejin doona wakhtiga jawaabta codsiga GET in aan ka badnayn laba ilbiriqsi, arjiguna wuxuu ka jawaabi doonaa codsiga GET 5 ilbiriqsi ka dib. Faylka pod.yaml waa inuu u ekaado sidan:

apiVersion: v1
kind: Pod
metadata:
 name: nodedelayed
spec:
 containers:
   - image: afakharany/node_delayed
     name: nodedelayed
     ports:
       - containerPort: 3000
         protocol: TCP
     readinessProbe:
       httpGet:
         path: /
         port: 3000
       timeoutSeconds: 2

Aan geyno boodh leh kubectl:

kubectl apply -f pod.yaml

Aan sugno dhowr ilbiriqsi ka dibna aragno sida diyaargarowgaProbe u shaqeeyay:

kubectl describe pods nodedelayed

Dhamaadka wax soo saarka waxaad arki kartaa in dhacdooyinka qaarkood ay isku mid yihiin kan.

Sida aad arki karto, kubectl dib uma bilaabin boodhka markii wakhtiga jeeggu dhaafiyay 2 ilbiriqsi. Halkii, wuu joojiyay codsigii. Isgaadhsiinta soo socota ayaa loo jiheeyaa meelo kale oo shaqaynaysa.

Ogsoonow in hadda boodhka laga saaray, kubectl dariiqyada ayaa codsanaya mar kale: jawaabaha codsiyada GET dib looma daahin.

Isbarbardhigga, hoos waa faylka app.js ee wax laga beddelay:

var http = require('http');

var server = http.createServer(function(req, res) {
   const sleep = (milliseconds) => {
       return new Promise(resolve => setTimeout(resolve, milliseconds))
   }
   sleep(5000).then(() => {
       res.writeHead(200, { "Content-type": "text/plain" });
       res.end("Hellon");
   })
});

server.listen(3000, function() {
   console.log('Server is running at 3000')
})

TL, DR
Kahor imaatinka codsiyada daruuraha, logu wuxuu ahaa habka ugu muhiimsan ee la socodka iyo hubinta caafimaadka codsiga. Si kastaba ha ahaatee, ma jirin si loo qaado tallaabo sax ah. Loggu weli waa faa'iido maanta; waxay u baahan yihiin in la ururiyo oo loo diro nidaamka ururinta log si loo falanqeeyo xaaladaha degdegga ah iyo samaynta go'aannada. [Waxaas oo dhan waa la samayn karaa iyada oo aan la isticmaalin codsiyada daruuraha iyadoo la adeegsanayo monit, tusaale ahaan, laakiin k8s waxay noqotay mid aad u fudud :) - qoraalka tifaftiraha. ]

Maanta, sixitaanka waa in la sameeyaa ku dhawaad ​​​​waqtiga dhabta ah, sidaas darteed codsiyadu ma sii ahaanayaan sanduuqyo madow. Maya, waa inay muujiyaan qodobbada u oggolaanaya nidaamyada la socodka inay waydiiyaan oo ururiyaan xog qiimo leh oo ku saabsan xaaladda geeddi-socodka si ay isla markiiba uga jawaabaan haddii loo baahdo. Tan waxa loo yaqaan Qaabka Naqshadeynta Imtixaanka Waxqabadka, kaas oo raacaya Mabaadi'da Daawashada Sare (HOP).

Kubernetes waxay bixisaa 2 nooc oo baaritaan caafimaad ah si caadi ah: u diyaarsanaantaProbe iyo livenessProbe. Labaduba waxay isticmaalaan jeegag isku mid ah (codsiyada HTTP GET, isgaarsiinta TCP iyo fulinta amarka). Waxay ku kala duwan yihiin go'aamada ay gaadhaan si ay uga jawaabaan dhibaatooyinka ku jira boodhka. livenessProbe waxa ay dib u bilaabaysaa weelka iyada oo rajaynaysa in khaladku aanu soo noqon doonin mar kale, diyaarna u ahaanshahaProbe waxa ay ka saartaa boodhka taraafikada soo socda ilaa inta la xalinayo dhibaatada keentay.

Naqshadaynta codsiga saxda ah waa inay ku jirtaa labada nooc ee hubinta oo hubi inay ururiyaan xog ku filan, gaar ahaan marka laga reebo la tuuro. Waa inay sidoo kale muujisaa meelaha muhiimka ah ee API-ga ee bixiya nidaamka la socodka (Prometheus) oo leh cabbiro caafimaad oo muhiim ah.

Source: www.habr.com

Add a comment