Գործիքներ Kubernetes-ում աշխատող հավելվածների մշակողների համար

Գործիքներ Kubernetes-ում աշխատող հավելվածների մշակողների համար

Գործառնությունների ժամանակակից մոտեցումը լուծում է բազմաթիվ հրատապ բիզնես խնդիրներ: Կոնտեյներները և նվագախմբերը հեշտացնում են ցանկացած բարդության նախագծերի մասշտաբը, պարզեցնում նոր տարբերակների թողարկումը, դրանք դարձնում ավելի հուսալի, բայց միևնույն ժամանակ լրացուցիչ խնդիրներ են ստեղծում մշակողների համար: Ծրագրավորողն առաջին հերթին մտածում է իր ծածկագրի մասին՝ ճարտարապետություն, որակ, կատարողականություն, էլեգանտություն, և ոչ թե ինչպես այն կաշխատի Kubernetes-ում և ինչպես փորձարկել և կարգաբերել այն նույնիսկ նվազագույն փոփոխություններ կատարելուց հետո: Հետևաբար, միանգամայն բնական է, որ Kubernetes-ի համար գործիքները ակտիվորեն մշակվում են, որոնք օգնում են լուծել նույնիսկ ամենա«արխաիկ» ծրագրավորողների խնդիրները և թույլ տալով նրանց կենտրոնանալ հիմնականի վրա:

Այս ակնարկը հակիրճ տեղեկատվություն է տրամադրում որոշ գործիքների մասին, որոնք հեշտացնում են կյանքը ծրագրավորողի համար, որի կոդը աշխատում է Kubernetes կլաստերի pod'ax-ում:

Պարզ օգնականներ

Kubectl-debug

  • Ներքեւի տողը, ավելացրեք ձեր կոնտեյները Pod-ի մեջ և տեսեք, թե ինչ է տեղի ունենում դրա մեջ.
  • GitHub.
  • GH-ի համառոտ վիճակագրություն՝ 715 աստղ, 54 պարտավորություն, 9 ներդրում:
  • Լեզուն՝ գնա։
  • Լիցենզիա՝ Apache License 2.0.

Kubectl-ի այս փլագինը թույլ է տալիս ստեղծել լրացուցիչ կոնտեյներ հետաքրքրություն ներկայացնող պատի ներսում, որը կհամօգտագործի գործընթացի անվանատարածքը այլ բեռնարկղերի հետ: Դրանում դուք կարող եք վրիպազերծել pod-ի աշխատանքը. ստուգել ցանցը, լսել ցանցի թրաֆիկը, կատարել հետաքրքրության գործընթացի շերտ և այլն:

Դուք կարող եք նաև անցնել գործընթացի կոնտեյների՝ գործարկելով chroot /proc/PID/root - սա կարող է շատ հարմար լինել, երբ անհրաժեշտ է արմատային կեղև ստանալ տարայի մեջ, որի համար այն դրված է մանիֆեստում securityContext.runAs.

Գործիքը պարզ է և արդյունավետ, ուստի այն կարող է օգտակար լինել յուրաքանչյուր մշակողի համար: Այդ մասին ավելին գրել ենք առանձին հոդված.

Հեռուստատեսություն

  • Ներքեւի տողը, հավելվածը փոխանցեք ձեր համակարգչին: Մշակել և կարգաբերել լոկալ.
  • Site; GitHub.
  • GH-ի համառոտ վիճակագրություն՝ 2131 աստղ, 2712 պարտավորություն, 33 ներդրում:
  • Լեզուն՝ Python:
  • Լիցենզիա՝ Apache License 2.0.

Այս snap-ի գաղափարը տեղական օգտագործողի համակարգչի վրա հավելվածով կոնտեյներ գործարկելն է և կլաստերից դեպի այն և հետադարձ ողջ երթևեկությունը: Այս մոտեցումը թույլ է տալիս զարգանալ լոկալ՝ պարզապես ֆայլերը խմբագրելով ձեր սիրելի IDE-ում. արդյունքները հասանելի կլինեն անմիջապես:

