ابزارهایی برای توسعه دهندگان برنامه های در حال اجرا در Kubernetes

ابزارهایی برای توسعه دهندگان برنامه های در حال اجرا در Kubernetes

یک رویکرد مدرن به عملیات بسیاری از مشکلات مبرم تجاری را حل می کند. کانتینرها و ارکستراتورها مقیاس پروژه های هر پیچیدگی را آسان می کنند، انتشار نسخه های جدید را ساده می کنند، آنها را قابل اعتمادتر می کنند، اما در عین حال مشکلات اضافی را برای توسعه دهندگان ایجاد می کنند. برنامه نویس، اول از همه، به کد خود اهمیت می دهد: معماری، کیفیت، عملکرد، ظرافت - و نه اینکه چگونه در Kubernetes کار می کند و چگونه آن را پس از ایجاد حداقل تغییرات آزمایش و اشکال زدایی کند. بنابراین ، کاملاً طبیعی است که ابزارهای Kubernetes به طور فعال در حال توسعه هستند و به حل مشکلات حتی "باستانی ترین" توسعه دهندگان کمک می کنند و به آنها اجازه می دهند روی چیز اصلی تمرکز کنند.

این بررسی اطلاعات مختصری در مورد برخی از ابزارهایی ارائه می دهد که زندگی برنامه نویسی را که کدش در pod'ax یک خوشه Kubernetes اجرا می شود، آسان تر می کند.

یاوران ساده

Kubectl-debug

  • خط آخر: ظرف خود را به یک Pod اضافه کنید و ببینید در آن چه اتفاقی می افتد.
  • GitHub.
  • آمار مختصر GH: 715 ستاره، 54 متعهد، 9 مشارکت کننده.
  • زبان: برو.
  • مجوز: Apache License 2.0.

این افزونه برای kubectl به شما این امکان را می دهد که یک ظرف اضافی در داخل غلاف مورد نظر ایجاد کنید که فضای نام فرآیند را با سایر کانتینرها به اشتراک بگذارد. در آن می‌توانید عملکرد غلاف را اشکال‌زدایی کنید: شبکه را بررسی کنید، به ترافیک شبکه گوش دهید، بخشی از فرآیند مورد علاقه را انجام دهید و غیره.

همچنین می‌توانید با اجرا کردن، به محفظه فرآیند بروید chroot /proc/PID/root - این می تواند بسیار راحت باشد زمانی که شما نیاز به یک پوسته ریشه در ظرفی دارید که برای آن در مانیفست تنظیم شده است securityContext.runAs.

این ابزار ساده و موثر است، بنابراین می تواند برای هر توسعه دهنده ای مفید باشد. در موردش بیشتر نوشتیم مقاله جداگانه.

حضور از راه دور

  • خط آخر: برنامه را به کامپیوتر خود انتقال دهید به صورت محلی توسعه و اشکال زدایی کنید.
  • محل; GitHub.
  • آمار مختصر GH: 2131 ستاره، 2712 متعهد، 33 مشارکت کننده.
  • زبان: پایتون
  • مجوز: Apache License 2.0.

ایده این Snap-in این است که یک کانتینر با برنامه را روی رایانه کاربر محلی راه اندازی کند و تمام ترافیک را از خوشه به آن و برعکس پروکسی کند. این رویکرد به شما امکان می دهد تا با ویرایش فایل ها در IDE مورد علاقه خود به صورت محلی توسعه دهید: نتایج بلافاصله در دسترس خواهند بود.

از مزایای اجرای محلی می توان به راحتی ویرایش ها و نتایج فوری، امکان اشکال زدایی برنامه به روش معمولی اشاره کرد. نقطه ضعف آن این است که سرعت اتصال بسیار زیاد است، که به ویژه زمانی که باید با برنامه‌ای با RPS و ترافیک نسبتاً بالا کار کنید، قابل توجه است. علاوه بر این، Telepresence در زمینه نصب صدا در ویندوز نیز مشکلاتی دارد که می تواند محدودیتی قاطع برای توسعه دهندگانی باشد که به این سیستم عامل عادت کرده اند.

ما قبلاً تجربه خود را از استفاده از Telepresence به اشتراک گذاشته ایم اینجا.

Ksync

  • خط آخر: همگام سازی تقریباً آنی کد با ظرف در خوشه.
  • GitHub.
  • آمار مختصر GH: 555 ستاره، 362 متعهد، 11 مشارکت کننده.
  • زبان: برو.
  • مجوز: Apache License 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. این ابزار با سایرین کار نخواهد کرد.
  • هنگام استفاده از ویندوز به عنوان سیستم عامل مشتری، ناظر سیستم فایل ممکن است به درستی کار نکند. این اشکال هنگام کار با دایرکتوری های بزرگ - با تعداد زیادی از فایل ها و دایرکتوری های تو در تو، مشاهده شد. ما ایجاد کردیم موضوع مربوطه در پروژه همگام سازی، اما هنوز پیشرفتی در آن وجود ندارد (از ابتدای تیرماه).
  • از فایل استفاده کنید .stignore برای تعیین مسیرها یا الگوهای فایلی که نیازی به همگام سازی ندارند (مثلاً دایرکتوری ها app/cache и .git).
  • به‌طور پیش‌فرض، هر زمان که فایل‌ها تغییر کنند، ksync ظرف را دوباره راه‌اندازی می‌کند. برای Node.js این راحت است، اما برای PHP کاملا غیر ضروری است. بهتر است opcache را خاموش کنید و از پرچم استفاده کنید --reload=false.
  • پیکربندی را همیشه می توان در آن اصلاح کرد $HOME/.ksync/ksync.yaml.

کدو

  • خط آخر: فرآیندهای اشکال زدایی مستقیماً در خوشه.
  • GitHub.
  • آمار مختصر GH: 1154 ستاره، 279 متعهد، 23 مشارکت کننده.
  • زبان: برو.
  • مجوز: Apache License 2.0.

این ابزار برای اشکال زدایی فرآیندها به طور مستقیم در پادها طراحی شده است. این ابزار ساده است و به صورت تعاملی به شما امکان می دهد تا اشکال زدایی مورد نظر را انتخاب کنید (پایین را ببینید) و namespace + pod که در فرآیند آن باید مداخله کنید. در حال حاضر پشتیبانی می شود:

  • کاوش - برای برنامه های Go.
  • GDB - از طریق ریموت هدف + ارسال پورت؛
  • ارسال پورت JDWP برای اشکال زدایی برنامه های جاوا.

