نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

K9 ها یک رابط کاربری ترمینال برای تعامل با خوشه های Kubernetes فراهم می کند. هدف از این پروژه منبع باز این است که پیمایش، نظارت و مدیریت برنامه ها را در K8s آسان کند. K9s دائماً تغییرات Kubernetes را نظارت می کند و دستورات سریعی را برای کار با منابع نظارت شده ارائه می دهد.

این پروژه در Go نوشته شده است و بیش از یک سال و نیم است که وجود داشته است: اولین تعهد در 1 فوریه 2019 انجام شد. در زمان نوشتن، بیش از 9000 ستاره وجود دارد GitHub و حدود 80 مشارکت کننده. بیایید ببینیم k9s چه کاری می تواند انجام دهد؟

نصب و راه اندازی

این یک برنامه کلاینت (در رابطه با خوشه Kubernetes) است که به راحتی به عنوان یک تصویر داکر اجرا می شود:

docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s

برای برخی از توزیع‌های لینوکس و سایر سیستم‌عامل‌ها، موارد آماده نصب نیز وجود دارد بسته ها. به طور کلی، برای سیستم های لینوکس، می توانید یک فایل باینری نصب کنید:

sudo wget -qO- https://github.com/derailed/k9s/releases/download/v0.22.0/k9s_Linux_x86_64.tar.gz | tar zxvf -  -C /tmp/
sudo mv /tmp/k9s /usr/local/bin

هیچ الزام خاصی برای خود خوشه K8s وجود ندارد. با قضاوت بر اساس بررسی ها، این برنامه همچنین با نسخه های قدیمی Kubernetes مانند 1.12 کار می کند.

برنامه با استفاده از پیکربندی استاندارد راه اندازی می شود .kube/config - شبیه به نحوه انجام آن kubectl.

ناوبری

به‌طور پیش‌فرض، پنجره‌ای باز می‌شود که فضای نام پیش‌فرض برای زمینه مشخص شده است. یعنی اگر نوشتی kubectl config set-context --current --namespace=test، سپس فضای نام باز می شود test. (برای تغییر زمینه ها/فضاهای نام به زیر مراجعه کنید.)

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

قابل اعتماد و متخصص حالت فرمان با فشار دادن ":" انجام می شود. پس از آن، می توانید عملکرد k9s را با استفاده از دستورات کنترل کنید - به عنوان مثال، برای مشاهده لیست StatefulSets (در فضای نام فعلی)، می توانید وارد کنید :sts.

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

برای برخی منابع دیگر Kubernetes:

  • :ns - فضاهای نام؛
  • :deploy - استقرار؛
  • :ing - وارد می شود.
  • :svc - خدمات.

برای نمایش یک لیست کامل از انواع منابع موجود برای مشاهده، یک دستور وجود دارد :aliases.

همچنین مشاهده لیست دستورات موجود با ترکیب کلیدهای داغ در پنجره فعلی راحت است: برای انجام این کار، فقط روی "؟" کلیک کنید.

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

همچنین در k9s وجود دارد حالت جستجو، برای رفتن به آن کافی است "/" را وارد کنید. با آن، جستجو در محتویات "پنجره" فعلی انجام می شود. فرض کنید قبلاً وارد شده اید :ns، لیستی از فضاهای نام باز دارید. اگر تعداد آنها خیلی زیاد است، برای اینکه برای مدت طولانی به پایین پیمایش نکنید، کافی است در پنجره با فضاهای نام وارد شوید. /mynamespace.

برای جستجو بر اساس برچسب‌ها، می‌توانید همه غلاف‌ها را در فضای نام مورد نظر انتخاب کنید، سپس وارد کنید، برای مثال، / -l app=whoami. ما لیستی از غلاف ها را با این برچسب دریافت خواهیم کرد:

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

جستجو در انواع پنجره‌ها از جمله گزارش‌ها، مشاهده مانیفست‌های YAML و describe برای منابع - برای جزئیات بیشتر در مورد این ویژگی ها به زیر مراجعه کنید.

جریان کلی ناوبری چگونه به نظر می رسد؟

با استفاده از دستور :ctx می توانید زمینه را انتخاب کنید:

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

برای انتخاب فضای نام، دستوری که قبلا ذکر شد وجود دارد :ns، و سپس می توانید از جستجوی فضای مورد نظر استفاده کنید: /test.

اگر اکنون منبع مورد نظر خود را انتخاب کنیم (مثلاً همان StatefulSet)، اطلاعات مربوط به آن ظاهر می شود: چند پاد با اطلاعات مختصری در مورد آنها در حال اجرا هستند.

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

فقط غلاف ها ممکن است مورد توجه باشند - پس کافی است وارد شوید :pod. در مورد ConfigMaps (:cm - برای لیست این منابع)، می توانید شی مورد علاقه را انتخاب کنید و روی "u" کلیک کنید، پس از آن K9s به شما می گوید که به طور خاص از آن استفاده می کند (این CM).

یکی دیگر از ویژگی های مفید برای مشاهده منابع آنها است "اشعه ایکس" (نمایش اشعه ایکس). این حالت با دستور فراخوانی می شود :xray RESOURCE و ... نشان دادن نحوه کار آن آسانتر از توضیح دادن است. در اینجا یک تصویر برای StatefulSets آمده است:

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes
(هر یک از این منابع را می توان ویرایش، تغییر، ساخت describe.)

و در اینجا استقرار با Ingress است:

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

کار با منابع

شما می توانید در مورد هر منبع در YAML یا آن اطلاعات کسب کنید describe با فشار دادن میانبرهای صفحه کلید مربوطه (به ترتیب "y" و "d"). البته، عملیات اساسی تری نیز وجود دارد: فهرست و میانبرهای صفحه کلید آنها همیشه به لطف یک "هدر" راحت در رابط قابل مشاهده هستند (با فشار دادن Ctrl + e پنهان می شوند).

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

هنگام ویرایش هر منبع ("e" پس از انتخاب آن)، ویرایشگر متن تعریف شده در متغیرهای محیط باز می شود (export EDITOR=vim).

و در اینجا شرح مفصلی از منبع به نظر می رسد (describe):

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

این خروجی (یا خروجی مشاهده مانیفست YAML منبع) را می توان با استفاده از میانبر صفحه کلید آشنا Ctrl + s ذخیره کرد. جایی که ذخیره خواهد شد از پیام K9s مشخص خواهد شد:

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully!

همچنین می‌توانید پس از حذف برچسب‌ها و حاشیه‌نویسی‌های سیستم، منابع را از فایل‌های پشتیبان ایجاد شده بازیابی کنید. برای انجام این کار، باید با آنها به دایرکتوری بروید (:dir /tmp) سپس فایل مورد نظر را انتخاب و اعمال کنید apply.

به هر حال، در هر زمان می توانید در صورت وجود مشکل در ReplicaSet قبلی، به ReplicaSet قبلی برگردید. برای انجام این کار، RS مورد نظر (:rs برای لیست آنها):

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

... و با Ctrl + l برگردانید. باید اعلان دریافت کنیم که همه چیز خوب پیش رفت:

k9s/whoami-5cfbdbb469 successfully rolled back

و برای مقیاس‌بندی کپی‌ها، کافی است روی «s» (مقیاس) کلیک کنید و تعداد نمونه‌های مورد نظر را انتخاب کنید:

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

می توانید با استفاده از پوسته هر یک از ظروف را وارد کنید: برای انجام این کار، به غلاف مورد نظر بروید، روی "s" (پوسته) کلیک کنید و ظرف را انتخاب کنید.

ویژگی های دیگر

البته، مشاهده گزارش ها نیز پشتیبانی می شود ("l" برای منبع انتخاب شده). و برای تماشای گزارش‌های جدید، نیازی به فشردن مداوم Enter نیست: کافی است ("m") را علامت بزنید و سپس فقط پیام‌های جدید را دنبال کنید.

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

همچنین در همان پنجره می‌توانید محدوده زمانی خروجی گزارش‌ها را انتخاب کنید:

  • کلید "1" - به مدت 1 دقیقه؛
  • "2" - 5 دقیقه؛
  • "3" - 15 دقیقه؛
  • "4" - 30 دقیقه؛
  • "5" - 1 ساعت؛
  • "0" - برای کل طول عمر غلاف.

حالت عملیات ویژه پالس (فرمان :pulse) اطلاعات کلی در مورد خوشه Kubernetes را نشان می دهد:

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

در آن می توانید تعداد منابع و وضعیت آنها را مشاهده کنید (سبز آنهایی را که دارای وضعیت هستند نشان می دهد Running).

یکی دیگر از ویژگی های جالب K9s نام دارد Popeye را. تمام منابع را برای معیارهای خاصی از صحت بررسی می کند و "رتبه بندی" حاصل را با توضیحات نمایش می دهد. به عنوان مثال، می توانید ببینید که نمونه ها یا محدودیت های کافی وجود ندارد و برخی از کانتینرها می توانند به عنوان root اجرا شوند ...

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

پشتیبانی اولیه Helm وجود دارد. برای مثال، به این صورت می‌توانید نسخه‌های مستقر شده در خوشه را ببینید:

:helm all # все
:helm $namespace # в конкретном пространстве имен

محک

آنها حتی در K9 ها نیز تعبیه کردند هی یک مولد بار سرور HTTP ساده، جایگزینی برای ab شناخته شده تر (ApacheBench) است.

برای فعال کردن آن، باید پورت فوروارد را در پاد فعال کنید. برای انجام این کار، پاد را انتخاب کنید و Shift + f را فشار دهید، با استفاده از نام مستعار "pf" به منوی فرعی port-forward بروید.

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

پس از انتخاب پورت و فشار دادن Ctrl + b، خود بنچمارک شروع می شود. نتایج کار او در /tmp و برای مشاهده بعدی در K9s در دسترس هستند.

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes
نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

برای تغییر پیکربندی معیار، باید یک فایل ایجاد کنید $HOME/.k9s/bench-<my_context>.yml (برای هر خوشه تعیین می شود).

نکته: مهم است که پسوند همه فایل‌های YAML در یک فهرست .k9s دقیقا همینطور بود .yml (.yaml درست کار نمی کند).

مثال پیکربندی:

benchmarks:
  defaults:
    # Количество потоков
    concurrency: 2
    # Количество запросов
    requests: 1000
  containers:
    # Настройки для контейнера с бенчмарком
    # Контейнер определяется как namespace/pod-name:container-name
    default/nginx:nginx:
      concurrency: 2
      requests: 10000
      http:
        path: /
        method: POST
        body:
          {"foo":"bar"}
        header:
          Accept:
            - text/html
          Content-Type:
            - application/json
 services:
    # Можно проводить бенчмарк на сервисах типа NodePort и LoadBalancer
    # Синтаксис: namespace/service-name
    default/nginx:
      concurrency: 5
      requests: 500
      http:
        method: GET
        path: /auth
      auth:
        user: flant
        password: s3cr3tp455w0rd

رابط

ظاهر ستون ها برای لیست منابع با ایجاد یک فایل اصلاح می شود $HOME/.k9s/views.yml. نمونه ای از محتوای آن:

k9s:
 views:
   v1/pods:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - IP
       - NODE
       - STATUS
       - READY
   v1/services:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - TYPE
       - CLUSTER-IP

درست است، ستون کافی برای برچسب ها وجود ندارد، که برای آن وجود دارد موضوع در پروژه.

مرتب سازی بر اساس ستون ها توسط میانبرهای صفحه کلید انجام می شود:

  • Shift + n - با نام؛
  • Shift + o - توسط گره ها.
  • Shift + i - توسط IP.
  • Shift + a - با طول عمر ظرف.
  • Shift + t - با تعداد راه اندازی مجدد.
  • Shift + r - بر اساس وضعیت آمادگی؛
  • Shift + c - با مصرف CPU.
  • Shift + m - با مصرف حافظه.

اگر کسی طرح رنگی پیش فرض را دوست نداشته باشد، K9s حتی از آن پشتیبانی می کند پوست. نمونه های آماده (7 عدد) موجود است اینجا. در اینجا یک نمونه از این پوسته ها را مشاهده می کنید (در نیروی دریایی):

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

پلاگین ها

در نهایت، پلاگین ها به شما امکان می دهد قابلیت های K9 را گسترش دهید. من خودم فقط از یکی از آنها در کارم استفاده کرده ام - kubectl get all -n $namespace.

به نظر می رسد این است. یک فایل ایجاد کنید $HOME/.k9s/plugin.yml با مطالبی مانند این:

plugin:
 get-all:
   shortCut: g    
   confirm: false    
   description: get all
   scopes:
   - all
   command: sh
   background: false
   args:
   - -c
   - "kubectl -n $NAMESPACE get all -o wide | less"

اکنون می توانید به فضای نام بروید و "g" را فشار دهید تا با دستور مربوطه اجرا شود:

نمای کلی k9s - یک رابط ترمینال پیشرفته برای Kubernetes

در میان پلاگین ها، به عنوان مثال، ادغام با kubectl-jq و ابزاری برای مشاهده گزارش ها وجود دارد. ستاره.

نتیجه

برای سلیقه من، کار با K9s بسیار راحت بود: می توانید به سرعت به جستجوی هر چیزی که نیاز دارید بدون استفاده از آن عادت کنید. kubectl. من از مشاهده سیاههها و ذخیره آنها، ویرایش سریع منابع، سرعت کار به طور کلی * خوشحال شدم، حالت Popeye مفید بود. ذکر ویژه توانایی ایجاد افزونه ها و تغییر برنامه متناسب با نیاز شما است.

* اگرچه با حجم زیاد لاگ ها متوجه کندی عملکرد K9s نیز شدم. در چنین لحظاتی، این ابزار 2 هسته از Intel Xeon E312xx را "خورد" و حتی می تواند یخ بزند.

در حال حاضر چه چیزی کم است؟ بازگشت سریع به نسخه قبلی (در مورد RS صحبت نمی کنیم) بدون رفتن به دایرکتوری. علاوه بر این، بهبودی فقط برای فقط منبع: اگر یک حاشیه نویسی یا برچسب را حذف کنید، باید کل منبع را حذف و بازیابی کنید (این جایی است که باید به دایرکتوری بروید). نکته کوچک دیگر - تاریخ کافی برای چنین "پشتیبان گیری" ذخیره شده وجود ندارد.

PS

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

منبع: www.habr.com