paint-brush
Ahoana ny fomba hanatsarana ny Kubernetes ho an'ny sary Docker lehibeny@kksudo
Tantara vaovao

Ahoana ny fomba hanatsarana ny Kubernetes ho an'ny sary Docker lehibe

ny Kazakov Kirill10m2024/09/30
Read on Terminal Reader

Lava loatra; Mamaky

🚀 Ry mpamosavy Kubernetes, sasatra ve ianao amin'ny fiandrasana ora maro mba hanafana ny node? Alao sary an-tsaina hoe manapaka izany fotoana izany ho segondra monja! Ity lahatsoratra manova lalao ity dia manambara ny fomba hamerenana ny fizotry ny fametrahana Kubernetes anao, na dia miaraka amin'ny sary 3GB lehibe sy pods 1000 aza. Fantaro ny saosy miafina izay manova ny zava-bitan'ny klustero avy amin'ny malaina ho supersonic. Aza avela hanakana anao ny hafanana miadana — ianaro ny fomba hanovana ny fomba fiasanao Kubernetes anio!
featured image - Ahoana ny fomba hanatsarana ny Kubernetes ho an'ny sary Docker lehibe
Kazakov Kirill HackerNoon profile picture
0-item

Famintinana fohy momba ny olana

Indray andro, nandritra ny fanavaozana nomanina ho an'ny k8s cluster, dia hitanay fa saika ny POD rehetra (eo amin'ny 500 amin'ny 1,000 eo ho eo) amin'ny node vaovao dia tsy afaka nanomboka, ary ny minitra dia niova haingana ho ora. Mikaroka am-pahavitrihana ny fotony izahay, saingy afaka adiny telo, mbola tao amin'ny sata ContainerCreating ny PODS.


Niraikitra tao amin'ny ContainerCreating ny Kubernetes

Soa ihany fa tsy ny tontolon'ny prod ary nokasaina ho an'ny faran'ny herinandro ny varavarankely fikojakojana. Nanana fotoana izahay nanadihady ny olana tsy nisy fanerena.

Aiza no tokony hanombohanao ny fikarohanao momba ny fotony? Te hahafantatra bebe kokoa momba ny vahaolana hitanay ve ianao? Ampidiro ary ankafizo!

Ny antsipiriany bebe kokoa momba ny olana

Ny olana dia nanana sary docker marobe izahay izay mila sintonina ary atomboka amin'ny node tsirairay ao amin'ny cluster amin'ny fotoana iray ihany. Izany dia noho ny fisintonana sary docker maro miaraka amin'ny node tokana dia mety hitarika amin'ny fampiasana kapila avo lenta sy ny fotoana fanombohana mangatsiaka.


Indraindray dia maharitra adiny 3 ny fizotry ny CD mba hisintonana ireo sary. Na izany aza, tamin'ity indray mitoraka ity dia tafahitsoka tanteraka, satria ny habetsahan'ny PODS nandritra ny fanavaozana EKS (inline, rehefa manolo ny node rehetra ao amin'ny cluster) dia avo loatra.


  • Mipetraka ao amin'ny k8s (miorina amin'ny EKS ) ny fampiharanay rehetra. Mba hitsitsiana ny sarany ho an'ny DEV env, dia mampiasa ohatra amin'ny toerana izahay.

  • Mampiasa ny sary AmazonLinux2 izahay ho an'ny nodes.

  • Manana sampana fampiasa (FB) marobe izahay ao amin'ny tontolon'ny fampandrosoana izay apetraka tsy an-kijanona ao amin'ny cluster Kubernetes. Ny FB tsirairay dia manana ny rindranasany manokana, ary ny fampiharana tsirairay dia manana ny fiankinany (ao anaty sary).

  • Ao amin'ny tetikasanay, efa ho 200 ny apps ary mitombo io isa io. Ny fampiharana tsirairay dia mampiasa ny iray amin'ireo sary docker fototra 7 miaraka amin'ny haben'ny ~ 2 GB. Ny haben'ny totalin'ny sary voatahiry (ao amin'ny ECR ) dia eo amin'ny 3 GB.

  • Ny sary rehetra dia voatahiry ao amin'ny Amazon Elastic Container Registry (ECR).

  • Mampiasa ny karazana volume gp3 EBS ho an'ny nodes izahay.


Olana atrehana

  • Fotoana fanombohana mangatsiaka miitatra: Mety haharitra adiny 1 mahery ny fanombohana pod vaovao miaraka amin'ny sary vaovao, indrindra rehefa misintona sary maromaro miaraka amin'ny node iray.

  • Errors ErrImagePull: ErrImagePull matetika na mijanona amin'ny fanjakana ContainerCreating , manondro olana amin'ny fisarihana sary.

  • Fampiasana kapila avo lenta: Mijanona eo akaikin'ny 100% ny fampiasana kapila mandritra ny fizotry ny fisintonana sary, indrindra noho ny kapila I/O mafonja ilaina amin'ny decompression (oh: “unpigz”).

  • Olana amin'ny System DaemonSet: Ny rafitra sasany DaemonSets (toy ny aws-node na ebs-csi-node ) dia nifindra tany amin'ny fanjakana "tsy vonona" noho ny tsindry kapila, misy fiantraikany amin'ny fahavononana node.

  • Tsy misy cache sary eo amin'ny nodes: Satria mampiasa toerana misy toerana izahay, dia tsy afaka mampiasa ny kapila eo an-toerana izahay mba hametahana sary.


Izany dia miteraka fampitandremana marobe amin'ny sampana endri-javatra, indrindra satria ny FB samihafa dia manana andiana sary fototra samihafa.

Taorian'ny fanadihadiana haingana dia hitanay fa ny olana lehibe dia ny fanerena ny kapila amin'ny nodes amin'ny alàlan'ny fizotry unpigz . Ity dingana ity dia tompon'andraikitra amin'ny famongorana ny sary docker. Tsy nanova ny fikandrana default ho an'ny karazana volume gp3 EBS izahay, satria tsy mety amin'ny raharahanay.


Hotfix hamerenana ny cluster

Tamin'ny dingana voalohany dia nanapa-kevitra ny hampihena ny isan'ny POD amin'ny nodes izahay.

  1. Mamindra ny nodes vaovao mankany amin'ny fanjakana "Cordon" izahay
  2. Esory ny PODS rehetra niraikitra mba hampihenana ny tsindry kapila
  3. Alefaso tsirairay ny POD mba hanafana ny nodes
  4. Aorian'izay dia mamindra ny nodes mafana izahay mankany amin'ny fanjakana mahazatra ("unCordon")
  5. Nesoriny ny nodes rehetra tao amin'ny fanjakana nihitsoka
  6. Ny PODS rehetra dia nanomboka nahomby tamin'ny fampiasana ny cache sary Docker


Famolavolana CI/CD tany am-boalohany

Ny hevi-dehibe amin'ny vahaolana dia ny manafana ny nodes alohan'ny hanombohan'ny fizotry ny CD amin'ny ampahany lehibe indrindra amin'ny sary docker (layer dependencies JS), izay ampiasaina ho sary faka ho an'ny fampiharana rehetra. Manana karazany 7 fara fahakeliny amin'ny sary faka miaraka amin'ny fiankinan-doha JS isika, izay mifandray amin'ny karazana fampiharana. Noho izany, andeha hojerentsika ny endrika CI/CD tany am-boalohany.


Ao amin'ny fantsona CI/CD, manana andry 3 izahay: Pipeline CI/CD tany am-boalohany

Pipeline CI/CD tany am-boalohany:

  1. Amin'ny dingana Init it: manomana ny tontolo iainana/variable isika, mamaritra ny fitambaran'ny sary hamboarina, sns...

  2. Amin'ny dingana Build : manamboatra ny sary izahay ary manosika azy ireo amin'ny ECR

  3. Amin'ny dingana Deploy : mametraka ny sary amin'ny k8s (fanavaozana ny fametrahana, sns ...)


Ny antsipiriany bebe kokoa momba ny famolavolana CICD tany am-boalohany:

  • Ny sampana fampiasanay (FB) dia nisaraka tamin'ny sampana main . Ao amin'ny dingan'ny CI dia mamakafaka hatrany ireo andian-tsary izay novaina tao amin'ny FB izahay ary manangana azy ireo. Ny sampana main dia marin-toerana foana, araka ny famaritana, tokony hisy foana ny dikan-teny farany amin'ny sary fototra.
  • Manangana misaraka ny sary docker JS dependencies (ho an'ny tontolo tsirairay) ary manosika azy any amin'ny ECR mba hampiasa azy io ho sary fototra (fototra) ao amin'ny Dockerfile. Manana karazana 5-10 amin'ny sary docker JS dependencies izahay.
  • Ny FB dia apetraka amin'ny k8s cluster ho any amin'ny toerana misy anarana, fa amin'ny nodes mahazatra ho an'ny FB. Ny FB dia afaka manana fampiharana ~ 200, miaraka amin'ny haben'ny sary hatramin'ny 3 GB.
  • Manana ny rafitra autoscaling cluster izahay, izay manenjana ny node ao amin'ny cluster mifototra amin'ny entana na PODS miandry miaraka amin'ny nodeSelector sy ny fandeferana.
  • Ampiasainay ny toerana misy ny nodes.

Fampiharana ny dingana fanafanana

Misy fepetra takiana amin'ny dingana fanafanana.

Mandatory:

  1. Famahana olana : Miresaka sy mamaha olana ContainerCreating .
  2. Fahombiazana nohatsaraina : Mampihena be ny fotoana fanombohana amin'ny alàlan'ny fampiasana sary fototra efa mafana (miankina amin'ny JS).

Mahafinaritra ny manana fanatsarana:

  1. Flexibility : Mamela ny fanovana mora amin'ny karazana node sy ny androm-piainany (ohatra, SLA avo na fotoana maharitra hiainana).
  2. Mangarahara : Manome metrika mazava momba ny fampiasana sy ny zava-bita.
  3. Cost Efficiency : Mitahiry vola amin'ny famafana ny VNG avy hatrany rehefa voafafa ny sampana endri-javatra mifandraika.
  4. Isolation : Ity fomba fiasa ity dia miantoka fa tsy hisy fiantraikany amin'ny tontolo hafa.

vahaolana

Taorian'ny famakafakana ny fepetra takiana sy ny teritery, dia nanapa-kevitra ny hampihatra dingana mafana izay hanafana mialoha ny nodes miaraka amin'ny sary cache JS fototra. Ity dingana ity dia hatsangana alohan'ny hanombohan'ny fizotry ny CD, hiantohana fa ny node dia vonona amin'ny fametrahana ny FB, ary manana vintana ambony indrindra isika hamelezana ny cache.


Ity fanatsarana ity dia nozarainay ho dingana lehibe hazo:

  1. Mamorona ny fitambaran'ny nodes (Virtual Node Group) isaky ny FB tsirairay

  2. Ampio sary fototra amin'ny script cloud-init ho an'ireo nodes vaovao

  3. Manampia dingana mialoha ny fametrahana ny DaemonSet miaraka amin'ny fizarana initContainers mba hisintona ireo sary docker ilaina amin'ny nodes alohan'ny hanombohan'ny fizotry ny CD.


Ny fantsona CI/CD nohavaozina dia toa izao: Pipeline CI/CD nohavaozina


Fantsona CI/CD nohavaozina:

  1. Manomboka dingana
    1.1.(dingana vaovao) Init deploy : Raha fanombohana voalohany amin'ny FB io, dia mamoròna andian-tsarimihetsika manokana vaovao amin'ny tranga node (amin'ny teny ataonay dia Vondrona Node Virtual na VNG) ary alaivo ny sary fototra JS rehetra (sary 5–10). ) avy amin’ny sampana lehibe. Rariny ny manao an'io, satria nisaraka tamin'ny sampana lehibe ny FB. Hevitra manan-danja, tsy hetsika fanakanana izany.
  2. Dingana fananganana
  3. Dingana mialoha ny fametrahana Misintona sary fototra JS vita amin'ny mofo miaraka amin'ny marika FB manokana avy amin'ny ECR.
    3.1.(dingana vaovao) Hevi-dehibe : Hetsika fanakanana izany, satria tokony hampihena ny tsindry amin'ny kapila isika. Isaky ny misintona ny sary fototra ho an'ny node tsirairay mifandraika izahay.
    Btw, misaotra amin'ny dingana " init deploy" , efa manana ny sary docker fototra avy amin'ny sampana lehibe isika, izany dia manome antsika fahafahana lehibe hitifitra ny cache amin'ny fanombohana voalohany.
  4. ** Ampitao
    **Tsy misy fiovana amin'ity dingana ity. Saingy noho ny dingana teo aloha dia efa manana sarin-tsary docker mavesatra rehetra amin'ny nodes ilaina isika.

Atombohy ny dingana fametrahana

Mamorona andiana node vaovao ho an'ny FB tsirairay amin'ny alàlan'ny antso API (amin'ny rafitra autoscaling antoko faha-3) avy amin'ny fantsona CI.


Olana voavaha:

  1. Isolation : Ny FB tsirairay dia manana ny node manokana, miantoka fa tsy misy fiantraikany amin'ny FB hafa ny tontolo iainana.

  2. Flexibility : Afaka manova mora foana ny karazana node sy ny androm-piainany.

  3. Cost Efficiency : Afaka mamafa ny nodes avy hatrany isika rehefa voafafa ny FB.

  4. Mangarahara : Afaka manara-maso mora foana ny fampiasana sy ny fahombiazan'ny node isika (ny node tsirairay dia manana marika mifandraika amin'ny FB).

  5. Fampiasana mahomby amin'ny trangan-toerana : Manomboka amin'ny sary fototra efa voafaritra mialoha ny trangan-toerana, izany hoe, aorian'ny fanombohan'ny node misy toerana dia efa misy ny sary fototra eo amin'ny node (avy amin'ny sampana lehibe).


Ampidino ny sary fototra JS rehetra avy amin'ny sampana lehibe mankany amin'ireo node vaovao amin'ny alàlan'ny script cloud-init .


Raha alaina any ambadika any ny sary dia afaka manohy manangana sary vaovao tsy misy olana ny fizotry ny CD. Ankoatr'izay, ireo node manaraka (izay hoforonin'ny rafitra autoscaling) avy amin'ity vondrona ity dia hoforonina miaraka amin'ny angon-drakitra cloud-init nohavaozina, izay efa misy toromarika hisintonana sary alohan'ny hanombohana.


