Kev coj ua zoo tshaj plaws rau Kubernetes Ntim: Kev kuaj mob

Kev coj ua zoo tshaj plaws rau Kubernetes Ntim: Kev kuaj mob

TL; DR

  • Txhawm rau kom ua tiav qhov kev soj ntsuam siab ntawm cov ntim thiab microservices, cov cav thiab cov kev ntsuas thawj zaug tsis txaus.
  • Txhawm rau kom rov qab tau sai dua thiab muaj zog dua, cov ntawv thov yuav tsum siv Txoj Cai Tswj Xyuas Kev Pom Zoo (HOP).
  • Nyob rau hauv daim ntawv thov, NOP yuav tsum tau: kev txiav txim kom raug, kev soj ntsuam ze, xyuas kom huv si, thiab kev ua haujlwm / kev hloov pauv.
  • Siv cov tshev ua ib feem ntawm NOR kev npajProbe ΠΈ kev ua neejProbe Kubernetes.

Daim Ntawv Ntsuas Kev Noj Qab Haus Huv yog dab tsi?

Thaum tsim ib lub hom phiaj tseem ceeb thiab muaj ntau daim ntawv thov, nws yog ib qho tseem ceeb heev uas yuav tau xav txog tej yam xws li kev ua txhaum cai. Ib daim ntawv thov raug suav hais tias ua txhaum cai yog tias nws rov qab los ntawm kev ua tsis tiav. Ib daim ntawv thov huab ib txwm siv microservices architecture - qhov twg txhua qhov sib xyaw tau muab tso rau hauv ib lub thawv cais. Thiab txhawm rau kom paub tseeb tias daim ntawv thov ntawm k8s muaj ntau heev thaum koj tsim ib pawg, koj yuav tsum ua raws qee cov qauv. Ntawm lawv yog Daim Ntawv Ntsuam Xyuas Kev Noj Qab Haus Huv. Nws txhais li cas daim ntawv thov sib txuas lus rau k8s tias nws noj qab nyob zoo. Qhov no tsis yog tsuas yog cov ntaub ntawv hais txog seb lub pod puas tau khiav, tab sis kuj hais txog yuav ua li cas nws tau txais thiab teb rau cov lus thov. Qhov ntau Kubernetes paub txog kev noj qab haus huv ntawm lub plhaub taum pauv, qhov kev txiav txim siab ntse dua nws ua rau kev khiav tsheb thiab thauj khoom sib npaug. Yog li, Txoj Cai Tswjfwm Saib Xyuas Siab tso cai rau daim ntawv thov teb rau cov lus thov raws sijhawm.

Txoj Cai Saib Xyuas Siab (HOP)

Lub hauv paus ntsiab lus ntawm kev soj ntsuam siab yog ib qho ntawm cov hauv paus ntsiab lus rau kev tsim cov ntawv ntim khoom ntim. Hauv microservices architecture, cov kev pabcuam tsis quav ntsej li cas lawv qhov kev thov raug ua tiav (thiab yog li ntawd), tab sis qhov tseem ceeb yog qhov lawv tau txais cov lus teb los ntawm cov kev pabcuam tau txais. Piv txwv li, txhawm rau txheeb xyuas tus neeg siv, ib lub thawv xa HTTP thov mus rau lwm tus, xav tias yuav teb rau qee hom - qhov ntawd yog tag nrho. PythonJS tuaj yeem ua cov ntawv thov, thiab Python Flask tuaj yeem teb tau. Cov thawv ntim khoom zoo li lub thawv dub nrog cov ntsiab lus zais rau ib leeg. Txawm li cas los xij, lub hauv paus ntsiab lus NOP xav kom txhua qhov kev pabcuam nthuav tawm ntau yam API kawg uas qhia tias nws noj qab nyob zoo li cas, nrog rau nws qhov kev npaj txhij thiab kev ua txhaum cai. Kubernetes thov cov ntsuas no txhawm rau xav txog cov kauj ruam tom ntej rau kev sib tw thiab thauj khoom sib npaug.

