اگر بهصورت روزانه با کوبرنتیز کار کرده باشید، احتمالا بارها خودتان را در حال اجرای مجموعهای از دستورهای تکراری kubectl دیدهاید. معمولا برای بررسی وضعیت یک سرویس باید ابتدا فهرست پادها را دریافت کنید، نام پاد موردنظر را پیدا یا کپی کنید، لاگ آن را مشاهده کنید، در صورت نیاز خروجی describe را بررسی کنید و گاهی هم فایل YAML منبع را ویرایش کنید. تکرار مداوم این مراحل (بهخصوص در محیطهای عملیاتی)، بهمرور روند بررسی و عیبیابی را کند و آزاردهنده میکند. این مسئله زمانی پررنگتر است که با یک حادثه یا فرایند عیبیابی روبهرو باشید. در چنین شرایطی، جابهجایی مداوم بین دستورهای مختلف برای یافتن علت مشکل میتواند روند عیبیابی را کندتر کرده و زمان رسیدن به پاسخ را افزایش دهد. K9s کوبرنتیز دقیقا برای رفع همین چالش توسعه داده شده است.
K9s ابزاری ترمینالمحور برای کوبرنتیز است که مشاهده، پیمایش و مدیریت اپلیکیشنهای مستقر روی کلاستر را سادهتر میکند. این ابزار با ارائه یک رابط کاربری مبتنی بر ترمینال، فرایند مشاهده (Observe)، پیمایش (Navigate) و مدیریت (Manage) منابع و اپلیکیشنهای کوبرنتیز را سادهتر میکند تا بسیاری از عملیات روزمره، بدون نیاز به اجرای مکرر دستورهای مختلف، از طریق یک محیط یکپارچه انجام شوند. در این آموزش K9s، ابتدا به این سوال پاسخ میدهیم که K9s چیست و سپس به نحوه نصب، رابط کاربری، کارهای عملی با K9s و برخی قابلیتهای پیشرفته آن را میپردازیم.
K9s چیست؟
K9s یک رابط کاربری متنی (Terminal-based UI) برای تعامل با کلاسترهای کوبرنتیز است که بهطور کامل داخل ترمینال اجرا میشود. این ابزار مدیریت کوبرنتیز، با هدف سادهتر کردن مشاهده، پیمایش و مدیریت اپلیکیشنها و منابع مستقر روی کلاستر توسعه یافته است. کد منبع و روند توسعه این ابزار در مخزن رسمی K9s در GitHub در دسترس است.
برخلاف کار با kubectl که معمولا نیازمند اجرای چندین دستور متوالی است، K9s بسیاری از عملیات روزمره را در یک محیط تعاملی در اختیار کاربر قرار میدهد. پس از اجرای برنامه، میتوانید پادها، دیپلویمنتها، سرویسها و سایر منابع کوبرنتیز را بهصورت زنده مشاهده کنید و تنها با استفاده از میانبرهای صفحهکلید، اقداماتی مانند مشاهده لاگها، اجرای describe، ویرایش YAML یا مدیریت منابع را انجام دهید.
یکی دیگر از ویژگیهای مهم K9s این است که تغییرات کلاستر را بهصورت مداوم پایش میکند و متناسب با منابعی که مشاهده میکنید، دستورها و عملیات مرتبط را در اختیار شما قرار میدهد. در نتیجه، مدیریت کوبرنتیز با K9s به شما امکان میدهد هنگام مانیتورینگ یا عیبیابی، وضعیت منابع را تقریبا بهصورت لحظهای دنبال کنید و بدون جابهجایی بین چندین دستور مختلف، عملیات موردنیاز را انجام دهید.
K9s چگونه با kubeconfig ،Kubernetes API و RBAC کار میکند؟
یکی از مزیتهای K9s این است که برای اتصال به کلاستر کوبرنتیز از همان Kubernetes API استفاده میکند که ابزار kubectl هم بر پایه آن کار میکند. به همین دلیل، اگر kubeconfig معتبر باشد و context انتخابشده امکان اتصال به کلاستر را داشته باشد، K9s میتواند از همان پیکربندی برای اتصال استفاده کند.
نکته مهم این است که K9s مجوز یا سیاست دسترسی مستقلی ایجاد نمیکند. این ابزار با استفاده از اطلاعات اتصال و احراز هویت موجود در kubeconfig به Kubernetes API متصل میشود و سطح دسترسی آن را مجوزهای تعریفشده در RBAC (مخفف Role-Based Access Control) کلاستر تعیین میکنند. بنابراین، کاربر یا ServiceAccount مرتبط با context فعال فقط میتواند عملیاتی را در K9s انجام دهد که طبق سیاستهای RBAC اجازه انجام آنها را دارد. برای مثال، اگر مجوز کاربر به مشاهده منابع محدود باشد، امکان ویرایش یا حذف آنها را از طریق K9s نیز نخواهد داشت. به بیان دیگر، K9s محدودیتهای دسترسی کوبرنتیز را دور نمیزند و در همان محدوده مجاز تعریفشده برای هویت فعلی کار میکند.
همچنین هنگام اجرای K9s، میتوانید یک context مشخص از فایل kubeconfig را انتخاب کنید یا برنامه را بهطور مستقیم در یک namespace خاص اجرا کنید.
تفاوت K9s و kubectl چیست؟
K9s و kubectl نقش یکسانی ندارند و K9s را نباید جایگزین کامل kubectl دانست. kubectl ابزار خط فرمان استاندارد کوبرنتیز است، اما K9s یک رابط کاربری متنی (Terminal-based UI) برای انجام سریعتر عملیات روزمره و تعاملی به شمار میآید.
بسیاری از کارهایی که در kubectl نیازمند اجرای چندین دستور هستند، در K9s تنها با میانبرهای صفحهکلید انجام میشوند؛ به همین دلیل برای فعالیتهایی مانند بررسی پادها، مشاهده لاگها، اجرای describe و عیبیابی، سریعتر و سادهتر است.
ازآنجاییکه K9s کاملاً در ترمینال اجرا میشود، میتوان آن را روی Bastion Host یا سرور واسطی اجرا کرد که کاربران از طریق SSH به آن متصل میشوند و از آنجا به کلاستر کوبرنتیز دسترسی دارند. در مقابل، اگر هدف خودکارسازی عملیات، استفاده در اسکریپتها یا ادغام با فرایندهای CI/CD باشد، همچنان kubectl انتخاب اصلی است. جدول زیر مهمترین تفاوتهای این دو ابزار را نشان میدهد:
| معیار | kubectl | K9s |
| نوع ابزار | ابزار خط فرمان (CLI) | رابط کاربری متنی (Terminal-based UI) |
| کاربرد اصلی | اجرای دستورها و Automation | مدیریت و مشاهده تعاملی کلاستر |
| مناسب برای | اسکریپتنویسی، CI/CD و Cron Job | مانیتورینگ، عیبیابی و مدیریت روزمره |
| نحوه کار | اجرای دستورهای متنی | استفاده از میانبرهای صفحهکلید |
پیشنیازهای استفاده از K9s
پیش از نصب K9s، بهتر است مطمئن شوید محیط کاری شما برای اتصال به کلاستر کوبرنتیز آماده است. این ابزار روی سیستمعاملهای لینوکس، macOS و ویندوز اجرا میشود. پیشنیازهای نصب و استفاده از این ابزار عبارتاند از:
- دسترسی به یک کلاستر کوبرنتیز فعال: پیش از هر چیز باید به یک کلاستر کوبرنتیز در حال اجرا دسترسی داشته باشید، زیرا K9s ابزاری برای تعامل با یک کلاستر موجود است، نه راهاندازی کلاستر جدید.
- پیکربندی دسترسی به کلاستر: باید kubeconfig معتبر و امکان اتصال به کلاستر را داشته باشید. در محیط کاری معمول، بهتر است پیش از اجرای K9s از امکان اتصال به کلاستر اطمینان پیدا کنید.
- فایل kubeconfig معتبر: فایل kubeconfig باید بهدرستی تنظیم و به کلاستر موردنظر متصل شده باشد تا K9s بدون نیاز به تنظیمات اضافی بتواند به آن متصل شود.
- دسترسیهای لازم مطابق RBAC: چون سطح دسترسی K9s تابع همان قوانین RBAC تعریفشده برای کاربر است، باید مطمئن شوید مجوزهای لازم برای مشاهده یا مدیریت منابع موردنظرتان از قبل برایتان تعریف شده باشد.
- ترمینال با پشتیبانی از ۲۵۶ رنگ: K9s برای نمایش صحیح رابط کاربری به حالت ۲۵۶ رنگ ترمینال نیاز دارد. اکثر ترمینالهای مدرن بهصورت پیشفرض از این قابلیت پشتیبانی میکنند، اما در سیستمهای مبتنی بر یونیکس مانند لینوکس و macOS، در صورت نیاز میتوانید متغیر محیطی TERM را بهصورت زیر تنظیم کنید:
export TERM=xterm-256color- تنظیم EDITOR یا KUBE_EDITOR: برای ویرایش مستقیم منابع کوبرنتیز از داخل K9s، لازم است یکی از متغیرهای محیطی
EDITORیاKUBE_EDITORروی ویرایشگر دلخواه شما تنظیم شده باشد، مثلاً:
export KUBE_EDITOR=vimروشهای نصب K9s روی لینوکس، macOS و ویندوز
K9s روی سیستمعاملهای لینوکس، macOS و ویندوز در دسترس است. میتوانید علاوه بر استفاده از Package Manager، فایلهای Binary رسمی را هم از صفحه انتشار (Release) پروژه دریافت و نصب کنید. همچنین در صورت نیاز، امکان کامپایل برنامه از سورس هم وجود دارد.
نصب K9s روی macOS
در مستندات رسمی، دو روش برای نصب K9s روی مک معرفی شده است:
برای نصب با Homebrew:
brew install derailed/k9s/k9sبرای نصب با MacPorts:
sudo port install k9sنصب K9s روی لینوکس
برای نصب K9s روی لینوکس، مستندات رسمی K9s روشهای زیر را پیشنهاد میکنند:
برای نصب با LinuxBrew:
brew install derailed/k9s/k9sبرای نصب با Pacman:
pacman -S k9sنصب K9s روی ویندوز
برای نصب K9s روی ویندوز مستندات رسمی K9s روشهای زیر را پیشنهاد میکنند:
برای نصب با Scoop:
scoop install k9sنصب با Chocolatey:
choco install k9sنصب K9s با Binary رسمی یا ساخت از روی سورس
اگر نمیخواهید از Package Manager استفاده کنید، میتوانید فایل اجرایی متناسب با سیستمعامل خود را از صفحه انتشارهای رسمی K9s در GitHub دریافت کنید. فایلهای رسمی K9s برای لینوکس، macOS و ویندوز در این صفحه در دسترساند. همچنین، اگر قصد دارید K9s را از کد منبع بسازید، طبق مستندات نصب مورداستفاده در این مقاله باید Go نسخه ۱.۱۴ یا بالاتر روی سیستم نصب باشد. در این روش، ابتدا مخزن پروژه را Clone و سپس برنامه را با دستور زیر Build و اجرا کنید:
make build && ./execs/k9sاجرای اولیه K9s و گزینههای مهم CLI
پس از اینکه فرایند نصب را انجام دادید، کافی است دستور k9s را اجرا کنید تا محیط تعاملی برنامه باز شود. در بخش بالای صفحه، اطلاعاتی مانند نام کلاستر، Context فعلی، نسخه کوبرنتیز و میزان مصرف CPU و Memory نمایش داده میشود. همچنین در بخش میانی، فهرست منابع کوبرنتیز قرار دارد و در پایین صفحه، مسیر پیمایش (Breadcrumb) و پیامهای وضعیت دیده میشوند. هر زمان کلید : یا / را فشار دهید، نوار فرمان برای اجرای دستورها یا جستجو ظاهر میشود.
نکته کاربردی دیگر این است که کنار نام هر Namespace، عددی نمایش داده میشود. در اینجا عدد ۰ نمایانگر همه Namespaceها است و اعداد دیگر بهترتیب به Namespaceهایی اختصاص پیدا میکنند که در همان نشست کاری بازدید کردهاید.
مستندات رسمی K9s چند گزینه مهم برای اجرای برنامه معرفی کرده است که در ادامه با آنها آشنا میشوید.
مشاهده راهنما و اطلاعات برنامه
برای مشاهده همه گزینههای خط فرمان میتوانید از دستور زیر استفاده کنید:
k9s helpاگر بخواهید اطلاعات Runtime برنامه، مانند مسیر فایلهای پیکربندی و لاگها را مشاهده کنید، دستور زیر کاربرد دارد:
k9s infoاجرای K9s در یک Namespace مشخص
اگر فقط قصد کار با یک Namespace خاص را دارید، میتوانید K9s را بهطور مستقیم در همان Namespace اجرا کنید:
k9s -n <namespace-name>اجرای K9s با گزینه -n باعث میشود برنامه کار را در namespace مشخصشده آغاز کند. این روش در کلاسترهای شلوغ، دسترسی به منابع namespace موردنظر را سادهتر میکند.
اجرای مستقیم در نمای پاد
برای اینکه K9s پس از اجرا بهطور مستقیم نمای پادها را نمایش دهد، از دستور زیر استفاده کنید:
k9s -c podاجرای K9s با Context دلخواه
اگر فایل kubeconfig شما شامل چند Context باشد، هنگام اجرای K9s، میتوانید Context موردنظر را مشخص کنید:
k9s --context <context-name>این قابلیت زمانی مفید است که بین چند کلاستر کوبرنتیز جابهجا میشوید و نمیخواهید Context پیشفرض را تغییر دهید.
اجرای K9s در حالت فقطخواندنی
برای جلوگیری از هرگونه تغییر ناخواسته روی منابع، میتوانید K9s را با گزینه --readonly اجرا کنید:
k9s --readonlyدر این حالت، تمام دستورهای ویرایش، حذف و سایر عملیات تغییردهنده غیرفعال میشوند.
تغییر Context و Namespace در زمان اجرا
K9s علاوه بر گزینههای خط فرمان، امکان جابهجایی بین Contextها و Namespaceها را از داخل محیط برنامه هم فراهم میکند. برای مشاهده و تغییر Context فعال، دستور زیر را وارد کنید:
:ctxیا مستقیما به یک Context مشخص بروید:
:ctx <context-name>برای تغییر Namespace هم کافی است بنویسید:
:nsهمچنین میتوانید با ساختار :pod <namespace-name>، پادهای یک Namespace مشخص را مشاهده کنید. برای نمایش پادها در یک Context دیگر نیز از ساختار :pod @<context-name> استفاده کنید. اجرای دستور دوم، Context فعال K9s را نیز به Context مشخصشده تغییر میدهد. توجه داشته باشید که این دستور دوم، Context فعلی شما را هم تغییر میدهد.
💡 کوبرنتیز مدیریتشده همروش، راهی مطمئن برای رشد بیوقفه
راهکار کوبرنتیز مدیریت شده، بر بستر ابر اختصاصی یا به صورت On-Premises
✅ کاهش هزینههای عملیاتی
✅ احراز هویت یکپارچه با اتصال به SSO سازمانی
✅ قابل استقرار روی سرورهای on-premises
آشنایی با رابط کاربری K9s
همانطور که در بخش قبل دیدیم، صفحه اصلی K9s شامل بخش بالایی (نام کلاستر، Context، نسخه کوبرنتیز و مصرف CPU/Memory)، جدول منابع در وسط و نوار پیمایش در پایین صفحه است. تصویر زیر نمونهای از این چیدمان را در نمای پادها نشان میدهد:

نکته مهم درباره این رابط این است که میانبرهای نمایشدادهشده در بالای صفحه، بسته به نوع منبعی که مشاهده میکنید تغییر میکنند. برای مثال، کلید s روی پادها بهمعنای Shell است، اما همین کلید روی دیپلویمنتها بهمعنای Scale خواهد بود. به همین دلیل نیازی نیست این میانبرها را از قبل حفظ کنید، چون K9s همیشه میانبرهای مرتبط با نمای فعلی را نمایش میدهد.
دو میانبر کاربردی که بهتر است به خاطر بسپارید، ? و Ctrl+a هستند. کلید ? در هر بخشی از K9s راهنما را باز میکند و Ctrl+a فهرست تمام aliasهای منابع شناختهشده توسط K9s را نشان میدهد. اگر نام کوتاه یا alias یک منبع را نمیدانید، میتوانید با فشردن Ctrl+a فهرست aliasهای موجود را مشاهده کنید.
برای جابهجایی در محیط K9s هم میتوانید از کلیدهای جهتدار یا j/k (مشابه Vim) استفاده کنید. علاوه بر اینها، با فشردن Enter وارد یک منبع میشوید و با Esc به نمای قبلی بازمیگردید.
مشاهده و جابهجایی بین منابع کوبرنتیز در K9s
یکی از مهمترین قابلیتهای K9s، دسترسی سریع به منابع مختلف کوبرنتیز از طریق میانبرهای متنی (Resource Alias) است. بهجای اجرای مداوم دستورهای kubectl، کافی است کلید : را فشار دهید و نام منبع موردنظر را وارد کنید تا همان نما در ترمینال باز شود. از پرکاربردترین میانبرهای K9s میتوان به موارد زیر اشاره کرد:
| میانبر | کاربرد |
:pod | نمایش Podها |
:deploy | نمایش Deploymentها |
:svc | نمایش Serviceها |
:ns | نمایش Namespaceها |
:node | نمایش Nodeها |
:pvc | نمایش PersistentVolumeClaimها |
:cm | نمایش ConfigMapها |
:secret | نمایش Secretها |
:ing | نمایش Ingressها |
اگر بخواهید فقط منابع یک Namespace مشخص را مشاهده کنید، میتوانید هنگام ورود به نمای پاد، نام Namespace را هم مشخص کنید:
:pod kube-systemهمچنین اگر بخواهید پادهای یک Context دیگر را ببینید، میتوانید از دستور زیر استفاده کنید. این دستور، Context فعال را هم تغییر میدهد.
:pod @<context-name>جابهجایی بین Context و Namespace
در محیطهایی که چند کلاستر یا Namespace در اختیار دارید، جابهجایی سریع میان آنها اهمیت زیادی دارد. K9s این کار را با چند دستور ساده امکانپذیر میکند:
:ctxبرای مشاهده و تغییر Context:ctx <context-name>برای رفتن مستقیم به یک Context مشخص:nsبرای مشاهده و تغییر Namespace
همچنین با فشردن کلید 0 میتوانید منابع موجود در تمام Namespaceها را بهصورت یکجا مشاهده کنید. این گزینه برای بررسی وضعیت کلی کلاستر بسیار کاربردی است.
جستوجو و فیلتر کردن منابع در K9s
در کلاسترهای کوبرنتیز که تعداد زیادی پاد، دیپلویمنت یا سایر منابع وجود دارد، پیدا کردن یک منبع مشخص میتواند زمانبر باشد. K9s با ارائه قابلیتهای متنوع جستوجو و فیلتر، یافتن منابع را در نمای فعلی سادهتر میکند.
برای فیلتر کردن منابع، کافی است کلید / را فشار دهید و عبارت موردنظر را وارد کنید. این فیلتر بهصورت لحظهای روی نمای فعلی اعمال میشود و تنها منابع منطبق با عبارت جستوجو را نمایش میدهد.
یکی از قابلیتهای کاربردی K9s، پشتیبانی از عبارتهای منظم (Regular Expression یا Regex) است؛ بنابراین میتوانید چند الگو را بهطور همزمان جستوجو کنید. برای مثال، دستور زیر تمام منابعی را که نام آنها با یکی از دو عبارت مشخصشده مطابقت داشته باشد، نمایش میدهد:
/fred|bleeK9s علاوه بر جستوجوی متنی، روشهای دیگری هم برای فیلتر کردن منابع در اختیار شما قرار میدهد. در جدول زیر میتوانید این روشها را ببینید:
| روش | کاربرد |
/text | فیلتر منابع بر اساس متن |
/-l app=nginx | فیلتر منابع بر اساس Label |
/-f text | جستوجوی فازی (Fuzzy Search) |
/!text | فیلتر معکوس و نمایش منابعی که با عبارت واردشده مطابقت ندارند |
اگر بخواهید همه منابع، بهجز مواردی که شامل عبارت error هستند، نمایش داده شوند، میتوانید از دستور زیر استفاده کنید:
/!errorهمچنین قابلیت فیلتر تنها به فهرست منابع محدود نمیشود. هنگام مشاهده لاگ پادها یا کانتینرها هم میتوانید با وارد کردن عباراتی مانند /error یا /timeout، فقط خطوط مرتبط با خطاها یا وقفههای زمانی را نمایش دهید.
کارهای عملی با K9s؛ Logs ،Describe ،YAML ،Shell و Port Forward
K9s علاوه بر نمایش منابع کوبرنتیز، مجموعهای از میانبرهای کاربردی را برای انجام عملیات روزمره در اختیار کاربران قرار میدهد. این میانبرها باعث میشوند بدون خروج از محیط ترمینال، بتوانید وضعیت منابع را بررسی کنید یا اقدامات مدیریتی موردنیاز را انجام دهید. از مهمترین میانبرهای K9s میتوان به موارد زیر اشاره کرد:
| کلید | کاربرد |
d | نمایش اطلاعات کامل منبع (Describe) |
y | مشاهده فایل YAML منبع |
e | ویرایش منبع با ویرایشگر تنظیمشده |
l | مشاهده لاگهای پاد یا کانتینر |
s | اجرای Shell روی پاد یا Scale کردن دیپلویمنت |
Shift+F | ایجاد Port Forward |
Ctrl+d | حذف منبع با دریافت تأیید |
Ctrl+k | حذف فوری منبع بدون دریافت تأیید |
Ctrl+s | ذخیره نمای فعلی یا Logها روی دیسک |
اگر پاد چند کانتینر داشته باشد، ابتدا میتوانید کانتینر موردنظر را انتخاب و سپس با کلید l لاگ آن را مشاهده کنید. همچنین در شرایطی که یک کانتینر دچار Crash شده و پس از راهاندازی مجدد، لاگ فعلی اطلاعات کافی در اختیار شما قرار نمیدهد، میتوانید با استفاده از Shift+L لاگ کانتینر قبلی را مشاهده و علت بروز خطا را بررسی کنید.
نمونهای از عیبیابی یک Deployment
فرض کنید یکی از Deploymentهای کلاستر با مشکل مواجه شده است. در K9s میتوان مراحل عیبیابی را بهترتیب زیر انجام داد:
- با دستور
:deployبه نمای دیپلویمنتها بروید و دیپلویمنت موردنظر را انتخاب کنید. - کلید
dرا فشار دهید و بخش Events را بررسی کنید تا علت اولیه خطا مشخص شود. - با فشردن Enter، پادهای مربوط به آن دیپلویمنت را مشاهده و پادی را که در وضعیت Running نیست، انتخاب کنید.
- با کلید
l، لاگ پاد را بررسی کنید تا خطاهایی مانند OOMKilled، نبود متغیرهای محیطی یا خطاهای ارتباطی را شناسایی کنید. - در صورت نیاز، با کلید y فایل YAML منبع را مشاهده و تنظیمات آن را بررسی کنید.
- اگر مشکل مشخص شد، با کلید
eمنبع را ویرایش کرده و تغییرات را ذخیره کنید. K9s این تغییر را اعمال میکند و میتوانید ریاستارت شدن پاد را مشاهده کنید. - به نمای دیپلویمنت بازگردید و مطمئن شوید Replicaها به وضعیت سالم بازگشتهاند.
مانیتورینگ، قابلیتهای پیشرفته، Pluginها، نکات Production و محدودیتها
ابزار K9s در کنار عملیات روزمره مشاهده و مدیریت منابع، مجموعهای از قابلیتهای تکمیلی هم در اختیار کاربران قرار میدهد که از پایش لحظهای وضعیت کلاستر تا امکان تعریف Plugin اختصاصی را پوشش میدهند. در ادامه، این قابلیتها را به همراه نکاتی برای استفاده در محیط Production و محدودیتهای K9s بررسی میکنیم.
مشاهده زنده وضعیت منابع و متریکها
K9s فعالیت منابع کلاستر و متریکهای مرتبط با پادها، کانتینرها و نودها را بهصورت زنده نمایش میدهد. در استفاده روزمره، یکی از اولین کارهایی که بسیاری از مدیران کلاستر انجام میدهند، بررسی سلامت کلی محیط است. برای این منظور میتوان با دستور :pulses نمایی خلاصه از وضعیت کلاستر مشاهده کرد. این نما تعداد دیپلویمنتها، پادها، StatefulSetها، DaemonSetها و جابها را نمایش میدهد و مشخص میکند چه تعداد از آنها با مشکل مواجه هستند.
پس از آن، معمولا وضعیت نودها با دستور :node بررسی میشود تا مشخص شود که آیا همه نودها در وضعیت Ready قرار دارند یا خیر. همچنین وجود وضعیتهایی مانند MemoryPressure یا DiskPressure میتواند نشانه بروز مشکل در اجرای Workloadها باشد.
در ادامه هم با ورود به نمای پادها و فشردن کلید 0 برای نمایش همه Namespaceها، میتوان ستون STATUS را بررسی کرد و پادهایی را که در وضعیتهایی مانند CrashLoopBackOff ،Error ،Pending یا ImagePullBackOff قرار دارند، بهسرعت شناسایی کرد.
نکته مهم این است که K9s برای مشاهده و بررسی تعاملی وضعیت فعلی کلاستر کاربرد دارد؛ اما برای ذخیرهسازی و تحلیل تاریخچه متریکها، ساخت داشبورد و هشداردهی مستمر طراحی نشده است. برای این کاربردها باید از ابزارهای تخصصی مانند Prometheus و Grafana استفاده کرد.
Pulses ،XRay و RBAC
K9s چند قابلیت پیشرفته برای تحلیل وضعیت کلاستر هم در اختیار کاربران قرار میدهد. قابلیت Pulses یک داشبورد سطح بالا از وضعیت کلی کلاستر ارائه میکند و برای بررسی سریع سلامت منابع بسیار کاربردی است. همانطور که در بخش قبل اشاره شد، اجرای دستور :pulses دید مناسبی از وضعیت دیپلویمنتها، پادها و سایر منابع در اختیار مدیر کلاستر قرار میدهد.
قابلیت XRay برای مشاهده وابستگی میان منابع کوبرنتیز طراحی شده است. برای مثال، با اجرای دستور زیر میتوان ساختار یک دیپلویمنت را بهصورت درختی مشاهده کرد:
:xray deployدر این نما، ارتباط دیپلویمنت با ReplicaSetها، پادها و در نهایت کانتینرهای مرتبط، بهصورت درختی نمایش داده میشود. این قابلیت برای منابع دیگری مانند Service ،StatefulSet ،DaemonSet و ReplicaSet هم قابل استفاده است و هنگام عیبیابی وابستگیها، بسیار مفید خواهد بود.
Popeye در K9s
با اجرای دستور :popeye میتوانید بررسی کلاستر را براساس مجموعهای از Best Practiceها آغاز کنید:
:popeyeاین قابلیت مواردی مانند نبود Probeهای لازم، مشکلات ایمیجها، تخصیص نامناسب منابع و پیکربندی نادرست RBAC را بررسی و نتیجه را با وضعیتهایی مانند OK ،Info ،Warn یا Error نمایش میدهد.
Pluginها در K9s
یکی از قابلیتهای توسعهپذیر K9s، پشتیبانی از Pluginهاست. با استفاده از Plugin میتوانید فرمانهای اختصاصی خود را تعریف کنید و آنها را از طریق میانبرهای صفحهکلید روی منابع کوبرنتیز اجرا کنید. K9s برای پیدا کردن Pluginها ابتدا فایل زیر را بررسی میکند:
$XDG_CONFIG_HOME/k9s/plugins.yamlعلاوه بر این فایل، K9s پوشههای زیر را نیز برای یافتن فایلهای Plugin بررسی میکند:
$XDG_CONFIG_HOME/k9s/plugins
$XDG_DATA_HOME/k9s/plugins
$XDG_DATA_DIRS/k9s/pluginsامکان تعریف تنظیمات اختصاصی Plugin برای هر Context نیز وجود دارد. فایل مربوط به این تنظیمات در ساختار زیر قرار میگیرد:
$XDG_DATA_HOME/k9s/clusters/<cluster-name>/<context-name>/plugins.yamlدر این مسیر، <cluster-name> و <context-name> مقادیر جایگزینشدنی هستند و باید با نام کلاستر و Context موردنظر جایگزین شوند. هر Plugin میتواند شامل میانبر اجرا، توضیح، دامنه منابع، فرمان اجرایی و آرگومانهای موردنیاز باشد. گزینه scopes مشخص میکند که Plugin در نمای کدام منابع فعال باشد. برای مثال، اگر مقدار آن روی pods تنظیم شود، میانبر Plugin در نمای پادها در دسترس خواهد بود.
نمونه زیر یک Plugin برای اجرای فرمان kubectl debug روی پاد انتخابشده تعریف میکند:
plugins:
debug:
shortCut: Shift-D
description: Debug pod
scopes:
- pods
command: kubectl
background: false
args:
- debug
- -it
- $NAME
- -n
- $NAMESPACE
- --image=busyboxدر این مثال، با فشردن میانبر Shift+D در نمای پادها، فرمان تعریفشده برای Pod انتخابشده اجرا میشود. متغیر $NAME نام منبع انتخابشده و $NAMESPACE نام Namespace آن را در اختیار فرمان قرار میدهد. K9s متغیرهای دیگری مانند $CONTEXT و $CLUSTER را نیز برای استفاده در آرگومانهای Plugin ارائه میکند. به این ترتیب، میتوان فرمانهایی تعریف کرد که بر اساس منبع انتخابشده، Namespace ،Context یا کلاستر فعال اجرا شوند.
نکات استفاده از K9s در محیط Production
اگر قصد استفاده از K9s در محیطهای عملیاتی را دارید، رعایت چند نکته میتواند احتمال بروز خطا را کاهش دهد.
مهمترین توصیه، اجرای برنامه در حالت فقطخواندنی است:
k9s --readonlyدر این حالت، تمام عملیاتهای تغییردهنده مانند Edit ،Delete و Kill غیرفعال میشوند و تنها امکان مشاهده منابع وجود دارد. همچنین هنگام حذف منابع باید به تفاوت میان دو میانبر توجه داشت. کلید Ctrl+d قبل از حذف، از کاربر تایید میگیرد، اما Ctrl+k منبع را بدون نمایش پیام تأیید حذف میکند؛ بنابراین در محیط Production استفاده از Ctrl+d گزینه ایمنتری است.
ازآنجاییکه K9s کاملاً در ترمینال اجرا میشود، میتوانید آن را از طریق SSH روی Bastion Host یا Jump Server نیز اجرا کنید. این موضوع در بسیاری از زیرساختهای سازمانی مزیت مهمی محسوب میشود.
در کلاسترهای بزرگ که تعداد زیادی پاد در حال اجراست، میتوانید مقدار refreshRate را در فایل تنظیمات افزایش دهید تا فاصله زمانی میان بهروزرسانیها بیشتر شود. همچنین میتوانید K9s را با گزینه -n در Namespace موردنظر اجرا کنید:
k9s -n <namespace-name>در این دستور، <namespace-name> باید با نام Namespace موردنظر جایگزین شود. شروع کار در یک Namespace مشخص، دسترسی به منابع همان Namespace را در کلاسترهای شلوغ سادهتر میکند.
در نهایت، اگر اعضای تیم بهصورت مشترک از K9s استفاده میکنند، میتوانید فایلهای تنظیمات، میانبرها، Pluginها و Skinهای سفارشی را در یک مخزن Git نگهداری کنید تا امکان بهاشتراکگذاری و هماهنگسازی این تنظیمات میان اعضای تیم فراهم شود.
محدودیتهای K9s
K9s با وجود قابلیتهای متعدد، محدودیتهایی نیز دارد که بهتر است پیش از استفاده از این ابزار از آنها آگاه باشید. مهمترین محدودیت این است که K9s برای Automation طراحی نشده است. خروجی آن قابل استفاده در Scriptها نیست و نمیتوان از آن در Pipelineهای CI/CD یا Cron Jobها استفاده کرد. برای این سناریوها همچنان kubectl ابزار اصلی به شمار میآید.
همچنین ناوبری K9s تا حدی از Vim الهام گرفته است؛ بنابراین اگر قبلا با کلیدهایی مانند k ،j یا فرمانهای مبتنی بر : کار نکرده باشید، ممکن است در روزهای نخست برای یادگیری نحوه کار با آن به کمی زمان نیاز داشته باشید. از دیگر محدودیتها میتوان به موارد زیر اشاره کرد:
- امکان مشاهده همزمان دو کلاستر در یک پنجره وجود ندارد و برای مقایسه آنها باید دو نمونه جداگانه از K9s را اجرا کنید.
- Port Forwardهایی که در K9s ایجاد میشوند، پس از بستهشدن برنامه متوقف میشوند. برای اتصالهای پایدارتر باید از روش دیگری مانند
kubectl port-forwardاستفاده کنید. - K9s برای دنبالکردن همزمان لاگ چند پاد یا کانتینر طراحی نشده است و در هر نوبت، لاگ یک کانتینر را نمایش میدهد.
- K9s قابلیت نگهداری History یا ارسال Alert ندارد و اگر بخواهید اطلاعاتی مانند لاگها یا خروجی Viewها را نگه دارید، باید قبل از خروج با
Ctrl+sآنها را ذخیره کنید. - اگرچه Pluginهای آمادهای برای K9s وجود دارد، اما تعداد آنها محدود است و با وجود Pluginهای آماده، ممکن است برای پوشش نیازهای اختصاصی تیم به تعریف Plugin سفارشی نیاز داشته باشید.
جمعبندی
در این راهنمای K9s توضیح دادیم که این ابزار چگونه مشاهده، پیمایش و مدیریت تعاملی منابع کوبرنتیز را از داخل ترمینال سادهتر میکند. K9s با دنبالکردن مداوم تغییرات کلاستر، انجام کارهای روزمرهای مانند بررسی پادها، مشاهده لاگها، اجرای describe و جابهجایی میان Namespaceها را سریعتر میکند.
بااینحال، K9s جایگزین کامل kubectl نیست. برای اسکریپتنویسی، فرایندهای CI/CD و خودکارسازی عملیات همچنان باید از ابزارهایی مانند kubectl استفاده کنید. K9s همچنین قابلیت نگهداری تاریخچه دادهها یا ارسال هشدار را فراهم نمیکند.
استفاده از K9s در محیطهای Production باید با احتیاط همراه باشد. اجرای برنامه در حالت readonly، توجه به مجوزهای تعریفشده در RBAC و دقت در عملیات مخربی مانند Delete یا Kill میتواند احتمال ایجاد تغییرات ناخواسته در کلاستر را کاهش دهد.