Գործիքներ Kubernetes-ում աշխատող հավելվածների մշակողների համար
Գործառնությունների ժամանակակից մոտեցումը լուծում է բազմաթիվ հրատապ բիզնես խնդիրներ: Կոնտեյներները և նվագախմբերը հեշտացնում են ցանկացած բարդության նախագծերի մասշտաբը, պարզեցնում նոր տարբերակների թողարկումը, դրանք դարձնում ավելի հուսալի, բայց միևնույն ժամանակ լրացուցիչ խնդիրներ են ստեղծում մշակողների համար: Ծրագրավորողն առաջին հերթին մտածում է իր ծածկագրի մասին՝ ճարտարապետություն, որակ, կատարողականություն, էլեգանտություն, և ոչ թե ինչպես այն կաշխատի Kubernetes-ում և ինչպես փորձարկել և կարգաբերել այն նույնիսկ նվազագույն փոփոխություններ կատարելուց հետո: Հետևաբար, միանգամայն բնական է, որ Kubernetes-ի համար գործիքները ակտիվորեն մշակվում են, որոնք օգնում են լուծել նույնիսկ ամենա«արխաիկ» ծրագրավորողների խնդիրները և թույլ տալով նրանց կենտրոնանալ հիմնականի վրա:
Այս ակնարկը հակիրճ տեղեկատվություն է տրամադրում որոշ գործիքների մասին, որոնք հեշտացնում են կյանքը ծրագրավորողի համար, որի կոդը աշխատում է Kubernetes կլաստերի pod'ax-ում:
Պարզ օգնականներ
Kubectl-debug
Ներքեւի տողը, ավելացրեք ձեր կոնտեյները Pod-ի մեջ և տեսեք, թե ինչ է տեղի ունենում դրա մեջ.
GH-ի համառոտ վիճակագրություն՝ 715 աստղ, 54 պարտավորություն, 9 ներդրում:
Լեզուն՝ գնա։
Լիցենզիա՝ Apache License 2.0.
Kubectl-ի այս փլագինը թույլ է տալիս ստեղծել լրացուցիչ կոնտեյներ հետաքրքրություն ներկայացնող պատի ներսում, որը կհամօգտագործի գործընթացի անվանատարածքը այլ բեռնարկղերի հետ: Դրանում դուք կարող եք վրիպազերծել pod-ի աշխատանքը. ստուգել ցանցը, լսել ցանցի թրաֆիկը, կատարել հետաքրքրության գործընթացի շերտ և այլն:
Դուք կարող եք նաև անցնել գործընթացի կոնտեյների՝ գործարկելով chroot /proc/PID/root - սա կարող է շատ հարմար լինել, երբ անհրաժեշտ է արմատային կեղև ստանալ տարայի մեջ, որի համար այն դրված է մանիֆեստում securityContext.runAs.
Գործիքը պարզ է և արդյունավետ, ուստի այն կարող է օգտակար լինել յուրաքանչյուր մշակողի համար: Այդ մասին ավելին գրել ենք առանձին հոդված.
Հեռուստատեսություն
Ներքեւի տողը, հավելվածը փոխանցեք ձեր համակարգչին: Մշակել և կարգաբերել լոկալ.
GH-ի համառոտ վիճակագրություն՝ 2131 աստղ, 2712 պարտավորություն, 33 ներդրում:
Լեզուն՝ Python:
Լիցենզիա՝ Apache License 2.0.
Այս snap-ի գաղափարը տեղական օգտագործողի համակարգչի վրա հավելվածով կոնտեյներ գործարկելն է և կլաստերից դեպի այն և հետադարձ ողջ երթևեկությունը: Այս մոտեցումը թույլ է տալիս զարգանալ լոկալ՝ պարզապես ֆայլերը խմբագրելով ձեր սիրելի IDE-ում. արդյունքները հասանելի կլինեն անմիջապես:
Տեղական աշխատանքի առավելություններն են խմբագրումների և ակնթարթային արդյունքների հարմարավետությունը, հավելվածը սովորական եղանակով կարգաբերելու հնարավորությունը: Բացասական կողմն այն է, որ այն պահանջում է կապի արագություն, ինչը հատկապես նկատելի է, երբ դուք պետք է աշխատեք բավականին բարձր RPS և տրաֆիկ ունեցող հավելվածի հետ: Բացի այդ, Telepresence-ը խնդիրներ ունի Windows-ում ձայնի ամրացման հետ կապված, ինչը կարող է որոշիչ սահմանափակում լինել այս ՕՀ-ին սովոր մշակողների համար:
Մենք արդեն կիսվել ենք Telepresence-ի օգտագործման մեր փորձով այստեղ.
Ksync
Ներքեւի տողը, կոդի գրեթե ակնթարթային համաժամացումը կլաստերի կոնտեյների հետ.
GH-ի համառոտ վիճակագրություն՝ 555 աստղ, 362 պարտավորություն, 11 ներդրում:
Լեզուն՝ գնա։
Լիցենզիա՝ Apache License 2.0.
Կոմունալ ծրագիրը թույլ է տալիս համաժամեցնել տեղական գրացուցակի բովանդակությունը կլաստերում աշխատող կոնտեյների գրացուցակի հետ: Նման գործիքը կատարյալ է ծրագրավորման ծրագրավորման լեզուներով մշակողների համար, որոնց հիմնական խնդիրը կոդն աշխատող կոնտեյներ հասցնելն է: Ksync-ը նախատեսված է այս գլխացավը թեթևացնելու համար:
Երբ սկզբնավորվում է մեկ անգամ հրամանով ksync init Կլաստերում ստեղծվում է DaemonSet, որն օգտագործվում է ընտրված կոնտեյների ֆայլային համակարգի վիճակը վերահսկելու համար: Իր տեղական համակարգչում մշակողը գործարկում է հրամանը ksync watch, որը վերահսկում է կոնֆիգուրացիաները և գործարկումը համաժամեցում, որն ուղղակիորեն համաժամացնում է ֆայլերը կլաստերի հետ:
Մնում է ksync-ին հրահանգել, թե ինչի հետ ինչ համաժամանակի։ Օրինակ, այս հրամանը.
... կստեղծի դիտորդ անունով 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.
դդմիկ
Ներքեւի տողը, վրիպազերծման գործընթացները անմիջապես կլաստերում.
GH-ի համառոտ վիճակագրություն՝ 1154 աստղ, 279 պարտավորություն, 23 ներդրում:
Լեզուն՝ գնա։
Լիցենզիա՝ Apache License 2.0.
Այս գործիքը նախատեսված է վրիպազերծման գործընթացները անմիջապես պատիճներում: Կոմունալը պարզ է և ինտերակտիվ կերպով թույլ է տալիս ընտրել ցանկալի վրիպազերծիչը (տես ներքեւում) եւ namespace + pod, որի գործընթացին պետք է միջամտել։ Ներկայումս աջակցվում է՝
JDWP պորտի վերահասցեավորում՝ Java հավելվածների վրիպազերծման համար:
IDE-ի կողմից աջակցությունը հասանելի է միայն VScode-ում (օգտագործելով ընդլայնումներ), այնուամենայնիվ, ընթացիկ (2019) տարվա ծրագրերը ներառում են Eclipse-ը և Intellij-ը:
Գործընթացները վրիպազերծելու համար Squash-ը գործարկում է արտոնյալ կոնտեյներ կլաստերի հանգույցների վրա, այնպես որ նախ պետք է ծանոթանաք հնարավորություններին: անվտանգ ռեժիմ անվտանգության խնդիրներից խուսափելու համար։
Ինտեգրված լուծումներ
Եկեք անցնենք ծանր հրետանու. ավելի «լայնածավալ» նախագծեր, որոնք նախատեսված են անմիջապես բավարարելու ծրագրավորողների կարիքներից շատերը:
NBԱյս ցանկում, իհարկե, տեղ կա մեր բաց կոդով օգտակար ծրագրի համար վերֆ (նախկինում հայտնի է որպես dapp): Այնուամենայնիվ, մենք արդեն գրել և խոսել ենք դրա մասին մեկից ավելի անգամ, ուստի որոշել ենք չներառել այն վերանայման մեջ: Նրանց, ովքեր ցանկանում են ավելի շատ ծանոթանալ դրա հնարավորություններին, խորհուրդ ենք տալիս կարդալ/լսել զեկույցը «werf-ը մեր գործիքն է Kubernetes-ում CI/CD-ի համար.
DevSpace
Ներքեւի տողը, նրանց համար, ովքեր ցանկանում են սկսել աշխատել Kubernetes-ում, բայց չեն ցանկանում խորանալ նրա ջունգլիներում.
GH-ի համառոտ վիճակագրություն. 630 աստղ, 1912 պարտավորություն, 13 ներդրում:
Լեզուն՝ գնա։
Լիցենզիա՝ Apache License 2.0.
Լուծում համանուն ընկերության կողմից, որը Kubernetes-ի հետ կառավարվող կլաստերներ է տրամադրում թիմի զարգացման համար: Կոմունալ ծրագիրը ստեղծվել է առևտրային կլաստերների համար, բայց հիանալի աշխատում է բոլոր մյուսների հետ:
Հրամանը գործարկելիս devspace init Ծրագրի կատալոգում ձեզ կառաջարկվի (ինտերակտիվ).
ընտրել աշխատող Kubernetes կլաստեր,
օգտագործել առկա Dockerfile (կամ ստեղծել նորը) դրա հիման վրա կոնտեյներ ստեղծելու համար,
ընտրեք պահեստ՝ բեռնարկղերի պատկերները պահելու համար և այլն:
Այս բոլոր նախապատրաստական քայլերից հետո դուք կարող եք սկսել զարգացումը՝ գործարկելով հրամանը devspace dev. Այն կկառուցի կոնտեյները, կվերբեռնի այն պահոց, կթողարկի տեղակայումը կլաստերի մեջ և կսկսի պորտի վերահասցեավորումը և կոնտեյների համաժամացումը տեղական գրացուցակի հետ:
Ցանկության դեպքում ձեզ կառաջարկվի տերմինալը տեղափոխել կոնտեյներ: Դուք չպետք է հրաժարվեք, քանի որ իրականում բեռնարկղը սկսվում է քնի հրամանով, և իրական փորձարկման համար անհրաժեշտ է, որ հավելվածը գործարկվի ձեռքով:
Ի վերջո, թիմը devspace deploy գլորում է հավելվածը և հարակից ենթակառուցվածքը կլաստերի մեջ, որից հետո ամեն ինչ սկսում է գործել մարտական ռեժիմում:
Ծրագրի բոլոր կոնֆիգուրացիան պահվում է ֆայլում devspace.yaml. Բացի զարգացման միջավայրի կարգավորումներից, դուք կարող եք նաև գտնել դրանում ենթակառուցվածքի նկարագրությունը, որը նման է ստանդարտ Kubernetes մանիֆեստներին, միայն շատ պարզեցված:
DevSpace-ի հետ աշխատելու ճարտարապետությունը և հիմնական փուլերը
Բացի այդ, նախագծին հեշտ է ավելացնել նախապես սահմանված բաղադրիչ (օրինակ՝ MySQL DBMS) կամ Helm աղյուսակը: Կարդալ ավելին փաստաթղթավորում - դա բարդ չէ:
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):
Skaffold-ի շահագործման հիմնական փուլերը
Ընդհանուր առմամբ, գործիքը թույլ չի տալիս վերացվել Kubernetes մանիֆեստներից և չունի որևէ ինտերակտիվություն, ուստի կարող է դժվար թվալ այն տիրապետելը: Բայց սա նաև նրա առավելությունն է՝ գործելու ավելի մեծ ազատություն։
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-ի միջոցով (եթե, իհարկե, դրա համար հայտարարված է մուտքային ռեսուրս):
Վահանակ պարտեզի համար
Այս գործիքը ունի նաև «hot-reload» ռեժիմ, որը պարզապես համաժամացնում է սցենարի փոփոխությունները կլաստերի կոնտեյների հետ՝ մեծապես արագացնելով հավելվածի վրիպազերծման գործընթացը: Այգին լավն ունի փաստաթղթերը և ոչ վատ օրինակների հավաքածու, որը թույլ է տալիս արագ վարժվել դրան և սկսել օգտագործել այն։ Ի դեպ, վերջերս հրապարակեցինք հոդվածի թարգմանություն իր հեղինակներից։
Ամփոփում
Իհարկե, Kubernetes-ում հավելվածների մշակման և վրիպազերծման գործիքների այս ցանկը չի սահմանափակվում միայն: Կան շատ ավելի շատ օգտակար և գործնական կոմունալ ծառայություններ, որոնք արժանի են, եթե ոչ առանձին հոդված, ապա գոնե հիշատակում: Ասացեք մեզ, թե ինչ եք օգտագործում, ինչ խնդիրների եք հանդիպել և ինչպես եք դրանք լուծել: