Алатки за развивачи на апликации што работат на Kubernetes

Алатки за развивачи на апликации што работат на Kubernetes

Современиот пристап кон работењето решава многу итни деловни проблеми. Контејнерите и оркестраторите го олеснуваат размерувањето на проекти од секаква сложеност, го поедноставуваат објавувањето на нови верзии, ги прават посигурни, но во исто време создаваат дополнителни проблеми за програмерите. Програмерот, пред сè, се грижи за неговиот код: архитектура, квалитет, перформанси, елеганција - а не како ќе функционира во Kubernetes и како да го тестира и дебагира откако ќе направи дури и минимални промени. Затоа, исто така е сосема природно што активно се развиваат алатки за Kubernetes, помагајќи да се решат проблемите дури и на најархаичните развивачи и овозможувајќи им да се фокусираат на главната работа.

Овој преглед дава кратки информации за некои од алатките кои го олеснуваат животот на програмер чиј код работи во под'аксата на кластерот Кубернетес.

Едноставни помошници

Kubectl-дебаг

  • Во крајна линија: додадете го вашиот контејнер во Pod и видете што се случува во него.
  • GitHub.
  • Кратка статистика на GH: 715 ѕвезди, 54 обврски, 9 соработници.
  • Јазик: Оди.
  • Лиценца: Апачи лиценца 2.0.

Овој приклучок за kubectl ви овозможува да креирате дополнителен контејнер внатре во подлогата од интерес, кој ќе го сподели именскиот простор на процесот со други контејнери. Во него можете да ја дебагирате работата на подлогата: да ја проверите мрежата, да го слушате мрежниот сообраќај, да направите трага од процесот на интерес итн.

Можете исто така да се префрлите на контејнерот за процеси со трчање chroot /proc/PID/root - ова може да биде многу погодно кога треба да земете коренска обвивка во контејнер за кој е поставена во манифестот securityContext.runAs.

Алатката е едноставна и ефикасна, така што може да биде корисна за секој развивач. Напишавме повеќе за тоа во посебен напис.

Теле-присуство

  • Во крајна линија: префрлете ја апликацијата на вашиот компјутер. Развијте и дебагирајте локално.
  • Мапа; GitHub.
  • Кратка статистика за GH: 2131 ѕвезди, 2712 обврски, 33 соработници.
  • Јазик: Python.
  • Лиценца: Апачи лиценца 2.0.

Идејата на овој додаток е да се стартува контејнер со апликацијата на локалниот кориснички компјутер и да се префрли целиот сообраќај од кластерот до него и назад. Овој пристап ви овозможува да се развивате локално со едноставно уредување на датотеки во омилениот IDE: резултатите ќе бидат достапни веднаш.

Предностите на локалното работење се практичноста на уредувањата и инстант резултати, можноста за дебагирање на апликацијата на вообичаен начин. Недостаток е тоа што бара брзина на поврзување, што е особено забележливо кога треба да работите со апликација со прилично висок RPS и сообраќај. Покрај тоа, Telepresence има проблеми со монтажата на јачината на звукот на Windows, што може да биде одлучувачко ограничување за програмерите навикнати на овој оперативен систем.

Ние веќе го споделивме нашето искуство за користење на Telepresence тука.

Ksync

  • Во крајна линија: речиси моментална синхронизација на кодот со контејнерот во кластерот.
  • GitHub.
  • Кратка статистика на GH: 555 ѕвезди, 362 обврски, 11 соработници.
  • Јазик: Оди.
  • Лиценца: Апачи лиценца 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 како клиентски оперативен систем, набљудувачот на датотечниот систем може да не работи правилно. Оваа грешка беше забележана при работа со големи директориуми - со голем број вгнездени датотеки и директориуми. Ние создадовме релевантно прашање во проектот за синхронизација, но сè уште нема напредок во него (од почетокот на јули).
  • Користете датотека .stignore за да наведете патеки или обрасци на датотеки што не треба да се синхронизираат (на пример, директориуми app/cache и .git).
  • Стандардно, ksync ќе го рестартира контејнерот секогаш кога ќе се променат датотеките. За Node.js ова е погодно, но за PHP е сосема непотребно. Подобро е да го исклучите опкашот и да го користите знамето --reload=false.
  • Конфигурацијата секогаш може да се коригира во $HOME/.ksync/ksync.yaml.

сквош

  • Во крајна линија: дебагира процеси директно во кластерот.
  • GitHub.
  • Кратка статистика на GH: 1154 ѕвезди, 279 обврски, 23 соработници.
  • Јазик: Оди.
  • Лиценца: Апачи лиценца 2.0.