Տեղական աշխատանքի առավելություններն են խմբագրումների և ակնթարթային արդյունքների հարմարավետությունը, հավելվածը սովորական եղանակով կարգաբերելու հնարավորությունը: Բացասական կողմն այն է, որ այն պահանջում է կապի արագություն, ինչը հատկապես նկատելի է, երբ դուք պետք է աշխատեք բավականին բարձր RPS և տրաֆիկ ունեցող հավելվածի հետ: Բացի այդ, Telepresence-ը խնդիրներ ունի Windows-ում ձայնի ամրացման հետ կապված, ինչը կարող է որոշիչ սահմանափակում լինել այս ՕՀ-ին սովոր մշակողների համար:

Մենք արդեն կիսվել ենք Telepresence-ի օգտագործման մեր փորձով այստեղ.

Ksync

  • Ներքեւի տողը, կոդի գրեթե ակնթարթային համաժամացումը կլաստերի կոնտեյների հետ.
  • GitHub.
  • GH-ի համառոտ վիճակագրություն՝ 555 աստղ, 362 պարտավորություն, 11 ներդրում:
  • Լեզուն՝ գնա։
  • Լիցենզիա՝ Apache License 2.0.

Կոմունալ ծրագիրը թույլ է տալիս համաժամեցնել տեղական գրացուցակի բովանդակությունը կլաստերում աշխատող կոնտեյների գրացուցակի հետ: Նման գործիքը կատարյալ է ծրագրավորման ծրագրավորման լեզուներով մշակողների համար, որոնց հիմնական խնդիրը կոդն աշխատող կոնտեյներ հասցնելն է: Ksync-ը նախատեսված է այս գլխացավը թեթևացնելու համար:

Երբ սկզբնավորվում է մեկ անգամ հրամանով ksync init Կլաստերում ստեղծվում է DaemonSet, որն օգտագործվում է ընտրված կոնտեյների ֆայլային համակարգի վիճակը վերահսկելու համար: Իր տեղական համակարգչում մշակողը գործարկում է հրամանը ksync watch, որը վերահսկում է կոնֆիգուրացիաները և գործարկումը համաժամեցում, որն ուղղակիորեն համաժամացնում է ֆայլերը կլաստերի հետ:

Մնում է ksync-ին հրահանգել, թե ինչի հետ ինչ համաժամանակի։ Օրինակ, այս հրամանը.

ksync create --name=myproject --namespace=test --selector=app=backend --container=php --reload=false /home/user/myproject/ /var/www/myproject/

... կստեղծի դիտորդ անունով myprojectորը կփնտրի պիտակով պատիճ app=backend և փորձեք համաժամացնել տեղական գրացուցակը /home/user/myproject/ կատալոգով /var/www/myproject/ կանչված կոնտեյների մոտ php.

Խնդիրներ և նշումներ ksync-ի վերաբերյալ մեր փորձից.

  • Պետք է օգտագործվի Kubernetes կլաստերային հանգույցներում overlay2 որպես պահեստային վարորդ Docker-ի համար: Կոմունալը չի ​​աշխատի ուրիշների հետ:
  • Windows-ը որպես հաճախորդի OS օգտագործելիս ֆայլային համակարգի դիտորդը կարող է ճիշտ չաշխատել: Այս սխալը նկատվել է մեծ դիրեկտորիաների հետ աշխատելիս՝ մեծ թվով տեղադրված ֆայլերի և գրացուցակների հետ: Մենք ստեղծել ենք համապատասխան հարց համաժամացման նախագծում, սակայն դրա շուրջ առաջընթաց դեռ չկա (հուլիսի սկզբից)։
  • Օգտագործեք ֆայլը .stignore նշելու ուղիներ կամ ֆայլերի օրինաչափություններ, որոնք համաժամացման կարիք չունեն (օրինակ՝ դիրեկտորիաներ app/cache и .git).
  • Լռելյայնորեն, ksync-ը կվերագործարկի կոնտեյները, երբ ֆայլերը փոխվեն: Node.js-ի համար դա հարմար է, բայց PHP-ի համար դա բոլորովին ավելորդ է։ Ավելի լավ է անջատեք opcache-ը և օգտագործեք դրոշը --reload=false.
  • Կազմաձևը միշտ կարող է շտկվել $HOME/.ksync/ksync.yaml.