در سمت IDE، پشتیبانی فقط در VScode (با استفاده از انبساطبا این حال، برنامه های سال جاری (2019) شامل Eclipse و Intellij است.

برای اشکال‌زدایی فرآیندها، Squash یک کانتینر ممتاز روی گره‌های خوشه اجرا می‌کند، بنابراین ابتدا باید با قابلیت‌ها آشنا شوید. وضعیت ایمن برای جلوگیری از مشکلات امنیتی

راه حل های پیچیده

بیایید به سمت توپخانه سنگین برویم - پروژه های "مقیاس بزرگ" بیشتر که برای رفع فوری بسیاری از نیازهای توسعه دهندگان طراحی شده اند.

NB: در این لیست، البته، مکانی برای ابزار منبع باز ما وجود دارد ورف (که قبلا به عنوان dapp شناخته می شد). با این حال، ما قبلاً بیش از یک بار در مورد آن نوشته و صحبت کرده ایم و بنابراین تصمیم گرفتیم که آن را در بررسی لحاظ نکنیم. برای کسانی که مایلند با قابلیت های آن بیشتر آشنا شوند، خواندن/گوش دادن به گزارش را توصیه می کنیم.werf ابزار ما برای CI/CD در Kubernetes است'.

بی پروا

  • خط آخر: برای کسانی که می خواهند در Kubernetes شروع به کار کنند، اما نمی خواهند به عمق جنگل آن بپردازند.
  • GitHub.
  • آمار مختصر GH: 630 ستاره، 1912 متعهد، 13 مشارکت کننده.
  • زبان: برو.
  • مجوز: Apache License 2.0.

راه حلی از شرکتی به همین نام، که خوشه های مدیریت شده را با Kubernetes برای توسعه تیم ارائه می دهد. این ابزار برای خوشه های تجاری ایجاد شده است، اما با سایر خوشه ها عالی کار می کند.

هنگام اجرای دستور devspace init در کاتالوگ پروژه به شما پیشنهاد می شود (به صورت تعاملی):

  • یک خوشه Kubernetes در حال کار را انتخاب کنید،
  • استفاده از موجودی Dockerfile (یا یک ظرف جدید تولید کنید) تا یک ظرف بر اساس آن ایجاد کنید،
  • یک مخزن برای ذخیره تصاویر ظرف و غیره انتخاب کنید.

پس از تمام این مراحل آماده سازی، می توانید با اجرای دستور توسعه را شروع کنید devspace dev. این کانتینر را می‌سازد، آن را در مخزن آپلود می‌کند، استقرار را در خوشه اجرا می‌کند و ارسال پورت و همگام‌سازی کانتینر را با دایرکتوری محلی آغاز می‌کند.

در صورت تمایل، از شما خواسته می شود که ترمینال را به کانتینر منتقل کنید. شما نباید امتناع کنید، زیرا در واقع کانتینر با دستور خواب شروع می شود و برای آزمایش واقعی برنامه باید به صورت دستی راه اندازی شود.

بالاخره تیم devspace deploy برنامه و زیرساخت مربوطه را در خوشه قرار می دهد، پس از آن همه چیز در حالت مبارزه شروع به کار می کند.

تمام تنظیمات پروژه در یک فایل ذخیره می شود devspace.yaml. علاوه بر تنظیمات محیط توسعه، می توانید شرح زیرساخت را نیز در آن بیابید، مشابه مانیفست های استاندارد Kubernetes، که بسیار ساده شده است.

ابزارهایی برای توسعه دهندگان برنامه های در حال اجرا در Kubernetes
معماری و مراحل اصلی کار با DevSpace

علاوه بر این، اضافه کردن یک جزء از پیش تعریف شده (به عنوان مثال، MySQL DBMS) یا نمودار Helm به پروژه آسان است. ادامه مطلب را در مستندات - پیچیده نیست

داربست

  • محل; GitHub.
  • آمار مختصر GH: 7423 ستاره، 4173 متعهد، 136 مشارکت کننده.
  • زبان: برو.
  • مجوز: Apache License 2.0.

این ابزار از گوگل ادعا می کند که تمام نیازهای یک توسعه دهنده را پوشش می دهد که کدش به نحوی روی یک خوشه Kubernetes اجرا می شود. شروع به استفاده از آن به آسانی devspace نیست: بدون تعامل، تشخیص زبان و ایجاد خودکار Dockerfile آنها آن را در اینجا به شما پیشنهاد نمی کنند.

با این حال، اگر این شما را نمی ترساند، در اینجا چیزی است که Skaffold به شما اجازه می دهد انجام دهید:

  • ردیابی تغییرات کد منبع
  • اگر نیازی به مونتاژ ندارد، آن را با ظرف غلاف همگام کنید.
  • در صورت تفسیر زبان، کانتینرهایی با کد جمع آوری کنید، یا مصنوعات را کامپایل کنید و آنها را در کانتینرها بسته بندی کنید.
  • تصاویر به دست آمده به طور خودکار با استفاده از بررسی می شوند کانتینر-ساختار-تست.
  • برچسب گذاری و آپلود تصاویر در رجیستری Docker.
  • با استفاده از kubectl، Helm یا kustomize یک برنامه را در یک خوشه مستقر کنید.
  • ارسال پورت را انجام دهید.
  • اشکال زدایی برنامه های نوشته شده در جاوا، Node.js، پایتون.

گردش کار در انواع مختلف به صورت شفاف در فایل توضیح داده شده است skaffold.yaml. برای یک پروژه نیز می توانید چندین پروفایل تعریف کنید که در آنها می توانید به طور جزئی یا کامل مراحل مونتاژ و استقرار را تغییر دهید. به عنوان مثال، برای توسعه، یک تصویر پایه مناسب برای توسعه دهنده، و برای مرحله بندی و تولید - حداقل (+ استفاده) را مشخص کنید securityContext کانتینرها یا تعریف مجدد خوشه ای که برنامه در آن مستقر می شود).

کانتینرهای داکر را می توان به صورت محلی یا از راه دور ساخت: در Google Cloud Build یا در یک خوشه با استفاده از کانیکو. Bazel و Jib Maven/Gradle نیز پشتیبانی می شوند. برای برچسب‌گذاری، Skaffold از بسیاری از استراتژی‌ها پشتیبانی می‌کند: توسط git commit هش، تاریخ/زمان، sha256-مجموع منابع و غیره.

به طور جداگانه، شایان ذکر است که امکان آزمایش ظروف وجود دارد. چارچوب آزمون کانتینر-ساختار-سازه که قبلاً ذکر شد، روش های تأیید زیر را ارائه می دهد:

  • اجرای دستورات در زمینه یک کانتینر با ردیابی وضعیت خروج و بررسی خروجی متن دستور.
  • بررسی وجود فایل ها در کانتینر و مطابقت با ویژگی های مشخص شده.
  • کنترل محتویات فایل با استفاده از عبارات منظم
  • تأیید فراداده تصویر (ENV, ENTRYPOINT, VOLUMES و غیره).
  • بررسی سازگاری مجوز

همگام سازی فایل ها با کانتینر به بهینه ترین روش انجام نمی شود: Skaffold به سادگی یک بایگانی با منابع ایجاد می کند، آن را کپی می کند و آن را در ظرف باز می کند (tar باید نصب شود). بنابراین، اگر وظیفه اصلی شما همگام سازی کد است، بهتر است به دنبال یک راه حل تخصصی (ksync) باشید.

ابزارهایی برای توسعه دهندگان برنامه های در حال اجرا در Kubernetes
مراحل اصلی عملیات Skaffold

به طور کلی، این ابزار به شما امکان انتزاع از مانیفست های Kubernetes را نمی دهد و هیچ تعاملی ندارد، بنابراین ممکن است تسلط بر آن دشوار به نظر برسد. اما این نیز مزیت آن است - آزادی عمل بیشتر.

باغ

  • محل; GitHub.
  • آمار مختصر GH: 1063 ستاره، 1927 متعهد، 17 مشارکت کننده.
  • زبان: TypeScript (برنامه ریزی شده است که پروژه را به چندین مؤلفه تقسیم کنیم که برخی از آنها در Go خواهند بود و همچنین یک SDK برای ایجاد افزونه ها در TypeScript/JavaScript و Go بسازید).
  • مجوز: Apache License 2.0.

هدف گاردن نیز مانند اسکافولد، خودکارسازی فرآیندهای ارائه کد برنامه به کلاستر K8s است. برای این کار ابتدا باید ساختار پروژه را در یک فایل YAML توضیح دهید و سپس دستور را اجرا کنید garden dev. او همه جادوها را انجام خواهد داد:

  • ظروف را با قسمت های مختلف پروژه جمع آوری کنید.
  • تست های یکپارچه سازی و واحد را، در صورتی که شرح داده شده باشد، انجام می دهد.
  • همه اجزای پروژه را در خوشه قرار می دهد.
  • اگر کد منبع تغییر کند، کل خط لوله راه اندازی مجدد می شود.

تمرکز اصلی استفاده از این ابزار، اشتراک گذاری یک خوشه راه دور با یک تیم توسعه است. در این صورت، اگر برخی از مراحل ساخت و آزمایش قبلا انجام شده باشد، این کار به طور قابل توجهی سرعت کل فرآیند را افزایش می دهد، زیرا Garden می تواند از نتایج ذخیره شده در حافظه پنهان استفاده کند.

یک ماژول پروژه می تواند یک ظرف، یک ظرف Maven، یک نمودار Helm، یک مانیفست برای باشد kubectl apply یا حتی یک تابع OpenFaaS. علاوه بر این، هر یک از ماژول ها را می توان از یک مخزن Git راه دور بیرون کشید. یک ماژول ممکن است خدمات، وظایف و تست ها را تعریف کند یا نه. سرویس‌ها و وظایف می‌توانند وابستگی داشته باشند، بنابراین می‌توانید توالی استقرار یک سرویس خاص را تعیین کنید و راه‌اندازی وظایف و آزمایش‌ها را سازماندهی کنید.

Garden داشبورد زیبایی را در اختیار کاربر قرار می دهد (در حال حاضر در حالت تجربی) که نمودار پروژه را نمایش می دهد: اجزاء، توالی مونتاژ، اجرای وظایف و تست ها، اتصالات و وابستگی های آنها. درست در مرورگر، می‌توانید گزارش‌های تمام اجزای پروژه را مشاهده کنید و بررسی کنید که یک جزء خاص از طریق HTTP چه خروجی می‌دهد (البته اگر منبع ورودی برای آن اعلام شده باشد).

ابزارهایی برای توسعه دهندگان برنامه های در حال اجرا در Kubernetes
پانل برای باغ

این ابزار همچنین دارای حالت بارگذاری مجدد داغ است که به سادگی تغییرات اسکریپت را با کانتینر در خوشه همگام می کند و روند اشکال زدایی برنامه را تا حد زیادی سرعت می بخشد. باغ یک خوبی دارد مستندات و بد نیست مجموعه ای از نمونه ها، به شما امکان می دهد به سرعت به آن عادت کنید و شروع به استفاده از آن کنید. به هر حال، اخیراً منتشر کردیم ترجمه مقاله از نویسندگان آن

نتیجه

البته این لیست از ابزارهای توسعه و رفع اشکال اپلیکیشن ها در Kubernetes محدود به این نیست. ابزارهای بسیار مفید و کاربردی بسیار بیشتری وجود دارد که اگر نه یک مقاله جداگانه، حداقل یک ذکر است. به ما بگویید از چه چیزی استفاده می کنید، با چه مشکلاتی مواجه شدید و چگونه آنها را حل کردید!

PS

در وبلاگ ما نیز بخوانید:

منبع: www.habr.com

اضافه کردن نظر