Gambaran umum tentang k9s - antarmuka terminal tingkat lanjut untuk Kubernetes





K9s menyediakan antarmuka pengguna terminal untuk berinteraksi dengan cluster Kubernetes. Tujuan dari proyek Sumber Terbuka ini adalah untuk memudahkan navigasi, memantau, dan mengelola aplikasi di K8s. K9 secara konstan memantau perubahan di Kubernetes dan menawarkan perintah cepat untuk bekerja dengan sumber daya yang dipantau.



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



Instalasi dan peluncuran



Ini adalah aplikasi klien (terkait dengan cluster Kubernetes) dan paling mudah dijalankan sebagai image Docker:



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


Untuk beberapa distribusi Linux dan sistem operasi lain, ada juga paket yang siap dipasang . 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 cluster K8 itu sendiri. Berdasarkan ulasan, aplikasi bekerja dengan versi Kubernetes yang lebih lama seperti 1.12.



Aplikasi diluncurkan menggunakan konfigurasi standar .kube/config- dengan cara yang sama seperti itu kubectl.



Navigasi



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







beralih ke mode perintah dengan mengklik ":". Anda kemudian dapat mengontrol bagaimana k9s bekerja dengan perintah - misalnya, Anda dapat mengetik untuk melihat daftar StatefulSets (di namespace saat ini) :sts.







Untuk beberapa sumber Kubernetes lainnya:



  • :ns - Namespaces;
  • :deploy - Penerapan;
  • :ing - Ingresses;
  • :svc - Jasa.


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



Juga mudah untuk melihat daftar perintah yang tersedia dengan kombinasi tombol pintas di dalam jendela aktif: cukup klik "?"







Juga di k9s ada mode pencarian , untuk beralih yang cukup dengan memasukkan "/". Ini digunakan untuk mencari konten dari "jendela" saat ini. Katakanlah, jika Anda memasukkan sebelumnya :ns, Anda memiliki daftar namespace yang terbuka. Jika ada terlalu banyak, maka, agar tidak menggulir ke bawah untuk waktu yang lama, cukup masuk ke jendela dengan ruang nama /mynamespace.



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







Pencarian bekerja di semua jenis jendela, termasuk log, melihat manifes YAML, dan describesumber daya - lihat di bawah untuk detail tentang fitur ini.



Apa urutan navigasi keseluruhan?



Dengan perintah :ctx, Anda dapat memilih Konteks:







Untuk memilih namespace'a telah menyebutkan tim :ns, dan kemudian Anda dapat mencari ruang yang diinginkan: /test.



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







Hanya polong yang bisa menarik - lalu masuk saja :pod. Dalam kasus ConfigMaps (:cm- untuk daftar sumber daya ini), Anda dapat memilih objek yang diinginkan dan klik "u", setelah itu K9s akan memberi tahu Anda siapa yang menggunakannya (CM ini).



Fitur praktis lainnya untuk melihat sumber daya adalah tampilan XRay mereka . Mode seperti itu dipanggil oleh perintah :xray RESOURCEdan ... lebih mudah untuk menunjukkan cara kerjanya daripada menjelaskannya. Berikut ilustrasi untuk StatefulSets:





(Masing-masing sumber daya ini dapat diedit, dimodifikasi, diselesaikan describe.)



Dan berikut adalah Deployment dengan Ingress:







Bekerja dengan sumber daya



Informasi tentang setiap sumber daya dapat diperoleh di YAML atau describedengan menekan pintasan keyboard yang sesuai (masing-masing "y" dan "d"). Tentu saja ada operasi yang lebih mendasar: daftar dan pintasan keyboardnya selalu terlihat berkat "tajuk" yang nyaman di antarmuka (disembunyikan dengan menekan Ctrl + e).







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



Dan berikut adalah bagaimana deskripsi mendetail sumber daya ( describe) terlihat :







Keluaran seperti itu (atau keluaran dari melihat manifes YAML sumber daya) dapat disimpan menggunakan pintasan keyboard biasa Ctrl + s. Di mana itu 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 dengan 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 diperlukan ( :rsuntuk daftarnya):







… dan kembalikan dengan Ctrl + l. Kami akan menerima 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 diperlukan:







Anda dapat memasukkan container apa pun menggunakan shell: untuk melakukan ini, buka pod yang diinginkan, klik "s" (shell) dan pilih container ...



Kemungkinan lain



Tentu saja, melihat log juga didukung ("l" untuk resource yang dipilih). Dan untuk melihat log baru, tidak perlu terus-menerus menekan Enter: cukup dengan menandai ("m"), lalu hanya melacak pesan baru.







Selain itu, di jendela yang sama, Anda dapat memilih rentang waktu untuk menampilkan log:



  • kunci "1" - dalam 1 menit;
  • "2" - 5 menit;
  • "3" - 15 menit;
  • "4" - 30 menit;
  • "5" - 1 jam;
  • "0" - selama masa pakai pod.


Operasi mode Pulse khusus (perintah :pulse) menunjukkan informasi umum tentang cluster Kubernetes:







Anda dapat melihat jumlah resource dan statusnya di dalamnya (yang memiliki status ditampilkan dengan warna hijau Running).



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







Ada dukungan Helm dasar. Misalnya, ini adalah bagaimana Anda dapat melihat rilis yang diterapkan di cluster:



:helm all # 
:helm $namespace #    


Tolok ukur



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



Untuk mengaktifkannya, Anda memerlukan aktivasi penerusan port di pod. Untuk melakukan ini, pilih pod dan tekan Shift + f, pergi ke submenu port-forward dengan alias "pf".







Setelah memilih port dan menekan Ctrl + b, benchmark itu sendiri akan dimulai. Hasil pekerjaannya disimpan di /tmpdan tersedia untuk dilihat nanti di K9s.









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



NB: Perlu diperhatikan bahwa ekstensi dari semua file YAML di direktori .k9sbenar - benar .yml( .yamltidak 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



Tampilan 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, ada kekurangan kolom untuk label, yang memiliki masalah dalam proyek .



Pengurutan berdasarkan kolom dilakukan dengan pintasan keyboard:



  • Shift + n - dengan nama;
  • Shift + o - dengan node;
  • Shift + i - menurut IP;
  • Shift + a - berdasarkan umur kontainer;
  • Shift + t - dengan jumlah restart;
  • Shift + r - dengan status kesiapan;
  • Shift + c - dengan konsumsi CPU;
  • Shift + m - dengan konsumsi memori.


Jika seseorang tidak menyukai skema warna default, K9s bahkan mendukung skin . Contoh siap (7 buah) tersedia di sini . Berikut adalah contoh dari salah satu skin ini (di angkatan laut) :







Plugin



Terakhir, plugin memungkinkan Anda memperluas kemampuan K9. Saya sendiri hanya menggunakan salah satu dari mereka dalam pekerjaan saya - kubectl get all -n $namespace.



Ini terlihat seperti ini. Buat file $HOME/.k9s/plugin.ymldengan konten berikut:



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 dapat pergi ke namespace dan tekan "g" untuk mengeksekusi dengan perintah yang sesuai:







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



Kesimpulan



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



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



Apa yang hilang saat ini? Rollback cepat ke versi sebelumnya (bukan tentang RS) tanpa membuka direktori. Plus, pemulihan hanya terjadi untuk semuanya.resource: jika Anda menghapus anotasi atau label, Anda harus menghapus dan memulihkan seluruh resource (di sini Anda harus pergi ke direktori). Hal sepele lainnya - tidak ada cukup tanggal untuk "backup" yang disimpan tersebut.



PS



Baca juga di blog kami:






All Articles