Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

27 Aprily tamin'ny fihaonambe Fitokonana 2019, ao anatin'ny fizarana "DevOps", nomena ny tatitra "Autoscaling and resource management in Kubernetes". Izy io dia miresaka momba ny fomba ahafahanao mampiasa K8 mba hiantohana ny fisian'ny rindranasa avo lenta sy hiantohana ny fahombiazan'ny avo indrindra.

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Araka ny fomban-drazana dia faly izahay manolotra video ny tatitra (44 minitra, be fampahalalana bebe kokoa noho ny lahatsoratra) ary ny famintinana lehibe amin'ny endrika lahatsoratra. Mandehana!

Andeha hodinihintsika ny lohahevitry ny tatitra amin'ny teny ary manomboka amin'ny farany.

Kubernetes

Andeha atao hoe manana container Docker ao amin'ny mpampiantrano anay. Hatao inona? Mba hiantohana ny famerenana sy ny fitokanana, izay mamela ny fametrahana tsotra sy tsara, CI / CD. Manana fiara maro toy izany izahay miaraka amin'ny kaontenera.

Inona no omen'i Kubernetes amin'ity tranga ity?

  1. Mitsahatra tsy mieritreritra an'ireo milina ireo izahay ary manomboka miasa amin'ny "rahona" cluster ny kaontenera na pods (vondrona fitoeran-javatra).
  2. Ankoatra izany, tsy mieritreritra momba ny pod tsirairay izahay, fa mitantana bebe kokoaоvondrona lehibe kokoa. TOY primitives avo lenta avelao izahay hilaza fa misy môdely amin'ny fampandehanana ny enta-mavesatry ny asa sasany, ary eto ny isan'ny tranga ilaina hampandehanana azy. Raha ovainay ny môdely dia hiova avokoa ny tranga rehetra.
  3. Amin'ny fanampian'ny declarative API Raha tokony hanao filaharan'ny baiko manokana izahay, dia mamaritra ny “firafitry ny tontolo” (ao amin'ny YAML), izay noforonin'i Kubernetes. Ary indray: rehefa miova ny famaritana dia hiova koa ny tena fampisehoana azy.

Fitantanana ny loharanon-karena

Unité centrale

Andao hihazakazaka nginx, php-fpm ary mysql amin'ny mpizara. Ireo serivisy ireo dia hanana dingana maro kokoa mandeha, izay samy mitaky loharanon-karena informatika:

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)
(Ny isa eo amin'ny slide dia "boloky", ny filana tsy fahita firy amin'ny dingana tsirairay amin'ny herin'ny informatika)

Mba hanamorana ny fiasana amin'izany, dia lojika ny manambatra ny dingana ho vondrona (ohatra, ny fizotran'ny nginx rehetra ho vondrona "nginx"). Ny fomba tsotra sy mazava hanaovana izany dia ny fametrahana ny vondrona tsirairay ao anaty fitoeran-javatra iray:

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Mba hanohizana dia mila mitadidy ny atao hoe container (amin'ny Linux). Ny fisehon'izy ireo dia azo natao noho ny endri-javatra telo lehibe ao amin'ny kernel, nampiharina hatry ny ela: fahaiza-manao, anaran-tsehatra и cgroups. Ary ny fampandrosoana bebe kokoa dia nanamora ny teknolojia hafa (anisan'izany ny "akorandriaka" mety tsara toa an'i Docker):

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Eo amin'ny tontolon'ny tatitra dia liana fotsiny izahay cgroups, satria ny vondrona mpanara-maso dia ampahany amin'ny fiasan'ny kaontenera (Docker, sns.) izay mampihatra ny fitantanana ny loharanon-karena. Ny dingana natambatra ho vondrona, araka izay tadiavintsika, dia vondrona mpanara-maso.

Andao hiverina amin'ny fepetra takian'ny CPU ho an'ireo dingana ireo, ary izao ho an'ny vondrona dingana:

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)
(Averiko fa ny isa rehetra dia fanehoana tsy misy dikany ny filàna loharanon-karena)