Ib daim ntawv thov huab tsim tau zoo sau nws cov xwm txheej tseem ceeb uas siv tus qauv I/O ntws STDERR thiab STDOUT. Tom ntej no los ntawm kev pabcuam pabcuam, piv txwv li filebeat, logstash lossis fluentd, xa cov cav mus rau lub hauv paus kev saib xyuas (piv txwv li Prometheus) thiab lub kaw lus sau (ELK software suite). Daim duab hauv qab no qhia tau hais tias yuav ua li cas daim ntawv thov huab ua haujlwm raws li Kev Ntsuas Kev Noj Qab Haus Huv thiab Txoj Cai Saib Xyuas Siab.

Kev coj ua zoo tshaj plaws rau Kubernetes Ntim: Kev kuaj mob

Yuav ua li cas thiaj li thov Daim Ntawv Ntsuam Xyuas Kev Noj Qab Haus Huv hauv Kubernetes?

Tawm ntawm lub thawv, k8s saib xyuas cov xwm txheej ntawm cov pods siv ib qho ntawm cov tswj hwm (Muab tso rau, ReplicaSets, DaemonSets, StatefulSets thiab lwm yam). Tau pom tias lub plhaub taum poob rau qee qhov laj thawj, tus maub los sim rov pib dua lossis txav mus rau lwm qhov. Txawm li cas los xij, lub plhaub taum tuaj yeem tshaj tawm tias nws nce thiab khiav, tab sis nws tus kheej tsis ua haujlwm. Cia peb muab piv txwv: koj daim ntawv thov siv Apache ua lub vev xaib server, koj tau teeb tsa cov tshuaj tiv thaiv ntawm ob peb lub pods ntawm pawg. Txij li thaum lub tsev qiv ntawv tau teeb tsa tsis raug, txhua qhov kev thov rau daim ntawv thov teb nrog code 500 (sab hauv server yuam kev). Thaum kuaj xyuas tus me nyuam, xyuas cov xwm txheej ntawm cov pods muab cov txiaj ntsig zoo, tab sis cov neeg siv khoom xav txawv. Peb yuav piav qhia txog qhov xwm txheej tsis zoo li no:

Kev coj ua zoo tshaj plaws rau Kubernetes Ntim: Kev kuaj mob

Hauv peb qhov piv txwv, k8s ua functionality xyuas. Hauv hom kev pov thawj no, kubelet txuas ntxiv xyuas lub xeev ntawm cov txheej txheem hauv lub thawv. Thaum nws nkag siab tias cov txheej txheem tau nres, nws yuav rov pib dua. Yog tias qhov yuam kev tuaj yeem daws tau los ntawm kev rov pib dua daim ntawv thov, thiab qhov kev zov me nyuam tau tsim los kaw qhov yuam kev, tom qab ntawd kev kuaj xyuas kev noj qab haus huv yog txhua yam koj yuav tsum tau ua raws li NOP thiab Cov Qauv Ntsuas Kev Noj Qab Haus Huv. Qhov kev tu siab nkaus xwb yog tias tsis yog txhua qhov yuam kev raug tshem tawm los ntawm kev rov pib dua. Hauv qhov no, k8s muaj 2 txoj hauv kev sib sib zog nqus los txheeb xyuas cov teeb meem nrog lub pod: kev ua neejProbe ΠΈ kev npajProbe.

LivenessProbe

Lub sijhawm kev ua neejProbe kubelet ua 3 hom kev kuaj xyuas: tsis yog tsuas yog txiav txim siab seb lub plhaub taum puas tau khiav, tab sis kuj tseem puas tau npaj tau txais thiab teb txaus rau kev thov:

  • Teeb tsa HTTP thov rau lub pod. Cov lus teb yuav tsum muaj HTTP teb chaws nyob rau hauv thaj tsam ntawm 200 txog 399. Yog li, cov lej 5xx thiab 4xx teeb liab tias lub plhaub taum muaj teeb meem, txawm tias cov txheej txheem ua haujlwm.
  • Txhawm rau kuaj cov pods nrog cov kev pabcuam uas tsis yog HTTP (piv txwv li, Postfix mail server), koj yuav tsum tsim kom muaj kev sib txuas TCP.
  • Ua ib qho kev hais kom ua arbitrary rau lub pod (internally). Kev kuaj xyuas yog suav tias ua tiav yog tias cov lus txib ua tiav yog 0.

