Labing maayo nga mga Praktis para sa mga Kubernetes Container: Mga Pagsusi sa Panglawas

Labing maayo nga mga Praktis para sa mga Kubernetes Container: Mga Pagsusi sa Panglawas

TL; DR

  • Aron makab-ot ang taas nga obserbasyon sa mga sudlanan ug microservice, ang mga troso ug panguna nga sukatan dili igo.
  • Alang sa mas paspas nga pagkaayo ug dugang nga kalig-on, ang mga aplikasyon kinahanglan nga mogamit sa High Observability Principle (HOP).
  • Sa lebel sa aplikasyon, ang NOP nanginahanglan: husto nga pag-log, suod nga pag-monitor, pagsusi sa kahimsog, ug pagsubay sa pasundayag/transisyon.
  • Gamita ang mga tseke isip elemento sa NOR kaandam Probe ΠΈ livenessProbe Kubernetes.

Unsa ang Health Check Template?

Kung nagdesinyo sa usa ka kritikal nga misyon ug magamit kaayo nga aplikasyon, hinungdanon nga hunahunaon ang bahin sa ingon nga aspeto sama sa pagtugot sa sayup. Ang usa ka aplikasyon gikonsiderar nga fault tolerant kung kini dali nga mabawi gikan sa pagkapakyas. Ang kasagaran nga cloud application naggamit ug microservices architecture - diin ang matag component gibutang sa bulag nga sudlanan. Ug aron masiguro nga ang aplikasyon sa k8s magamit kaayo kung magdesinyo ka usa ka kumpol, kinahanglan nimo nga sundon ang pipila nga mga sumbanan. Lakip niini mao ang Health Check Template. Gihubit niini kung giunsa ang aplikasyon nakigsulti sa k8s nga kini himsog. Kini mao ang dili lamang sa impormasyon kon ang pod nagdagan, apan usab kon sa unsang paagi kini makadawat ug pagtubag sa mga hangyo. Ang mas daghang Kubernetes nga nahibal-an bahin sa kahimsog sa pod, ang labi ka maalamon nga mga desisyon bahin sa pag-ruta sa trapiko ug pagbalanse sa load. Busa, ang High Observability Principle nagtugot sa aplikasyon sa pagtubag sa mga hangyo sa tukma sa panahon nga paagi.

Taas nga Observability Principle (HOP)

Ang prinsipyo sa taas nga obserbasyon mao ang usa sa mga prinsipyo sa pagdesinyo sa mga containerized nga aplikasyon. Sa usa ka arkitektura sa microservices, ang mga serbisyo wala magtagad kung giunsa ang pagproseso sa ilang hangyo (ug sa husto nga paagi), apan ang hinungdanon mao kung giunsa nila makadawat mga tubag gikan sa mga serbisyo nga nakadawat. Pananglitan, aron mapamatud-an ang usa ka tiggamit, ang usa ka sudlanan nagpadala usa ka hangyo sa HTTP sa lain, nagpaabut usa ka tubag sa usa ka piho nga format - mao ra kana. Mahimo usab nga iproseso sa PythonJS ang hangyo, ug ang Python Flask makatubag. Ang mga sudlanan sama sa itom nga mga kahon nga adunay tinago nga mga sulud sa usag usa. Bisan pa, ang prinsipyo sa NOP nanginahanglan sa matag serbisyo nga ibutyag ang daghang mga endpoint sa API nga nagpakita kung unsa kini ka himsog, ingon man ang pagkaandam niini ug kahimtang sa pagtugot sa sayup. Gihangyo ni Kubernetes kini nga mga timailhan aron mahunahuna ang mga sunod nga lakang alang sa pag-ruta ug pagbalanse sa load.

Ang usa ka maayong pagkadisenyo nga cloud application nagtala sa mga nag-unang panghitabo niini gamit ang standard nga I/O stream nga STDERR ug STDOUT. Sunod moabut ang usa ka auxiliary nga serbisyo, pananglitan filebeat, logstash o fluentd, paghatud sa mga troso sa usa ka sentralisadong sistema sa pagmonitor (pananglitan Prometheus) ug usa ka sistema sa pagkolekta sa log (ELK software suite). Ang diagram sa ubos nagpakita kung giunsa ang usa ka cloud application naglihok sumala sa Health Test Pattern ug sa High Observability Principle.

Labing maayo nga mga Praktis para sa mga Kubernetes Container: Mga Pagsusi sa Panglawas

Giunsa paggamit ang Health Check Pattern sa Kubernetes?