Olana voavaha:

  1. Famahana olana : Lasa ny tsindry kapila, satria nanavao ny script cloud-init izahay tamin'ny fampidirana ny fampidinana ny sary fototra avy amin'ny sampana lehibe. Izany dia ahafahantsika mamely ny cache amin'ny fanombohana voalohany ny FB.

  2. Fampiasana mahomby amin'ny trangan-toerana : Manomboka amin'ny angon- cloud-init nohavaozina ny trangan-toerana. Midika izany fa aorian'ny fanombohan'ny node spot dia efa misy ny sary fototra eo amin'ny node (avy amin'ny sampana lehibe).

  3. Fahombiazana nohatsaraina : Ny fizotry ny CD dia afaka manohy manangana sary vaovao tsy misy olana.


Ity hetsika ity dia nanampy ~ 17 segondra (antso API) amin'ny fantsona CI/CD.

Ity hetsika ity dia tsy misy dikany raha vao manomboka ny FB isika. Amin'ny manaraka, apetrakay amin'ny nodes efa misy ny fampiharana anay, izay efa manana sary fototra, izay natolotray tamin'ny fametrahana teo aloha.

Dingana mialoha ny fametrahana

Mila izany dingana izany isika, satria ny sary FB dia tsy mitovy amin'ny sary sampana lehibe. Mila misintona ny sary fototra FB ho any amin'ny nodes isika alohan'ny hanombohan'ny fizotry ny CD. Izany dia hanampy amin'ny fanalefahana ny fotoana fanombohana mangatsiaka lava sy ny fampiasana kapila avo lenta izay mety hitranga rehefa misintona sary mavesatra maro miaraka.


