Kubernetes дээр ажиллаж байгаа программ хөгжүүлэгчдэд зориулсан хэрэгслүүд

Kubernetes дээр ажиллаж байгаа программ хөгжүүлэгчдэд зориулсан хэрэгслүүд

Үйл ажиллагааны орчин үеийн хандлага нь бизнесийн олон тулгамдсан асуудлыг шийддэг. Контейнер ба найруулагч нь аливаа нарийн төвөгтэй төслүүдийг масштаблахад хялбар болгож, шинэ хувилбаруудыг гаргахыг хялбаршуулж, илүү найдвартай болгодог боловч нэгэн зэрэг хөгжүүлэгчдэд нэмэлт бэрхшээл учруулдаг. Программист юуны түрүүнд өөрийн кодыг анхаардаг: архитектур, чанар, гүйцэтгэл, дэгжин байдал - энэ нь Kubernetes дээр хэрхэн ажиллах, хамгийн бага өөрчлөлт хийсний дараа хэрхэн туршиж, дибаг хийх талаар биш юм. Тиймээс Kubernetes-д зориулсан хэрэгслүүд идэвхтэй хөгжиж байгаа нь хамгийн "архаик" хөгжүүлэгчдийн асуудлыг шийдвэрлэхэд тусалж, гол зүйл дээр анхаарлаа төвлөрүүлэх боломжийг олгодог нь мэдээжийн хэрэг юм.

Энэхүү тойм нь код нь Кубернетес кластерын хэсэгт ажилладаг програмистын амьдралыг хөнгөвчлөх зарим хэрэгслүүдийн талаар товч мэдээлэл өгдөг.

Энгийн туслахууд

Kubectl-дибаг

  • Мөн чанар: саваа Pod-д нэмээд дотор нь юу болж байгааг хараарай.
  • GitHub.
  • GH-ийн товч статистик: 715 од, 54 үүрэг, 9 хувь нэмэр оруулагч.
  • Хэл: Яв.
  • Лиценз: Apache лиценз 2.0.

kubectl-д зориулсан энэхүү залгаас нь сонирхсон pod дотор нэмэлт контейнер үүсгэх боломжийг олгодог бөгөөд энэ нь процессын нэрийн орон зайг бусад контейнеруудтай хуваалцах болно. Үүний дотор та pod-ийн ажиллагааг дибаг хийх боломжтой: сүлжээг шалгах, сүлжээний траффикийг сонсох, сонирхсон үйл явцын ул мөрийг хийх гэх мэт.

Та мөн ажиллуулах замаар процессын контейнер руу шилжиж болно chroot /proc/PID/root - манифест дээр суулгасан саванд үндэс бүрхүүл авах шаардлагатай үед энэ нь маш тохиромжтой байж болох юм. securityContext.runAs.

Хэрэгсэл нь энгийн бөгөөд үр дүнтэй тул хөгжүүлэгч бүрт хэрэгтэй байж болно. Бид энэ талаар дэлгэрэнгүй бичсэн тусдаа зүйл.

Телепрессив

  • Мөн чанар: програмыг компьютерт шилжүүлнэ үү. Орон нутагт хөгжүүлж, дибаг хийх.
  • вэб сайт; GitHub.
  • GH-ийн товч статистик: 2131 од, 2712 амлалт, 33 хувь нэмэр оруулагч.
  • Хэл: Python.
  • Лиценз: Apache лиценз 2.0.

Энэхүү нэмэлт хэрэгслийн санаа нь локал хэрэглэгчийн компьютер дээр програмтай контейнер ажиллуулж, кластераас түүн рүү болон буцаж байгаа бүх урсгалыг прокси болгох явдал юм. Энэ арга нь танд дуртай 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-ийг үйлчлүүлэгчийн үйлдлийн систем болгон ашиглах үед файлын системийн ажиглагч зөв ажиллахгүй байж магадгүй юм. Энэ алдаа нь том сангуудтай ажиллах үед ажиглагдсан - олон тооны үүрлэсэн файл, лавлахуудтай. Бид бүтээсэн холбогдох асуудал синхрончлолын төсөлд байгаа боловч одоогоор ахиц дэвшил гараагүй байна (7-р сарын эхнээс).
  • Файл ашиглах .stignore синхрончлох шаардлагагүй зам эсвэл файлын хэв маягийг зааж өгөх (жишээлбэл, лавлах app/cache и .git).
  • Өгөгдмөл байдлаар, ksync нь файл өөрчлөгдөх бүрт контейнерийг дахин эхлүүлнэ. Node.js-ийн хувьд энэ нь тохиромжтой боловч PHP-ийн хувьд энэ нь огт шаардлагагүй юм. Опкэйчийг унтрааж туг ашиглах нь дээр --reload=false.
  • Тохиргоог үргэлж засах боломжтой $HOME/.ksync/ksync.yaml.

Сквош

  • Мөн чанар: кластерт шууд дибаг хийх процессууд.
  • GitHub.
  • GH-ийн товч статистик: 1154 од, 279 амлалт, 23 хувь нэмэр оруулагч.
  • Хэл: Яв.
  • Лиценз: Apache лиценз 2.0.

Энэ хэрэгсэл нь шууд pods дахь процессуудыг дибаг хийхэд зориулагдсан. Уг хэрэгсэл нь энгийн бөгөөд интерактив байдлаар хүссэн дибаглагчаа сонгох боломжийг олгодог (доороос үзнэ үү) болон нэрийн орон зай + pod, үүнд та хөндлөнгөөс оролцох хэрэгтэй. Одоогоор дэмжигдсэн:

  • delve - Go програмуудад зориулсан;
  • GDB - зорилтот алсын удирдлага + порт дамжуулах замаар;
  • Java програмуудыг дибаг хийх JDWP порт дамжуулах.

IDE тал дээр дэмжлэгийг зөвхөн VScode дээр ашиглах боломжтой ( тэлэлт), гэхдээ одоогийн (2019) жилийн төлөвлөгөөнд Eclipse болон Intellij багтсан болно.

Процессыг дибаг хийхийн тулд Squash нь кластерын зангилаанууд дээр давуу эрхтэй контейнер ажиллуулдаг тул та эхлээд боломжуудтай танилцах хэрэгтэй. аюулгүйн горим аюулгүй байдлын асуудлаас зайлсхийхийн тулд.

Бүрэн шийдлүүд

Хүнд их буу руу шилжье - хөгжүүлэгчдийн олон хэрэгцээг нэн даруй хангах зорилготой "том хэмжээний" төслүүд.

NB: Энэ жагсаалтад мэдээж манай Нээлттэй эхийн хэрэглүүрийг ашиглах газар бий верф (өмнө нь dapp гэж нэрлэдэг байсан). Гэсэн хэдий ч бид энэ талаар нэг бус удаа бичиж, ярьж байсан тул тоймдоо оруулахгүй байхаар шийдсэн. Түүний чадавхийг илүү сайн мэдэхийг хүсч буй хүмүүст бид тайланг унших / сонсохыг зөвлөж байна "werf бол Кубернетес дэх CI/CD-д зориулсан манай хэрэгсэл юм".

DevSpace

  • Мөн чанар: Кубернетес хотод ажиллаж эхлэхийг хүсч байгаа боловч ширэнгэн ойг нь гүнзгийрүүлэхийг хүсдэггүй хүмүүст зориулав.
  • GitHub.
  • GH-ийн товч статистик: 630 од, 1912 он, 13 хувь нэмэр оруулагч.
  • Хэл: Яв.
  • Лиценз: Apache лиценз 2.0.

Багийг хөгжүүлэх зорилгоор удирддаг кластеруудыг Kubernetes-ээр хангадаг ижил нэртэй компанийн шийдэл. Энэхүү хэрэгсэл нь арилжааны кластеруудад зориулагдсан боловч бусадтай маш сайн ажилладаг.

Командыг ажиллуулах үед devspace init Төслийн каталогид танд санал болгох болно (интерактив):

  • ажиллаж байгаа Kubernetes кластер сонгох,
  • байгаа ашиглах Dockerfile (эсвэл шинээр үүсгэх) түүн дээр тулгуурлан сав үүсгэх,
  • Контейнерийн дүрсийг хадгалах агуулахыг сонгох гэх мэт.

Эдгээр бүх бэлтгэл алхмуудын дараа та командыг ажиллуулж хөгжүүлж эхлэх боломжтой devspace dev. Энэ нь савыг барьж, хадгалах санд байршуулж, кластерт байршуулалт хийж, портыг дамжуулах, локал лавлахтай синхрончлох ажлыг эхлүүлнэ.

Сонголтоор та терминалыг сав руу шилжүүлэхийг хүсэх болно. Та татгалзах ёсгүй, учир нь бодит байдал дээр сав нь унтах командаас эхэлдэг бөгөөд бодит туршилт хийхийн тулд програмыг гараар эхлүүлэх хэрэгтэй.

Эцэст нь, баг devspace deploy програм болон холбогдох дэд бүтцийг кластерт шилжүүлж, үүний дараа бүх зүйл байлдааны горимд ажиллаж эхэлнэ.

Төслийн бүх тохиргоо файлд хадгалагдана devspace.yaml. Хөгжлийн орчны тохиргооноос гадна та Кубернетесийн стандарт манифесттэй төстэй дэд бүтцийн тайлбарыг зөвхөн маш хялбаршуулсан байдлаар олж болно.

Kubernetes дээр ажиллаж байгаа программ хөгжүүлэгчдэд зориулсан хэрэгслүүд
DevSpace-тэй ажиллах архитектур ба үндсэн үе шатууд

Нэмж дурдахад, төсөлд урьдчилан тодорхойлсон бүрэлдэхүүн хэсэг (жишээлбэл, MySQL DBMS) эсвэл Helm диаграммыг нэмэхэд хялбар байдаг. Дэлгэрэнгүйг эндээс уншина уу баримт бичиг - төвөгтэй биш.

Скаффолд

  • вэб сайт; GitHub.
  • GH-ийн товч статистик: 7423 од, 4173 амлалт, 136 хувь нэмэр оруулагч.
  • Хэл: Яв.
  • Лиценз: Apache лиценз 2.0.

Google-ийн энэхүү хэрэгсэл нь ямар нэгэн байдлаар код нь Kubernetes кластер дээр ажиллах хөгжүүлэгчийн бүх хэрэгцээг хангана гэж мэдэгджээ. Үүнийг ашиглаж эхлэх нь devspace шиг хялбар биш: интерактив, хэл илрүүлэх, автоматаар үүсгэх боломжгүй. Dockerfile Тэд энд танд санал болгохгүй.

Гэсэн хэдий ч, хэрэв энэ нь таныг айлгахгүй бол Скаффолд танд юу хийхийг зөвшөөрдөг:

  • Эх кодын өөрчлөлтийг хянах.
  • Хэрэв угсрах шаардлагагүй бол савны савтай синхрончлоорой.
  • Хэрэв хэл нь орчуулагдсан бол код бүхий сав цуглуулах, эсвэл олдворуудыг эмхэтгэж, саванд хийнэ.
  • Үүссэн зургуудыг ашиглан автоматаар шалгана чингэлэг-бүтэц-туршилт.
  • Зургийг Docker Бүртгэлд тэмдэглэж, байршуулж байна.
  • kubectl, Helm эсвэл kustomize ашиглан програмыг кластерт байрлуул.
  • Порт дамжуулалтыг гүйцэтгэх.
  • Java, Node.js, Python хэл дээр бичигдсэн програмуудыг дибаг хийх.

Төрөл бүрийн хувилбаруудын ажлын явцыг файлд тунхагласан байдлаар тайлбарласан болно skaffold.yaml. Төслийн хувьд та угсрах, байршуулах үе шатуудыг хэсэгчлэн эсвэл бүрэн өөрчлөх боломжтой хэд хэдэн профайлыг тодорхойлж болно. Жишээлбэл, хөгжүүлэлтийн хувьд хөгжүүлэгчийн хувьд тохиромжтой үндсэн зургийг зааж өгөх ба найруулга, үйлдвэрлэлд хамгийн бага (+ ашиглах) securityContext контейнерууд эсвэл програмыг байрлуулах кластерыг дахин тодорхойлох).

Докер контейнеруудыг дотооддоо эсвэл алсаас барьж болно: in Google Cloud Build эсвэл кластерт ашиглана Канико. Bazel болон Jib Maven/Gradle нар мөн дэмжигддэг. Шошголохын тулд Skaffold нь олон стратегийг дэмждэг: git commit хэш, огноо/цаг, sha256-нийлбэр эх үүсвэр гэх мэт.

Тус тусад нь савыг турших боломжийг тэмдэглэх нь зүйтэй. Өмнө дурьдсан контейнер-бүтэц-туршилтын хүрээ нь дараахь баталгаажуулах аргуудыг санал болгодог.

  • Гарах төлөвийг хянах, командын текст гаралтыг шалгах бүхий контейнерийн контекст дээр тушаалуудыг гүйцэтгэх.
  • Контейнер доторх файл байгаа эсэхийг шалгаж, заасан шинж чанаруудтай таарч байна.
  • Ердийн илэрхийлэл ашиглан файлын агуулгыг хянах.
  • Зургийн мета өгөгдлийн баталгаажуулалт (ENV, ENTRYPOINT, VOLUMES гэх мэт.).
  • Лицензийн нийцтэй байдлыг шалгаж байна.

Файлуудыг контейнертэй синхрончлох нь хамгийн оновчтой байдлаар хийгддэггүй: Skaffold нь зүгээр л эх сурвалжтай архив үүсгэж, хуулж аваад саванд задалдаг (tar суулгасан байх ёстой). Тиймээс, хэрэв таны гол ажил бол кодын синхрончлол бол тусгай шийдлийг (ksync) хайж олох нь дээр.

Kubernetes дээр ажиллаж байгаа программ хөгжүүлэгчдэд зориулсан хэрэгслүүд
Скаффолдын үйл ажиллагааны үндсэн үе шатууд

Ерөнхийдөө уг хэрэгсэл нь Kubernetes манифестээс хийсвэрлэх боломжийг олгодоггүй бөгөөд ямар ч интерактивгүй тул үүнийг эзэмшихэд хэцүү мэт санагдаж магадгүй юм. Гэхдээ энэ нь бас түүний давуу тал юм - үйл ажиллагааны илүү эрх чөлөө.

Garden

  • вэб сайт; GitHub.
  • GH-ийн товч статистик: 1063 од, 1927 үйл ажиллагаа, 17 хувь нэмэр оруулагч.
  • Хэл: TypeScript (Төслийг хэд хэдэн бүрэлдэхүүн хэсэг болгон хуваахаар төлөвлөж байгаа бөгөөд тэдгээрийн зарим нь Go-д байхаас гадна TypeScript/JavaScript болон Go дээр нэмэлтүүдийг үүсгэх SDK хийхээр төлөвлөж байна).
  • Лиценз: Apache лиценз 2.0.

Skaffold-ийн нэгэн адил Garden нь K8s кластерт програмын кодыг хүргэх үйл явцыг автоматжуулах зорилготой юм. Үүнийг хийхийн тулд та эхлээд YAML файл дахь төслийн бүтцийг тайлбарлаж, дараа нь тушаалыг ажиллуулах хэрэгтэй garden dev. Тэр бүх ид шидийг хийх болно:

  • Төслийн янз бүрийн хэсгүүдтэй савыг цуглуул.
  • Хэрэв тайлбарласан бол нэгтгэх болон нэгжийн туршилтыг явуулдаг.
  • Төслийн бүх бүрэлдэхүүн хэсгүүдийг кластерт гаргадаг.
  • Хэрэв эх код өөрчлөгдсөн бол энэ нь дамжуулах хоолойг бүхэлд нь дахин эхлүүлэх болно.

Энэ хэрэгслийг ашиглах гол зорилго нь алсын кластерийг хөгжүүлэлтийн багтай хуваалцах явдал юм. Энэ тохиолдолд, хэрэв барилгын болон туршилтын зарим алхмууд аль хэдийн хийгдсэн бол энэ нь бүх үйл явцыг ихээхэн хурдасгах болно, учир нь Garden кэш хийсэн үр дүнг ашиглах боломжтой болно.

Төслийн модуль нь контейнер, Maven контейнер, Helm диаграм, манифест байж болно. kubectl apply эсвэл бүр OpenFaaS функц. Түүнчлэн, модулиудын аль нэгийг алсын Git репозитороос татаж авах боломжтой. Модуль нь үйлчилгээ, даалгавар, тестийг тодорхойлох эсвэл тодорхойлохгүй байж болно. Үйлчилгээ болон даалгаврууд нь хамааралтай байж болох тул та тухайн үйлчилгээг байршуулах дарааллыг тодорхойлж, даалгавар, тестийг эхлүүлэх ажлыг зохион байгуулж болно.

Garden нь хэрэглэгчдэд үзэсгэлэнтэй хяналтын самбарыг өгдөг (одоогоор туршилтын төлөв), төслийн графикийг харуулдаг: бүрэлдэхүүн хэсгүүд, угсралтын дараалал, даалгавар, туршилтын гүйцэтгэл, тэдгээрийн холболт ба хамаарал. Хөтөч дээр та төслийн бүх бүрэлдэхүүн хэсгүүдийн бүртгэлийг үзэж, тухайн бүрэлдэхүүн хэсэг нь HTTP-ээр дамжуулан юу гаргаж байгааг шалгах боломжтой (мэдээжийн хэрэг, үүнд нэвтрэх нөөцийг зарласан бол).

Kubernetes дээр ажиллаж байгаа программ хөгжүүлэгчдэд зориулсан хэрэгслүүд
Цэцэрлэгт зориулсан самбар

Энэ хэрэгсэл нь бас халуун дахин ачаалах горимтой бөгөөд энэ нь скриптийн өөрчлөлтийг кластер дахь контейнертэй синхрончилж, програмын дибаг хийх процессыг ихээхэн хурдасгадаг. Цэцэрлэгт сайн цэцэрлэг бий баримт бичиг бас муу биш жишээний багц, танд хурдан дасаж, ашиглаж эхлэх боломжийг олгоно. Дашрамд хэлэхэд, бид саяхан нийтэлсэн нийтлэлийн орчуулга зохиогчдоос нь.

дүгнэлт

Мэдээжийн хэрэг, Кубернетес дэх програмуудыг хөгжүүлэх, дибаг хийх хэрэгслүүдийн жагсаалт үүгээр хязгаарлагдахгүй. Тусдаа нийтлэл биш бол дор хаяж дурдах хэрэгтэй өөр олон ашигтай, практик хэрэгслүүд байдаг. Та юу ашигладаг, ямар асуудал тулгарсан, тэдгээрийг хэрхэн шийдсэнээ бидэнд хэлээрэй!

PS

Мөн манай блог дээрээс уншина уу:

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх