ภาพรวมของ k9s - อินเทอร์เฟซเทอร์มินัลขั้นสูงสำหรับ Kubernetes

ภาพรวมของ k9s - อินเทอร์เฟซเทอร์มินัลขั้นสูงสำหรับ Kubernetes

K9 จัดเตรียมส่วนต่อประสานผู้ใช้เทอร์มินัลสำหรับการโต้ตอบกับคลัสเตอร์ Kubernetes เป้าหมายของโครงการโอเพ่นซอร์สนี้คือทำให้การนำทาง ตรวจสอบ และจัดการแอปพลิเคชันใน K8 เป็นเรื่องง่าย 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 คุณสามารถติดตั้งไฟล์ไบนารีได้:

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" หลังจากนั้น K9 จะบอกคุณว่าใครใช้มันโดยเฉพาะ (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 ก่อนหน้าได้ทุกเมื่อหากมีปัญหากับชุดปัจจุบัน ในการดำเนินการนี้ ให้เลือก 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 (คำสั่ง :pulse) แสดงข้อมูลทั่วไปเกี่ยวกับคลัสเตอร์ Kubernetes:

ภาพรวมของ k9s - อินเทอร์เฟซเทอร์มินัลขั้นสูงสำหรับ Kubernetes

ในนั้น คุณจะเห็นจำนวนของทรัพยากรและสถานะ (สีเขียวแสดงทรัพยากรที่มีสถานะ Running).

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

ภาพรวมของ k9s - อินเทอร์เฟซเทอร์มินัลขั้นสูงสำหรับ Kubernetes

มีการสนับสนุน Helm ขั้นพื้นฐาน ตัวอย่างเช่น นี่คือวิธีที่คุณสามารถดูการเผยแพร่ที่ปรับใช้ในคลัสเตอร์:

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

มาตรฐาน

แม้แต่ใน K9s เฮ้ เป็นตัวสร้างโหลดเซิร์ฟเวอร์ HTTP อย่างง่าย ซึ่งเป็นทางเลือกแทน ab (ApacheBench) ที่รู้จักกันดี

ในการเปิดใช้งาน คุณต้องเปิดใช้งานการส่งต่อพอร์ตในพ็อด โดยเลือกพ็อดแล้วกด Shift + f ไปที่เมนูย่อยการส่งต่อพอร์ตโดยใช้นามแฝง "pf"

ภาพรวมของ 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

Плагины

ในที่สุด ปลั๊กอิน ช่วยให้คุณสามารถขยายขีดความสามารถของ 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" เพื่อดำเนินการด้วยคำสั่งที่เกี่ยวข้อง:

ภาพรวมของ k9s - อินเทอร์เฟซเทอร์มินัลขั้นสูงสำหรับ Kubernetes

ในบรรดาปลั๊กอินมีการรวมเข้ากับ kubectl-jq และยูทิลิตี้สำหรับการดูบันทึก ท้ายเรือ.

ข้อสรุป

สำหรับรสนิยมของฉัน K9 นั้นสะดวกมากในการทำงาน: คุณสามารถทำความคุ้นเคยกับการค้นหาทุกสิ่งที่คุณต้องการได้อย่างรวดเร็วโดยไม่ต้องใช้มัน kubectl. ฉันพอใจกับมุมมองของบันทึกและการบันทึกการแก้ไขทรัพยากรอย่างรวดเร็วความเร็วของงานโดยทั่วไป * โหมดป๊อปอายกลายเป็นประโยชน์ การกล่าวถึงเป็นพิเศษคือความสามารถในการสร้างปลั๊กอินและปรับเปลี่ยนแอปพลิเคชันให้เหมาะกับความต้องการของคุณ

* แม้ว่าจะมีบันทึกจำนวนมาก แต่ฉันยังสังเกตเห็นการทำงานช้าของ K9 ในช่วงเวลาดังกล่าวยูทิลิตี้ "กิน" 2 คอร์จาก Intel Xeon E312xx และอาจหยุดทำงาน

สิ่งที่ขาดหายไปในขณะนี้? ย้อนกลับอย่างรวดเร็วเป็นเวอร์ชันก่อนหน้า (เราไม่ได้พูดถึง RS) โดยไม่ต้องไปที่ไดเร็กทอรี นอกจากนี้ การกู้คืนเกิดขึ้นเฉพาะสำหรับ เท่านั้น ทรัพยากร: หากคุณลบคำอธิบายประกอบหรือป้ายกำกับ คุณจะต้องลบและกู้คืนทรัพยากรทั้งหมด (นี่คือที่ที่คุณต้องไปที่ไดเร็กทอรี) เรื่องเล็กอีกเรื่อง - ไม่มีวันเพียงพอสำหรับ "ข้อมูลสำรอง" ที่บันทึกไว้

PS

อ่านเพิ่มเติมในบล็อกของเรา:

ที่มา: will.com

เพิ่มความคิดเห็น