Ny tanjon'ny dingana mialoha ny fametrahana

  1. Atsaharo ny fanerena kapila : Ampidino tsikelikely ny sary mavesatra indrindra amin'ny docker. Aorian'ny dingana init-deploy dia efa manana ny sary fototra amin'ny nodes isika, izay midika fa manana vintana lehibe amin'ny cache voadona isika.

  2. Hatsarao ny fahombiazan'ny fandefasana : Ataovy azo antoka fa mafana ny nodes miaraka amin'ny sary docker tena ilaina, izay mitarika haingana kokoa (saika avy hatrany) ny fotoana fanombohana POD.

  3. Ampitomboy ny fahamarinan-toerana : Ahena ny mety hisian'ny lesoka ErrImagePull / ContainerCreating ary miantoka ny fijanonan'ny daemon rafitra ao anaty fanjakana "vonona".


Eo ambanin'ity dingana ity dia ampiana 10-15 minitra ny fizotry ny CD.

Andininy dingana mialoha ny fametrahana:

  • Ao amin'ny CD dia mamorona DaemonSet miaraka amin'ny fizarana initContainers .
  • Ny fizarana initContainers dia tanterahina alohan'ny hanombohan'ny kaontenera lehibe, miantoka fa ny sary ilaina dia alaina alohan'ny hanombohan'ny kaontenera lehibe.
  • Ao amin'ny CD dia tsy mitsahatra manamarina ny satan'ny daemonSet izahay. Raha ao anatin'ny "vonona" ny daemonSet, dia manohy ny fametrahana isika. Raha tsy izany, miandry ny daemonSet ho vonona isika.

