به گزارش از وبسایت cncf
kpt چیست؟ مستندات kpt آن را اینگونه معرفی میکنند: «یک زنجیره ابزار بستهمحور که تجربه نگارش، اتوماسیون و تحویل پیکربندی WYSIWYG را امکانپذیر میسازد.» به بیان سادهتر، kpt روی بستههایی از فایلهای مدل منبع Kubernetes (KRM) کار میکند؛ مانیفستهای YAML اعلامی که وضعیت مطلوب منابع در یک خوشه Kubernetes (یا افزونههای اپراتور) را تعریف میکنند. این بستهها میتوانند یک پوشه محلی، یک آرشیو فشرده یا معمولاً محتوای یک مخزن git باشند، که در سناریوهای GitOps رایج است. 📦
toolchain کpt عمدتاً یک CLI است، اما مجموعهای از ابزارها—از جمله validators و mutators—را فراهم میکند که میتوانند داخل یک خط لوله kpt برای اعتبارسنجی یا اصلاح محتویات بسته اجرا شوند. عبارت WYSIWYG در اینجا یعنی آنچه در فایلهای بسته kpt دارید دقیقاً همان منابعی است که در خوشه اعمال میشود؛ تغییر نهایی خارج از مسیر بسته رخ نمیدهد و وابستگی به الگوهای خارجی یا متامدلها ندارد.
kpt از چرخه کامل مدیریت بستههای KRM پشتیبانی میکند: ایجاد بسته (bootstrap) با محتوای اولیه و قالبها، خطوط لوله برای خودکارسازی تخصصیسازی قالبها به پارامترهای سایت خاص در صدها سایت ممکن، فرایندهای بررسی و اعتبارسنجی قبل از اعمال در محیطهای زنده و در نهایت استقرار و پایش وضعیت تطابق در زمان اجرا. در عین حال kpt ماژولار است و میتواند در هر زنجیره ابزار Kubernetes موجود برای ارائه برخی یا همه قابلیتها ادغام شود. 🔧
چرا kpt برای مدیریت پلتفرمهای Kubernetes و زیرساختهای مبتنی بر KRM مفید است؟ دلیل اصلی این است که kpt برای دستکاری ساختارهای بومی Kubernetes طراحی شده است—فایلهای KRM که ابزارهای بومی Kubernetes را قادر میسازند تا کلاسترها را مستقر کنند، بار کاری را ارائه دهند و پیکربندی را مدیریت کنند. اگر چیزی با KRM قابل توصیف باشد، میتوان آن را با kpt بستهبندی و خودکار کرد.
رویکرد «configuration as data» (پیکربندی بهعنوان داده) به جای «configuration as code» مزایایی دارد: قابلیت حسابرسی (auditability) چون دادهها قابل مقایسه و بررسی بدون اجرا هستند؛ نیت در دادهها نگهداری میشود که امکان استدلال مستقل را فراهم میآورد؛ و ترکیبپذیری (composability) چون ابزارهای مختلف میتوانند مدلهای داده یکسان را بخوانند، تبدیل و اعتبارسنجی کنند. این جداسازی واضح بین فایلهای داده (KRM) و منطق تجاری (توابع KRM) عوارض جانبی و پیچیدگی را کاهش میدهد.
چرا به kpt نیاز داریم؟ چند نکته برجسته وجود دارد: پارادایم بهروزرسانی «درجا» kpt با ابزارهایی مانند Kustomize متفاوت است. در kpt امکان بررسی و تأیید پیکربندی نهایی قبل از اعمال وجود دارد که فرایند عیبیابی و رفع خطا را سادهتر میکند—همان ویژگی WYSIWYG. همچنین تفکیک پیکربندی بهعنوان داده از منطق تغییرات، نمایانگر یک جداسازی نگرانیهاست که ریسک عملیاتی را کاهش میدهد. kpt سعی نمیکند همهچیز را حل کند؛ این یک ابزار نسبتاً ساده با مجموعهای از قابلیتهای کلیدی است که از یک کتابخانه توابع برای نیازهای رایج پشتیبانی میکند و به کاربران اجازه میدهد منطق کسبوکار خود را بیاورند. kpt با سایر ابزارهای GitOps مانند ArgoCD، Flux، Helm و Porch بهخوبی همزیستی میکند.
موارد استفاده: مخزن نمونههای kpt شامل مثالهایی مانند WordPress و nginx است و مخزن kpt-samples نمونهای با پروژۀ Headlamp دارد. نمونههای پیچیدهتر در پروژه Nephio مشاهده میشوند، جایی که kpt بخش مهمی از زنجیره ابزار انتها به انتها برای تعریف و تخصصیسازی استقرار RAN منبع باز و شبکههای اصلی روی Kubernetes است. تیم توسعه امیدوار است تا تابستان نمونه عملی یک سناریوی چندسایتی و چندسرویسی با استفاده از kpt و بارکاریهای معمول IT منتشر کند—پس این فضا را دنبال کنید و اگر از kpt استفاده میکنید، تجربیاتتان را به اشتراک بگذارید! 🤝
وضعیت فعلی و برنامهها: پروژه kpt اخیراً بهعنوان یک پروژه sandbox در CNCF قرار گرفته است و هدف تیم رشد جامعه و افزایش استفاده است. برنامههای آتی شامل بازطراحی خطوط لوله، بهبود عملکرد، امکان مراحل اختیاری، فعالسازی اتصالهای خارجی و ارتقای مستندات است تا خوانایی و همسویی با بهترین شیوههای صنعت بهتر شود. ویژگیهای پرخواسته مانند مدیریت اسرار (secret management)، پشتیبانی چندخوشهای و پشتیبانی از فرمان (CLI improvements) در دستور کار است و هدف نهایی تثبیت APIهای kpt برای انتشار نسخه 1 است تا ثبات برای کاربران فراهم شود. 🔐
به ما بپیوندید: جلسات پروژه kpt هر هفته، چهارشنبهها ساعت 2 بعد از ظهر CET برگزار میشود. همکاری در مسائل و بحثها از طریق GitHub انجام میشود و گفتگوهای موقتی در کانال kpt در Slack Kubernetes جریان دارد. اگر مایل به یادگیری بیشتر، پیشنهاد قابلیت جدید یا مشارکت در توسعه هستید، خوشحال میشویم که با شما در ارتباط باشیم. ✉️