يوفر K9s واجهة مستخدم طرفية للتفاعل مع مجموعات Kubernetes. الهدف من مشروع المصدر المفتوح هذا هو تسهيل التنقل في التطبيقات ومراقبتها وإدارتها في K8s. يراقب K9s التغييرات في Kubernetes باستمرار ويقدم أوامر سريعة للعمل مع الموارد المراقبة.
المشروع مكتوب في Go ، موجود منذ أكثر من عام ونصف: تم الالتزام الأول في 1 فبراير 2019. في وقت كتابة هذه السطور ، كان هناك أكثر من 9000 نجمة على GitHub وحوالي 80 مساهمًا. دعونا نرى ما يمكن أن تفعله k9s؟
التثبيت والإطلاق
هذا تطبيق عميل (فيما يتعلق بمجموعة Kubernetes) وأسهل تشغيله كصورة Docker:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s
بالنسبة لبعض توزيعات Linux وأنظمة التشغيل الأخرى ، هناك أيضًا حزم جاهزة للتثبيت . بشكل عام ، بالنسبة لأنظمة Linux ، يمكنك تثبيت ملف ثنائي:
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 باستخدام الأوامر - على سبيل المثال ، لعرض قائمة StatefulSets (في مساحة الاسم الحالية) ، يمكنك الدخول
:sts.
بالنسبة لبعض موارد Kubernetes الأخرى:
-
:ns- مساحات الأسماء. -
:deploy- عمليات النشر. -
:ing- المداخلات. -
:svc- خدمات.
لعرض قائمة كاملة بأنواع الموارد المتاحة للعرض ، هناك أمر
:aliases.
من الملائم أيضًا عرض قائمة الأوامر المتاحة بواسطة مجموعات المفاتيح السريعة داخل النافذة الحالية: فقط انقر فوق "؟"
يوجد أيضًا في k9s وضع بحث ، للتبديل إليه يكفي إدخال "/". يتم استخدامه للبحث عن محتويات "النافذة" الحالية. لنفترض ، إذا أدخلت من قبل
:ns، فلديك قائمة بمساحات أسماء مفتوحة. إذا كان هناك الكثير منهم ، فعندئذٍ ، حتى لا يتم التمرير لأسفل لفترة طويلة ، يكفي الدخول إلى النافذة باستخدام مساحات الأسماء /mynamespace.
للبحث عن التسميات ، يمكنك اختيار كل pod'y في مساحة الاسم الصحيحة ، ثم إدخال ، على سبيل المثال
/ -l app=whoami. سنحصل على قائمة بالقرون بهذا الملصق:
يعمل البحث في جميع أنواع النوافذ ، بما في ذلك السجلات وعرض قوائم YAML
describeوالموارد - انظر أدناه للحصول على المزيد حول هذه الميزات.
ما هو تسلسل التنقل العام؟
مع الأمر
:ctx، يمكنك تحديد السياق:
لتحديد namespace'a سبق ذكرها الفريق
:ns، وبعد ذلك يمكنك البحث عن المكان المطلوب: /test.
إذا حددنا الآن المورد الذي نهتم به (على سبيل المثال ، نفس StatefulSet) ، فسيتم عرض المعلومات المقابلة له: كم عدد البودات التي تعمل بمعلومات مختصرة عنها.
قد تكون القرون فقط ذات أهمية - ثم أدخل فقط
:pod. في حالة ConfigMaps (:cm- للحصول على قائمة بهذه الموارد) ، يمكنك تحديد الكائن الذي تريده والنقر على "u" ، وبعد ذلك سيخبرك K9s بالضبط بمن يستخدمه (هذا CM).
ميزة أخرى مفيدة لعرض الموارد هي طريقة عرض XRay الخاصة بهم . يتم استدعاء مثل هذا الوضع بواسطة أمر
:xray RESOURCEو ... من الأسهل إظهار كيفية عمله بدلاً من شرحه. إليك رسم توضيحي لـ StatefulSets:
(يمكن تحرير كل من هذه الموارد وتغييرها وتنفيذها
describe.)
وإليك نشر مع Ingress:
العمل مع الموارد
يمكنك الحصول على معلومات حول كل مورد في YAML أو
describeبالضغط على اختصارات لوحة المفاتيح المقابلة ("y" و "d" ، على التوالي). هناك ، بالطبع ، المزيد من العمليات الأساسية: قوائمهم واختصارات لوحة المفاتيح دائمًا في الأفق بفضل "الرأس" المريح في الواجهة (مخفي بالضغط على Ctrl + e).
عند تحرير أي مورد ("e" بعد تحديده
export EDITOR=vim) ، يتم فتح محرر النصوص المحدد في متغيرات البيئة ( ).
وإليك كيف يبدو الوصف التفصيلي للمورد (
describe): يمكن حفظ
مثل هذا الإخراج (أو ناتج عرض بيان YAML الخاص بالمورد) باستخدام اختصار لوحة المفاتيح المعتاد Ctrl + s. سيتم معرفة مكان حفظه من رسالة K9s:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully!
من ملفات النسخ الاحتياطي التي تم إنشاؤها ، يمكنك أيضًا استعادة الموارد ، بعد إزالة تسميات النظام والتعليقات التوضيحية. للقيام بذلك ، تحتاج إلى الذهاب إلى الدليل معهم (
:dir /tmp) ، ثم تحديد الملف المطلوب وتطبيقه apply.
بالمناسبة ، في أي وقت يمكنك التراجع إلى ReplicaSet السابقة إذا كانت هناك مشاكل في المجموعة الحالية. للقيام بذلك ، حدد RS المطلوب (لقائمتهم
:rs):
... والتراجع باستخدام Ctrl + l. يجب أن نتلقى إشعارًا بأن كل شيء سار على ما يرام:
k9s/whoami-5cfbdbb469 successfully rolled back
ولتوسيع نطاق النسخ المتماثلة ، ما عليك سوى النقر على "s" (مقياس) وتحديد العدد المطلوب من المثيلات:
يمكنك إدخال أي من الحاويات باستخدام shell: للقيام بذلك ، انتقل إلى الحاوية المطلوبة ، وانقر على "s" (shell) وحدد الحاوية ...
احتمالات أخرى
بالطبع ، يتم أيضًا دعم عرض السجلات ("l" للمورد المحدد). ولمشاهدة السجلات الجديدة ، ليست هناك حاجة للضغط باستمرار على Enter: يكفي وضع علامة ("m") ، ثم تتبع الرسائل الجديدة فقط.
في نفس النافذة أيضًا ، يمكنك تحديد النطاق الزمني لعرض السجلات:
- المفتاح "1" - في دقيقة واحدة ؛
- "25 دقيقة؛
- "3" - 15 دقيقة ؛
- "4" - 30 دقيقة ؛
- "5" - ساعة واحدة ؛
- "0" - طوال عمر الكبسولة.
يعرض وضع Pulse الخاص للعملية (الأمر
:pulse) معلومات عامة حول مجموعة Kubernetes:
يمكنك رؤية عدد الموارد وحالتها فيه (تظهر تلك التي لها حالة باللون الأخضر
Running).
ميزة أخرى رائعة من K9s تسمى Popeye . يتحقق من جميع الموارد لمعايير صحة معينة ويعرض "التصنيف" الناتج مع التوضيحات. على سبيل المثال ، يمكنك أن ترى أنه لا توجد تحقيقات أو حدود كافية ، ويمكن تشغيل بعض الحاويات كجذر ...
يوجد دعم Helm أساسي. على سبيل المثال ، هذه هي الطريقة التي يمكنك من خلالها رؤية الإصدارات المنتشرة في المجموعة:
:helm all #
:helm $namespace #
المعيار
حتى أنه تم تضمينه في K9s - إنه مولد تحميل خادم HTTP بسيط ، وهو بديل لـ ab الأكثر شهرة (ApacheBench).
لتمكينه ، تحتاج إلى تنشيط إعادة توجيه المنفذ في الحجرة. للقيام بذلك ، حدد pod واضغط على Shift + f ، وانتقل إلى القائمة الفرعية port-forward ذات الاسم المستعار "pf".
بعد تحديد منفذ والضغط على Ctrl + b ، سيبدأ الاختبار نفسه. يتم حفظ نتائج عمله
/tmpوإتاحتها للعرض لاحقًا في K9s.
لتغيير تكوين المعيار ، تحتاج إلى إنشاء ملف
$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 - عن طريق استهلاك وحدة المعالجة المركزية ؛
- Shift + m - حسب استهلاك الذاكرة.
إذا لم يحب شخص ما نظام الألوان الافتراضي ، فإن K9s تدعم الأسطح . أمثلة جاهزة (7 قطع) متوفرة هنا . فيما يلي مثال على أحد هذه الجلود (في البحرية) :
الإضافات
أخيرًا ، تسمح لك المكونات الإضافية بتوسيع إمكانيات K9s. أنا بنفسي استخدمت واحدًا منهم فقط في عملي -
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" للتنفيذ باستخدام الأمر المناسب: من
بين المكونات الإضافية ، على سبيل المثال ، التكامل مع kubectl-jq والأداة المساعدة لعرض سجلات المؤخرة .
خاتمة
حسب ذوقي ، تبين أن K9s مريحة جدًا للاستخدام: فمن السهل جدًا التعود على البحث عن كل ما تحتاجه دون استخدامه
kubectl. لقد سررت بمشاهدة السجلات وحفظها ، والتحرير السريع للموارد ، وسرعة العمل بشكل عام * ، واتضح أن وضع Popeye مفيد. ذكر منفصل هو القدرة على إنشاء المكونات الإضافية وتعديل التطبيق ليناسب احتياجاتك.
* على الرغم من وجود حجم كبير من السجلات ، إلا أنني لاحظت أيضًا بطء عمل K9s. في مثل هذه اللحظات ، "أكلت" الأداة نوى من Intel Xeon E312xx ويمكن أن تتجمد.
ما هو مفقود في الوقت الراهن؟ التراجع السريع إلى الإصدار السابق (ليس حول RS) دون الانتقال إلى الدليل. بالإضافة إلى أن الاسترداد يحدث فقط لكل شيء.المورد: إذا حذفت التعليق التوضيحي أو التسمية ، فسيتعين عليك حذف واستعادة المورد بالكامل (هنا ستحتاج إلى الانتقال إلى الدليل). تافه أخرى هي أنه لا يوجد تاريخ كاف لهذه "النسخ الاحتياطية" المحفوظة.
ملاحظة
اقرأ أيضًا على مدونتنا: