Omume kacha mma maka igbe Kubernetes: Nyocha ahụike

Omume kacha mma maka igbe Kubernetes: Nyocha ahụike

TL; DR

  • Iji nweta ọkwa dị elu nke arịa na microservices, ndekọ na metrik mbụ ezughị.
  • Maka mgbake ngwa ngwa yana mmụba nkwụghachi, ngwa kwesịrị itinye ụkpụrụ High Observability Principle (HOP).
  • N'ọkwa ngwa, NOP chọrọ: ndekọ kwesịrị ekwesị, nleba anya nso, nlele ịdị ọcha, na nchụso arụmọrụ/mgbanwe.
  • Jiri ndenye ego dị ka mmewere nke NOR njikereProbe и ịdị ndụProbe Kubernetes.

Gịnị bụ Nleba Ahụ Ike?

Mgbe ị na-emepụta ngwa dị oke mkpa na nke dị oke mkpa, ọ dị ezigbo mkpa iche echiche banyere akụkụ dị otú ahụ dị ka nnabata mmejọ. A na-ewere ngwa dị ka mmejọ ma ọ bụrụ na ọ gbakere ngwa ngwa site na ọdịda. Ngwa igwe ojii na-ejikarị arụ ọrụ microservices - ebe etinyere akụrụngwa ọ bụla n'ime akpa dị iche. Na iji hụ na ngwa dị na k8s dị nke ukwuu mgbe ị na-emepụta ụyọkọ, ịkwesịrị ịgbaso usoro ụfọdụ. Otu n'ime ha bụ Template Check Health. Ọ na-akọwa otú ngwa si agwa k8s na ọ dị mma. Nke a abụghị naanị ozi gbasara ma pọd ahụ na-agba ọsọ, kamakwa maka otu ọ na-enweta ma na-aza arịrịọ. Ka Kubernetes na-amakwu banyere ahụike nke pọd ahụ, ọ na-eme ka ọ mara ihe na-eme mkpebi gbasara nhazi okporo ụzọ na nhazi ibu. Ya mere, ụkpụrụ nhụbaanya dị elu na-enye ohere ka ngwa ahụ zaghachi arịrịọ n'oge.

Ụkpụrụ nleba anya dị elu (HOP)

Ụkpụrụ nke nlekọta dị elu bụ otu n'ime ụkpụrụ maka imebe containerized ngwa. N'ime ụlọ ọrụ microservices, ọrụ anaghị eche ka esi ahazi arịrịọ ha (na nke ọma), mana ihe dị mkpa bụ ka ha si enweta nzaghachi site na ọrụ nnata. Dịka ọmụmaatụ, iji chọpụta onye ọrụ, otu akpa na-ezigara onye ọzọ arịrịọ HTTP, na-atụ anya nzaghachi n'ụdị ụfọdụ - nke ahụ bụ ihe niile. PythonJS nwekwara ike hazie arịrịọ ahụ, Python Flask nwekwara ike ịzaghachi. Igbe dị ka igbe ojii nwere ọdịnaya zoro ezo na ibe ya. Otú ọ dị, ụkpụrụ NOP chọrọ ka ọrụ ọ bụla kpughee ọtụtụ njedebe API nke na-egosi otú ọ dị mma, yana ịdị njikere na ọnọdụ nnabata ya. Kubernetes na-arịọ ihe ngosi ndị a iji chee echiche site na usoro na-esote maka nhazi na nhazi ibu.

Ngwa igwe ojii ahaziri nke ọma na-edekọ ihe omume ya na-eji ọkọlọtọ I/O iyi STDERR na STDOUT. Ọzọ na-abịa ọrụ enyemaka, dịka ọmụmaatụ filebeat, logstash ma ọ bụ nke ọma, na-ebuga ndekọ na usoro nlekota nke etiti (dịka ọmụmaatụ Prometheus) na usoro nchịkọta ndekọ (ELK software suite). Eserese dị n'okpuru na-egosi ka ngwa igwe ojii si arụ ọrụ dịka ụkpụrụ ule ahụike siri dị na ụkpụrụ nleba anya dị elu.

Omume kacha mma maka igbe Kubernetes: Nyocha ahụike

Otu esi etinye ụkpụrụ nlele ahụike na Kubernetes?

N'ime igbe ahụ, k8s na-enyocha ọkwa nke pọd ahụ site na iji otu n'ime njikwa (Ihe nlere anya, Ntugharị oyiri, DaemonSets, StatefulSets wdg, wdg). N'ịchọpụta na pọd ahụ adaala n'ihi ihe ụfọdụ, onye njikwa na-anwa ịmalitegharị ya ma ọ bụ bugharịa ya na ọnụ ọzọ. Agbanyeghị, pọd nwere ike ịkọ na ọ na-arụ ọrụ, mana ya onwe ya anaghị arụ ọrụ. Ka anyị nye ọmụmaatụ: ngwa gị na-eji Apache dị ka sava weebụ, ị rụnyere akụrụngwa n'ọtụtụ pọd nke ụyọkọ ahụ. Ebe ọ bụ na ahaziri ọbá akwụkwọ ahụ ezighi ezi, arịrịọ niile nke ngwa na-aza na koodu 500 (mmejọ nkesa nke ime). Mgbe ị na-elele nnyefe, ịlele ọkwa nke pods na-enye nsonaazụ na-aga nke ọma, mana ndị ahịa na-eche echiche dị iche. Anyị ga-akọwa ọnọdụ a na-adịghị mma dị ka ndị a:

Omume kacha mma maka igbe Kubernetes: Nyocha ahụike

N'ihe atụ anyị, k8s na-eme nlele ọrụ. N'ime ụdị nkwenye a, kubelet na-enyocha ọnọdụ nke usoro ahụ n'ime akpa ahụ. Ozugbo ọ ghọtara na usoro ahụ akwụsịla, ọ ga-amaliteghachi ya. Ọ bụrụ na enwere ike idozi njehie ahụ site na ịmalitegharị ngwa ahụ, ma emebere mmemme ahụ iji mechie njehie ọ bụla, mgbe ahụ, nyocha ahụike usoro bụ naanị ihe ị ga-achọ ịgbaso NOP na Usoro Nleba Ahụ Ike. Naanị ọmịiko bụ na ọ bụghị njehie niile ka a na-ewepụ site na ịmalitegharị. N'okwu a, k8s na-enye ụzọ miri emi 2 iji chọpụta nsogbu na pọd: ịdị ndụProbe и njikereProbe.

LivenessProbe

N'oge ịdị ndụProbe kubelet na-eme ụdị nlele atọ: ọ bụghị naanị na-ekpebi ma pọd ahụ na-agba ọsọ, kamakwa ma ọ dịla njikere ịnata na zaghachi nke ọma na arịrịọ:

  • Hazie arịrịọ HTTP na pọd ahụ. Nzaghachi ga-enwerịrị koodu nzaghachi HTTP dị na nso 200 ruo 399. Ya mere, koodu 5xx na 4xx na-egosi na pod na-enwe nsogbu, n'agbanyeghị na usoro ahụ na-agba ọsọ.
  • Iji nwalee pọd nwere ọrụ na-abụghị HTTP (dịka ọmụmaatụ, ihe nkesa ozi Postfix), ịkwesịrị ịmepụta njikọ TCP.
  • Mepụta iwu aka ike maka pọd (n'ime). A na-ewere nlele ahụ na-aga nke ọma ma ọ bụrụ na koodu mmecha iwu bụ 0.

Ihe atụ nke ka nke a si arụ ọrụ. Nkọwapụta pọd na-esote nwere ngwa NodeJS na-atụfu njehie 500 na arịrịọ HTTP Iji hụ na ebidogharịrị akpa ahụ mgbe anata ụdị njehie ahụ, anyị na-eji paramita 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

Nke a adịghị iche na nkọwapụta pọd ọ bụla, mana anyị na-agbakwunye ihe .spec.containers.livenessProbe... Oke httpGet na-anabata ụzọ ezigara arịrịọ HTTP GET (n'ihe atụ anyị nke a bụ /, mana n'ọnọdụ ọgụ enwere ike ịnwe ihe dị ka /api/v1/status). LivenessProbe ọzọ na-anabata oke initialDelaySeconds, nke na-enye ọrụ nkwenye ka ichere ọnụọgụ sekọnd. Ọ dị mkpa igbu oge n'ihi na akpa ahụ chọrọ oge ịmalite, ma mgbe ịmalitegharị ya agaghị adị ruo oge ụfọdụ.

Iji tinye ntọala a na ụyọkọ, jiri:

kubectl apply -f pod.yaml

Mgbe sekọnd ole na ole gachara, ị nwere ike ịlele ọdịnaya nke pọd site na iji iwu a:

kubectl describe pods node500

Na njedebe nke mmepụta, chọta nke ahụ bụ ihe.

Dị ka ị na-ahụ, livenessProbe butere arịrịọ HTTP GET, akpa ahụ mepụtara njehie 500 (nke bụ ihe akwadoro ime), kubelet maliteghachiri ya.

Ọ bụrụ na ị na-eche ka esi ahazi ngwa NideJS, nke a bụ app.js na Dockerfile ejiri mee ihe:

ngwa.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" ]

Ọ dị mkpa ịmara nke a: livenessProbe ga-amalitegharị akpa ahụ naanị ma ọ daa. Ọ bụrụ na ịmalitegharị emeghị ka njehie ahụ na-egbochi akpa ahụ ịgba ọsọ, kubelet agaghị enwe ike ime ihe iji dozie nsogbu ahụ.

njikereProbe

readinessProbe na-arụ ọrụ n'otu aka ahụ na livenessProbes (Arịrịọ GET, nkwukọrịta TCP na mmebe iwu), ewezuga omume nchọpụta nsogbu. Akpaliteghị akpa nke achọpụtara ọdịda ya, mana ọ dịpụrụ adịpụ na okporo ụzọ mbata. Were ya na otu n'ime arịa ndị ahụ na-eme ọtụtụ mgbako ma ọ bụ na-ebu ibu, na-eme ka oge nzaghachi na-abawanye. N'ihe banyere livenessProbe, a na-akpalite nlele nnweta nzaghachi (site na nkeji nlele sekọnd), emesia kubelet malitegharịa akpa ahụ. Mgbe amalitere, akpa ahụ na-amalite ịrụ ọrụ na-akpa ike ma malitegharịa ọzọ. Nke a nwere ike ịdị mkpa maka ngwa ndị chọrọ ọsọ nzaghachi. Dịka ọmụmaatụ, ụgbọ ala mgbe ọ nọ n'okporo ụzọ na-echere nzaghachi site na ihe nkesa, nzaghachi na-egbu oge - ụgbọ ala ahụ na-abanyekwa na mberede.

Ka anyị dee nkọwapụta rednessProbe nke ga-edobe oge nzaghachi arịrịọ GET ihe na-erughị sekọnd abụọ, ngwa ahụ ga-aza arịrịọ GET ka sekọnd ise gachara. Faịlụ pod.yaml kwesịrị ịdị ka nke a:

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

Ka anyị tinye pọd nwere kubectl:

kubectl apply -f pod.yaml

Ka anyị chere sekọnd ole na ole wee hụ ka readinessProbe si arụ ọrụ:

kubectl describe pods nodedelayed

Na njedebe nke mmepụta ị nwere ike ịhụ na ụfọdụ ihe omume yiri ya Nke a.

Dịka ị na-ahụ, kubectl ebidoghị pọd ahụ mgbe oge nlele gafere 2 sekọnd. Kama, ọ kagburu arịrịọ ahụ. A na-ebugharị nkwukọrịta na-abata na pọd ndị ọzọ na-arụ ọrụ.

Rịba ama na ugbu a ewepụla pọd ahụ, ụzọ kubectl na-arịọ ya ọzọ: azịza nye arịrịọ GET anaghị egbu oge.

Maka ntụnyere, n'okpuru bụ faịlụ app.js gbanwetụrụ:

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
Tupu ọbịbịa nke ngwa igwe ojii, ndekọ bụ ụzọ bụ isi nke nlekota na ịlele ahụike ngwa. Agbanyeghị, ọ nweghị ụzọ isi mee ihe mgbazi ọ bụla. Ndekọ ndekọ ka bara uru taa; [Enwere ike ịme ihe niile na-enweghị ngwa igwe ojii na-eji monit, dịka ọmụmaatụ, mana na k8s ọ bịara dị mfe karị :) - ndetu nchịkọta akụkọ. ]

Taa, a ga-emezigharị ihe fọrọ nke nta ka ọ bụrụ ozugbo, yabụ ngwa agaghịzi abụ igbe ojii. Mba, ha kwesịrị igosi njedebe njedebe nke na-enye ohere ka usoro nlekota nyochaa ajụjụ ma na-anakọta data bara uru gbasara ọnọdụ usoro ka ha nwee ike ịzaghachi ozugbo ma ọ bụrụ na ọ dị mkpa. A na-akpọ nke a ụkpụrụ Nlereanya Nrụ Ọrụ, nke na-agbaso ụkpụrụ High Observability (HOP).

Kubernetes na-enye ụdị nlele ahụike 2 na ndabara: readinessProbe na livenessProbe. Ha abụọ na-eji otu ụdị nlele anya (arịrịọ HTTP GET, nkwukọrịta TCP na mkpochapụ iwu). Ha dị iche na mkpebi ha na-eme maka nsogbu ndị dị na pọd. livenessProbe malitegharịa akpa ahụ n'olileanya na njehie ahụ agaghị eme ọzọ, na readinessProbe na-ekewapụ pọd ahụ site na okporo ụzọ na-abata ruo mgbe edoziri ihe kpatara nsogbu ahụ.

Nhazi ngwa kwesịrị ekwesị kwesịrị ịgụnye ụdị nlele abụọ ahụ ma hụ na ha na-anakọta data zuru oke, ọkachasị mgbe atụpụrụ ihe dị iche. O kwesịkwara igosi njedebe API dị mkpa nke na-enye usoro nlekota (Prometheus) na metric ahụike dị mkpa.

isi: www.habr.com

Tinye a comment