Асбобҳо барои таҳиягарони барномаҳое, ки дар Kubernetes кор мекунанд

Асбобҳо барои таҳиягарони барномаҳое, ки дар Kubernetes кор мекунанд

Муносибати муосир ба амалиёт бисёр мушкилоти мубрами тиҷоратро ҳал мекунад. Контейнерҳо ва оркестрҳо миқёси лоиҳаҳои ҳама гуна мураккабиро осон мекунанд, баровардани версияҳои навро соддатар мекунанд, онҳоро боэътимодтар мекунанд, аммо дар айни замон онҳо барои таҳиягарон мушкилоти иловагӣ эҷод мекунанд. Барномасоз, пеш аз ҳама, дар бораи коди худ ғамхорӣ мекунад: меъморӣ, сифат, иҷроиш, зебоӣ - на ин ки он дар Kubernetes чӣ гуна кор хоҳад кард ва чӣ гуна онро пас аз ворид кардани тағироти ҳадди аққал санҷидан ва ислоҳ кардан мумкин аст. Аз ин рӯ, комилан табиист, ки асбобҳо барои Kubernetes фаъолона таҳия карда мешаванд, ки ба ҳалли мушкилоти ҳатто таҳиягарони "архаикӣ" кӯмак мерасонанд ва ба онҳо имкон медиҳанд, ки ба чизи асосӣ тамаркуз кунанд.

Ин барраси маълумоти мухтасарро дар бораи баъзе абзорҳое медиҳад, ки зиндагии барномасозеро, ки коди он дар паҳлӯи кластери Кубернетес кор мекунад, осон мекунад.

Ёрдамчиёни оддӣ

Kubectl-debug

  • Хати рост: контейнери худро ба Pod илова кунед ва бубинед, ки дар он чӣ рӯй медиҳад.
  • GitHub.
  • Омори мухтасари GH: 715 ситора, 54 супориш, 9 саҳмгузор.
  • Забон: Бирав.
  • Литсензия: Литсензияи Apache 2.0.

Ин плагин барои kubectl ба шумо имкон медиҳад, ки дар дохили қуттии таваҷҷӯҳ як контейнери иловагӣ созед, ки фазои номҳои равандро бо контейнерҳои дигар мубодила мекунад. Дар он шумо метавонед кори подкастро ислоҳ кунед: шабакаро тафтиш кунед, трафики шабакаро гӯш кунед, раванди таваҷҷӯҳро анҷом диҳед ва ғайра.

Шумо инчунин метавонед ба контейнери раванд тавассути иҷро гузаред chroot /proc/PID/root - ин метавонад хеле қулай бошад, вақте ки ба шумо лозим аст, ки қабати решаро дар контейнере гиред, ки барои он дар манифест гузошта шудааст securityContext.runAs.

Восита оддӣ ва самаранок аст, бинобар ин он метавонад барои ҳар як таҳиякунанда муфид бошад. Мо дар ин бора бештар навиштем мақолаи алоҳида.

Телефонсупорӣ

  • Хати рост: барномаро ба компютери худ интиқол диҳед. Ба таври маҳаллӣ таҳия ва ислоҳ кунед.
  • сомона; GitHub.
  • Омори мухтасари GH: 2131 ситора, 2712 супориш, 33 саҳмгузор.
  • Забон: Python.
  • Литсензия: Литсензияи Apache 2.0.

Идеяи ин snap-in оғоз кардани як контейнер бо замима дар компютери корбари маҳаллӣ ва прокси тамоми трафик аз кластер ба он ва бозгашт мебошад. Ин равиш ба шумо имкон медиҳад, ки тавассути таҳрири файлҳо дар IDE дӯстдоштаи худ ба таври маҳаллӣ таҳия кунед: натиҷаҳо фавран дастрас хоҳанд шуд.

Афзалиятҳои кор дар маҳал ин роҳати таҳрирҳо ва натиҷаҳои фаврӣ, қобилияти ислоҳ кардани барнома бо роҳи муқаррарӣ мебошад. Камбудии он дар он аст, ки он суръати пайвастшавиро талаб мекунад, ки ин махсусан ҳангоми кор кардан бо замимаи дорои RPS ва трафики хеле баланд намоён аст. Илова бар ин, Telepresence бо насби садо дар Windows мушкилот дорад, ки метавонад барои таҳиягарони ба ин ОС одаткарда маҳдудияти ҳалкунанда бошад.

Мо аллакай таҷрибаи худро оид ба истифодаи Telepresence мубодила кардем дар ин ҷо.

Ksync

  • Хати рост: қариб синхронизатсияи фаврии код бо контейнер дар кластер.
  • GitHub.
  • Омори мухтасари GH: 555 ситора, 362 супориш, 11 саҳмгузор.
  • Забон: Бирав.
  • Литсензия: Литсензияи Apache 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 ин комилан нолозим аст. Беҳтараш opcache-ро хомӯш кунед ва парчамро истифода баред --reload=false.
  • Конфигуратсияро ҳамеша ислоҳ кардан мумкин аст $HOME/.ksync/ksync.yaml.

Каду

  • Хати рост: равандҳои debug бевосита дар кластер.
  • GitHub.
  • Омори мухтасари GH: 1154 ситора, 279 супориш, 23 саҳмгузор.
  • Забон: Бирав.
  • Литсензия: Литсензияи Apache 2.0.

Ин асбоб барои ислоҳи равандҳои мустақим дар подкҳо пешбинӣ шудааст. Утилита оддӣ аст ва ба таври интерактивӣ ба шумо имкон медиҳад, ки ислоҳкунандаи дилхоҳро интихоб кунед (нигаред ба поён) ва фазои ном + pod, ки дар ҷараёни он шумо бояд дахолат кунед. Дар айни замон дастгирӣ мешавад:

  • delve - барои барномаҳои Go;
  • GDB - тавассути интиқоли дурдасти ҳадаф + порт;
  • Интиқоли порти JDWP барои ислоҳи барномаҳои Java.

Дар тарафи IDE, дастгирӣ танҳо дар VScode дастрас аст (бо истифода аз васеъкунӣ), аммо нақшаҳои соли ҷорӣ (2019) Eclipse ва Intellij-ро дар бар мегиранд.

Барои ислоҳ кардани равандҳо, Squash як контейнери имтиёзнокро дар гиреҳҳои кластер иҷро мекунад, бинобар ин шумо аввал бояд бо қобилиятҳо шинос шавед ҳолати бехатар барои пешгирии мушкилоти амниятӣ.

Қарорҳои мукаммал

Биёед ба артиллерияи вазнин гузарем - лоиҳаҳои бештар "миқёси калон", ки барои фавран қонеъ кардани бисёр ниёзҳои таҳиягарон пешбинӣ шудаанд.

NB: Дар ин рӯйхат, албатта, барои утилитаи кушодаи мо ҷой мавҷуд аст верф (пештар бо номи dapp маълум буд). Аммо мо дар ин бора на як бору ду бор навишта ва гуфтем ва аз ин рӯ, тасмим гирифтем, ки онро ба барраси дохил накунем. Барои онҳое, ки мехоҳанд бо имкониятҳои он бештар шинос шаванд, мо тавсия медиҳем, ки гузоришро хонед/гуш кунед "werf воситаи мо барои CI/CD дар Kubernetes аст".

DevSpace

  • Хати рост: барои онҳое, ки мехоҳанд дар Кубернетес ба кор шурӯъ кунанд, аммо намехоҳанд ба ҷангали он амиқтар раванд.
  • GitHub.
  • Омори мухтасари GH: 630 ситора, 1912 супориш, 13 саҳмгузор.
  • Забон: Бирав.
  • Литсензия: Литсензияи Apache 2.0.

Ҳалли як ширкати ҳамон ном, ки кластерҳои идорашавандаро бо Kubernetes барои рушди даста таъмин мекунад. Утилита барои кластерҳои тиҷоратӣ сохта шудааст, аммо бо ҳамааш хуб кор мекунад.

Ҳангоми иҷро кардани фармон devspace init дар каталоги лоиҳа ба шумо пешниҳод карда мешавад (интерактивӣ):

  • кластери кории Kubernetes-ро интихоб кунед,
  • мавҷударо истифода баред Dockerfile (ё тавлиди нав) барои сохтани контейнер дар асоси он,
  • репозиторийро барои нигоҳ доштани тасвирҳои контейнер ва ғайра интихоб кунед.

Пас аз ҳамаи ин қадамҳои омодагӣ, шумо метавонед бо иҷро кардани фармон ба рушд оғоз кунед devspace dev. Он контейнерро месозад, онро ба анбор бор мекунад, ҷойгиркуниро ба кластер паҳн мекунад ва интиқоли порт ва ҳамоҳангсозии контейнерро бо директорияи маҳаллӣ оғоз мекунад.

Ихтиёрӣ, аз шумо хоҳиш карда мешавад, ки терминалро ба контейнер интиқол диҳед. Шумо набояд рад кунед, зеро дар асл контейнер бо фармони хоб оғоз мешавад ва барои санҷиши воқеӣ барнома бояд дастӣ оғоз карда шавад.

Нихоят, коллектив devspace deploy барнома ва инфрасохтори алоқамандро ба кластер мебарорад, ки пас аз он ҳама чиз дар ҳолати ҷангӣ кор мекунад.

