kubit-cli چیست؟ ابزار خط فرمان مدیریت پک
kubit-cli ابزار خط فرمان کوبیت برای بررسی خروجی چارت هلم، کار تخصصی با پک، والت و برخی عملیات پک اپراتور است. نام فایل اجرایی و دستور اصلی این ابزار kubit است. برای آشنایی با تفاوت چارت، انتشار و پک، هلم و چارت هلم در کوبرنتیز را بخوانید.
این ابزار جای kubectl یا پنل کوبچی را نمیگیرد. از آن برای دیدن خروجی رندرشده هلم، مقایسه تغییرات، مهاجرت مانیفست پک، دریافت خروجیهای پک و رمزنگاری داده حساس استفاده کنید.
پیشنیازها
پیش از اجرا باید این موارد آماده باشند:
- یک فایل
kubeconfigمعتبر یا متغیر محیطیKUBECONFIG؛ - دسترسی شبکه به API کلاستر؛
- مجوز انجام عملیات مورد نظر در فضای نام؛
- نصب و فعالبودن پک اپراتور و سرویس API آن برای دستورهای راه دور.
kubit-cli همان هویت و زمینهای را استفاده میکند که در kubeconfig انتخاب شده است. پیش از یک عملیات تغییردهنده، زمینه و فضای نام را صریح مشخص کنید تا دستور روی کلاستر یا پروژه اشتباه اجرا نشود.
نصب ابزار
آخرین فایل اجرایی منتشرشده را دریافت و قابل اجرا کنید:
curl -fL https://kubit.cloud/download/kubit -o kubit
chmod +x kubit
sudo install -m 0755 kubit /usr/local/bin/kubit
پس از نصب، نسخه و راهنما را بررسی کنید:
kubit --version
kubit --help
اگر اجازه نوشتن در /usr/local/bin ندارید، فایل را در یک مسیر شخصی موجود در PATH قرار دهید. برای دریافت نسخه سازمانی یا بررسی اصالت فایل اجرایی، از پشتیبانی کوبیت نشانی و روش تأیید مورد قبول سازمان خود را بگیرید.
اتصال به کلاستر
گزینههای اتصال را میتوانید روی دستور اصلی یا دستور فرزند بنویسید:
| گزینه | کاربرد |
|---|---|
-n, --namespace NS | فضای نام عملیات |
-x, --context CTX | زمینه انتخابی در kubeconfig |
--kubeconfig PATH | مسیر فایل kubeconfig |
--as USERNAME | جعل هویت کاربر، در صورت داشتن مجوز |
--as-group GROUP | جعل هویت گروه؛ قابل تکرار |
-d, --debug | نمایش جزئیات خطا برای عیبیابی |
برای نمونه:
kubit --context production -n my-project helm-template my-app
دستورهای اصلی
فرمانهای مناسب کاربر نهایی در چهار گروه قرار میگیرند:
| دستور | کاربرد |
|---|---|
completion | تولید تکمیل خودکار شل |
helm-values | نمایش values نهایی و رندرشدهٔ یک Pack |
helm-template | ساخت مانیفستهای Helm بدون اعمال آنها |
helm-diff | مقایسه خروجی مورد انتظار با Helm Release موجود |
helm-export | خروجیگرفتن از Pack بهصورت chart، values و راهنمای نصب |
helm-upgrade | اجرای مستقیم Helm upgrade از دستگاه کاربر |
pack exports | خواندن خروجیهای تعریفشده در pack-metadata.yaml |
pack migrate | اجرای migrationهای تعریف Pack |
pack force-upgrade | اجرای دوبارهٔ ارتقای Pack از طریق اپراتور |
pack rollout-restart | راهاندازی دوباره workloadهای Pack |
vault create | ساخت کلید Vault |
vault list | فهرست کلیدهای Vault |
vault encrypt | رمزنگاری متن |
vault decrypt | رمزگشایی متن |
vault gen-password | تولید رمز تصادفی و رمزنگاری اختیاری آن |
گروه operator شامل قابلیتهای مدیریتی و آزمایشی مانند پاککردن cache، بازخوانی repositoryها و تغییر سطح log اپراتور است. این فرمانها برای مدیر کلاستر هستند و در جریان معمول کاربر نهایی استفاده نمیشوند.
برای مشاهده گزینههای دقیق نسخه نصبشده، --help را پس از همان مسیر فرمان اجرا کنید:
kubit --help
kubit helm-diff --help
kubit pack migrate --help
kubit vault encrypt --help
انتخاب Pack ورودی و محل خروجی
بیشتر فرمانهای Helm و Pack یکی از این دو ورودی را میپذیرند:
- نام Pack موجود در کلاستر؛ در این حالت
-n, --namespaceنیز لازم است. - فایل محلی با
-f, --packfile؛ فضای نام میتواند داخل مانیفست یا با--namespaceتعیین شود.
نام Pack و --packfile را همزمان نفرستید. برای نمونه، دو فرمان زیر یک نوع خروجی را از دو ورودی متفاوت میسازند:
kubit -n my-project helm-template redis
kubit helm-template --packfile redis.pack.yaml
گزینههای مشترک خروجی و توسعه عبارتاند از:
| گزینه | کاربرد |
|---|---|
-o, --outfile PATH | نوشتن خروجی متنی در فایل بهجای stdout |
-o, --outdir DIR | تعیین پوشه خروجی برای helm-export؛ پوشه باید وجود داشته باشد |
-c, --local-chartpath DIR | جایگزینی موقت chart معرفیشده در Pack با chart محلی برای توسعه |
مشاهده values نهایی Helm
فرمان helm-values متغیرها، templateها و values مؤثر Pack را رندر میکند و YAML نهایی قابل ارسال به Helm را نشان میدهد:
kubit -n my-project helm-values redis
kubit helm-values -f redis.pack.yaml -o redis.values.yaml
این خروجی برای عیبیابی تفاوت مقدارهای سازمان، پروژه و Pack مناسب است. دادهٔ رندرشده ممکن است شامل مقدار حساس باشد؛ فایل خروجی را پیش از ذخیره در git یا ارسال برای دیگران بررسی کنید.
بررسی مانیفست و تفاوت Helm
برای ساخت مانیفستهای نهایی بدون اعمال آنها از helm-template استفاده کنید:
kubit -n my-project helm-template redis
kubit helm-template -f redis.pack.yaml -o redis.rendered.yaml
گزینه --debug جزئیات debug مربوط به Helm template را نیز فعال میکند. برای آزمایش نسخه محلی chart:
kubit helm-template -f redis.pack.yaml \
--local-chartpath ../sabz-collection/charts-paas/redis
برای مقایسه وضعیت مورد انتظار با Helm Release موجود از helm-diff استفاده کنید:
kubit -n my-project helm-diff redis
kubit helm-diff -f redis.pack.yaml --color yes
گزینههای اختصاصی این فرمان عبارتاند از:
| گزینه | کاربرد |
| ----------------------------- | -------------------------------------- | ---- | ----------------------------------------- |
| --color auto | yes | no | کنترل رنگ خروجی؛ مقدار پیشفرض auto است |
| --diff-debug | ارسال گزینه debug به Helm diff |
| -D, --find-renames N | تنظیم آستانه تشخیص rename در Helm diff |
| -c, --local-chartpath DIR | مقایسه با chart محلی |
خروجیگرفتن از Pack برای Helm
فرمان helm-export یک پوشه شامل فایل chart با پسوند tgz، values و راهنمای نصب مستقل با Helm میسازد:
mkdir -p redis-export
kubit -n my-project helm-export redis --outdir redis-export
اگر --outdir حذف شود، نام Pack یا نام فایل مانیفست مبنای پوشه خروجی قرار میگیرد. از این خروجی برای بررسی، انتقال کنترلشده یا عیبیابی استفاده کنید و پیش از اشتراکگذاری، values را از نظر داده حساس بازبینی کنید.
اجرای مستقیم Helm upgrade
فرمان helm-upgrade انتشار Helm را مستقیماً از دستگاه کاربر تغییر میدهد:
kubit -n my-project helm-upgrade redis
kubit helm-upgrade -f redis.pack.yaml \
--local-chartpath ../sabz-collection/charts-paas/redis
این فرمان برخلاف تغییر مانیفست Pack، مسیر عادی همگامسازی اپراتور را آغاز نمیکند. پیش از اجرا، خروجی helm-diff را بررسی کنید. برای تغییر پایدار، مانیفست Pack را اصلاح و اعمال کنید تا وضعیت مطلوب در منبع اصلی ثبت بماند.
عملیات Pack
خواندن خروجیهای Pack
chart میتواند اطلاعاتی مانند نسخه اپلیکیشن، نشانی سرویس یا منابع درخواستی را در pack-metadata.yaml بهعنوان export تعریف کند:
kubit -n my-project pack exports redis
kubit pack exports -f redis.pack.yaml --output dict
گزینه --output یکی از قالبهای simple، dict یا list را انتخاب میکند. گزینه --local-chartpath نیز exportهای chart محلی را رندر میکند. خروجی ممکن است داده حساس داشته باشد؛ آن را بدون بررسی وارد log یا ticket نکنید.
اجرای دوبارهٔ عملیات Pack
برای اجرای دوبارهٔ مسیر Helm upgrade توسط Pack Operator، بدون تغییر مانیفست:
kubit -n my-project pack force-upgrade redis
برای restart کردن workloadهای متعلق به Pack:
kubit -n my-project pack rollout-restart redis
force-upgrade مسیر ارتقای Helm را دوباره اجرا میکند، اما rollout-restart فقط workloadها را دوباره راهاندازی میکند. این عملیات میتوانند باعث ساخت Pod جدید یا وقفه کوتاه شوند.
مهاجرت مانیفست Pack
برای دیدن مانیفست مهاجرتیافته بدون تغییر منبع موجود:
kubit -n my-project pack migrate redis --last-version
kubit pack migrate -f redis.pack.yaml --last-version
گزینههای مقصد و توسعه عبارتاند از:
| گزینه | کاربرد |
|---|---|
-v, --chart-version VERSION | انتخاب نسخه مشخص chart بهعنوان مقصد migration |
-l, --last-version | انتخاب تازهترین نسخه قابل استفاده |
-c, --local-chartpath DIR | اجرای migrationهای chart محلی |
-i, --inline | نوشتن نتیجه روی فایل یا Pack موجود |
--chart-version و --last-version را همزمان استفاده نکنید.
گزینه --inline فایل محلی یا منبع Pack داخل کلاستر را تغییر میدهد. ابتدا migration را بدون این گزینه اجرا، خروجی را بازبینی و نسخه قبلی را در git نگه دارید.
برای تعریف زنجیرهٔ نسخهها، stepها و tagهای migration، راهنمای ساخت pack-migrations.yaml را بخوانید.
کار با Vault
این بخش مرجع فرمانهای Vault در kubit-cli است. برای محل قراردادن خروجی رمزنگاریشده و رفتار Pack Operator، استفاده از Vault در Pack را بخوانید.
ساخت و فهرستکردن کلید Vault
برای ساخت کلید در فضای نام و خواندن رمز اصلی از stdin:
printf %s "$VAULT_PASSWORD" | kubit -n my-project vault create \
--vault-id app-vault \
--vault-password-stdin
اگر --vault-password، --vault-salt یا ورودی stdin داده نشود، مقادیر لازم بهصورت تصادفی تولید میشوند. --vault-password و --vault-password-stdin همزمان مجاز نیستند. گزینه --dry-run فقط YAML مربوط به Secret را برمیگرداند و آن را در کلاستر ایجاد نمیکند.
کلیدهای یک فضای نام یا همه فضاهای نام مجاز را فهرست کنید:
kubit -n my-project vault list
kubit vault list --all-namespaces
در فرمان vault list فقط یکی از --namespace و --all-namespaces را استفاده کنید.
رمزنگاری و رمزگشایی
متن را میتوان بهصورت آرگومان، pipe یا ورودی تعاملی فرستاد. برای جلوگیری از ثبت مقدار حساس در history شل، stdin مناسبتر است:
printf %s "$REDIS_PASSWORD" | kubit -n my-project vault encrypt \
--vault-id app-vault
vault encrypt بهطور پیشفرض فاصلههای ابتدا و انتهای ورودی را حذف میکند. برای حفظ دقیق whitespace از --no-strip استفاده کنید. گزینههای --vault-password و --vault-salt برای رمزنگاری بدون خواندن کلید از فضای نام نیز در دسترساند.
برای رمزگشایی از stdin:
kubit -n my-project vault decrypt < redis-password.vault
اگر کلید Vault از کلاستر خوانده نمیشود، میتوان رمز اصلی را با --vault-password داد. متن رمزگشاییشده در stdout چاپ میشود و ممکن است در صورت پشتیبانی محیط در clipboard نیز قرار گیرد؛ آن را وارد log، history یا ticket نکنید.
تولید رمز تصادفی
فرمان vault gen-password بهطور پیشفرض یک رمز ۱۶ کاراکتری تولید میکند:
kubit vault gen-password
kubit vault gen-password --length 32
اگر --vault-id و فضای نام را بدهید، خروجی تولیدشده با همان کلید رمزنگاری میشود:
kubit -n my-project vault gen-password \
--length 32 \
--vault-id app-vault
خروجی فرمانهای vault encrypt، vault decrypt و vault gen-password در stdout نوشته میشود و ابزار در صورت دسترسی، آن را در clipboard نیز کپی میکند.
تکمیل خودکار شل
برای فعالکردن موقت تکمیل خودکار در bash اجرا کنید:
source <(kubit completion bash)
نام شلهای پشتیبانیشده را با kubit completion --help ببینید. تکمیل نام فضای نام و پک ممکن است به کلاستر درخواست بفرستد و به مجوز خواندن منابع نیاز دارد.