Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

K9 menyediakan antarmuka pengguna terminal untuk berinteraksi dengan kluster Kubernetes. Tujuan dari proyek Sumber Terbuka ini adalah untuk mempermudah navigasi, pemantauan, dan pengelolaan aplikasi di K8s. K9 terus memantau perubahan di Kubernetes dan menawarkan perintah cepat untuk bekerja dengan sumber daya yang dipantau.

Proyek ini ditulis dalam Go dan telah ada selama lebih dari satu setengah tahun: komitmen pertama dibuat pada 1 Februari 2019. Pada saat penulisan, ada 9000+ bintang aktif GitHub dan sekitar 80 kontributor. Mari kita lihat apa yang bisa dilakukan k9s?

Instalasi dan peluncuran

Ini adalah aplikasi klien (sehubungan dengan kluster Kubernetes) yang paling mudah dijalankan sebagai gambar Docker:

docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s

Untuk beberapa distro Linux dan sistem operasi lainnya, ada juga yang ready-to-install paket. Secara umum, untuk sistem Linux, Anda dapat menginstal file biner:

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

Tidak ada persyaratan khusus untuk kluster K8 itu sendiri. Dilihat dari ulasannya, aplikasi ini juga berfungsi dengan versi Kubernetes yang lebih lama seperti 1.12.

Aplikasi diluncurkan menggunakan konfigurasi standar .kube/config - mirip dengan caranya kubectl.

Navigasi

Secara default, sebuah jendela terbuka dengan namespace default yang ditentukan untuk konteksnya. Artinya, jika Anda menulis kubectl config set-context --current --namespace=test, maka namespace akan terbuka test. (Lihat di bawah untuk mengubah konteks/ruang nama.)

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Pergi ke modus perintah dilakukan dengan menekan ":". Setelah itu, Anda dapat mengontrol pengoperasian k9s menggunakan perintah - misalnya, untuk melihat daftar StatefulSets (di namespace saat ini), Anda dapat masuk :sts.

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Untuk beberapa resource Kubernetes lainnya:

  • :ns β€” ruang nama;
  • :deploy β€” Penyebaran;
  • :ing β€” Masuk;
  • :svc - Jasa.

Untuk menampilkan daftar lengkap jenis sumber daya yang tersedia untuk dilihat, ada perintah :aliases.

Juga nyaman untuk melihat daftar perintah yang tersedia dengan kombinasi tombol pintas di dalam jendela saat ini: untuk melakukan ini, cukup klik "?".

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Juga di k9 ada modus pencarian, untuk pergi ke mana cukup memasukkan "/". Dengan bantuannya, pencarian dilakukan pada konten "jendela" saat ini. Katakanlah jika Anda sebelumnya masuk :ns, Anda memiliki daftar ruang nama yang terbuka. Jika jumlahnya terlalu banyak, maka agar tidak menggulir ke bawah dalam waktu lama, cukup masuk ke jendela dengan ruang nama /mynamespace.

Untuk mencari berdasarkan label, Anda dapat memilih semua pod di namespace yang diinginkan, lalu masukkan, misalnya, / -l app=whoami. Kami akan mendapatkan daftar pod dengan label ini:

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Pencarian berfungsi di semua jenis jendela, termasuk log, melihat manifes YAML, dan describe untuk sumber daya - lihat di bawah untuk detail lebih lanjut tentang fitur ini.

Seperti apa alur navigasi secara keseluruhan?

Dengan perintah :ctx Anda dapat memilih konteks:

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Untuk memilih namespace, ada perintah yang sudah disebutkan :ns, lalu Anda dapat menggunakan pencarian untuk ruang yang diinginkan: /test.

Jika sekarang kita memilih sumber daya yang kita minati (misalnya, StatefulSet yang sama), informasi terkait akan muncul untuknya: berapa banyak pod yang berjalan dengan informasi singkat tentangnya.

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Mungkin hanya pod yang menarik - maka cukup untuk masuk :pod. Dalam kasus ConfigMaps (:cm - untuk daftar sumber daya ini), Anda dapat memilih objek yang menarik dan mengklik "u", setelah itu K9s akan memberi tahu Anda siapa yang secara khusus menggunakannya (CM ini).