դդմիկ

  • Ներքեւի տողը, վրիպազերծման գործընթացները անմիջապես կլաստերում.
  • GitHub.
  • GH-ի համառոտ վիճակագրություն՝ 1154 աստղ, 279 պարտավորություն, 23 ներդրում:
  • Լեզուն՝ գնա։
  • Լիցենզիա՝ Apache License 2.0.

Այս գործիքը նախատեսված է վրիպազերծման գործընթացները անմիջապես պատիճներում: Կոմունալը պարզ է և ինտերակտիվ կերպով թույլ է տալիս ընտրել ցանկալի վրիպազերծիչը (տես ներքեւում) եւ namespace + pod, որի գործընթացին պետք է միջամտել։ Ներկայումս աջակցվում է՝

  • խորացնել - Go հավելվածների համար;
  • GDB - թիրախային հեռակառավարման + պորտի վերահասցեավորման միջոցով;
  • JDWP պորտի վերահասցեավորում՝ Java հավելվածների վրիպազերծման համար:

IDE-ի կողմից աջակցությունը հասանելի է միայն VScode-ում (օգտագործելով ընդլայնումներ), այնուամենայնիվ, ընթացիկ (2019) տարվա ծրագրերը ներառում են Eclipse-ը և Intellij-ը:

Գործընթացները վրիպազերծելու համար Squash-ը գործարկում է արտոնյալ կոնտեյներ կլաստերի հանգույցների վրա, այնպես որ նախ պետք է ծանոթանաք հնարավորություններին: անվտանգ ռեժիմ անվտանգության խնդիրներից խուսափելու համար։

Ինտեգրված լուծումներ

Եկեք անցնենք ծանր հրետանու. ավելի «լայնածավալ» նախագծեր, որոնք նախատեսված են անմիջապես բավարարելու ծրագրավորողների կարիքներից շատերը:

NBԱյս ցանկում, իհարկե, տեղ կա մեր բաց կոդով օգտակար ծրագրի համար վերֆ (նախկինում հայտնի է որպես dapp): Այնուամենայնիվ, մենք արդեն գրել և խոսել ենք դրա մասին մեկից ավելի անգամ, ուստի որոշել ենք չներառել այն վերանայման մեջ: Նրանց, ովքեր ցանկանում են ավելի շատ ծանոթանալ դրա հնարավորություններին, խորհուրդ ենք տալիս կարդալ/լսել զեկույցը «werf-ը մեր գործիքն է Kubernetes-ում CI/CD-ի համար.

DevSpace

  • Ներքեւի տողը, նրանց համար, ովքեր ցանկանում են սկսել աշխատել Kubernetes-ում, բայց չեն ցանկանում խորանալ նրա ջունգլիներում.
  • GitHub.
  • GH-ի համառոտ վիճակագրություն. 630 աստղ, 1912 պարտավորություն, 13 ներդրում:
  • Լեզուն՝ գնա։
  • Լիցենզիա՝ Apache License 2.0.

Լուծում համանուն ընկերության կողմից, որը Kubernetes-ի հետ կառավարվող կլաստերներ է տրամադրում թիմի զարգացման համար: Կոմունալ ծրագիրը ստեղծվել է առևտրային կլաստերների համար, բայց հիանալի աշխատում է բոլոր մյուսների հետ:

Հրամանը գործարկելիս devspace init Ծրագրի կատալոգում ձեզ կառաջարկվի (ինտերակտիվ).

  • ընտրել աշխատող Kubernetes կլաստեր,
  • օգտագործել առկա Dockerfile (կամ ստեղծել նորը) դրա հիման վրա կոնտեյներ ստեղծելու համար,
  • ընտրեք պահեստ՝ բեռնարկղերի պատկերները պահելու համար և այլն:

Այս բոլոր նախապատրաստական ​​քայլերից հետո դուք կարող եք սկսել զարգացումը՝ գործարկելով հրամանը devspace dev. Այն կկառուցի կոնտեյները, կվերբեռնի այն պահոց, կթողարկի տեղակայումը կլաստերի մեջ և կսկսի պորտի վերահասցեավորումը և կոնտեյների համաժամացումը տեղական գրացուցակի հետ:

Ցանկության դեպքում ձեզ կառաջարկվի տերմինալը տեղափոխել կոնտեյներ: Դուք չպետք է հրաժարվեք, քանի որ իրականում բեռնարկղը սկսվում է քնի հրամանով, և իրական փորձարկման համար անհրաժեշտ է, որ հավելվածը գործարկվի ձեռքով:

Ի վերջո, թիմը devspace deploy գլորում է հավելվածը և հարակից ենթակառուցվածքը կլաստերի մեջ, որից հետո ամեն ինչ սկսում է գործել մարտական ​​ռեժիմում:

Ծրագրի բոլոր կոնֆիգուրացիան պահվում է ֆայլում devspace.yaml. Բացի զարգացման միջավայրի կարգավորումներից, դուք կարող եք նաև գտնել դրանում ենթակառուցվածքի նկարագրությունը, որը նման է ստանդարտ Kubernetes մանիֆեստներին, միայն շատ պարզեցված:

Գործիքներ Kubernetes-ում աշխատող հավելվածների մշակողների համար
DevSpace-ի հետ աշխատելու ճարտարապետությունը և հիմնական փուլերը

Բացի այդ, նախագծին հեշտ է ավելացնել նախապես սահմանված բաղադրիչ (օրինակ՝ MySQL DBMS) կամ Helm աղյուսակը: Կարդալ ավելին փաստաթղթավորում - դա բարդ չէ:

Սկավառակ

  • Site; GitHub.
  • GH-ի համառոտ վիճակագրություն՝ 7423 աստղ, 4173 պարտավորություն, 136 ներդրում:
  • Լեզուն՝ գնա։
  • Լիցենզիա՝ Apache License 2.0.

Google-ի այս օգտակար ծրագիրը պնդում է, որ ծածկում է մշակողի բոլոր կարիքները, որոնց կոդը ինչ-որ կերպ կաշխատի Kubernetes կլաստերի վրա: Այն օգտագործելն այնքան էլ հեշտ չէ, որքան devspace-ը՝ առանց ինտերակտիվության, լեզվի հայտնաբերման և ավտոմատ ստեղծման Dockerfile նրանք այստեղ ձեզ չեն առաջարկի:

Այնուամենայնիվ, եթե դա ձեզ չի վախեցնում, ահա թե ինչ է թույլ տալիս Skaffold-ը ձեզ անել.

  • Հետևեք սկզբնական կոդի փոփոխություններին:
  • Համաժամացրեք այն պատիճ կոնտեյների հետ, եթե այն չի պահանջում հավաքում:
  • Հավաքեք կոնտեյներներ կոդով, եթե լեզուն մեկնաբանվում է, կամ կազմեք արտեֆակտներ և փաթեթավորեք դրանք տարաների մեջ:
  • Ստացված պատկերները ավտոմատ կերպով ստուգվում են՝ օգտագործելով կոնտեյներ-կառուցվածք-փորձարկում.
  • Պատկերների պիտակավորում և վերբեռնում Docker Registry-ում:
  • Տեղադրեք հավելված կլաստերի մեջ՝ օգտագործելով kubectl, Helm կամ kustomize:
  • Կատարել նավահանգիստների վերահասցեավորում:
  • Վրիպազերծել հավելվածները՝ գրված Java, Node.js, Python-ում:

Աշխատանքային ընթացքը տարբեր տատանումների մեջ դեկլարատիվ կերպով նկարագրված է ֆայլում skaffold.yaml. Նախագծի համար կարող եք նաև սահմանել մի քանի պրոֆիլներ, որոնցում կարող եք մասամբ կամ ամբողջությամբ փոխել հավաքման և տեղակայման փուլերը: Օրինակ, մշակման համար նշեք ծրագրավորողի համար հարմար բազային պատկեր, իսկ բեմադրության և արտադրության համար՝ նվազագույնը (+ օգտագործումը securityContext բեռնարկղեր կամ վերասահմանել կլաստերը, որում կտեղակայվի հավելվածը):

Docker կոնտեյներները կարող են կառուցվել տեղական կամ հեռակա կարգով՝ in Google Cloud Build կամ կլաստերի մեջ օգտագործելով Կանիկո. Bazel-ը և Jib Maven/Gradle-ը նույնպես աջակցվում են: Հատկորոշման համար Skaffold-ն աջակցում է բազմաթիվ ռազմավարությունների՝ ըստ git commit hash, ամսաթիվ/ժամ, sha256- աղբյուրների գումար և այլն:

Առանձին-առանձին, հարկ է նշել բեռնարկղերի փորձարկման հնարավորությունը: Արդեն նշված կոնտեյներ-կառուցվածք-փորձարկման շրջանակն առաջարկում է ստուգման հետևյալ մեթոդները.

  • Հրամանների կատարում կոնտեյների համատեքստում՝ հետևելով ելքի կարգավիճակներին և ստուգելով հրամանի տեքստային ելքը:
  • Կոնտեյների մեջ ֆայլերի առկայությունը ստուգելը և նշված ատրիբուտներին համապատասխանելը:
  • Ֆայլի բովանդակության վերահսկում` օգտագործելով կանոնավոր արտահայտություններ:
  • Պատկերի մետատվյալների ստուգում (ENV, ENTRYPOINT, VOLUMES և այլն):
  • Լիցենզիայի համատեղելիության ստուգում:

Կոնտեյների հետ ֆայլերի համաժամացումը չի իրականացվում ամենաօպտիմալ եղանակով. Skaffold-ը պարզապես ստեղծում է արխիվ աղբյուրների հետ, պատճենում է այն և ապափաթեթավորում այն ​​կոնտեյների մեջ (թառը պետք է տեղադրվի): Հետևաբար, եթե ձեր հիմնական խնդիրն է կոդի համաժամացումը, ապա ավելի լավ է փնտրել մասնագիտացված լուծում (ksync):

Գործիքներ Kubernetes-ում աշխատող հավելվածների մշակողների համար
Skaffold-ի շահագործման հիմնական փուլերը

Ընդհանուր առմամբ, գործիքը թույլ չի տալիս վերացվել Kubernetes մանիֆեստներից և չունի որևէ ինտերակտիվություն, ուստի կարող է դժվար թվալ այն տիրապետելը: Բայց սա նաև նրա առավելությունն է՝ գործելու ավելի մեծ ազատություն։

Պարտեզ

  • Site; GitHub.
  • GH-ի համառոտ վիճակագրություն՝ 1063 աստղ, 1927 պարտավորություն, 17 ներդրում:
  • Լեզուն՝ TypeScript (նախատեսվում է նախագիծը բաժանել մի քանի բաղադրիչների, որոնցից մի քանիսը կլինեն Go-ում, ինչպես նաև ստեղծել SDK՝ TypeScript/JavaScript-ում և Go-ում հավելումներ ստեղծելու համար).
  • Լիցենզիա՝ Apache License 2.0.

Ինչպես Skaffold-ը, Garden-ը նպատակ ունի ավտոմատացնել հավելվածի կոդը K8s կլաստերին փոխանցելու գործընթացները: Դա անելու համար նախ պետք է նկարագրեք նախագծի կառուցվածքը YAML ֆայլում, այնուհետև գործարկեք հրամանը garden dev. Նա կանի բոլոր կախարդանքները.

  • Հավաքեք կոնտեյներներ նախագծի տարբեր մասերով:
  • Անցկացնում է ինտեգրման և միավորի թեստեր, եթե դրանք նկարագրված են:
  • Գլորում է ծրագրի բոլոր բաղադրիչները կլաստերի մեջ:
  • Եթե ​​սկզբնական կոդը փոխվի, այն կվերագործարկի ամբողջ խողովակաշարը:

Այս գործիքի օգտագործման հիմնական նպատակն է հեռակառավարվող կլաստերի համօգտագործումը մշակողների թիմի հետ: Այս դեպքում, եթե շինարարության և փորձարկման որոշ քայլեր արդեն արված են, դա զգալիորեն կարագացնի ողջ գործընթացը, քանի որ Garden-ը կկարողանա օգտագործել քեշավորված արդյունքները:

Ծրագրի մոդուլը կարող է լինել կոնտեյներ, Maven կոնտեյներ, Helm աղյուսակ, մանիֆեստ kubectl apply կամ նույնիսկ OpenFaaS ֆունկցիա: Ավելին, մոդուլներից որևէ մեկը կարող է քաշվել Git-ի հեռավոր պահոցից: Մոդուլը կարող է սահմանել կամ չսահմանել ծառայություններ, առաջադրանքներ և թեստեր: Ծառայությունները և առաջադրանքները կարող են ունենալ կախվածություն, որի շնորհիվ դուք կարող եք որոշել որոշակի ծառայության տեղակայման հաջորդականությունը և կազմակերպել առաջադրանքների և թեստերի մեկնարկը:

Garden-ը օգտվողին տրամադրում է գեղեցիկ վահանակ (ներկայումս փորձարարական վիճակ), որը ցուցադրում է նախագծի գրաֆիկը՝ բաղադրիչները, հավաքման հաջորդականությունը, առաջադրանքների և թեստերի կատարումը, դրանց կապերն ու կախվածությունները: Հենց բրաուզերում դուք կարող եք դիտել նախագծի բոլոր բաղադրիչների տեղեկամատյանները և ստուգել, ​​թե ինչ է ելնում տվյալ բաղադրիչը HTTP-ի միջոցով (եթե, իհարկե, դրա համար հայտարարված է մուտքային ռեսուրս):

Գործիքներ Kubernetes-ում աշխատող հավելվածների մշակողների համար
Վահանակ պարտեզի համար

Այս գործիքը ունի նաև «hot-reload» ռեժիմ, որը պարզապես համաժամացնում է սցենարի փոփոխությունները կլաստերի կոնտեյների հետ՝ մեծապես արագացնելով հավելվածի վրիպազերծման գործընթացը: Այգին լավն ունի փաստաթղթերը և ոչ վատ օրինակների հավաքածու, որը թույլ է տալիս արագ վարժվել դրան և սկսել օգտագործել այն։ Ի դեպ, վերջերս հրապարակեցինք հոդվածի թարգմանություն իր հեղինակներից։

Ամփոփում

Իհարկե, Kubernetes-ում հավելվածների մշակման և վրիպազերծման գործիքների այս ցանկը չի սահմանափակվում միայն: Կան շատ ավելի շատ օգտակար և գործնական կոմունալ ծառայություններ, որոնք արժանի են, եթե ոչ առանձին հոդված, ապա գոնե հիշատակում: Ասացեք մեզ, թե ինչ եք օգտագործում, ինչ խնդիրների եք հանդիպել և ինչպես եք դրանք լուծել:

PS

Կարդացեք նաև մեր բլոգում.

Source: www.habr.com

Добавить комментарий