Fampidirana Helm 3

Fampidirana Helm 3

Fanamarihana. transl.: Ny 16 Mey amin'ity taona ity dia manamarika dingana lehibe amin'ny fampandrosoana ny mpitantana ny fonosana ho an'ny Kubernetes - Helm. Tamin'ity andro ity dia naseho ny famoahana alpha voalohany amin'ny dikan-teny lehibe ho avy amin'ny tetikasa - 3.0 -. Ny famoahana azy dia hitondra fiovana lehibe sy nandrasana hatry ny ela ho an'ny Helm, izay antenain'ny maro ao amin'ny vondrom-piarahamonina Kubernetes. Iray amin'ireo ny tenanay, satria mampiasa Helm am-pahavitrihana izahay amin'ny fametrahana fampiharana: nampidirinay tao anatin'ny fitaovan'ny fampiharana CI/CD izany. werf ary ombieny ombieny dia mandray anjara amin'ny fampandrosoana ny any ambony izahay. Ity fandikan-teny ity dia manambatra naoty 7 avy amin'ny bilaogy ofisialy Helm, izay natokana ho an'ny famoahana alpha voalohany an'ny Helm 3 ary miresaka momba ny tantaran'ny tetikasa sy ireo singa fototra amin'ny Helm 3. Ny mpanoratra azy ireo dia Matt "bacongobbler" Fisher, mpiasan'ny Microsoft. ary iray amin'ireo tompon'andraikitra lehibe amin'ny Helm.