Gawas sa kahon, gimonitor sa k8s ang kahimtang sa mga pod gamit ang usa sa mga controllers (Mga pagpahimutang, Mga ReplicaSets, Mga DaemonSets, StatefulSets etc., etc.). Kay nadiskobrehan nga ang pod nahulog tungod sa usa ka rason, ang controller mosulay sa pagsugod pag-usab o pagbalhin niini ngadto sa laing node. Bisan pa, ang usa ka pod mahimong magreport nga kini nagdagan, apan kini mismo wala molihok. Maghatag kita usa ka pananglitan: ang imong aplikasyon naggamit sa Apache ingon usa ka web server, imong gi-install ang sangkap sa daghang mga pod sa cluster. Tungod kay ang librarya sayop nga gi-configure, ang tanan nga mga hangyo sa aplikasyon motubag sa code 500 (internal server error). Kung gisusi ang pagpadala, ang pagsusi sa kahimtang sa mga pod naghatag usa ka malampuson nga sangputanan, apan lahi ang gihunahuna sa mga kostumer. Atong ihulagway kining dili maayong sitwasyon sama sa mosunod:

Labing maayo nga mga Praktis para sa mga Kubernetes Container: Mga Pagsusi sa Panglawas

Sa among pananglitan, ang k8s pagsusi sa pagpaandar. Niini nga matang sa pag-verify, ang kubelet padayon nga nagsusi sa kahimtang sa proseso sa sudlanan. Kung nasabtan na niya nga nahunong na ang proseso, i-restart niya kini. Kung ang kasaypanan masulbad pinaagi sa yano nga pagsugod pag-usab sa aplikasyon, ug ang programa gidesinyo sa pagsira sa bisan unsang sayup, nan usa ka proseso sa pagsusi sa kahimsog ang kinahanglan nimo nga sundon ang NOP ug ang Sumbanan sa Pagsulay sa Panglawas. Ang bugtong kaluoy mao nga dili tanan nga mga sayup mawagtang pinaagi sa pagsugod pag-usab. Niini nga kaso, ang k8s nagtanyag og 2 ka mas lawom nga paagi sa pag-ila sa mga problema sa pod: livenessProbe ΠΈ kaandam Probe.

LivenessProbe

Panahon sa livenessProbe Ang kubelet nagpahigayon ug 3 ka matang sa mga pagsusi: dili lamang nagtino kon ang pod nagdagan, kondili usab kon andam ba kini nga modawat ug igo nga pagtubag sa mga hangyo:

  • Paghimo ug HTTP nga hangyo sa pod. Ang tubag kinahanglan nga adunay usa ka HTTP response code sa range gikan sa 200 ngadto sa 399. Busa, ang mga code 5xx ug 4xx signal nga ang pod adunay mga problema, bisan pa nga ang proseso nagdagan.
  • Aron masulayan ang mga pod nga adunay mga serbisyo nga dili HTTP (pananglitan, ang Postfix mail server), kinahanglan nimo nga maghimo usa ka koneksyon sa TCP.
  • Ipatuman ang usa ka arbitraryong sugo alang sa usa ka pod (sa sulod). Ang tseke giisip nga malampuson kung ang command completion code kay 0.

Usa ka pananglitan kung giunsa kini molihok. Ang sunod nga kahulugan sa pod adunay usa ka aplikasyon sa NodeJS nga naghulog sa usa ka 500 nga sayup sa mga hangyo sa HTTP. Aron masiguro nga ang sudlanan gi-restart kung nakadawat sa ingon nga sayup, gigamit namon ang parameter sa 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

Kini walay kalainan gikan sa bisan unsa nga lain nga pod kahulugan, apan kita nagdugang sa usa ka butang .spec.containers.livenessProbe. Parameter httpGet midawat sa dalan diin ang HTTP GET nga hangyo gipadala (sa among pananglitan mao kini /, apan sa mga senaryo sa panagsangka mahimong adunay usa ka butang nga sama /api/v1/status). Ang laing livenessProbe midawat sa usa ka parameter initialDelaySeconds, nga nagmando sa operasyon sa pag-verify nga maghulat sa usa ka piho nga gidaghanon sa mga segundo. Ang paglangan gikinahanglan tungod kay ang sudlanan nagkinahanglan og panahon sa pagsugod, ug sa diha nga restart kini dili magamit sa pipila ka panahon.

Aron magamit kini nga setting sa usa ka cluster, gamita ang:

kubectl apply -f pod.yaml

Human sa pipila ka segundo, mahimo nimong susihon ang mga sulod sa pod gamit ang mosunod nga sugo:

kubectl describe pods node500

Sa katapusan sa output, pangitaa mao na.

Sama sa imong makita, ang livenessProbe nagsugod sa usa ka HTTP GET nga hangyo, ang sudlanan nakamugna og usa ka sayup nga 500 (nga mao ang giprograma nga buhaton), ug ang kubelet nag-restart niini.

Kung nahibulong ka kung giunsa naprograma ang aplikasyon sa NideJS, ania ang app.js ug Dockerfile nga gigamit:

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

Importante nga timan-an kini: ang livenessProbe mag-restart lang sa sudlanan kung kini mapakyas. Kung ang pag-restart dili magtul-id sa sayup nga nagpugong sa sudlanan sa pagdagan, ang kubelet dili makahimo aksyon aron matul-id ang problema.

