โปรเจกต์นี้เขียนด้วยภาษา Go และมีมานานกว่าปีครึ่งแล้ว: คอมมิชชันครั้งแรกทำขึ้นเมื่อวันที่ 1 กุมภาพันธ์ 2019 ในขณะที่เขียนมีดาวมากกว่า 9000 ดวง
การติดตั้งและเปิดตัว
นี่คือแอปพลิเคชันไคลเอนต์ (เกี่ยวกับคลัสเตอร์ 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" หลังจากนั้น 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
ในการเปิดใช้งาน คุณต้องเปิดใช้งานการส่งต่อพอร์ตในพ็อด โดยเลือกพ็อดแล้วกด 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 ยังรองรับ
Плагины
ในที่สุด 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
อ่านเพิ่มเติมในบล็อกของเรา:
- «
ภาพรวมของ GUI สำหรับ Kubernetes "; - «
ประกาศเกี่ยวกับ Kubernetes Web View (และภาพรวมโดยย่อของ UI ทางเว็บอื่นๆ สำหรับ Kubernetes) "; - «
kubebox และ shell อื่นๆ สำหรับ Kubernetes '
ที่มา: will.com