Kubernetes-da ishlaydigan ilovalarni ishlab chiquvchilar uchun asboblar

Kubernetes-da ishlaydigan ilovalarni ishlab chiquvchilar uchun asboblar

Operatsiyalarga zamonaviy yondashuv biznesning ko'plab dolzarb muammolarini hal qiladi. Konteynerlar va orkestrlar har qanday murakkablikdagi loyihalarni kengaytirishni osonlashtiradi, yangi versiyalarni chiqarishni soddalashtiradi, ularni yanada ishonchli qiladi, lekin shu bilan birga ular ishlab chiquvchilar uchun qo'shimcha muammolarni keltirib chiqaradi. Dasturchi, birinchi navbatda, uning kodi haqida qayg'uradi: arxitektura, sifat, ishlash, nafislik - bu Kubernetesda qanday ishlashi va hatto minimal o'zgarishlardan keyin uni qanday sinab ko'rish va disk raskadrovka qilish haqida emas. Shu sababli, Kubernetes uchun vositalar hatto eng "arxaik" ishlab chiquvchilarning muammolarini hal qilishga yordam beradigan va asosiy narsaga e'tibor qaratishga imkon beradigan vositalar faol ishlab chiqilishi tabiiydir.

Ushbu sharhda kodi Kubernetes klasterining pod'aksida ishlaydigan dasturchining hayotini osonlashtiradigan ba'zi vositalar haqida qisqacha ma'lumot berilgan.

Oddiy yordamchilar

Kubectl-debug

  • Pastki qator: konteyneringizni Podga qo'shing va unda nima sodir bo'lishini ko'ring.
  • GitHub.
  • GH bo'yicha qisqacha statistika: 715 yulduz, 54 ta ishtirokchi, 9 ta ishtirokchi.
  • Til: boring.
  • Litsenziya: Apache litsenziyasi 2.0.

Kubectl uchun ushbu plagin sizga qiziq bo'lgan pod ichida qo'shimcha konteyner yaratish imkonini beradi, bu jarayon nomlar maydonini boshqa konteynerlar bilan baham ko'radi. Unda siz podning ishini disk raskadrovka qilishingiz mumkin: tarmoqni tekshirish, tarmoq trafigini tinglash, qiziqish jarayonini kuzatish va h.k.

Ishlash orqali jarayon konteyneriga ham o'tishingiz mumkin chroot /proc/PID/root - manifestda o'rnatilgan idishda ildiz qobig'ini olish kerak bo'lganda, bu juda qulay bo'lishi mumkin. securityContext.runAs.

Asbob oddiy va samarali, shuning uchun u har bir ishlab chiquvchi uchun foydali bo'lishi mumkin. Biz bu haqda ko'proq yozdik alohida maqola.

Telepresensiya

  • Pastki qator: ilovani kompyuteringizga o'tkazing. Mahalliy ravishda ishlab chiqish va disk raskadrovka.
  • veb-sayt; GitHub.
  • GH bo'yicha qisqacha statistika: 2131 yulduz, 2712 ta ishtirokchi, 33 ta ishtirokchi.
  • Til: Python.
  • Litsenziya: Apache litsenziyasi 2.0.

Ushbu qo'shimcha qurilmaning g'oyasi mahalliy foydalanuvchi kompyuterida dastur bilan konteynerni ishga tushirish va klasterdan unga va orqaga barcha trafikni proksi-serverdan o'tkazishdir. Ushbu yondashuv sevimli IDE-dagi fayllarni oddiygina tahrirlash orqali mahalliy rivojlanish imkonini beradi: natijalar darhol mavjud bo'ladi.

Mahalliy rejimda ishlashning afzalliklari - tahrirlash va tezkor natijalarning qulayligi, dasturni odatdagi usulda disk raskadrovka qilish imkoniyati. Salbiy tomoni shundaki, u ulanish tezligini talab qiladi, bu juda yuqori RPS va trafikka ega bo'lgan dastur bilan ishlashda ayniqsa seziladi. Bundan tashqari, Telepresence-da Windows-da ovoz balandligini oshirish bilan bog'liq muammolar mavjud, bu esa ushbu OTga o'rganib qolgan ishlab chiquvchilar uchun hal qiluvchi cheklov bo'lishi mumkin.

Biz allaqachon Telepresence-dan foydalanish tajribamiz bilan o'rtoqlashdik shu yerda.

Ksync

  • Pastki qator: klasterdagi konteyner bilan kodni deyarli bir zumda sinxronlashtirish.
  • GitHub.
  • GH bo'yicha qisqacha statistika: 555 yulduz, 362 ta ishtirokchi, 11 ta ishtirokchi.
  • Til: boring.
  • Litsenziya: Apache litsenziyasi 2.0.

Yordamchi dastur mahalliy katalog tarkibini klasterda ishlaydigan konteyner katalogi bilan sinxronlashtirishga imkon beradi. Bunday vosita skript dasturlash tillarini ishlab chiquvchilar uchun juda mos keladi, ularning asosiy muammosi kodni ishlaydigan konteynerga etkazib berishdir. Ksync bu bosh og'rig'ini engillashtirish uchun mo'ljallangan.

Buyruq bilan bir marta ishga tushirilganda ksync init Klasterda tanlangan konteyner fayl tizimining holatini kuzatish uchun ishlatiladigan DaemonSet yaratiladi. Mahalliy kompyuterda ishlab chiquvchi buyruqni bajaradi ksync watch, bu konfiguratsiyalarni kuzatib boradi va ishlaydi sinxronizatsiya, bu fayllarni klaster bilan to'g'ridan-to'g'ri sinxronlashtiradi.

Qolgan narsa ksync-ga nimani sinxronlashtirishni ko'rsatishdir. Masalan, bu buyruq:

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

... nomli kuzatuvchi yaratadi myprojectyorlig'i bilan podni qidiradi app=backend va mahalliy katalogni sinxronlashtirishga harakat qiling /home/user/myproject/ katalogi bilan /var/www/myproject/ chaqirilgan konteynerda php.

Bizning tajribamizdan ksync bo'yicha muammolar va eslatmalar:

  • Kubernetes klaster tugunlarida foydalanish kerak overlay2 Docker uchun saqlash drayveri sifatida. Yordamchi dastur boshqalar bilan ishlamaydi.
  • Windows-dan mijoz OS sifatida foydalanilganda, fayl tizimini kuzatuvchisi to'g'ri ishlamasligi mumkin. Ushbu xato katta kataloglar bilan ishlashda sezildi - ko'p sonli ichki fayllar va kataloglar bilan. Biz yaratdik tegishli masala sinxronlash loyihasida, lekin bu borada hali hech qanday taraqqiyot yo'q (iyul boshidan beri).
  • Fayldan foydalaning .stignore sinxronlash kerak bo'lmagan yo'llar yoki fayl naqshlarini belgilash uchun (masalan, kataloglar app/cache и .git).
  • Odatiy bo'lib, fayllar o'zgarganda ksync konteynerni qayta ishga tushiradi. Node.js uchun bu qulay, lekin PHP uchun bu mutlaqo keraksiz. Opcache-ni o'chirib, bayroqni ishlatish yaxshiroqdir --reload=false.
  • Konfiguratsiya har doim ichida tuzatilishi mumkin $HOME/.ksync/ksync.yaml.

Qovoq

  • Pastki qator: to'g'ridan-to'g'ri klasterda disk raskadrovka jarayonlari.
  • GitHub.
  • GH bo'yicha qisqacha statistika: 1154 yulduz, 279 ta ishtirokchi, 23 ta ishtirokchi.
  • Til: boring.
  • Litsenziya: Apache litsenziyasi 2.0.

Ushbu vosita to'g'ridan-to'g'ri podlarda jarayonlarni tuzatish uchun mo'ljallangan. Yordamchi dastur oddiy va interaktiv tarzda kerakli tuzatuvchini tanlashga imkon beradi (pastga qarang) va nomlar maydoni + pod, bu jarayonga siz aralashishingiz kerak. Hozirda qo'llab-quvvatlanadi:

  • delve - Go ilovalari uchun;
  • GDB - maqsadli masofadan turib + portni yo'naltirish orqali;
  • Java ilovalarini disk raskadrovka qilish uchun JDWP portini yo'naltirish.

IDE tomonida qo'llab-quvvatlash faqat VScode-da mavjud ( kattalashtirish), ammo joriy (2019) yil uchun rejalarga Eclipse va Intellij kiradi.

Jarayonlarni disk raskadrovka qilish uchun Squash klaster tugunlarida imtiyozli konteynerni ishga tushiradi, shuning uchun avvalo imkoniyatlar bilan tanishishingiz kerak. xavfsiz rejim xavfsizlik muammolarini oldini olish uchun.

Integratsiyalashgan yechimlar

Keling, og'ir artilleriyaga o'taylik - ishlab chiquvchilarning ko'plab ehtiyojlarini darhol qondirish uchun mo'ljallangan "keng ko'lamli" loyihalar.

NB: Ushbu ro'yxatda, albatta, bizning Open Source yordamchi dasturimiz uchun joy mavjud werf (ilgari dapp nomi bilan tanilgan). Biroq, biz bu haqda bir necha bor yozgan va gaplashganmiz va shuning uchun uni sharhga kiritmaslikka qaror qildik. Uning imkoniyatlari bilan ko'proq tanishishni xohlovchilar uchun hisobotni o'qish/tinglashni tavsiya qilamiz "werf bizning Kubernetesdagi CI/CD uchun vositamizdir".

DevSpace

  • Pastki qator: Kubernetesda ishlashni xohlaydigan, lekin uning o'rmoniga chuqur kirib borishni istamaydiganlar uchun.
  • GitHub.
  • GH bo'yicha qisqacha statistika: 630 yulduz, 1912 ta ishtirokchi, 13 ta ishtirokchi.
  • Til: boring.
  • Litsenziya: Apache litsenziyasi 2.0.

Jamoani rivojlantirish uchun boshqariladigan klasterlarni Kubernetes bilan ta'minlaydigan xuddi shu nomdagi kompaniyaning yechimi. Yordamchi dastur tijorat klasterlari uchun yaratilgan, ammo boshqalar bilan juda yaxshi ishlaydi.

Buyruqni bajarayotganda devspace init loyiha katalogida sizga taklif qilinadi (interaktiv):

  • ishlaydigan Kubernetes klasterini tanlang,
  • mavjudidan foydalaning Dockerfile (yoki yangisini yaratish) unga asoslangan konteyner yaratish,
  • konteyner tasvirlarini saqlash uchun omborni tanlang va hokazo.

Ushbu barcha tayyorgarlik bosqichlaridan so'ng siz buyruqni ishga tushirish orqali rivojlanishni boshlashingiz mumkin devspace dev. U konteynerni quradi, uni omborga yuklaydi, joylashtirishni klasterga chiqaradi va portni yo'naltirishni va konteynerni mahalliy katalog bilan sinxronlashni boshlaydi.

Majburiy emas, sizdan terminalni konteynerga o'tkazish so'raladi. Siz rad etmasligingiz kerak, chunki aslida konteyner uyqu buyrug'i bilan boshlanadi va haqiqiy sinov uchun dasturni qo'lda ishga tushirish kerak.

Nihoyat, jamoa devspace deploy ilovani va tegishli infratuzilmani klasterga tarqatadi, shundan so'ng hamma narsa jangovar rejimda ishlay boshlaydi.

Barcha loyiha konfiguratsiyasi faylda saqlanadi devspace.yaml. Rivojlanish muhiti sozlamalariga qo'shimcha ravishda siz undagi infratuzilma tavsifini ham topishingiz mumkin, bu standart Kubernetes manifestlariga o'xshash, faqat juda soddalashtirilgan.

Kubernetes-da ishlaydigan ilovalarni ishlab chiquvchilar uchun asboblar
Arxitektura va DevSpace bilan ishlashning asosiy bosqichlari

Bundan tashqari, loyihaga oldindan belgilangan komponentni (masalan, MySQL DBMS) yoki Helm diagrammasini qo'shish oson. Batafsil o'qing hujjatlar - bu murakkab emas.

Skaffold

  • veb-sayt; GitHub.
  • GH bo'yicha qisqacha statistika: 7423 yulduz, 4173 ta ishtirokchi, 136 ta ishtirokchi.
  • Til: boring.
  • Litsenziya: Apache litsenziyasi 2.0.

Google kompaniyasining ushbu yordam dasturi qandaydir tarzda Kubernetes klasterida ishlaydigan dasturchining barcha ehtiyojlarini qondirishga da'vo qiladi. Uni ishlatishni boshlash devspace kabi oson emas: interaktivlik, tilni aniqlash va avtomatik yaratish yo'q Dockerfile Bu yerda sizga taklif qilishmaydi.

Ammo, agar bu sizni qo'rqitmasa, Skaffold sizga nima qilishga imkon beradi:

  • Manba kodidagi o'zgarishlarni kuzatib boring.
  • Agar yig'ishni talab qilmasa, uni pod konteyneri bilan sinxronlashtiring.
  • Agar til talqin qilinsa, kodli konteynerlarni to'plang yoki artefaktlarni kompilyatsiya qiling va ularni konteynerlarga joylashtiring.
  • Olingan tasvirlar yordamida avtomatik ravishda tekshiriladi konteyner-struktura-test.
  • Tasvirlarni teglash va Docker registriga yuklash.
  • Ilovani kubectl, Helm yoki kustomize yordamida klasterda joylashtiring.
  • Portni yo'naltirishni amalga oshiring.
  • Java, Node.js, Python tillarida yozilgan dasturlarni disk raskadrovka qilish.

Turli xil variantlardagi ish jarayoni faylda deklarativ tarzda tasvirlangan skaffold.yaml. Loyiha uchun siz yig'ish va joylashtirish bosqichlarini qisman yoki to'liq o'zgartirishingiz mumkin bo'lgan bir nechta profillarni belgilashingiz mumkin. Masalan, ishlab chiqish uchun ishlab chiquvchi uchun qulay bo'lgan asosiy tasvirni belgilang va sahnalashtirish va ishlab chiqarish uchun - minimal (+ foydalanish) securityContext konteynerlar yoki ilova joylashtiriladigan klasterni qayta aniqlang).

Docker konteynerlarini mahalliy yoki masofadan qurish mumkin: in Google Cloud Build yoki klasterda foydalanish Kaniko. Bazel va Jib Maven/Gradle ham qo'llab-quvvatlanadi. Belgilash uchun Skaffold ko'plab strategiyalarni qo'llab-quvvatlaydi: git commit hash, sana/vaqt, sha256-manbalar yig'indisi va boshqalar.

Alohida-alohida, konteynerlarni sinovdan o'tkazish imkoniyatini ta'kidlash kerak. Yuqorida aytib o'tilgan konteyner-struktura-test tizimi quyidagi tekshirish usullarini taklif qiladi:

  • Chiqish holatini kuzatish va buyruqning matn chiqishini tekshirish bilan konteyner kontekstida buyruqlarni bajarish.
  • Konteynerdagi fayllar mavjudligini tekshirish va belgilangan atributlarga mos kelish.
  • Muntazam iboralar yordamida fayl tarkibini boshqarish.
  • Rasm metamaʼlumotlarini tekshirish (ENV, ENTRYPOINT, VOLUMES va h.k.).
  • Litsenziya muvofiqligini tekshirish.

Fayllarni konteyner bilan sinxronlashtirish eng maqbul usulda amalga oshirilmaydi: Skaffold oddiygina manbalar bilan arxiv yaratadi, uni nusxalaydi va konteynerdan chiqaradi (tar o'rnatilgan bo'lishi kerak). Shuning uchun, agar sizning asosiy vazifangiz kod sinxronizatsiyasi bo'lsa, ixtisoslashtirilgan yechimga (ksync) murojaat qilish yaxshiroqdir.

Kubernetes-da ishlaydigan ilovalarni ishlab chiquvchilar uchun asboblar
Skaffold operatsiyasining asosiy bosqichlari

Umuman olganda, vosita Kubernetes manifestlaridan mavhumlashtirishga imkon bermaydi va hech qanday interaktivlikka ega emas, shuning uchun uni o'zlashtirish qiyin bo'lib tuyulishi mumkin. Ammo bu ham uning afzalligi - harakat erkinligi.