kaandam Probe

Ang pagkaandamProbe naglihok parehas sa livenessProbes (GET requests, TCP communications ug command execution), gawas sa troubleshooting actions. Ang sudlanan diin ang kapakyasan nakit-an wala gi-restart, apan nahimulag gikan sa umaabot nga trapiko. Hunahunaa nga ang usa sa mga sudlanan naghimo sa daghang mga kalkulasyon o ubos sa bug-at nga karga, hinungdan nga motaas ang oras sa pagtubag. Sa kaso sa livenessProbe, ang pagsusi sa pagkaanaa sa tubag ma-trigger (pinaagi sa timeoutSeconds check parameter), pagkahuman gi-restart sa kubelet ang sudlanan. Sa diha nga nagsugod, ang sudlanan magsugod sa paghimo sa mga buluhaton nga adunay daghang kapanguhaan ug gisugdan pag-usab. Mahimong kritikal kini alang sa mga aplikasyon nga nanginahanglan katulin sa pagtubag. Pananglitan, ang usa ka awto samtang sa dalan naghulat alang sa tubag gikan sa server, ang tubag nalangan - ug ang awto naaksidente.

Magsulat kita og redinessProbe nga kahulugan nga magtakda sa oras sa pagtubag sa hangyo sa GET nga dili molapas sa duha ka segundo, ug ang aplikasyon motubag sa hangyo sa GET human sa 5 segundos. Ang pod.yaml file kinahanglan tan-awon sama niini:

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

Mag-deploy kita og pod gamit ang kubectl:

kubectl apply -f pod.yaml

Maghulat kita og pipila ka segundo ug unya tan-awon kung giunsa ang pagkaandam sa Probe:

kubectl describe pods nodedelayed

Sa katapusan sa output imong makita nga ang pipila sa mga panghitabo susama kining usa.

Sama sa imong nakita, ang kubectl wala mag-restart sa pod kung ang oras sa pagsusi milapas sa 2 segundos. Hinuon, iyang gikansela ang hangyo. Ang umaabot nga mga komunikasyon gi-redirect sa uban, nagtrabaho pod.

Timan-i nga karon nga na-offload na ang pod, ang mga ruta sa kubectl naghangyo niini pag-usab: ang mga tubag sa mga hangyo sa GET wala na malangan.

Para sa pagtandi, sa ubos mao ang giusab nga app.js file:

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
Sa wala pa ang pag-abut sa mga aplikasyon sa panganod, ang mga troso ang panguna nga paagi sa pag-monitor ug pagsusi sa kahimsog sa aplikasyon. Apan, walay paagi sa paghimo sa bisan unsa nga corrective aksyon. Mapuslanon gihapon ang mga troso karon; kinahanglan kining kolektahon ug ipadala sa sistema sa pagkolekta sa troso para sa pag-analisar sa mga sitwasyon sa emerhensya ug paghimog mga desisyon. [Mahimo kining tanan nga walay mga cloud application gamit ang monit, pananglitan, apan sa k8s kini nahimong mas sayon ​​:) - nota sa editor. ]

Karon, ang mga pagtul-id kinahanglan nga buhaton hapit sa tinuud nga oras, busa ang mga aplikasyon dili na kinahanglan nga mga itom nga kahon. Dili, kinahanglan nga magpakita sila og mga endpoint nga nagtugot sa mga sistema sa pagmonitor sa pagpangutana ug pagkolekta sa bililhon nga datos mahitungod sa kahimtang sa mga proseso aron sila makatubag dayon kung gikinahanglan. Gitawag kini nga Performance Test Design Pattern, nga nagsunod sa High Observability Principle (HOP).

Ang Kubernetes nagtanyag og 2 ka matang sa mga pagsusi sa panglawas nga default: readyProbe ug livenessProbe. Parehong gigamit ang parehas nga klase sa mga tseke (HTTP GET requests, TCP communications ug command execution). Nagkalainlain sila kung unsang mga desisyon ang ilang gihimo agig tubag sa mga problema sa mga pod. Gi-restart sa livenessProbe ang sudlanan sa paglaum nga ang sayup dili na mahitabo pag-usab, ug ang pagkaandamProbe mobulag pod sa umaabot nga trapiko hangtod nga masulbad ang hinungdan sa problema.

Ang hustong disenyo sa aplikasyon kinahanglang maglakip sa duha ka matang sa pagsusi ug pagseguro nga mangolekta silag igong datos, ilabina kon dunay ilabay nga eksepsiyon. Kinahanglan usab nga ipakita niini ang kinahanglan nga mga endpoint sa API nga naghatag sa sistema sa pag-monitor (Prometheus) nga adunay hinungdanon nga mga sukatan sa kahimsog.

Source: www.habr.com

Idugang sa usa ka comment