Kubit logoکوبیت

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

خواندن خروجی‌های 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‎ را هم‌زمان استفاده نکنید.

برای تعریف زنجیرهٔ نسخه‌ها، 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 ببینید. تکمیل نام فضای نام و پک ممکن است به کلاستر درخواست بفرستد و به مجوز خواندن منابع نیاز دارد.

ابزار خط فرمان kubit-cli | مستندات | کوبیت