Fitur praktis lainnya untuk melihat sumber daya adalah milik mereka "x-ray" (tampilan Xray). Mode ini disebut dengan perintah :xray RESOURCE dan ... lebih mudah menunjukkan cara kerjanya daripada menjelaskan. Berikut adalah ilustrasi untuk StatefulSets:

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes
(Masing-masing sumber daya ini dapat diedit, diubah, dibuat describe.)

Dan inilah Deployment dengan Ingress:

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Bekerja dengan sumber daya

Anda bisa mendapatkan informasi tentang setiap sumber daya di YAML atau miliknya describe dengan menekan pintasan keyboard yang sesuai ("y" dan "d", masing-masing). Tentu saja, ada operasi yang lebih mendasar: daftar dan pintasan keyboard selalu terlihat berkat "tajuk" yang nyaman di antarmuka (disembunyikan dengan menekan Ctrl + e).

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Saat mengedit sumber daya apa pun ("e" setelah pemilihannya), editor teks yang ditentukan dalam variabel lingkungan dibuka (export EDITOR=vim).

Dan inilah gambaran rinci tentang sumber daya tersebut (describe):

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Keluaran ini (atau keluaran untuk melihat manifes YAML sumber daya) dapat disimpan menggunakan pintasan keyboard Ctrl + s yang sudah dikenal. Di mana akan disimpan akan diketahui dari pesan K9s:

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully!

Anda juga dapat memulihkan sumber daya dari file cadangan yang dibuat, setelah menghapus label dan anotasi sistem. Untuk melakukan ini, Anda harus pergi ke direktori bersama mereka (:dir /tmp), lalu pilih file yang diinginkan dan terapkan apply.

Omong-omong, kapan saja Anda dapat memutar kembali ke ReplicaSet sebelumnya jika ada masalah dengan ReplicaSet saat ini. Untuk melakukan ini, pilih RS yang diinginkan (:rs untuk daftar mereka):

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

... dan kembalikan dengan Ctrl + l. Kami harus mendapatkan pemberitahuan bahwa semuanya berjalan dengan baik:

k9s/whoami-5cfbdbb469 successfully rolled back

Dan untuk menskalakan replika, cukup klik "s" (skala) dan pilih jumlah instance yang diinginkan:

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Anda dapat memasukkan salah satu wadah menggunakan shell: untuk melakukan ini, pergi ke pod yang diinginkan, klik "s" (shell) dan pilih wadahnya.

Fitur lainnya

Tentu saja, melihat log juga didukung ("l" untuk sumber daya yang dipilih). Dan untuk menonton log baru, tidak perlu terus-menerus menekan Enter: cukup menandai (β€œm”), lalu hanya melacak pesan baru.

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Juga di jendela yang sama, Anda dapat memilih rentang waktu untuk keluaran log:

  • kunci "1" - selama 1 menit;
  • "2" - 5 menit;
  • "3" - 15 menit;
  • "4" - 30 menit;
  • "5" - 1 jam;
  • "0" - untuk seumur hidup pod.

Mode operasi khusus Pulsa (perintah :pulse) menampilkan informasi umum tentang klaster Kubernetes:

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Di dalamnya Anda dapat melihat jumlah sumber daya dan statusnya (hijau menunjukkan yang memiliki status Running).

Fitur keren lainnya dari K9 disebut Popeye. Itu memeriksa semua sumber daya untuk kriteria kebenaran tertentu dan menampilkan "peringkat" yang dihasilkan dengan penjelasan. Misalnya, Anda dapat melihat bahwa sampel atau batasan tidak cukup, dan beberapa wadah dapat dijalankan sebagai root ...

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Ada dukungan Helm dasar. Misalnya, ini adalah cara Anda melihat rilis yang diterapkan di kluster:

:helm all # всС
:helm $namespace # Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ пространствС ΠΈΠΌΠ΅Π½

patokan

Bahkan dibangun ke dalam K9s hei adalah generator beban server HTTP sederhana, alternatif dari ab (ApacheBench) yang lebih dikenal.

Untuk mengaktifkannya, Anda perlu mengaktifkan port-forward di pod. Untuk melakukannya, pilih pod dan tekan Shift + f, buka submenu port-forward menggunakan alias "pf".

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Setelah memilih port dan menekan Ctrl + b, tolok ukur itu sendiri akan dimulai. Hasil karyanya disimpan di /tmp dan tersedia untuk dilihat nanti di K9s.

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes
Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Untuk mengubah konfigurasi benchmark, Anda perlu membuat file $HOME/.k9s/bench-<my_context>.yml (ditentukan untuk setiap cluster).

NB: Perlu ekstensi semua file YAML dalam direktori .k9s itu persis .yml (.yaml tidak bekerja dengan benar).

Contoh konfigurasi:

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

Antarmuka.

Penampilan kolom untuk daftar sumber daya diubah dengan membuat file $HOME/.k9s/views.yml. Contoh isinya:

k9s:
 views:
   v1/pods:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - IP
       - NODE
       - STATUS
       - READY
   v1/services:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - TYPE
       - CLUSTER-IP

Benar, tidak ada cukup kolom untuk label yang ada masalah dalam proyek.

Pengurutan berdasarkan kolom dilakukan dengan pintasan keyboard:

  • Shift + n - dengan nama;
  • Shift + o - dengan node;
  • Shift + i - dengan IP;
  • Shift + a - selama masa pakai wadah;
  • Shift + t - dengan jumlah restart;
  • Shift + r - berdasarkan status kesiapan;
  • Shift + c - dengan konsumsi CPU;
  • Shift + m - dengan konsumsi memori.

Jika seseorang tidak menyukai skema warna default, K9 bahkan mendukung kulit. Contoh siap pakai (7 buah) tersedia di sini. Ini adalah salah satu contoh dari skin tersebut (di Angkatan Laut):

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Plugin

Akhirnya, plugin memungkinkan Anda memperluas kemampuan K9. Saya sendiri hanya menggunakan salah satunya dalam pekerjaan saya - kubectl get all -n $namespace.

Sepertinya ini. Buat file $HOME/.k9s/plugin.yml dengan konten seperti ini:

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"

Sekarang Anda bisa pergi ke namespace dan tekan "g" untuk mengeksekusi dengan perintah yang sesuai:

Ikhtisar k9s - antarmuka terminal lanjutan untuk Kubernetes

Di antara plugin ada, misalnya, integrasi dengan kubectl-jq dan utilitas untuk melihat log bintang.

Kesimpulan

Menurut selera saya, K9 ternyata sangat nyaman digunakan: Anda dapat dengan cepat terbiasa mencari semua yang Anda butuhkan tanpa menggunakannya. kubectl. Saya senang dengan tampilan log dan penghematannya, pengeditan sumber daya yang cepat, kecepatan kerja secara umum *, mode Popeye ternyata berguna. Disebutkan secara khusus adalah kemampuan untuk membuat plugin dan memodifikasi aplikasi agar sesuai dengan kebutuhan Anda.

* Meskipun, dengan volume log yang besar, saya juga memperhatikan pengoperasian K9 yang lambat. Pada saat-saat seperti itu, utilitas "memakan" 2 inti dari Intel Xeon E312xx dan bahkan dapat membeku.

Apa yang hilang saat ini? Kembalikan cepat ke versi sebelumnya (kami tidak berbicara tentang RS) tanpa masuk ke direktori. Selain itu, pemulihan hanya terjadi untuk hanya sumber daya: jika Anda menghapus anotasi atau label, Anda harus menghapus dan memulihkan seluruh sumber daya (di sinilah Anda harus pergi ke direktori). Hal sepele lainnya - tidak ada cukup tanggal untuk "cadangan" yang disimpan tersebut.

PS

Baca juga di blog kami:

Sumber: www.habr.com

Tambah komentar