Tamin'ny 15 Oktobra 2015, teraka ilay tetikasa antsoina ankehitriny hoe Helm. Herintaona monja taorian'ny nananganana azy dia nanatevin-daharana an'i Kubernetes ny vondrom-piarahamonina Helm, raha niasa tamim-pahavitrihana tamin'ny Helm 2. Tamin'ny Jona 2018, Helm niditra tao amin'ny CNCF ho tetikasa fampandrosoana (incubating). Mandroso haingana amin'izao fotoana izao, ary efa an-dalana ny famoahana alpha voalohany amin'ny Helm 3 vaovao. (ity famoahana ity efa nitranga amin'ny tapaky ny volana Mey - eo ho eo. transl.).

Amin'ity ampahany ity dia hiresaka momba ny toerana niantombohan'izany rehetra izany aho, ny fomba nahatongavantsika teo amin'ny toerana misy antsika ankehitriny, ampahafantaro ny sasany amin'ireo endri-javatra tsy manam-paharoa hita ao amin'ny famoahana alpha voalohany an'ny Helm 3, ary hanazava ny fomba fikasantsika handroso.

famintinana:

  • ny tantaran'ny famoronana Helm;
  • fanaovam-beloma an'i Tiller;
  • fitahirizana tabilao;
  • fitantanana famotsorana;
  • fiovana amin'ny fiankinan-doha amin'ny tabilao;
  • tabilao famakiam-boky;
  • inona ny manaraka?

Ny tantaran'i Helm

teraka

Helm 1 dia nanomboka tamin'ny tetikasa Open Source noforonin'i Deis. Mpitombo kely izahay variana Microsoft tamin'ny lohataona 2017. Ny tetikasa Open Source hafa ataonay, antsoina koa hoe Deis, dia nanana fitaovana deisctl, izay nampiasaina (ankoatra ny zavatra hafa) hametrahana sy hampandehanana ny sehatra Deis amin'ny Vondrona fleet. Tamin'izany fotoana izany, ny Fleet dia iray amin'ireo sehatra orkestra voalohany amin'ny kaontenera.

Tamin'ny tapaky ny taona 2015, nanapa-kevitra ny hanova lalana izahay ary namindra an'i Deis (tamin'izany fotoana izany dia nantsoina hoe Deis Workflow) avy amin'ny Fleet ho any Kubernetes. Ny iray amin'ireo voalohany navaozina dia ny fitaovana fametrahana. deisctl. Nampiasainay hametrahana sy hitantana ny Deis Workflow ao amin'ny cluster Fleet.

Helm 1 dia noforonina tamin'ny sarin'ireo mpitantana fonosana malaza toa an'i Homebrew, apt ary yum. Ny tanjona lehibe indrindra dia ny hanatsorana ireo asa toy ny famenoana sy fametrahana fampiharana amin'ny Kubernetes. Ny Helm dia nampidirina tamin'ny fomba ofisialy tamin'ny 2015 tao amin'ny fihaonambe KubeCon tany San Francisco.

Nandaitra ny andranay voalohany niaraka tamin'i Helm, saingy tsy nisy fetrany izany. Nalainy ny andiana fanehoana Kubernetes, nohamafisina tamin'ny mpamokatra ho bloc YAML fampidirana (zavatra eo aloha)*, ary nampiditra ny valiny tao amin'ny Kubernetes.

* Fanamarihana. transl.: Avy amin'ny dikan-teny voalohany amin'ny Helm, ny syntax YAML dia nofidina hamaritana ny loharanon'i Kubernetes, ary ny maodely Jinja sy ny script Python dia notohanana rehefa manoratra tefy. Nanoratra bebe kokoa momba izany izahay sy ny firafitry ny dikan-teny voalohany amin'ny Helm amin'ny ankapobeny ao amin'ny toko "A Brief History of Helm" ity fitaovana ity.

Ohatra, mba hanoloana saha iray amin'ny rakitra YAML, dia tsy maintsy nampidirinao tamin'ny fanehoana ity fananganana manaraka ity:

#helm:generate sed -i -e s|ubuntu-debootstrap|fluffy-bunny| my/pod.yaml

Mahafinaritra ny fisian'ny maotera môdely ankehitriny, sa tsy izany?

Noho ny antony maro, ity installer Kubernetes tany am-boalohany ity dia nitaky lisitr'ireo rakitra miharihary voasokajy mafy ary tsy nanao afa-tsy filaharana kely sy raikitra. Sarotra be ny fampiasana fa ny ekipan'ny Deis Workflow R&D dia nanana fotoan-tsarotra rehefa nanandrana namindra ny vokatra tamin'ity sehatra ity izy ireo - na izany aza, efa nafafy ny voan'ny hevitra. Fotoana fianarana lehibe ny andranay voalohany: nahatsapa izahay fa tena nazoto tamin'ny famoronana fitaovana pragmatika izay mamaha ny olana andavanandro ho an'ireo mpampiasa anay.

Miorina amin'ny traikefan'ny fahadisoana taloha, nanomboka namolavola Helm 2 izahay.

Famoronana Helm 2

Tamin'ny faran'ny taona 2015, nifandray taminay ny ekipan'ny Google. Niasa fitaovana mitovy amin'izany ho an'ny Kubernetes izy ireo. Ny Deployment Manager ho an'ny Kubernetes dia seranan-tsambon'ny fitaovana efa misy izay nampiasaina ho an'ny Google Cloud Platform. Hoy izy ireo: “Tiantsika ve ny handany andro vitsivitsy hiresahana momba ny fitoviana sy ny fahasamihafana?”

Tamin'ny Janoary 2016, nivory tany Seattle ny ekipan'ny Helm and Deployment Manager mba hifanakalo hevitra. Nifarana tamin'ny drafitra fatra-paniry laza ny fifampiraharahana: hanambatra ny tetikasa roa hamorona Helm 2. Miaraka amin'i Deis sy Google, ry zalahy avy any SkippBox (ampahany amin'ny Bitnami ankehitriny - transl. eo ho eo), ary nanomboka niasa tamin'ny Helm 2 izahay.

Te-hihazona ny fahafahan'ny Helm hampiasaina izahay, fa ampio ireto manaraka ireto:

  • maodely tabilao ho an'ny fanamboarana;
  • fitantanana intra-cluster ho an'ny ekipa;
  • trano fitehirizam-bokatra sariitatra manerantany;
  • endrika fonosana stable misy safidy sonia;
  • fanoloran-tena mafy amin'ny famoahana semantika sy fitazonana ny fifanarahana mihemotra eo amin'ny dikan-teny.

Mba hanatratrarana ireo tanjona ireo dia nisy singa faharoa nampiana tao amin'ny ecosystem Helm. Ity singa intra-cluster ity dia antsoina hoe Tiller ary tompon'andraikitra amin'ny fametrahana tabilao Helm sy ny fitantanana azy ireo.

Hatramin'ny nivoahan'ny Helm 2 tamin'ny taona 2016, dia nanampy fanavaozana lehibe maromaro i Kubernetes. Fanaraha-maso fidirana mifototra amin'ny anjara andraikitra (RBAC), izay nisolo ny Attribute-Based Access Control (ABAC). Nampidirina ny karazana loharanon-karena vaovao (mbola tao anaty beta ny fandefasana tamin'izany fotoana izany). Noforonina ny Famaritana loharanon-karena manokana (antsoina hoe Loharano Antoko fahatelo na TPR tany am-boalohany). Ary ny tena zava-dehibe dia nisy andiana fomba fanao tsara indrindra nipoitra.

Tao anatin'ireo fiovana rehetra ireo dia nanohy nanompo ireo mpampiasa Kubernetes tamim-pahatokiana i Helm. Taorian'ny telo taona sy fanampim-baovao maro, dia mazava fa tonga ny fotoana hanaovana fanovana lehibe amin'ny codebase mba hahazoana antoka fa afaka manohy mamaly ny filàn'ny tontolo iainana mivoatra i Helm.

Fanaovam-beloma an'i Tiller

Nandritra ny fivoaran'ny Helm 2, dia nampidirinay i Tiller ho ampahany amin'ny fampidiranay amin'ny Google Deployment Manager. Nitana anjara toerana lehibe ho an'ireo ekipa miasa ao anatin'ny vondron'olona iraisana i Tiller: nahafahan'ireo manam-pahaizana manokana miasa ny fotodrafitrasa hifanerasera amina andiana famoahana mitovy.

Koa satria ny fanaraha-maso ny fidirana mifototra amin'ny anjara (RBAC) dia navela tamin'ny alàlan'ny default ao amin'ny Kubernetes 1.6, dia nanjary sarotra kokoa ny niara-niasa tamin'i Tiller tamin'ny famokarana. Noho ny hamaroan'ny politikam-piarovana azo atao, ny toeranay dia ny manolotra fanefena mamela amin'ny alàlan'ny default. Izany dia nahafahan'ireo vao haingana nanandrana tamin'ny Helm sy Kubernetes nefa tsy mila miditra amin'ny sehatra fiarovana aloha. Indrisy anefa fa ity fanefena fahazoan-dàlana ity dia mety hanome alalana malalaka loatra ho an'ny mpampiasa izay tsy ilainy. Ny injeniera DevOps sy SRE dia tsy maintsy nianatra dingana fanampiny amin'ny fampandehanana rehefa mametraka Tiller amin'ny vondron'olona marobe.

Rehefa avy nianatra ny fomba nampiasan'ny vondrom-piarahamonina Helm tamin'ny toe-javatra manokana izahay, dia nahatsapa izahay fa ny rafitra fitantanana ny famoahana an'i Tiller dia tsy mila miantehitra amin'ny singa ao anatin'ny cluster mba hitazomana ny fanjakana na hiasa amin'ny maha-ivon'ny famoahana vaovao. Fa kosa, afaka mahazo fampahalalana fotsiny avy amin'ny mpizara Kubernetes API izahay, mamorona tabilao eo amin'ny lafiny mpanjifa, ary mitahiry rakitsoratra momba ny fametrahana ao amin'ny Kubernetes.

Ny tanjon'i Tiller dia mety ho tratra raha tsy teo i Tiller, ka ny iray amin'ireo fanapahan-kevitra voalohany momba ny Helm 3 dia ny handao tanteraka an'i Tiller.

Rehefa lasa i Tiller, dia nohamafisina tanteraka ny maodely fiarovana an'i Helm. Helm 3 izao dia manohana ny fiarovana maoderina, ny maha-izy azy ary ny fomba fanomezan-dàlana an'ny Kubernetes ankehitriny. Ny fahazoan-dàlana helm dia voafaritra amin'ny fampiasana kubeconfig file. Ny mpitantana vondrona dia afaka mametra ny zon'ny mpampiasa amin'ny ambaratongan'ny granularity. Ny famoahana dia mbola voatahiry ao anatin'ny cluster, ary ny sisa amin'ny fiasan'ny Helm dia mijanona ho tsy misy dikany.

Taratasy fitahirizana

Amin'ny ambaratonga avo, ny fitahirizana tabilao dia toerana iray ahafahana mitahiry sy mizara ireo tabilao. Ny mpanjifa Helm dia mametaka ary mandefa ny tabilao any amin'ny tahiry. Raha tsorina, ny fitehirizana tabilao dia mpizara HTTP voalohany misy rakitra index.yaml sy sariitatra voafono.

Na dia misy tombony sasany aza ny Charts Repository API mahafeno ny fepetra fitahirizana fototra indrindra, dia misy ihany koa ny fatiantoka vitsivitsy:

  • Ny fitahirizana tabilao dia tsy mifanaraka amin'ny ankamaroan'ny fampiharana fiarovana ilaina amin'ny tontolo famokarana. Ny fananana API manara-penitra ho an'ny fanamarinana sy ny fanomezan-dàlana dia tena zava-dehibe amin'ny sehatra famokarana.
  • Ny fitaovana enti-manana sarin'i Helm, ampiasaina amin'ny sonia, manamarina ny fahamendrehana sy ny toetran'ny tabilao, dia ampahany tsy azo atao amin'ny fizotran'ny famoahana Chart.
  • Amin'ny toe-javatra misy mpampiasa maro, ny tabilao mitovy dia azon'ny mpampiasa hafa ampidirin'ny mpampiasa iray, mampitombo avo roa heny ny habaka ilaina hitahirizana votoaty mitovy. Namboarina ny repositories Smarter hamahana ity olana ity, saingy tsy tafiditra ao anatin'ny fepetra ofisialy izy ireo.
  • Ny fampiasana rakitra fanondro tokana ho an'ny fikarohana, fitehirizana metadata, ary fakana tabilao dia nanasarotra ny famolavolana fampiharana azo antoka ho an'ny mpampiasa maro.

Ny tetikasa Docker Distribution (fantatra ihany koa amin'ny hoe Docker Registry v2) no mpandimby an'i Docker Registry ary miasa toy ny fitaovana ho an'ny fonosana, fandefasana, fitehirizana ary fandefasana sary Docker. Serivisy rahona lehibe maro no manolotra vokatra mifototra amin'ny Distribution. Noho ny fitomboan'ny fifantohana, ny tetikasa Distribution dia nahazo tombony tamin'ny fanatsarana an-taonany maro, ny fomba fanao tsara indrindra amin'ny fiarovana, ary ny fitsapana eny an-kianja izay nahatonga azy ho iray amin'ireo mahery fo tsy nihira indrindra tamin'ny tontolon'ny Open Source.

Saingy fantatrao ve fa ny Tetikasa Distribution dia natao hizarana endrika votoaty rehetra, fa tsy sary fitoeran-javatra fotsiny?

Noho ny ezaka Misokatra Initiative Container (na OCI), ny sarin'ny Helm dia azo apetraka amin'ny ohatra Distribution rehetra. Amin'izao fotoana izao, ity dingana ity dia andrana. Ny fanohanana ny fidirana sy ny endri-javatra hafa ilaina amin'ny Helm 3 feno dia asa an-dalam-pandrosoana, saingy faly izahay hianatra avy amin'ny zavatra hitan'ny ekipa OCI sy Distribution nandritra ny taona maro. Ary amin'ny alalan'ny fitarihana sy ny fitarihan'izy ireo, dia mianatra ny atao hoe manao asa fanompoana be dia be izahay.

Misy famaritana amin'ny antsipiriany bebe kokoa momba ny fanovana sasany ho avy amin'ny fitahirizana tabilao Helm rohy.

Fitantanana famoahana

Ao amin'ny Helm 3, ny toetry ny fampiharana dia arahin'ny zavatra roa ao anatin'ny cluster:

  • zavatra famotsorana - maneho ohatra fampiharana;
  • miafina dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-teny iray (ohatra, ny famoahana dikan-teny vaovao).

antso helm install mamorona zavatra famotsorana ary mamoaka tsiambaratelo dikan-teny. ANTSO helm upgrade dia mitaky zavatra famotsorana (izay azony ovaina) ary mamorona tsiambaratelo famoahana vaovao misy ny soatoavina vaovao sy ny fanehoana voaomana.

Ny zavatra famotsorana dia misy fampahafantarana momba ny famotsorana, izay fametrahana manokana ny tabilao misy anarana sy ny sandany. Ity zavatra ity dia mamaritra ny metadata ambony indrindra momba ny famoahana. Mitohy mandritra ny androm-piainan'ny fampiharana ilay zavatra famotsorana ary tompon'ny tsiambaratelon'ny famoahana rehetra, ary koa ireo zavatra rehetra noforonin'ny tabilao Helm mivantana.

Ny dikan-teny tsiambaratelo dia mampifandray ny famoahana amin'ny andiany fanavaozana (fametrahana, fanavaozana, famerenana, famafana).

Ao amin'ny Helm 2, ny fanavaozana dia tena tsy miova. ANTSO helm install namorona v1, ny fanavaozana manaraka (fanavaozana) - v2, sy ny sisa. Ny tsiambaratelon'ny famoahana sy famoahana dia nirodana ho zavatra tokana antsoina hoe fanavaozana. Ny fanavaozana dia voatahiry ao amin'ny namespace mitovy amin'ny Tiller, izay midika fa ny famoahana tsirairay dia "maneran-tany" amin'ny lafin'ny namespace; vokatr'izany dia ohatra iray monja amin'ny anarana no azo ampiasaina.

Ao amin'ny Helm 3, ny famoahana tsirairay dia mifandray amin'ny tsiambaratelo famoahana iray na maromaro. Ny zavatra famotsorana dia manoritsoritra foana ny famoahana ankehitriny napetraka amin'ny Kubernetes. Ny tsiambaratelon'ny famoahana tsirairay dia mamaritra dikan-teny iray ihany amin'io famoahana io. Ny fanavaozana, ohatra, dia hamorona tsiambaratelo dikan-teny vaovao ary hanova ny zavatra famoahana mba hanondroana io dikan-teny vaovao io. Raha misy ny fiverenana dia azonao ampiasaina ny tsiambaratelon'ny famoahana teo aloha mba hamerenana ny famoahana amin'ny fanjakana teo aloha.

Taorian'ny nandaozan'i Tiller, ny Helm 3 dia mitahiry angon-drakitra amin'ny anaran'ny anarana mitovy amin'ny famoahana azy. Ity fanovana ity dia ahafahanao mametraka tabilao miaraka amin'ny anaran'ny famoahana mitovy amin'ny toerana misy anarana hafa, ary ny angon-drakitra dia voatahiry eo anelanelan'ny fanavaozana cluster / reboots amin'ny etcd. Ohatra, azonao atao ny mametraka WordPress ao amin'ny "foo" namespace ary avy eo ao amin'ny "bar" namespace, ary ny famoahana roa dia azo antsoina hoe "wordpress".

Fanovana amin'ny fiankinan-doha amin'ny tabilao

Charts feno (mampiasa helm package) ampiasaina amin'ny Helm 2 dia azo apetraka miaraka amin'ny Helm 3, na izany aza dia nohavaozina tanteraka ny fizotry ny asa fampivoarana tabilao, noho izany dia tsy maintsy misy ny fanovana sasany hanohizana ny fivoaran'ny tabilao miaraka amin'ny Helm 3. Indrindra indrindra, niova ny rafi-pitantanana miankina amin'ny tabilao.

Nifindra avy amin'ny rafitra fitantanana miankina amin'ny tabilao requirements.yaml и requirements.lock amin'ny Chart.yaml и Chart.lock. Midika izany fa ireo tabilao izay nampiasa ny baiko helm dependency, mitaky fanamboarana sasany mba hiasa ao amin'ny Helm 3.

Andeha isika hijery ohatra iray. Andeha isika hanampy fiankinan-doha amin'ny tabilao ao amin'ny Helm 2 ary hojerentsika izay fiovana rehefa mifindra any amin'ny Helm 3.

Ao amin'ny Helm 2 requirements.yaml toa izao:

dependencies:
- name: mariadb
  version: 5.x.x
  repository: https://kubernetes-charts.storage.googleapis.com/
  condition: mariadb.enabled
  tags:
    - database

Ao amin'ny Helm 3, ny fiankinan-doha mitovy amin'izany dia ho hita ao amin'ny anao Chart.yaml:

dependencies:
- name: mariadb
  version: 5.x.x
  repository: https://kubernetes-charts.storage.googleapis.com/
  condition: mariadb.enabled
  tags:
    - database

Ny tabilao dia mbola alaina ary apetraka ao amin'ny lahatahiry charts/, so subcharts (sombiny), mandry ao amin'ny katalaogy charts/, dia hanohy hiasa tsy misy fiovana.

Fampidirana ny sarin'ny tranomboky

Ny Helm 3 dia manohana karazana tabilao antsoina hoe tabilao famakiam-boky (sarin'ny tranomboky). Ity tabilao ity dia ampiasain'ny tabilao hafa, fa tsy mamorona artifact famoahana ho azy irery. Ny môdely tabilao tabilao dia tsy afaka manambara singa ihany define. Ny votoaty hafa dia atao tsinontsinona. Izany dia ahafahan'ny mpampiasa mampiasa indray sy mizara sombin-kaody izay azo ampiasaina amin'ny tabilao maromaro, ka hisorohana ny dika mitovy sy ny fanarahana ny fitsipika. MAIMA.

Ny sarin'ny tranomboky dia ambara ao amin'ny fizarana dependencies anaty rakitra Chart.yaml. Ny fametrahana sy ny fitantanana azy ireo dia tsy misy hafa amin'ny tabilao hafa.

dependencies:
  - name: mylib
    version: 1.x.x
    repository: quay.io

Faly izahay amin'ny tranga fampiasa izay hanokatra ity singa ity ho an'ny mpamorona tabilao, ary koa ny fomba fanao tsara indrindra azo avy amin'ny tabilao famakiam-boky.

Inona ny manaraka?

Helm 3.0.0-alpha.1 no fototra iorenantsika hananganana dikan-teny vaovaon'ny Helm. Ao amin'ny lahatsoratra dia namaritra endri-javatra mahaliana sasany amin'ny Helm 3 aho. Maro amin'izy ireo no mbola eo am-piandohan'ny fivoarana ary mahazatra izany; Ny tanjon'ny famoahana alfa dia ny hizaha toetra ny hevitra, hanangona hevitra avy amin'ireo mpampiasa tany am-boalohany, ary hanamafy ny hevitsika.

Raha vao mivoaka ny version alpha (tadidio fa ity efa nitranga - eo ho eo. transl.), hanomboka handray patch ho an'ny Helm 3 avy amin'ny vondrom-piarahamonina izahay. Mila manangana fototra mafy orina ianao izay ahafahan'ny fonctionnaire vaovao hivelatra sy horaisina, ary ho an'ny mpampiasa hahatsiaro ho tafiditra ao anatin'ilay dingana amin'ny fanokafana tapakila sy fanamboarana.

Niezaka nanasongadina ny sasany amin'ireo fanatsarana lehibe tonga tao amin'ny Helm 3 aho, saingy tsy dia feno loatra ity lisitra ity. Ny tondrozotra feno ho an'ny Helm 3 dia ahitana endri-javatra toy ny paikady fanavaozana nohatsaraina, fampidirana lalindalina kokoa amin'ny rejisitra OCI, ary ny fampiasana skema JSON hanamarina ny soatoavin'ny tabilao. Mikasa ny hanadio ny codebase koa izahay ary hanavao ny ampahany amin'izany izay tsy noraharahaina nandritra ny telo taona lasa.

Raha tsapanao fa nisy zavatra tsy hitanay, dia tianay ny mandre ny hevitrao!

Miaraha amin'ny fifanakalozan-kevitra ao amin'ny anay Slack fantsona:

  • #helm-users ho an'ny fanontaniana sy fifandraisana tsotra amin'ny fiarahamonina;
  • #helm-dev mba hiresaka momba ny fisintonana fangatahana, kaody ary bibikely.

Azonao atao ihany koa ny miresaka amin'ny antso ho an'ny daholobe isan-kerinandro amin'ny Alakamisy amin'ny 19:30 MSK. Ny fivoriana dia natokana ho an'ny fifanakalozan-kevitra momba ireo olana izay iasan'ny mpamorona fototra sy ny fiaraha-monina, ary koa ny lohahevitra hodinihina mandritra ny herinandro. Afaka miditra sy mandray anjara amin’ny fivoriana ny rehetra. Rohy azo alaina ao amin'ny fantsona Slack #helm-dev.

PS avy amin'ny mpandika teny

Vakio ihany koa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment