Maitiro Akanakisa eKubernetes Containers: Hutano Macheki

Maitiro Akanakisa eKubernetes Containers: Hutano Macheki

TL; DR

  • Kuti uwane kutaridzika kwakanyanya kwemidziyo uye microservices, matanda uye ekutanga metrics hazvina kukwana.
  • Kukurumidza kupora uye kuwedzera kusimba, zvikumbiro zvinofanirwa kushandisa Iyo Yepamusoro Observability Principle (HOP).
  • Padanho rekushandisa, NOP inoda: kutema matanda kwakaringana, kutarisisa kwepedyo, kutariswa kwehutsanana, uye kuita/shanduko yekutsvaga.
  • Shandisa cheki sechinhu cheNOR ReadinessProbe ΠΈ livenessProbe Kubernetes.

Chii chinonzi Health Check Template?

Paunenge uchigadzira mishoni-yakakosha uye inowanikwa zvakanyanya application, zvakakosha kuti ufunge nezve chinhu chakadai sekushivirira kukanganisa. Chikumbiro chinonzi chinoshivirira kukanganisa kana chikapora kubva mukutadza. Iyo yakajairika gore application inoshandisa microservices architecture - apo chimwe nechimwe chikamu chinoiswa mugaba rakasiyana. Uye kuti uve nechokwadi chekuti application pak8s inowanikwa zvakanyanya kana iwe ukagadzira sumbu, unofanirwa kutevedzera mamwe mapatani. Pakati pavo pane Health Check Template. Inotsanangura matauriro anoita application kune k8s kuti ine hutano. Iyi haisi ruzivo chete pamusoro pekuti pod iri kushanda, asiwo nezvekuti inogamuchira sei uye inopindura kune zvikumbiro. Iyo Kubernetes anowedzera kuziva nezve hutano hwepodhi, sarudzo dzakangwara dzaanoita nezve traffic routing uye kuyera kuyera. Saka, Iyo Yepamusoro Observability Principle inobvumira iyo application kupindura kune zvikumbiro panguva yakakodzera.

High Observability Principle (HOP)

Nheyo yekuonekwa kwepamusoro ndeimwe ye misimboti yekugadzira macontainerized application. Mune microservices architecture, masevhisi haana basa kuti chikumbiro chavo chinoitwa sei (uye zvakakodzera), asi chakakosha ndechekuti vanogamuchira sei mhinduro kubva kumasevhisi ekugamuchira. Semuenzaniso, kusimbisa mushandisi, imwe mudziyo inotumira chikumbiro cheHTTP kune imwe, ichitarisira mhinduro mune imwe fomati - ndizvo zvese. PythonJS inogonawo kugadzirisa chikumbiro, uye Python Flask inogona kupindura. Midziyo yakaita semabhokisi matema ane zvinhu zvakavanzika kune mumwe nemumwe. Nekudaro, iyo NOP musimboti inoda kuti sevhisi yega yega iburitse akawanda maAPI endpoints anoratidza kuti ane hutano sei, pamwe nekugadzirira kwayo uye kukanganisa kushivirira mamiriro. Kubernetes anokumbira zviratidzi izvi kuitira kuti afunge kuburikidza nematanho anotevera ekufambisa uye kuyera kuyera.

Iyo yakanyatsogadzirwa gore application inoisa zviitiko zvayo zvikuru uchishandisa yakajairwa I/O hova STDERR uye STDOUT. Inotevera inouya sevhisi yekubatsira, semuenzaniso filebeat, logstash kana fluent, kuendesa matanda kune centralized monitoring system (semuenzaniso Prometheus) uye log yekuunganidza system (ELK software suite). Dhiagiramu iri pazasi inoratidza mashandiro anoita gore rinoshanda zvinoenderana neHealth Test Pattern uye Yepamusoro Observability Principle.

Maitiro Akanakisa eKubernetes Containers: Hutano Macheki

Maitiro ekushandisa iyo Hutano Yekutarisa Pateni muKubernetes?

Kunze kwebhokisi, k8s inotarisisa mamiriro epods uchishandisa imwe yevatongi (Deployments, ReplicaSets, DaemonSets, StatefulSets etc., zvichingodaro). Mushure mekuona kuti pod yadonha nekuda kwechimwe chikonzero, mutongi anoedza kuitangazve kana kuiendesa kune imwe node. Nekudaro, podhi inogona kutaura kuti iri kusimuka uye inoshanda, asi iyo pachayo haisi kushanda. Ngatipei muenzaniso: application yako inoshandisa Apache sevhavha yewebhu, wakaisa chikamu pamapodhi akati wandei esumbu. Sezvo raibhurari yakagadziriswa zvisizvo, zvikumbiro zvese kune application zvinopindura nekodhi 500 (yemukati server kukanganisa). Paunenge uchitarisa kuendesa, kutarisa mamiriro epods kunopa mhedzisiro inobudirira, asi vatengi vanofunga zvakasiyana. Tichatsanangura mamiriro ezvinhu aya asingadiwi sezvinotevera:

Maitiro Akanakisa eKubernetes Containers: Hutano Macheki

Mumuenzaniso wedu, k8s inoita cheki chekushanda. Mune iyi mhando yekusimbisa, iyo kubelet inoramba ichitarisa mamiriro ekuita mumudziyo. Kana angonzwisisa kuti maitiro akamira, anozotangazve. Kana kukanganisa kuchigadziriswa nekungotangazve kunyorera, uye chirongwa chakagadzirirwa kuvhara pane chero kukanganisa, ipapo maitiro ehutano cheki ndiyo chete yaunoda kutevera NOP uye Health Test Pattern. Chinongonzwisa tsitsi ndechekuti hazvisi zvese zvikanganiso zvinobviswa nekutangazve. Muchiitiko ichi, k8s inopa nzira mbiri dzakadzika dzekuona matambudziko nepodhi: livenessProbe ΠΈ ReadinessProbe.

LivenessProbe

Munguva livenessProbe kubelet inoita 3 mhando dzecheki: haingotaridzi chete kana pod iri kushanda, asiwo kana yakagadzirira kugamuchira uye kupindura zvakakwana kune zvikumbiro:

  • Gadzira chikumbiro cheHTTP kune pod. Mhinduro yacho inofanira kunge iine HTTP mhinduro yekodhi kubva pa200 kusvika 399. Saka, macode 5xx uye 4xx anoratidza kuti pod iri kuita matambudziko, kunyange zvazvo maitiro ari kushanda.
  • Kuti uedze mapodhi neasiri-HTTP masevhisi (semuenzaniso, iyo Postfix mail server), unofanirwa kumisikidza kubatana kweTCP.
  • Ita murairo wakapokana wepodhi (mukati). Cheki inoonekwa seyakabudirira kana kodhi yekupedzisa yekuraira iri 0.

Muenzaniso wekuti izvi zvinoshanda sei. Tsanangudzo yepod inotevera ine NodeJS application inokanda kukanganisa mazana mashanu pane zvikumbiro zveHTTP. Kuti tive nechokwadi chekuti mudziyo watangwa patsva kana wagamuchira kukanganisa kwakadaro, tinoshandisa 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

Izvi hazvina kusiyana nedzimwe dudziro yepod, asi isu tiri kuwedzera chinhu .spec.containers.livenessProbe. Parameter httpGet inogamuchira nzira iyo HTTP GET chikumbiro inotumirwa (mumuenzaniso wedu izvi /, asi mumamiriro ekurwa panogona kunge kune chimwe chinhu chakadaro /api/v1/status) Imwe livenessProbe inogamuchira parameter initialDelaySeconds, iyo inorayira kushanda kwekuongorora kumirira nhamba yakatarwa yemasekonzi. Kunonoka kunodiwa nekuti mudziyo unoda nguva kuti utange, uye kana watangazve unozoshaika kwenguva yakati.

Kuti uise iyi gadziriro kune cluster, shandisa:

kubectl apply -f pod.yaml

Mushure memasekondi mashoma, unogona kutarisa zviri mukati mepodhi uchishandisa unotevera kuraira:

kubectl describe pods node500

Pakupera kwekubuda, tsvaga ndizvo.

Sezvauri kuona, livenessProbe yakatanga chikumbiro cheHTTP GET, mudziyo wakaburitsa kukanganisa 500 (ndizvo zvayakarongerwa kuita), uye kubelet akatangazve.

Kana iwe uchinetseka kuti NideJS application yakarongwa sei, heino app.js uye Dockerfile yakashandiswa:

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

Zvakakosha kuziva izvi: livenessProbe inongotangazve mudziyo kana ikatadza. Kana kutangazve kukasagadzirisa chikanganiso chiri kudzivirira mudziyo kuti ushande, kubelet haizokwanisa kutora matanho kugadzirisa dambudziko.

ReadinessProbe