Mandritra izany fotoana izany, ny CPU mihitsy dia manana loharano voafetra (amin'ny ohatra ity dia 1000), izay mety tsy ho azon'ny rehetra (ny fitambaran'ny filan'ny vondrona rehetra dia 150+850+460=1460). Inona no hitranga amin'ity tranga ity?

Ny kernel dia manomboka mizara loharano ary manao izany "ara-drariny", manome loharano mitovy amin'ny vondrona tsirairay. Fa amin'ny tranga voalohany dia misy mihoatra noho ny ilaina (333>150), ka ny mihoatra (333-150=183) dia mijanona ho tahiry, izay zaraina mitovy ihany koa eo anelanelan'ny kaontenera roa hafa:

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Vokatr'izany: nanana loharanon-karena ampy ny kaontenera voalohany, ny faharoa - tsy nanana loharanon-karena ampy, ny fahatelo - tsy nanana loharanon-karena ampy. Izany no vokatry ny hetsika "Honest" scheduler amin'ny Linux - CFS. Azo amboarina amin'ny alalan'ny fanendrena lanja ny fitoeran-javatra tsirairay. Ohatra, toy izao:

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Andeha hojerentsika ny tranga tsy fahampian'ny loharano ao amin'ny container faharoa (php-fpm). Ny loharanon'ny kaontenera rehetra dia zaraina mitovy amin'ireo dingana. Vokatr'izany dia mandeha tsara ny fizotran'ny master, saingy miadana ny mpiasa rehetra, mahazo latsaky ny antsasaky ny zavatra ilainy:

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Izany no fomba fiasan'ny CFS scheduler. Hantsoinay amin'ny kaontenera ihany koa ireo lanja apetratsika fangatahana. Nahoana no toy izany - jereo bebe kokoa.

Andeha hojerentsika ny zava-misy rehetra avy any ampita. Araka ny fantatrao, ny lalana rehetra dia mankany Roma, ary amin'ny solosaina, mankany amin'ny CPU. CPU iray, asa maro - mila jiro fifamoivoizana ianao. Ny fomba tsotra indrindra amin'ny fitantanana ny loharanon-karena dia ny "jiro fifamoivoizana": nomeny dingana iray ny fotoana fidirana amin'ny CPU, avy eo ny manaraka, sns.

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Ity fomba fiasa ity dia antsoina hoe hard quotas (fametrahana mafy). Aoka ho tsaroantsika tsotra izao fetra. Na izany aza, raha mizara fetra amin'ny kaontenera rehetra ianao, dia misy olana: ny mysql dia nandeha teny an-dalana ary tamin'ny fotoana iray dia nifarana ny filany CPU, fa ny dingana hafa rehetra dia voatery miandry mandra-pahatongan'ny CPU. malaina.

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Andao hiverina amin'ny kernel Linux sy ny fifandraisany amin'ny CPU - ny sary ankapobeny dia toy izao manaraka izao:

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Ny cgroup dia manana toe-javatra roa - amin'ny ankapobeny dia "mihodinkodina" roa tsotra izao ahafahanao mamaritra:

  1. lanja ho an'ny fitoeran-javatra (fangatahana) dia mizara;
  2. ny isan-jaton'ny totalin'ny fotoana CPU amin'ny fiasana amin'ny asa fitahirizana (fetra) dia izay anjara-fanompoana.

Ahoana no handrefesana CPU?

Misy fomba samihafa:

  1. Inona no boloky, tsy misy mahalala - mila mifampiraharaha ianao isaky ny mandeha.
  2. mahaliana mazava kokoa, fa havanana: 50% amin'ny mpizara manana cores 4 ary misy cores 20 dia zavatra hafa tanteraka.
  3. Azonao ampiasaina ireo efa voalaza lanja, izay fantatry ny Linux, fa izy ireo ihany koa.
  4. Ny safidy mety indrindra dia ny fandrefesana ny loharanon-karena ao segondra. Ireo. ao anatin'ny segondra amin'ny fotoanan'ny processeur raha oharina amin'ny segondra amin'ny fotoana tena izy: 1 segondra amin'ny fotoanan'ny processeur dia nomena isaky ny 1 tena segondra - iray manontolo CPU io.

Mba hanamora kokoa ny fitenenana dia nanomboka nandrefy mivantana izy ireo voany, izay midika hoe ny fotoana CPU mitovy amin'ny tena izy. Satria azon'ny Linux ny lanja, fa tsy ny fotoanan'ny CPU be loatra, dia ilaina ny mekanika handikana ny iray mankany amin'ny iray hafa.

Andeha hodinihintsika ny ohatra tsotra amin'ny mpizara misy cores 3 CPU, izay homena poids telo (500, 1000 ary 1500) izay mora ovaina amin'ny ampahany mifanaraka amin'ny cores nomena azy ireo (0,5, 1 ary 1,5).

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Raha maka mpizara faharoa ianao, izay misy cores avo roa heny (6), ary apetraka eo ny pods mitovy, dia azo atao mora foana ny mizara ny cores amin'ny fampitomboana 2 (1, 2 ary 3, tsirairay avy). Saingy misy fotoana manan-danja iray rehefa miseho ny pod fahefatra amin'ity mpizara ity, izay ny lanjany, ho an'ny fanamorana, dia ho 3000. Esory ny ampahany amin'ny loharanon'ny CPU (antsasaky ny cores), ary ho an'ny pods sisa dia averina (antsasany):

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Kubernetes sy loharano CPU

Ao amin'ny Kubernetes, matetika ny loharanon'ny CPU dia refesina amin'ny milliadrax, i.e. 0,001 cores dia raisina ho lanja fototra. (Ny zavatra mitovy amin'ny teny Linux/cgroups dia antsoina hoe fizarana CPU, na dia marimarina kokoa aza, 1000 millicores = 1024 fizarana CPU.) K8s dia miantoka fa tsy mametraka pods bebe kokoa amin'ny mpizara noho ny loharanon'ny CPU ho an'ny fitambaran'ny lanjan'ny pods rehetra.