Оваа алатка е дизајнирана за дебагирање процеси директно во подлоги. Алатката е едноставна и интерактивно ви овозможува да го изберете саканиот дебагер (Види подолу) и именски простор + под, во чиј процес треба да интервенирате. Моментално поддржано:

  • delve - за апликации Go;
  • GDB - преку целно далечинско + пренасочување на порта;
  • Препраќање на порта JDWP за дебагирање на Java апликации.

На страната IDE, поддршката е достапна само во VScode (со користење експанзија), сепак, плановите за тековната (2019) година ги вклучуваат Eclipse и Intellij.

За отстранување грешки на процесите, Squash работи привилегиран контејнер на јазлите на кластерот, така што прво мора да се запознаете со можностите безбедносен режим за да се избегнат безбедносни проблеми.

Комплетни решенија

Ајде да преминеме на тешката артилерија - повеќе „големи“ проекти дизајнирани веднаш да задоволат многу од потребите на програмерите.

NB: Во оваа листа, се разбира, има место за нашата алатка со отворен код верф (порано познат како dapp). Сепак, веќе пишувавме и зборувавме за тоа повеќе од еднаш, и затоа решивме да не го вклучиме во прегледот. За оние кои сакаат повеќе да се запознаат со неговите способности, препорачуваме да го прочитаат/слушаат извештајот “werf е нашата алатка за CI/CD во Kubernetes".

DevSpace

  • Во крајна линија: за оние кои сакаат да почнат да работат во Кубернетес, но не сакаат да навлегуваат длабоко во нејзината џунгла.
  • GitHub.
  • Кратка статистика за GH: 630 ѕвезди, 1912 година, 13 соработници.
  • Јазик: Оди.
  • Лиценца: Апачи лиценца 2.0.

Решение од истоимената компанија, кое обезбедува управувани кластери со Kubernetes за развој на тимот. Алатката е создадена за комерцијални кластери, но работи одлично со сите други.

При извршување на командата devspace init во каталогот на проектот ќе ви бидат понудени (интерактивно):

  • изберете работен кластер Kubernetes,
  • користат постоечки Dockerfile (или генерира нов) за да се создаде контејнер врз основа на него,
  • изберете складиште за складирање на слики од контејнери итн.

По сите овие подготвителни чекори, можете да започнете со развој со извршување на командата devspace dev. Ќе го изгради контејнерот, ќе го постави во складиштето, ќе го прошири распоредот во кластерот и ќе започне со препраќање на портата и синхронизација на контејнерот со локалниот директориум.

Изборно, ќе ви биде побарано да го преместите терминалот во контејнерот. Не треба да одбиете, бидејќи во реалноста контејнерот започнува со командата за спиење, а за вистинско тестирање апликацијата треба да се стартува рачно.

Конечно, тимот devspace deploy ја префрла апликацијата и поврзаната инфраструктура во кластерот, по што сè почнува да функционира во борбен режим.

Целата конфигурација на проектот е зачувана во датотека devspace.yaml. Покрај поставките за развојната средина, можете да најдете и опис на инфраструктурата во неа, сличен на стандардните манифестации на Кубернетес, само многу поедноставен.

Алатки за развивачи на апликации што работат на Kubernetes
Архитектура и главни фази на работа со DevSpace

Дополнително, лесно е да се додаде однапред дефинирана компонента (на пример, MySQL DBMS) или дијаграм на Helm на проектот. Прочитајте повеќе во документација - не е комплицирано.

Скеле

  • Мапа; GitHub.
  • Кратка статистика за GH: 7423 ѕвезди, 4173 обврски, 136 соработници.
  • Јазик: Оди.
  • Лиценца: Апачи лиценца 2.0.

Оваа алатка од Google тврди дека ги покрива сите потреби на развивач чиј код некако ќе работи на кластерот Kubernetes. Започнувањето со негово користење не е лесно како devspace: нема интерактивност, откривање јазик и автоматско создавање Dockerfile нема да ти понудат овде.

Меѓутоа, ако ова не ве плаши, еве што ви дозволува Skaffold да направите:

  • Следете ги промените на изворниот код.
  • Синхронизирајте го со контејнерот за подлога ако не бара склопување.
  • Соберете контејнери со код, ако јазикот се толкува, или компајлирајте артефакти и пакувајте ги во контејнери.
  • Добиените слики автоматски се проверуваат со користење контејнер-структура-тест.
  • Означување и поставување слики во Docker Registry.
  • Распоредете апликација во кластер користејќи kubectl, Helm или kustomize.
  • Изведете препраќање на портата.
  • Дебагирајте апликации напишани во Java, Node.js, Python.

Работниот тек во различни варијации е декларативно опишан во датотеката skaffold.yaml. За проект, можете исто така да дефинирате неколку профили во кои можете делумно или целосно да ги промените фазите на склопување и распоредување. На пример, за развој, наведете основна слика погодна за развивачот, а за поставување и производство - минимална (+ употреба securityContext контејнери или редефинирајте го кластерот во кој ќе биде распоредена апликацијата).

Докер контејнерите може да се градат локално или од далечина: во Google Cloud Build или во кластер користејќи Канико. Поддржани се и Bazel и Jib Maven/Gradle. За означување, Skaffold поддржува многу стратегии: со git commit хаш, датум/време, sha256-збир на извори итн.

Одделно, вреди да се забележи можноста за тестирање на контејнери. Веќе споменатата рамка за тестирање контејнер-структура ги нуди следните методи за верификација:

  • Извршување на команди во контекст на контејнер со следење на излезните статуси и проверка на излезниот текст на командата.
  • Проверка на присуството на датотеки во контејнерот и совпаѓање со наведените атрибути.
  • Контрола на содржината на датотеката користејќи регуларни изрази.
  • Потврда на метаподатоците на сликата (ENV, ENTRYPOINT, VOLUMES итн.).
  • Проверка на компатибилноста на лиценцата.

Синхронизирањето датотеки со контејнерот не се врши на најоптимален начин: Skaffold едноставно создава архива со изворите, ја копира и ја отпакува во контејнерот (мора да се инсталира катран). Затоа, ако вашата главна задача е синхронизација на кодови, подобро е да погледнете кон специјализирано решение (ksync).

Алатки за развивачи на апликации што работат на Kubernetes
Главните фази на работата на Skaffold

Општо земено, алатката не ви дозволува да апстрахирате од Кубернетес манифестации и нема никаква интерактивност, па може да изгледа тешко да се совлада. Но, ова е и негова предност - поголема слобода на дејствување.

градина

  • Мапа; GitHub.
  • Кратка статистика на GH: 1063 ѕвезди, 1927 обврски, 17 соработници.
  • Јазик: TypeScript (планирано е проектот да се подели на неколку компоненти, од кои некои ќе бидат во Go, а исто така да се направи SDK за креирање додатоци во TypeScript/JavaScript и Go).
  • Лиценца: Апачи лиценца 2.0.

Како и Skaffold, Garden има за цел да ги автоматизира процесите на доставување код за апликација во кластерот K8s. За да го направите ова, прво треба да ја опишете структурата на проектот во датотека YAML, а потоа да ја извршите командата garden dev. Таа ќе ја направи целата магија:

  • Соберете контејнери со различни делови од проектот.
  • Спроведува тестови за интеграција и единици, доколку ги има опишано.
  • Ги префрла сите компоненти на проектот во кластерот.
  • Ако се промени изворниот код, тој ќе го рестартира целиот гасовод.

Главниот фокус на користењето на оваа алатка е да се сподели оддалечен кластер со развојниот тим. Во овој случај, ако некои од чекорите за градење и тестирање се веќе направени, ова значително ќе го забрза целиот процес, бидејќи Гарден ќе може да ги користи кешираните резултати.

Проектниот модул може да биде контејнер, контејнер Maven, дијаграм на Helm, манифест за kubectl apply или дури и функција OpenFaaS. Покрај тоа, кој било од модулите може да се повлече од оддалечено складиште на Git. Модулот може или не може да дефинира услуги, задачи и тестови. Услугите и задачите може да имаат зависност, така што можете да ја одредите низата на распоредување на одредена услуга и да организирате стартување на задачи и тестови.

Гарден му обезбедува на корисникот прекрасна контролна табла (моментално во експериментална состојба), кој го прикажува проектниот график: компоненти, низа на склопување, извршување на задачи и тестови, нивните врски и зависности. Веднаш во прелистувачот, можете да ги прегледате дневниците на сите компоненти на проектот и да проверите што излегува одредена компонента преку HTTP (ако, се разбира, за неа е пријавен влезен ресурс).

Алатки за развивачи на апликации што работат на Kubernetes
Панел за градина

Оваа алатка има и режим за повторно вчитување, кој едноставно ги синхронизира промените на скриптата со контејнерот во кластерот, што значително го забрзува процесот на дебагирање на апликацијата. Градината има добра документацијата и не е лошо збир на примери, овозможувајќи ви брзо да се навикнете на него и да почнете да го користите. Патем, неодамна објавивме превод на статија од неговите автори.

Заклучок

Се разбира, оваа листа на алатки за развој и дебагирање на апликации во Kubernetes не е ограничена на. Има многу повеќе многу корисни и практични алатки кои се достојни, ако не посебна статија, тогаш барем спомнување. Кажете ни што користите, со какви проблеми наидовте и како ги решивте!

PS

Прочитајте и на нашиот блог:

Извор: www.habr.com

Додадете коментар