bog '

  • veb-sayt; GitHub.
  • GH bo'yicha qisqacha statistika: 1063 yulduz, 1927 ta ishtirokchi, 17 ta ishtirokchi.
  • Til: TypeScript (loyihani bir nechta komponentlarga bo'lish rejalashtirilgan, ularning ba'zilari Go'da bo'ladi, shuningdek, TypeScript/JavaScript va Go'da qo'shimchalarni yaratish uchun SDK yaratish rejalashtirilgan).
  • Litsenziya: Apache litsenziyasi 2.0.

Skaffold singari, Garden ham K8s klasteriga dastur kodlarini yetkazib berish jarayonlarini avtomatlashtirishga qaratilgan. Buning uchun avvalo YAML faylida loyiha strukturasini tasvirlab berishingiz kerak, keyin esa buyruqni bajarishingiz kerak garden dev. U barcha sehrlarni qiladi:

  • Loyihaning turli qismlari bilan konteynerlarni to'plang.
  • Agar tavsiflangan bo'lsa, integratsiya va birlik testlarini o'tkazadi.
  • Loyihaning barcha komponentlarini klasterga chiqaradi.
  • Agar manba kodi o'zgarsa, u butun quvur liniyasini qayta ishga tushiradi.

Ushbu vositadan foydalanishning asosiy maqsadi uzoq klasterni ishlab chiqish guruhi bilan bo'lishishdir. Bunday holda, agar qurilish va sinov bosqichlarining bir qismi allaqachon bajarilgan bo'lsa, bu butun jarayonni sezilarli darajada tezlashtiradi, chunki Garden keshlangan natijalardan foydalanishi mumkin.

Loyiha moduli konteyner, Maven konteyneri, Helm diagrammasi, manifest bo'lishi mumkin. kubectl apply yoki hatto OpenFaaS funktsiyasi. Bundan tashqari, har qanday modul uzoq Git omboridan olinishi mumkin. Modul xizmatlar, vazifalar va testlarni belgilashi yoki belgilamasligi mumkin. Xizmatlar va vazifalar bog'liqlikka ega bo'lishi mumkin, buning yordamida siz ma'lum bir xizmatni joylashtirish ketma-ketligini aniqlashingiz va vazifalar va testlarni ishga tushirishni tashkil qilishingiz mumkin.

Garden foydalanuvchiga chiroyli asboblar panelini taqdim etadi (hozirda eksperimental holat), loyiha grafigini ko'rsatadigan: komponentlar, yig'ish ketma-ketligi, topshiriqlar va testlarning bajarilishi, ularning ulanishlari va bog'liqliklari. To'g'ridan-to'g'ri brauzerda siz barcha loyiha komponentlarining jurnallarini ko'rishingiz va ma'lum bir komponent HTTP orqali nima chiqishini tekshirishingiz mumkin (agar, albatta, buning uchun kirish resursi e'lon qilingan bo'lsa).

Kubernetes-da ishlaydigan ilovalarni ishlab chiquvchilar uchun asboblar
Bog 'uchun panel

Ushbu vosita, shuningdek, skript o'zgarishlarini klasterdagi konteyner bilan sinxronlashtirib, ilovalarni nosozliklarni tuzatish jarayonini sezilarli darajada tezlashtiradigan issiq qayta yuklash rejimiga ega. Bog'da yaxshi bog' bor hujjatlar va yomon emas misollar to'plami, sizga tezda ko'nikish va undan foydalanishni boshlash imkonini beradi. Aytgancha, biz yaqinda nashr qildik maqola tarjimasi uning mualliflaridan.

xulosa

Albatta, Kubernetes-da ilovalarni ishlab chiqish va disk raskadrovka qilish uchun ushbu vositalar ro'yxati ular bilan cheklanmaydi. Alohida maqola bo'lmasa, hech bo'lmaganda eslatib o'tishga arziydigan juda ko'p foydali va amaliy yordam dasturlari mavjud. Bizga nimadan foydalanayotganingizni, qanday muammolarga duch kelganingizni va ularni qanday hal qilganingizni ayting!

PS

Shuningdek, bizning blogimizda o'qing:

Manba: www.habr.com

a Izoh qo'shish