Fa'ata'ita'iga Sili mo Kubernetes Containers: Siakiga Soifua Maloloina

Fa'ata'ita'iga Sili mo Kubernetes Containers: Siakiga Soifua Maloloina

TL; AMA

  • Ina ia ausia le maualuga o le mata'ituina o koneteina ma microservices, ogalaau ma fuataga muamua e le lava.
  • Mo le vave faʻaleleia ma faʻateleina le maufetuunaʻi, e tatau i talosaga ona faʻaoga le High Observability Principle (HOP).
  • I le tulaga o talosaga, NOP e manaʻomia: faʻapipiʻi saʻo, mataʻituina lelei, siaki lelei, ma suʻega faʻatinoga / suiga.
  • Fa'aoga siaki e fai ma elemene ole NOR sauniaSu'esu'e и livenessProbe Kubernetes.

O le a le Fa'ata'ita'iga Su'e Soifua Maloloina?

Pe a faʻatulagaina se faʻamatalaga faʻapitoa ma maualuga avanoa, e taua tele le mafaufau i se itu e pei o le faʻapalepale sese. O se talosaga e manatu e fa'apalepale fa'aletonu pe a vave ona toe fa'aleleia mai le fa'aletonu. Ole fa'aoga masani ole ao e fa'aogaina ai le fa'ata'ita'iga microservices - lea e tu'u ai vaega ta'itasi i totonu o se atigipusa eseese. Ma ina ia mautinoa o loʻo avanoa tele le talosaga ile k8s pe a e mamanuina se fuifui, e tatau ona e mulimulitaʻi i ni mamanu patino. Faatasi ai ma i latou o le Health Check Template. O loʻo faʻamatalaina pe faʻafefea ona fesoʻotaʻi le talosaga i k8s o loʻo maloloina. E le gata o faʻamatalaga pe o loʻo taʻavale le pod, ae faʻapea foi pe faʻafefea ona maua ma tali atu i talosaga. O le tele o le iloa e Kubernetes e uiga i le soifua maloloina o le pod, o le sili atu foi ona atamai filifiliga e faia e uiga i auala taʻavale ma le paleni o uta. O le mea lea, o le High Observability Principle e mafai ai e le talosaga ona tali atu i talosaga i se taimi talafeagai.

Fa'avae Mata'ituina Maualuga (HOP)

O le mataupu faavae o le mataituina maualuga o se tasi o mataupu faavae mo le fuafuaina o talosaga containerized. I totonu o se fausaga fa'ata'ita'i microservices, e le popole 'au'aunaga pe fa'afefea ona fa'agasolo a latou talosaga (ma e sa'o lava), ae o le mea e taua o le auala latou te maua ai tali mai le mauaina o auaunaga. Mo se faʻataʻitaʻiga, ina ia faʻamaonia se tagata faʻaoga, e tuʻuina atu e le tasi pusa se talosaga HTTP i le isi, faʻamoemoeina se tali i se faʻatonuga - pau lava. E mafai foi e le PythonJS ona faʻagasolo le talosaga, ma e mafai e le Python Flask ona tali. O koneteina e pei o pusa uliuli ma mea natia o le tasi i le isi. Ae ui i lea, o le NOP mataupu e manaʻomia auaunaga taʻitasi e faʻaalia le tele o faʻaiʻuga API e faʻaalia ai le soifua maloloina, faʻapea foʻi ma lona nofo sauni ma le tulaga faʻapalepale masei. E talosagaina e Kubernetes nei faʻailoga ina ia mafai ai ona mafaufau i laasaga e sosoo ai mo le taʻavale ma le paleni o uta.

O se fa'aoga lelei o le ao o lo'o fa'amauina ana mea autu e fa'aaoga ai le I/O streams STDERR ma le STDOUT. E soso'o mai ai se au'aunaga fesoasoani, mo se fa'ata'ita'iga filebeat, logstash po'o le fluentd, tu'uina atu ogalaau i se faiga fa'apitoa e mata'ituina (mo se fa'ata'ita'iga Prometheus) ma se fa'aputuga o ogalaau (ELK software suite). O le ata o loʻo i lalo o loʻo faʻaalia ai le faʻaogaina o le ao e tusa ai ma le Health Test Pattern ma le High Observability Principle.

Fa'ata'ita'iga Sili mo Kubernetes Containers: Siakiga Soifua Maloloina

E fa'afefea ona fa'aoga le Su'esu'ega Fa'alesoifua maloloina ile Kubernetes?

Mai le pusa, k8s e mataʻituina le tulaga o pusa e faʻaaoga ai se tasi o pule (Faʻafaigaluega, ReplicaSets, DaemonSets, StatefulSets ma isi, ma isi). I le mauaina o le pod ua pa'u mo nisi mafuaaga, e taumafai le pule e toe amata pe ave i se isi node. Ae ui i lea, e mafai e se pod ona lipotia o loʻo i luga ma tamoʻe, ae o ia lava e le o galue. Sei o tatou tuʻuina atu se faʻataʻitaʻiga: o lau talosaga e faʻaaogaina Apache e avea o se 'upega tafaʻilagi, na e faʻapipiʻiina le vaega i luga o le tele o pusa o le fuifui. Talu ai ona ua le sa'o le fa'atulagaina o le faletusi, o talosaga uma i le talosaga e tali mai ile code 500 (sese server i totonu). Pe a siaki le tuʻuina atu, siaki le tulaga o pods e maua ai se iʻuga manuia, ae e ese le manatu o tagata faʻatau. O le a matou faamatalaina lenei tulaga le manaomia e faapea:

Fa'ata'ita'iga Sili mo Kubernetes Containers: Siakiga Soifua Maloloina

I la matou faʻataʻitaʻiga, e faia e k8s siaki galuega. I lenei ituaiga o faʻamaoniga, e siaki pea e le kubelet le tulaga o le gaioiga i totonu o le pusa. O le taimi lava na te malamalama ai ua taofi le faagasologa, o le a ia toe amataina. Afai e mafai ona foia le mea sese i le na o le toe amataina o le talosaga, ma ua mamanuina le polokalame e tapuni i luga o soʻo se mea sese, ona pau lea o le siakiina o le soifua maloloina e te manaʻomia e mulimuli ai i le NOP ma le Health Test Pattern. Pau lava le faanoanoa e le o mea sese uma e faʻaumatia e ala i le toe amataina. I lenei tulaga, k8s ofo 2 auala loloto e iloa ai faafitauli i le pod: livenessProbe и sauniaSu'esu'e.

LivenessProbe

I le taimi livenessProbe e 3 ituaiga o siaki e faia e kubelet: e le gata ina iloa pe o loʻo taʻavale le pod, ae faʻapea foi pe ua sauni e talia ma tali lelei i talosaga:

  • Seti se talosaga HTTP i le pod. O le tali e tatau ona i ai se code tali HTTP i le laina mai le 200 i le 399. O le mea lea, codes 5xx ma 4xx faʻamaonia o loʻo i ai ni faʻafitauli o le pod, e ui lava o loʻo faʻagasolo le faagasologa.
  • Ina ia fa'ata'ita'i pods i 'au'aunaga e le o ni HTTP (mo se fa'ata'ita'iga, le Postfix mail server), e tatau ona e fa'atuina se feso'ota'iga TCP.
  • Fa'atino se fa'atonuga fa'apitoa mo se pod (i totonu). E fa'amanuiaina le siaki pe afai o le fa'atonuga fa'amae'a e 0.

O se faʻataʻitaʻiga o le auala e galue ai. O le isi faʻamatalaga pod o loʻo i ai se talosaga NodeJS e lafo ai se mea sese 500 i luga o talosaga HTTP Ina ia mautinoa o loʻo toe amataina le pusa pe a maua se mea sese, matou te faʻaogaina le 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

E leai se ese'esega lea mai so'o se isi fa'amatalaga pod, ae o lo'o matou fa'aopoopoina se mea .spec.containers.livenessProbe. Parameter httpGet talia le ala e auina atu ai le talosaga HTTP GET (i la tatou faataitaiga o le /, ae i faʻataʻitaʻiga o taua atonu e iai se mea faʻapea /api/v1/status). O le isi livenessProbe e talia se parakalafa initialDelaySeconds, lea e fa'atonuina le fa'atinoga o fa'amaoniga e fa'atali se numera fa'amaonia o sekone. E mana'omia le tuai ona e mana'omia le taimi e amata ai le koneteina, ma a toe fa'aola o le a le avanoa mo sina taimi.

Ina ia faʻaoga lenei seti i se fuifui, faʻaoga:

kubectl apply -f pod.yaml

A maeʻa ni nai sekone, e mafai ona e siakiina mea o loʻo i totonu o le pod e faʻaaoga ai le poloaiga lenei:

kubectl describe pods node500

I le faaiuga o le galuega faatino, saili o le mea lena.

E pei ona e vaʻaia, na amataina e le livenessProbe se talosaga HTTP GET, o le koneteina na faʻatupuina se mea sese 500 (o le mea lea na faʻapolokalameina e fai), ma toe amataina e le kubelet.

Afai o loʻo e mafaufau pe faʻapefea ona faʻapipiʻiina le talosaga a le NideJS, o le app.js ma Dockerfile na faʻaaogaina:

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')
})

faila faila

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

E taua le maitauina o le mea lenei: livenessProbe e na'o le toe amataina o le koneteina pe a le manuia. Afai e le toe faʻasaʻo le mea sese o loʻo taofia ai le koneteina mai le taʻavale, e le mafai e le kubelet ona faia se gaioiga e faʻasaʻo ai le faʻafitauli.

