
จัดเตรียมส่วนต่อประสานผู้ใช้เทอร์มินัลสำหรับการโต้ตอบกับคลัสเตอร์ Kubernetes เป้าหมายของโครงการโอเพ่นซอร์สนี้คือทำให้การนำทาง ตรวจสอบ และจัดการแอปพลิเคชันใน K8 เป็นเรื่องง่าย K9s ตรวจสอบการเปลี่ยนแปลงใน Kubernetes อย่างต่อเนื่องและเสนอคำสั่งด่วนเพื่อทำงานกับทรัพยากรที่ได้รับการตรวจสอบ
โปรเจกต์นี้เขียนด้วยภาษา Go และมีมานานกว่าปีครึ่งแล้ว: คอมมิชชันครั้งแรกทำขึ้นเมื่อวันที่ 1 กุมภาพันธ์ 2019 ในขณะที่เขียนมีดาวมากกว่า 9000 ดวง และผู้มีส่วนร่วมประมาณ 80 คน มาดูกันว่า k9s ทำอะไรได้บ้าง?
การติดตั้งและเปิดตัว
นี่คือแอปพลิเคชันไคลเอนต์ (เกี่ยวกับคลัสเตอร์ Kubernetes) ที่ง่ายที่สุดในการเรียกใช้เป็นอิมเมจ Docker:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9sสำหรับลีนุกซ์บางรุ่นและระบบปฏิบัติการอื่นก็มีแบบพร้อมติดตั้งเช่นกัน . โดยทั่วไป สำหรับระบบ 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.
หากต้องการค้นหาตามป้ายกำกับ คุณสามารถเลือกพ็อดทั้งหมดในเนมสเปซที่ต้องการ จากนั้นป้อน เช่น / -l app=whoami. เราจะได้รายชื่อพ็อดที่มีป้ายกำกับนี้:
![]()
การค้นหาทำงานในหน้าต่างทุกประเภท รวมถึงบันทึก การดูรายการ YAML และ describe สำหรับทรัพยากร - ดูรายละเอียดเพิ่มเติมเกี่ยวกับคุณสมบัติเหล่านี้ด้านล่าง
โฟลว์การนำทางโดยรวมมีลักษณะอย่างไร
ด้วยคำสั่ง :ctx คุณสามารถเลือกบริบท:

ในการเลือกเนมสเปซมีคำสั่งดังกล่าวแล้ว :nsจากนั้นคุณสามารถใช้การค้นหาช่องว่างที่ต้องการ: /test.
หากตอนนี้เราเลือกทรัพยากรที่เราสนใจ (เช่น StatefulSet เดียวกัน) ข้อมูลที่เกี่ยวข้องจะปรากฏขึ้น: จำนวนพ็อดที่กำลังทำงานพร้อมข้อมูลสั้น ๆ เกี่ยวกับพวกเขา
![]()
เฉพาะพ็อดเท่านั้นที่น่าสนใจ - จากนั้นมันก็เพียงพอแล้วที่จะเข้าไป :pod. ในกรณีของ ConfigMaps (:cm - สำหรับรายการทรัพยากรเหล่านี้) คุณสามารถเลือกวัตถุที่สนใจและคลิกที่ "u" หลังจากนั้น K9 จะบอกคุณว่าใครใช้มันโดยเฉพาะ (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" - เป็นเวลา 1 นาที
- "2" - 5 นาที
- "3" - 15 นาที
- "4" - 30 นาที
- "5" - 1 ชั่วโมง
- "0" - ตลอดอายุการใช้งานของพ็อด
โหมดการทำงานพิเศษ Pulse (คำสั่ง :pulse) แสดงข้อมูลทั่วไปเกี่ยวกับคลัสเตอร์ Kubernetes:

ในนั้น คุณจะเห็นจำนวนของทรัพยากรและสถานะ (สีเขียวแสดงทรัพยากรที่มีสถานะ Running).
ฟีเจอร์เด็ดอีกอย่างของ K9s เรียกว่า ป๊อปอาย. ตรวจสอบทรัพยากรทั้งหมดเพื่อหาเกณฑ์ความถูกต้องบางประการ และแสดงผล "การให้คะแนน" พร้อมคำอธิบาย ตัวอย่างเช่น คุณจะเห็นว่ามีตัวอย่างหรือขีดจำกัดไม่เพียงพอ และบางคอนเทนเนอร์สามารถรันเป็น root ...

มีการสนับสนุน Helm ขั้นพื้นฐาน ตัวอย่างเช่น นี่คือวิธีที่คุณสามารถดูการเผยแพร่ที่ปรับใช้ในคลัสเตอร์:
:helm all # все
:helm $namespace # в конкретном пространстве имен
มาตรฐาน
แม้แต่ใน K9s เป็นตัวสร้างโหลดเซิร์ฟเวอร์ HTTP อย่างง่าย ซึ่งเป็นทางเลือกแทน ab (ApacheBench) ที่รู้จักกันดี
ในการเปิดใช้งาน คุณต้องเปิดใช้งานการส่งต่อพอร์ตในพ็อด โดยเลือกพ็อดแล้วกด Shift + f ไปที่เมนูย่อยการส่งต่อพอร์ตโดยใช้นามแฝง "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 - ตามการใช้ CPU;
- 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 และยูทิลิตี้สำหรับการดูบันทึก .
ข้อสรุป
สำหรับรสนิยมของฉัน K9 นั้นสะดวกมากในการทำงาน: คุณสามารถทำความคุ้นเคยกับการค้นหาทุกสิ่งที่คุณต้องการได้อย่างรวดเร็วโดยไม่ต้องใช้มัน kubectl. ฉันพอใจกับมุมมองของบันทึกและการบันทึกการแก้ไขทรัพยากรอย่างรวดเร็วความเร็วของงานโดยทั่วไป * โหมดป๊อปอายกลายเป็นประโยชน์ การกล่าวถึงเป็นพิเศษคือความสามารถในการสร้างปลั๊กอินและปรับเปลี่ยนแอปพลิเคชันให้เหมาะกับความต้องการของคุณ
* แม้ว่าจะมีบันทึกจำนวนมาก แต่ฉันยังสังเกตเห็นการทำงานช้าของ K9 ในช่วงเวลาดังกล่าวยูทิลิตี้ "กิน" 2 คอร์จาก Intel Xeon E312xx และอาจหยุดทำงาน
สิ่งที่ขาดหายไปในขณะนี้? ย้อนกลับอย่างรวดเร็วเป็นเวอร์ชันก่อนหน้า (เราไม่ได้พูดถึง RS) โดยไม่ต้องไปที่ไดเร็กทอรี นอกจากนี้ การกู้คืนเกิดขึ้นเฉพาะสำหรับ เท่านั้น ทรัพยากร: หากคุณลบคำอธิบายประกอบหรือป้ายกำกับ คุณจะต้องลบและกู้คืนทรัพยากรทั้งหมด (นี่คือที่ที่คุณต้องไปที่ไดเร็กทอรี) เรื่องเล็กอีกเรื่อง - ไม่มีวันเพียงพอสำหรับ "ข้อมูลสำรอง" ที่บันทึกไว้
PS
อ่านเพิ่มเติมในบล็อกของเรา:
- «";
- «";
- «'
ที่มา: will.com
