
מספק ממשק משתמש מסוף לאינטראקציה עם אשכולות Kubernetes. המטרה של פרויקט קוד פתוח זה היא להקל על ניווט, ניטור וניהול יישומים ב-K8s. K9s מנטר כל הזמן שינויים ב-Kubernetes ומציע פקודות מהירות לעבודה עם משאבים מנוטרים.
הפרויקט כתוב ב-Go וקיים כבר למעלה משנה וחצי: ההתחייבות הראשונה בוצעה ב-1 בפברואר 2019. בזמן כתיבת שורות אלה, יש 9000+ כוכבים וכ-80 תורמים. בוא נראה מה K9s יכול לעשות?
התקנה והשקה
זהו יישום לקוח (ביחס לאשכול Kubernetes) שהכי קל להפעיל אותו כתמונת Docker:
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 באמצעות פקודות - למשל, כדי להציג את רשימת ה-StatefulSets (במרחב השמות הנוכחי), ניתן להיכנס :sts.
![]()
עבור כמה משאבים אחרים של Kubernetes:
-
:ns- מרחבי שמות; -
:deploy- פריסות; -
:ing- כניסות; -
:svc- שירותים.
כדי להציג רשימה מלאה של סוגי משאבים הזמינים לצפייה, יש פקודה :aliases.
זה גם נוח להציג את רשימת הפקודות הזמינות על ידי שילובי מקשים חמים בתוך החלון הנוכחי: כדי לעשות זאת, פשוט לחץ על "?".

גם ב-k9s יש מצב חיפוש, כדי ללכת אליו מספיק להזין "/". בעזרתו מתבצע חיפוש על תוכן ה"חלון" הנוכחי. נניח אם נכנסת בעבר :ns, יש לך רשימה של מרחבי שמות פתוחה. אם יש יותר מדי מהם, אז כדי לא לגלול למטה במשך זמן רב, מספיק להיכנס לחלון עם מרחבי שמות /mynamespace.
כדי לחפש לפי תוויות, אתה יכול לבחור את כל הפודים במרחב השמות הרצוי, ואז להזין, למשל, / -l app=whoami. נקבל רשימה של תרמילים עם התווית הזו:
![]()
החיפוש עובד בכל מיני חלונות, כולל יומנים, צפייה במניפסטים של YAML ו describe למשאבים - ראה למטה לפרטים נוספים על תכונות אלה.
איך נראית זרימת הניווט הכוללת?
עם הפקודה :ctx אתה יכול לבחור הקשר:

כדי לבחור מרחב שמות, יש את הפקודה שכבר הוזכרה :ns, ולאחר מכן תוכל להשתמש בחיפוש עבור המרחב הרצוי: /test.
אם כעת נבחר את המשאב שאנו מעוניינים בו (לדוגמה, אותו StatefulSet), יופיע המידע המתאים עבורו: כמה פודים פועלים עם מידע קצר עליהם.
![]()
רק פודים עשויים לעניין - אז מספיק להיכנס :pod. במקרה של ConfigMaps (:cm - עבור רשימת המשאבים הללו), אתה יכול לבחור את אובייקט העניין וללחוץ על "u", ולאחר מכן K9s יגידו לך מי ספציפית משתמש בו (CM זה).
תכונה שימושית נוספת לצפייה במשאבים היא שלהם "רנטגן" (תצוגת רנטגן). מצב זה נקרא על ידי הפקודה :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" (קנה מידה) ובחר את מספר המופעים הרצוי:

ניתן להיכנס לכל אחד מהמיכלים באמצעות הקליפה: לשם כך, עבור אל הפוד הרצוי, לחץ על "s" (קליפה) ובחר את המיכל.
תכונות אחרות
כמובן, צפייה ביומנים נתמכת גם ("l" עבור המשאב הנבחר). וכדי לצפות ביומנים חדשים, אין צורך ללחוץ כל הזמן על Enter: מספיק לסמן ("m") ואז רק לעקוב אחר הודעות חדשות.

גם באותו חלון, אתה יכול לבחור את טווח הזמן עבור הפלט של יומנים:
- מקש "1" - למשך דקה אחת;
- "2 דקות;
- "3 דקות;
- "4 דקות;
- "5" - שעה אחת;
- "0" - למשך כל חיי התרמיל.
מצב הפעלה מיוחד דופק (פקודה :pulse) מציג מידע כללי על אשכול Kubernetes:

בו ניתן לראות את מספר המשאבים והסטטוס שלהם (ירוק מציג את אלו שיש להם את הסטטוס Running).
עוד תכונה מגניבה של K9s נקראת פופאי. הוא בודק את כל המשאבים עבור קריטריונים מסוימים של נכונות ומציג את ה"דירוג" המתקבל עם הסברים. לדוגמה, אתה יכול לראות שאין מספיק דוגמאות או מגבלות, ומיכל כלשהו יכול לפעול כשורש ...

יש תמיכה בסיסית להלם. לדוגמה, כך תוכל לראות את המהדורות הפרוסות באשכול:
:helm all # все
:helm $namespace # в конкретном пространстве имен
בנצ 'מרק
אפילו מובנה בתוך K9s הוא מחולל עומס שרת HTTP פשוט, חלופה ל-ab הידוע יותר (ApacheBench).
כדי להפעיל אותו, עליך להפעיל העברה קדימה בפוד. כדי לעשות זאת, בחר את הפוד והקש 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. ברגעים כאלה, תוכנית השירות "אכלה" 2 ליבות מה-Intel Xeon E312xx ואף עלולה להקפיא.
מה חסר כרגע? חזרה מהירה לגרסה הקודמת (אנחנו לא מדברים על RS) בלי ללכת לספרייה. בנוסף, ההחלמה מתרחשת רק עבור רק משאב: אם תמחק הערה או תווית, תצטרך למחוק ולשחזר את כל המשאב (כאן אתה צריך ללכת לספרייה). עוד זוטה - אין מספיק תאריך ל"גיבויים" שמורים כאלה.
נ.ב.
קרא גם בבלוג שלנו:
- «";
- «";
- «".
מקור: www.habr.com