sauniaSu'esu'e

ReadinessProbe e tutusa le galue ma le livenessProbes (GET talosaga, TCP fesoʻotaʻiga ma le faʻatonuina o le faʻatonuga), sei vagana ai faʻafitauli faʻafitauli. O le koneteina lea e iloa ai le faaletonu e le o toe amataina, ae ua vavae ese mai taavale o loʻo sau. Vaai faalemafaufau o se tasi o koneteina o loʻo faia le tele o faʻatusatusaga pe o loʻo i lalo o se uta mamafa, ma mafua ai ona faʻateleina taimi tali. I le tulaga o le livenessProbe, o le siaki avanoa tali e faʻaosoina (e ala i le timeoutSeconds siaki parameter), a maeʻa ona toe amata e le kubelet le koneteina. A amata loa, o le koneteina e amata ona faʻatino galuega faʻapitoa mo punaoa ma toe amataina. E mafai ona taua tele lenei mea mo talosaga e manaʻomia le saoasaoa tali. Mo se faʻataʻitaʻiga, o se taavale aʻo i luga o le auala o loʻo faʻatali mo se tali mai le 'auʻaunaga, ua tuai le tali - ma oʻo ai le taavale i se faʻalavelave.

Se'i o tatou tusia se fa'auigaga redinessProbe e fa'atulaga ai le taimi ole tali ole GET ile le sili atu ile lua sekone, ma ole a tali le talosaga ile talosaga ole GET pe a uma le 5 sekone. O le faila pod.yaml e tatau ona foliga faapenei:

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

Sei o tatou faʻapipiʻi se pod ma kubectl:

kubectl apply -f pod.yaml

Tatou fa'atali mo ni nai sekone ona va'ai lea pe na fa'apefea ona galue le readyProbe:

kubectl describe pods nodedelayed

I le fa'ai'uga o le fa'aaliga e mafai ona e va'aia o nisi o mea na tutupu e tutusa lenei.

E pei ona e vaʻaia, e leʻi toe amataina e le kubectl le pod pe a sili atu le taimi siaki ile 2 sekone. Nai lo lena, na ia faaleaogaina le talosaga. O feso'ota'iga o lo'o o'o mai e fa'afeiloa'i atu i isi fo'i, fo'i galuega.

Manatua o le taimi nei ua ave'esea le pod, ua toe talosaga mai le kubectl i ai: tali i talosaga GET ua le toe tolopoina.

Mo le faʻatusatusaga, o loʻo i lalo le faila app.js ua suia:

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; AMA
Aʻo leʻi oʻo mai le faʻaogaina o ao, o ogalaau o le auala muamua lea e mataʻituina ai ma siaki le soifua maloloina o talosaga. Peitaʻi, e leai se auala e faia ai se gaoioiga faasaʻo. O lo'o fa'aoga pea i aso nei; [O nei mea uma e mafai ona faia e aunoa ma le faʻaogaina o ao faʻaaoga monit, mo se faʻataʻitaʻiga, ae faʻatasi ai ma k8s na sili atu ona faigofie :) - faʻamatalaga a le faatonu. ]

I aso nei, o faʻasaʻoga e tatau ona faia toetoe lava i le taimi moni, o lea o talosaga e le toe avea ma pusa uliuli. Leai, e tatau ona latou faʻaalia faʻaiʻuga e mafai ai ona mataʻituina faiga e fesiligia ma aoina faʻamatalaga taua e uiga i le tulaga o gaioiga ina ia mafai ona latou tali vave pe a manaʻomia. E ta'ua lea o le Performance Test Design Pattern, lea e mulimuli i le High Observability Principle (HOP).

Kubernetes ofo 2 ituaiga o siaki soifua maloloina e ala i le faaletonu: readyProbe ma livenessProbe. O lo'o fa'aogaina uma ituaiga o siaki (Talosaga HTTP GET, TCP feso'ota'iga ma le fa'atonuina o le fa'atonuga). E eseese i latou i filifiliga latou te faia e tali atu ai i faʻafitauli i totonu o pusa. LivenessProbe toe amata le koneteina ma le faʻamoemoe o le a le toe tupu le mea sese, ma o le readyProbe e faʻaesea le pod mai taavale o loʻo oʻo mai seia oʻo ina foia le mafuaʻaga o le faʻafitauli.

O le fa'atulagaina lelei o talosaga e tatau ona aofia uma ai ituaiga siaki e lua ma fa'amautinoa latou te aoina mai fa'amaumauga e lava, aemaise lava pe a tu'u ese atu. E tatau foʻi ona faʻaalia ai faʻaiʻuga API e manaʻomia e tuʻuina atu ai le faiga o le mataʻituina (Prometheus) faʻatasi ai ma fua faʻalesoifua maloloina.

puna: www.habr.com

Faaopoopo i ai se faamatalaga