ReadinessProbe inoshanda zvakafanana nelivenessProbes (GET zvikumbiro, TCP kutaurirana uye kuuraya mirairo), kunze kwekuita kugadzirisa matambudziko. Iyo mudziyo umo kutadza kunoonekwa haina kutangwazve, asi yakaparadzaniswa kubva kune inouya traffic. Fungidzira kuti imwe yemidziyo iri kuita masvomhu akawanda kana kuti iri pasi pemutoro unorema, zvichiita kuti nguva dzekupindura dziwedzere. Panyaya yelivenessProbe, mhinduro yekuwana cheki inotangwa (kuburikidza nenguva yekubudaSeconds cheki parameter), mushure meizvozvo kubelet inotangazve mudziyo. Kana yatangwa, mudziyo unotanga kuita mabasa ane simba rekushandisa uye unotangwa zvakare. Izvi zvinogona kuve zvakakosha kune maapplication anoda kukurumidza kupindura. Semuenzaniso, mota iri munzira yakamirira mhinduro kubva kune server, mhinduro inononoka - uye mota inopinda mutsaona.

Ngatinyorei tsananguro yeredinessProbe iyo ichaisa iyo GET yekupindura nguva yekupindura isingapfuure masekonzi maviri, uye chishandiso chinopindura kuchikumbiro cheGET mushure memasekondi mashanu. Iyo pod.yaml faira inofanira kutaridzika seizvi:

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

Ngatiisei pod ne kubectl:

kubectl apply -f pod.yaml

Ngatimirirei mashoma mashoma tozoona kuti ReadinessProbe yakashanda sei:

kubectl describe pods nodedelayed

Pakupera kwekubuda iwe unogona kuona kuti zvimwe zvezviitiko zvakafanana uyu.

Sezvauri kuona, kubectl haina kutangazve pod apo nguva yekutarisa yakapfuura 2 masekondi. Pane kudaro, akakanzura chikumbiro chacho. Nhaurirano dzinopinda dzinoendeswa kune mamwe, anoshanda pods.

Ziva kuti iko zvino iyo pod yabviswa, kubectl nzira inokumbira kwairi zvakare: mhinduro kune GET zvikumbiro hazvichanonoke.

Kuenzanisa, pazasi ndiyo yakagadziridzwa app.js faira:

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
Kusati kwasvika kwegore rekushandisa, matanda aive nzira dzekutanga dzekutarisa uye kutarisa hutano hwekushandisa. Zvisinei, pakanga pasina nzira yokuita chiito chipi nechipi chokururamisa. Magogi achiri kubatsira nhasi; anofanirwa kuunganidzwa uye kutumirwa kune log yekuunganidza system yekuongorora mamiriro ekukurumidzira uye kuita sarudzo. [Zvese izvi zvinogona kuitwa pasina cloud application uchishandisa monit, semuenzaniso, asi ne k8s zvakava nyore :) - chinyorwa chemupepeti. ]

Nhasi, kugadzirisa kunofanirwa kuitwa munguva chaiyo, saka maapplication haachafanirwe kunge ari mabhokisi matema. Aiwa, ivo vanofanirwa kuratidza magumo anobvumira masisitimu ekutarisa kubvunza uye kuunganidza yakakosha data nezve mamiriro emaitiro kuitira kuti vagone kupindura ipapo kana zvichidikanwa. Izvi zvinodaidzwa kuti Performance Test Design Pateni, iyo inotevera Yepamusoro Observability Principle (HOP).

Kubernetes inopa mhando mbiri dzekutarisa hutano nekukasira: ReadinessProbe uye livenessProbe. Ose ari maviri anoshandisa mhando dzakafanana dzecheki (HTTP GET zvikumbiro, TCP kutaurirana uye kuuraya kwekuraira). Vanosiyana mune zvisarudzo zvavanoita mukupindura matambudziko ari mumapods. livenessProbe inotangazve mudziyo uchitarisira kuti chikanganiso hachizoitike zvakare, uye ReadinessProbe inotsaura iyo pod kubva kune inouya traffic kusvika chikonzero chedambudziko chagadziriswa.

Yakakodzera dhizaini yedhizaini inofanirwa kusanganisira ese ari maviri marudzi ekutarisa uye kuona kuti anounganidza akakwana data, kunyanya kana kusarudzika kukandwa. Inofanirawo kuratidza inodiwa API endpoints inopa iyo yekutarisa system (Prometheus) ine akakosha hutano metrics.

Source: www.habr.com

Voeg