fampitahana

Fampitahana ny dingana tany am-boalohany sy nohavaozina miaraka amin'ny dingan'ny fanamainana mialoha.

Dingana

Atombohy ny dingana fametrahana

Dingana mialoha ny fametrahana

miisa

Fotoana manontolo

Diff

Tsy misy fanafanana mialoha

0

0

11m 21s

11m 21s

0

Miaraka amin'ny hafanana mialoha

8 segondra

58 segondra

25 segondra

1m 31 sy

-9m 50s


Ny tena zava-dehibe dia niova ny fotoana "Deploy" (avy amin'ny baiko mihatra voalohany mankany amin'ny fanjakana mihazakazaka amin'ny pods) avy amin'ny 11m 21s ka hatramin'ny 25 segondra. Niova ny fotoana manontolo raha 11m 21s ho 1m 31s.

Hevi-dehibe iray, raha tsy misy sary fototra avy amin'ny sampana lehibe, dia hitovy amin'ny fotoana tany am-boalohany na kely kokoa ny fotoana "Deploy". Na izany aza, namaha olana momba ny fanerena ny kapila sy ny fotoana fanombohana mangatsiaka.


Famaranana Ny fotoana misintona

Ny olana lehibe ContainerCreating dia voavaha tamin'ny alàlan'ny dingana fanafanana. Ho tombony dia nahenay be ny fotoana fanombohana mangatsiaka ny PODs.
Lasa ny tsindry kapila, satria efa manana ny sary fototra eo amin'ny nodes izahay. Ny daemonSets rafitra dia ao anatin'ny toe-javatra "vonona" sy "salama" (satria tsy misy tsindry amin'ny kapila), ary tsy nahita lesoka ErrImagePull mifandraika amin'ity olana ity izahay.


Vahaolana sy rohy azo atao


PS: Te-hiteny ho an'ny ekipa teknika lehibe ao amin'ny Justt aho ( https://www.linkedin.com/company/justt-ai ) noho ny asa tsy mety sasatra sy ny fomba fiasa tena mamorona amin'ny olana rehetra atrehin'izy ireo. miaraka amin'ny. Indrindra indrindra, antsoantso ho an'i Ronny Sharaby, ilay mpitarika tsara indrindra izay tompon'andraikitra amin'ny asa lehibe ataon'ny ekipa. Tsy andriko ny hahita ohatra tsara kokoa momba ny fiantraikan'ny famoronanao amin'ny vokatra Justt.