Ib qho piv txwv ntawm qhov no ua haujlwm li cas. Cov ntsiab lus hauv qab no muaj cov ntawv thov NodeJS uas cuam tshuam 500 qhov yuam kev ntawm HTTP thov. Kom paub tseeb tias lub thawv rov pib dua thaum tau txais qhov yuam kev no, peb siv qhov livenessProbe parameter:

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

Qhov no tsis txawv ntawm lwm cov ntsiab lus pod, tab sis peb tab tom ntxiv ib qho khoom .spec.containers.livenessProbe. Parameter httpGet lees txais txoj hauv kev uas HTTP GET thov xa tuaj (hauv peb qhov piv txwv no yog /, tab sis hauv kev sib ntaus sib tua tej zaum yuav muaj qee yam zoo li /api/v1/status). Lwm lub neejProbe lees txais qhov ntsuas initialDelaySeconds, uas qhia kev ua haujlwm pov thawj kom tos ib lub sijhawm teev tseg. Kev ncua yog xav tau vim lub thawv xav tau lub sijhawm pib, thiab thaum rov pib dua nws yuav tsis muaj nyob rau qee lub sijhawm.

Txhawm rau siv qhov teeb tsa no rau ib pawg, siv:

kubectl apply -f pod.yaml

Tom qab ob peb lub vib nas this, koj tuaj yeem tshawb xyuas cov ntsiab lus ntawm lub pod siv cov lus txib hauv qab no:

kubectl describe pods node500

Thaum kawg ntawm cov zis, nrhiav yog li ntawd.

Raws li koj tuaj yeem pom, livenessProbe pib qhov kev thov HTTP GET, lub thawv tsim qhov yuam kev 500 (uas yog qhov nws tau tsim los ua), thiab kubelet rov pib dua.

Yog tias koj xav paub tias daim ntawv thov NideJS tau ua li cas, ntawm no yog app.js thiab Dockerfile uas tau siv:

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

Nws yog ib qho tseem ceeb kom nco ntsoov qhov no: livenessProbe tsuas yog rov pib lub thawv yog tias nws ua tsis tiav. Yog tias qhov rov pib dua tsis kho qhov yuam kev uas tiv thaiv lub thawv los ntawm kev khiav, kubelet yuav tsis muaj peev xwm ua kom kho qhov teeb meem.

kev npajProbe

readinessProbe ua haujlwm zoo ib yam li livenessProbes (Tau txais kev thov, TCP kev sib txuas lus thiab kev ua kom tiav), tshwj tsis yog rau kev daws teeb meem. Lub thawv uas kuaj pom qhov tsis ua haujlwm yog tsis rov pib dua, tab sis raug cais tawm ntawm cov tsheb thauj mus los. Xav txog tias ib qho ntawm cov ntim tau ua ntau qhov kev suav los yog nyob rau hauv qhov hnyav, ua rau lub sijhawm teb nce ntxiv. Nyob rau hauv cov ntaub ntawv ntawm livenessProbe, cov lus teb muaj nyob rau hauv check tshwm sim (ntawm lub sij hawmoutSeconds check parameter), tom qab uas lub kubelet restarts lub thawv. Thaum pib, lub thawv pib ua cov dej num hnyav thiab rov pib dua. Qhov no tuaj yeem yog qhov tseem ceeb rau cov ntawv thov uas xav tau kev teb ceev. Piv txwv li, lub tsheb thaum nyob hauv txoj kev tab tom tos cov lus teb los ntawm cov neeg rau zaub mov, cov lus teb tau qeeb - thiab lub tsheb tau txais kev sib tsoo.