Ahoana no mitranga izany? Rehefa manampy mpizara amin'ny kluster Kubernetes ianao, dia taterina hoe firy ny cores CPU misy azy. Ary rehefa mamorona pod vaovao dia fantatry ny mpandrindra Kubernetes hoe firy ny cores ilain'ity pod ity. Noho izany, ny pod dia homena amin'ny mpizara izay misy cores ampy.

Inona no hitranga raha tsy nofaritana ny fangatahana (izany hoe ny pod dia tsy manana cores voafaritra ilainy)? Andeha hojerentsika ny fomba fanisan'ny Kubernetes ny loharanon-karena amin'ny ankapobeny.

Ho an'ny pod iray dia azonao atao ny mamaritra ny fangatahana roa (CFS scheduler) sy ny fetra (tadidio ny jiron'ny fifamoivoizana?):

  • Raha voatondro mitovy izy ireo, dia omena kilasy QoS ny pod azo antoka. Azo antoka io isan'ny cores misy azy io.
  • Raha latsaky ny fetra ny fangatahana - kilasy QoS mipoaka. Ireo. Manantena izahay fa ny pod, ohatra, dia hampiasa fototra 1 foana, saingy tsy ferana ho azy io sanda io: indraindray pod dia afaka mampiasa bebe kokoa (rehefa manana loharano maimaim-poana amin'izany ny mpizara).
  • Misy ihany koa ny kilasy QoS ny ezaka tsara indrindra - ao anatin'izany ireo pods izay tsy voafaritra ny fangatahana. Omena azy ireo farany ny loharanon-karena.

fahatsiarovana

Miaraka amin'ny fitadidiana, mitovy ny toe-javatra, saingy hafa kely - raha ny marina, ny toetran'ireo loharano ireo dia tsy mitovy. Amin'ny ankapobeny, ny analogy dia toy izao manaraka izao:

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Andeha hojerentsika ny fomba fampiharana ny fangatahana amin'ny fitadidiana. Avelao hiaina ao amin'ny server ny pods, hanova ny fanjifana fahatsiarovana, mandra-pahatongan'ny iray amin'izy ireo ho lehibe ka lany fahatsiarovana. Amin'ity tranga ity dia miseho ny mpamono OOM ary mamono ny dingana lehibe indrindra:

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Tsy mety amintsika foana izany, noho izany dia azo atao ny mandamina izay dingana manan-danja amintsika ary tsy tokony hovonoina. Mba hanaovana izany, ampiasao ny parameter oom_score_adj.

Andao hiverina any amin'ny kilasy QoS an'ny CPU ary hanao fanoharana miaraka amin'ny soatoavina oom_score_adj izay mamaritra ny laharam-pahamehana amin'ny fanjifana fahatsiarovana ho an'ny pods:

  • Ny sanda oom_score_adj ambany indrindra ho an'ny pod - -998 - dia midika fa ny pod toy izany dia tokony hovonoina farany, ity azo antoka.
  • Ny ambony indrindra - 1000 - dia ny ezaka tsara indrindra, vonoina aloha ireo pods ireo.
  • Mba kajy ny soatoavina sisa (mipoaka) misy raikipohy, ny tena maha izy azy dia ny hoe arakaraky ny nangatahin'ny pod iray, no tsy ho faty.

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Ny "twist" faharoa - limit_in_bytes - ho an'ny fetra. Miaraka amin'izany dia tsotra kokoa ny zava-drehetra: manendry fotsiny ny habetsaky ny fahatsiarovana navoaka, ary eto (tsy toy ny CPU) dia tsy misy fanontaniana momba ny fomba handrefesana azy (fahatsiarovana).

Итого

Omena ny pod tsirairay ao amin'ny Kubernetes requests и limits - paramètre roa ho an'ny CPU sy ny fitadidiana:

  1. mifototra amin'ny fangatahana, miasa ny mpandrindra Kubernetes, izay mizara pods amin'ireo mpizara;
  2. mifototra amin'ny masontsivana rehetra, ny kilasy QoS pod dia voafaritra;
  3. Ny lanja havanana dia kajy mifototra amin'ny fangatahana CPU;
  4. ny CFS scheduler dia namboarina mifototra amin'ny fangatahana CPU;
  5. Ny mpamono OOM dia namboarina mifototra amin'ny fangatahana fitadidiana;
  6. ny "jiro fifamoivoizana" dia namboarina mifototra amin'ny fetran'ny CPU;
  7. Miorina amin'ny fetran'ny fitadidiana, misy fetra apetraka ho an'ny cgroup.

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Amin'ny ankapobeny, ity sary ity dia mamaly ny fanontaniana rehetra momba ny fomba isehoan'ny ampahany lehibe amin'ny fitantanana ny loharanon-karena ao Kubernetes.

Autoscaling

K8s cluster-autoscaler

Alao sary an-tsaina fa efa feno ny cluster manontolo ary mila mamorona pod vaovao. Na dia tsy miseho aza ny pod, dia mihantona amin'ny sata izy mbola miandry. Mba hisehoana dia afaka mampifandray mpizara vaovao amin'ny cluster isika na ... mametraka cluster-autoscaler, izay hanao izany ho antsika: manafatra milina virtoaly avy amin'ny mpamatsy rahona (mampiasa fangatahana API) ary mampifandray izany amin'ny cluster. , aorian'izay dia ampiana ny pod .

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Ity dia autoscaling an'ny cluster Kubernetes, izay miasa tsara (raha ny traikefanay). Na izany aza, toy ny any an-kafa, misy ny nuance sasany eto ...

Raha mbola nampitombo ny haben'ny cluster, dia tsara ny zava-drehetra, fa inona no mitranga rehefa ny cluster nanomboka nanafaka ny tenany? Ny olana dia ny fifindra-monina pods (hanafaka ny mpampiantrano) dia tena sarotra ara-teknika sy lafo amin'ny lafiny loharanon-karena. Mampiasa fomba hafa tanteraka ny Kubernetes.

Diniho ny cluster misy mpizara 3 manana Deployment. Misy pods 6 izy io: misy 2 isaky ny mpizara. Noho ny antony sasany dia te hamono ny iray amin'ireo mpizara izahay. Mba hanaovana izany dia hampiasa ny baiko isika kubectl drain, izay:

  • handrara ny fandefasana pods vaovao amin'ity mpizara ity;
  • dia hamafa pods efa misy eo amin'ny mpizara.

Satria i Kubernetes no tompon'andraikitra amin'ny fitazonana ny isan'ny pods (6), dia tsotra fotsiny izany dia hamerina amin'ny node hafa, fa tsy amin'ilay kilemaina, satria efa voamarika ho tsy azo ampiasaina amin'ny fampiantranoana pods vaovao. Mekanika fototra ho an'ny Kubernetes ity.

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Na izany aza, misy ihany koa ny nuance eto. Amin'ny toe-javatra mitovy amin'izany, ho an'ny StatefulSet (fa tsy Deployment), dia ho hafa ny hetsika. Ankehitriny dia efa manana fampiharana ara-panjakana isika - ohatra, pods telo miaraka amin'ny MongoDB, izay misy karazana olana ny iray (lasa simba ny angon-drakitra na hadisoana hafa manakana ny pod tsy hanomboka tsara). Ary manapa-kevitra indray izahay hanaisotra mpizara iray. Inona no hitranga?

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

MongoDB afaka maty satria mila kôlejy: ho an'ny vondrona misy fametrahana telo, farafahakeliny roa no tsy maintsy miasa. Na izany aza, ity tsy mitranga - misaotra an'i PodDisruptionBudget. Ity parameter ity dia mamaritra ny isa kely indrindra ilaina amin'ny pods miasa. Ny fahafantarana fa tsy miasa intsony ny iray amin'ireo pods MongoDB, ary ny fahitana fa ny PodDisruptionBudget dia napetraka ho an'ny MongoDB minAvailable: 2, Kubernetes dia tsy hamela anao hamafa pod.

Fehiny: Mba hahafahan'ny hetsika (ary raha ny marina, ny famoronana indray) ny pods dia miasa tsara rehefa mivoaka ny cluster, dia mila manamboatra PodDisruptionBudget ianao.

Fanamafisana mitsivalana

Andeha isika handinika toe-javatra hafa. Misy fampiharana mandeha ho Deployment ao amin'ny Kubernetes. Ny fifamoivoizana mpampiasa dia tonga amin'ny pods (ohatra, misy telo amin'izy ireo), ary mandrefy famantarana iray ao aminy izahay (milaza hoe, enta-mavesatra CPU). Rehefa mitombo ny entana dia raketinay amin'ny fandaharam-potoana izany ary ampitomboinay ny isan'ny pods mba hizarana fangatahana.

Amin'izao fotoana izao ao amin'ny Kubernetes dia tsy mila atao amin'ny tanana izany: ny fitomboana / fihenam-bidy mandeha ho azy amin'ny isan'ny pods dia amboarina miankina amin'ny soatoavin'ny tondro enta-mavesatra.

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Ny fanontaniana lehibe eto dia: inona marina no refesina и ny fomba fandikana nahazo sanda (ho fandraisana fanapahan-kevitra momba ny fanovana ny isan'ny pods). Afaka mandrefy betsaka ianao:

Autoscaling sy fitantanana loharanon-karena ao amin'ny Kubernetes (fijery sy tatitry ny horonan-tsary)

Ahoana no hanaovana izany ara-teknika - manangona metrika, sns. - Noresahiko tamin'ny antsipiriany ny tatitra momba ny Fanaraha-maso sy Kubernetes. Ary ny toro-hevitra fototra amin'ny fisafidianana ny masontsivana tsara indrindra dia andrana!

Misy mampiasa fomba (Fampiasana Saturation sy Errors), ny dikany dia toy izao manaraka izao. Mifototra amin'ny inona no maha-zava-dehibe ny mizana, ohatra, ny php-fpm? Mifototra amin'ny hoe lany ny mpiasa dia izao fampiasana. Ary raha tapitra ny mpiasa ary tsy ekena ny fifandraisana vaovao dia efa izany mahavoky. Ireo mari-pamantarana roa ireo dia tsy maintsy refesina, ary miankina amin'ny sandany dia tsy maintsy atao ny scaling.

Raha tokony ny famaranana

Ny tatitra dia misy fitohizana: momba ny scaling mitsangana sy ny fomba hifidianana loharano mety. Hiresaka momba izany aho amin'ny horonan-tsary ho avy ny YouTube - misoratra anarana mba tsy ho lany!

Horonantsary sy sary mihetsika

Lahatsary avy amin'ny fampisehoana (44 minitra):

Fampisehoana ny tatitra:

Sal

Tatitra hafa momba ny Kubernetes ao amin'ny bilaogy:

Source: www.habr.com

Add a comment