Ҳама конфигуратсияи лоиҳа дар файл нигоҳ дошта мешавад devspace.yaml. Илова ба танзимоти муҳити таҳия, шумо инчунин метавонед тавсифи инфрасохторро дар он пайдо кунед, ки ба манифестҳои стандартии Kubernetes монанданд, ки танҳо хеле содда карда шудаанд.

Асбобҳо барои таҳиягарони барномаҳое, ки дар Kubernetes кор мекунанд
Архитектура ва марҳилаҳои асосии кор бо DevSpace

Илова бар ин, ба лоиҳа илова кардани ҷузъи пешакӣ муайяншуда (масалан, DBMS MySQL) ё диаграммаи Helm осон аст. Муфассалтар дар хуччатхо - ин мураккаб нест.

Скаффолд

  • сомона; GitHub.
  • Омори мухтасари GH: 7423 ситора, 4173 супориш, 136 саҳмгузор.
  • Забон: Бирав.
  • Литсензия: Литсензияи Apache 2.0.

Ин утилитаи Google иддао дорад, ки тамоми эҳтиёҷоти таҳиягареро, ки коди он ба таври навъе дар кластери Kubernetes кор мекунад, пӯшонад. Оғози истифодаи он мисли devspace осон нест: интерактивӣ, муайянкунии забон ва эҷоди худкор нест Dockerfile онҳо дар ин ҷо ба шумо пешниҳод намекунанд.

Аммо, агар ин шуморо натарсонад, ин аст он чизе ки Skaffold ба шумо имкон медиҳад, ки кунед:

  • Тағироти рамзи сарчашмаро пайгирӣ кунед.
  • Агар он васлкуниро талаб накунад, онро бо контейнери қаҳваранг ҳамоҳанг созед.
  • Контейнерҳоро бо код, агар забон тафсир карда бошад, ҷамъ кунед ё артефактҳоро тартиб диҳед ва онҳоро ба контейнерҳо гузоред.
  • Тасвирҳои натиҷавӣ ба таври худкор тавассути истифода тафтиш карда мешаванд контейнер-сохтор-озмоиш.
  • Барчасп ва бор кардани тасвирҳо ба Реестри Docker.
  • Бо истифода аз kubectl, Helm ё kustomize барномаро дар кластер ҷойгир кунед.
  • Интиқоли портро иҷро кунед.
  • Барномаҳои ислоҳи хатогиҳо дар Java, Node.js, Python навишта шудаанд.

Ҷараёни кор дар вариантҳои гуногун дар файл ба таври декларативӣ тасвир шудааст skaffold.yaml. Барои лоиҳа, шумо инчунин метавонед якчанд профилҳоро муайян кунед, ки дар онҳо шумо метавонед марҳилаҳои васлкунӣ ва ҷойгиркуниро қисман ё пурра тағир диҳед. Масалан, барои таҳия, тасвири асосиеро, ки барои таҳиякунанда қулай аст, ва барои саҳнасозӣ ва истеҳсол - як ҳадди ақалро муайян кунед (+ истифода securityContext контейнерҳо ё кластереро, ки дар он барнома ҷойгир карда мешавад, аз нав муайян кунед).

Контейнерҳои Docker метавонанд ба таври маҳаллӣ ё дур сохта шаванд: дар Сохтани Google Cloud ё дар кластер бо истифода аз Канико. Bazel ва Jib Maven/Gradle низ дастгирӣ карда мешаванд. Барои барчаспкунӣ, Skaffold бисёр стратегияҳоро дастгирӣ мекунад: аз ҷониби git commit hash, сана/вақт, sha256-маблағи манбаъҳо ва ғайра.

Алоҳида, имкони санҷиши контейнерҳоро қайд кардан лозим аст. Чаҳорчӯбаи аллакай зикршудаи контейнер-структураи санҷиш усулҳои зерини санҷишро пешниҳод мекунад:

  • Иҷрои фармонҳо дар контексти контейнер бо пайгирии ҳолати баромад ва тафтиши баромади матни фармон.
  • Санҷиши мавҷудияти файлҳо дар контейнер ва мувофиқати атрибутҳои муайяншуда.
  • Назорати мундариҷаи файл бо истифода аз ибораҳои муқаррарӣ.
  • Санҷиши метамаълумоти тасвир (ENV, ENTRYPOINT, VOLUMES ғайра).
  • Санҷиши мутобиқати иҷозатнома.

Синхронизатсияи файлҳо бо контейнер ба таври беҳтарин анҷом дода намешавад: Skaffold танҳо бо манбаъҳо бойгонӣ эҷод мекунад, онро нусхабардорӣ мекунад ва дар контейнер мекушояд (қатрон бояд насб карда шавад). Аз ин рӯ, агар вазифаи асосии шумо ҳамоҳангсозии код бошад, беҳтар аст, ки ба ҳалли махсус (ksync) муроҷиат кунед.

Асбобҳо барои таҳиягарони барномаҳое, ки дар Kubernetes кор мекунанд
Марҳилаҳои асосии амалиёти Skaffold

Умуман, асбоб ба шумо имкон намедиҳад, ки аз манифестҳои Кубернетес реферат гиред ва ҳеҷ гуна интерактивӣ надорад, аз ин рӯ азхуд кардани он метавонад душвор бошад. Аммо ин ҳам бартарии он аст - озодии бештари амал.

Боғи

  • сомона; GitHub.
  • Омори мухтасари GH: 1063 ситора, 1927 супориш, 17 саҳмгузор.
  • Забон: TypeScript (дар назар аст, ки лоиҳа ба якчанд ҷузъҳо тақсим карда шавад, ки баъзеи онҳо дар Go хоҳанд буд ва инчунин як SDK барои эҷоди иловаҳо дар TypeScript/JavaScript ва Go).
  • Литсензия: Литсензияи Apache 2.0.

Мисли Skaffold, Garden мақсад дорад, ки равандҳои интиқоли коди барномаҳоро ба кластери K8s автоматӣ кунад. Барои ин, шумо бояд аввал сохтори лоиҳаро дар файли YAML тавсиф кунед ва сипас фармонро иҷро кунед garden dev. Вай тамоми ҷодуро иҷро хоҳад кард:

  • Контейнерҳоро бо қисмҳои гуногуни лоиҳа ҷамъ кунед.
  • Санҷишҳои ҳамгироӣ ва воҳидҳоро, агар тавсиф шуда бошанд, мегузаронад.
  • Ҳама ҷузъҳои лоиҳаро ба кластер мебарорад.
  • Агар рамзи сарчашма тағир ёбад, он тамоми лӯларо аз нав оғоз мекунад.

Диққати асосии истифодаи ин асбоб мубодилаи кластери дурдаст бо дастаи таҳиякунанда мебошад. Дар ин ҳолат, агар баъзе қадамҳои сохтмон ва санҷиш аллакай анҷом дода шуда бошанд, ин тамоми равандро ба таври назаррас суръат мебахшад, зеро Garden метавонад натиҷаҳои кэшшударо истифода барад.

Модули лоиҳа метавонад контейнер, контейнери Maven, диаграммаи Ҳелм, манифест барои kubectl apply ё ҳатто функсияи OpenFaaS. Ғайр аз он, ҳама гуна модулҳоро аз анбори дурдасти Git кашидан мумкин аст. Модул метавонад хидматҳо, вазифаҳо ва санҷишҳоро муайян кунад ё не. Хидматҳо ва вазифаҳо метавонанд вобастагӣ дошта бошанд, аз ин рӯ шумо метавонед пайдарпайии ҷойгиркунии хидмати мушаххасро муайян кунед ва оғози вазифаҳо ва санҷишҳоро ташкил кунед.

Garden ба корбар як панели зебо пешкаш мекунад (ҳоло дар ҳолати таҷрибавӣ), ки графики лоиҳаро нишон медиҳад: ҷузъҳо, пайдарпаии васлкунӣ, иҷрои вазифаҳо ва санҷишҳо, пайвастшавӣ ва вобастагии онҳо. Дар худи браузер, шумо метавонед сабтҳои ҳамаи ҷузъҳои лоиҳаро бубинед ва тафтиш кунед, ки ҷузъи мушаххас тавассути HTTP чӣ натиҷа медиҳад (агар, албатта, барои он манбаи воридшавӣ эълон карда шуда бошад).

Асбобҳо барои таҳиягарони барномаҳое, ки дар Kubernetes кор мекунанд
Панел барои боғ

Ин асбоб инчунин режими пурборкунии гарм дорад, ки танҳо тағироти скриптро бо контейнер дар кластер ҳамоҳанг мекунад ва раванди ислоҳи барномаҳоро хеле суръат мебахшад. Боғ боғи хуб дорад ҳуҷҷатҳо ва бад нест маҷмӯи мисолҳо, ба шумо имкон медиҳад, ки зуд ба он одат кунед ва ба истифодаи он шурӯъ кунед. Воқеан, ба наздикӣ мо нашр кардем тарҷумаи мақола аз муаллифони он.

хулоса

Албатта, ин рӯйхати асбобҳо барои таҳия ва ислоҳи барномаҳо дар Kubernetes бо маҳдуд намешавад. Бисёре аз хидматҳои хеле муфид ва амалӣ мавҷуданд, ки сазовори он ҳастанд, агар мақолаи алоҳида набошанд, ҳадди аққал як зикр. Ба мо бигӯед, ки шумо чиро истифода мебаред, бо кадом мушкилот дучор шудед ва чӣ гуна онҳоро ҳал кардед!

PS

Инчунин дар блоги мо хонед:

Манбаъ: will.com

Илова Эзоҳ