Wb sau ib redinessProbe txhais uas yuav teem lub sij hawm tau txais kev thov teb rau tsis pub dhau ob vib nas this, thiab daim ntawv thov yuav teb rau qhov kev thov GET tom qab 5 vib nas this. Cov ntaub ntawv pod.yaml yuav tsum zoo li no:

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

Cia peb xa cov pod nrog kubectl:

kubectl apply -f pod.yaml

Cia wb tos ob peb vib nas this thiab saib seb qhov kev npaj Probe ua haujlwm li cas:

kubectl describe pods nodedelayed

Thaum kawg ntawm cov zis koj tuaj yeem pom tias qee qhov xwm txheej zoo sib xws qhov no.

Raws li koj tuaj yeem pom, kubectl tsis rov pib dua lub plhaub thaum lub sijhawm kuaj xyuas ntau dua 2 vib nas this. Hloov chaw, nws tso tseg qhov kev thov. Kev sib txuas lus tuaj tau raug xa mus rau lwm qhov, ua haujlwm pods.

Nco ntsoov tias tam sim no lub pod yog offloaded, kubectl txoj kev thov rau nws dua: cov lus teb rau GET thov tsis ncua lawm.

Rau kev sib piv, hauv qab no yog cov ntaub ntawv hloov kho app.js:

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
Ua ntej qhov tshwm sim ntawm huab kev siv, cav yog lub hauv paus ntsiab lus ntawm kev saib xyuas thiab tshuaj xyuas daim ntawv thov kev noj qab haus huv. Txawm li cas los xij, tsis muaj ib txoj hauv kev los daws qhov teeb meem. Cov ntawv teev lus tseem muaj txiaj ntsig niaj hnub no; lawv yuav tsum tau sau thiab xa mus rau lub kaw lus khaws cia rau kev txheeb xyuas qhov xwm txheej kub ntxhov thiab txiav txim siab. [Tag nrho cov no tuaj yeem ua tiav yam tsis muaj kev siv huab siv monit, piv txwv li, tab sis nrog k8s nws tau yooj yim dua :) - editor daim ntawv. ]

Niaj hnub no, kev kho yuav tsum tau ua yuav luag nyob rau lub sijhawm tiag tiag, yog li cov ntawv thov tsis tas yuav tsum yog lub thawv dub. Tsis yog, lawv yuav tsum qhia cov ntsiab lus kawg uas tso cai rau kev soj ntsuam xyuas cov lus nug thiab sau cov ntaub ntawv tseem ceeb txog lub xeev cov txheej txheem kom lawv tuaj yeem teb tam sim yog tias tsim nyog. Qhov no yog hu ua Kev Ntsuas Kev Ntsuas Tus Qauv, uas ua raws li Txoj Cai Tswj Xyuas Siab (HOP).

Kubernetes muaj 2 hom kev kuaj xyuas kev noj qab haus huv los ntawm lub neej ntawd: readinessProbe thiab livenessProbe. Ob leeg siv tib hom kev txheeb xyuas (HTTP GET thov, TCP kev sib txuas lus thiab kev ua kom tiav). Lawv txawv ntawm qhov kev txiav txim siab uas lawv ua los teb rau cov teeb meem hauv cov pods. livenessProbe rov pib lub thawv nyob rau hauv kev cia siab tias qhov kev ua yuam kev yuav tsis tshwm sim dua, thiab kev npajProbe cais lub plhaub los ntawm cov tsheb khiav mus txog thaum qhov teeb meem daws teeb meem.

Kev tsim daim ntawv thov tsim nyog yuav tsum suav nrog ob hom kev kuaj xyuas thiab xyuas kom meej tias lawv sau cov ntaub ntawv txaus, tshwj xeeb tshaj yog thaum muaj kev zam pov tseg. Nws tseem yuav tsum tau qhia qhov tsim nyog API qhov kawg uas muab kev saib xyuas (Prometheus) nrog cov ntsuas kev noj qab haus huv tseem ceeb.

Tau qhov twg los: www.hab.com

Ntxiv ib saib