Pengumuman antarmuka web Kubernetes Web View (dan ikhtisar singkat tentang UI web lain untuk Kubernetes)

Catatan perev. : Penulis bahan aslinya adalah Henning Jacobs dari Zalando. Dia menciptakan antarmuka web baru untuk bekerja dengan Kubernetes, yang diposisikan sebagai "kubectl untuk web." Mengapa proyek Open Source baru muncul dan kriteria apa yang tidak dipenuhi oleh solusi yang ada, baca artikelnya.



Dalam publikasi ini, saya melihat berbagai antarmuka web open source Kubernetes, menyajikan persyaratan saya untuk UI universal, dan menjelaskan mengapa saya mengembangkan Kubernetes Web View , antarmuka yang dirancang untuk membuatnya lebih mudah untuk mendukung dan memecahkan masalah beberapa kluster sekaligus.

Gunakan kasing


Di Zalando, kami melayani sejumlah besar pengguna Kubernetes (900+) dan cluster (100+). Ada beberapa kasus penggunaan umum di mana bantuan alat web khusus akan sangat berguna:

  1. komunikasi dengan kolega dalam dukungan;
  2. Menanggapi insiden dan investigasi penyebabnya.

Dukungan


Dalam pengalaman saya, komunikasi dalam kerangka dukungan sering terlihat seperti ini:

- Bantuan, layanan XYZ kami tidak tersedia!
- Apa yang Anda lihat ketika Anda melakukan kubectl describe ingress ... ?

Atau yang serupa dengan CRD:

- Saya punya beberapa masalah dengan layanan identifikasi ...
- Dan apa kubectl describe platformcredentialsset ... perintah?

Komunikasi seperti itu biasanya muncul untuk memperkenalkan berbagai variasi kubectl untuk memperbaiki masalah. Akibatnya, kedua sisi percakapan dipaksa untuk terus-menerus beralih antara terminal dan obrolan web, ditambah mereka mengamati situasi yang berbeda.

Oleh karena itu, saya ingin antarmuka web Kubernetes mengizinkan hal berikut:

  • pengguna dapat bertukar tautan dan mengamati hal yang sama;
  • Ini akan membantu untuk menghindari kesalahan manusia dalam dukungan: misalnya, memasukkan klaster yang salah pada baris perintah, salah ketik pada perintah CLI, dll.
  • akan memungkinkan Anda untuk menghasilkan tampilan Anda sendiri untuk dikirim ke kolega, yaitu, menambahkan kolom label, menampilkan banyak jenis sumber daya pada satu halaman;
  • Idealnya, alat berbasis web ini memungkinkan Anda untuk menempatkan tautan dalam ke bagian spesifik YAML (misalnya, arahkan ke parameter yang tidak valid yang menyebabkan gangguan).

Respon dan Analisis Insiden


Menanggapi insiden dalam infrastruktur membutuhkan kesadaran situasional, kemampuan untuk menilai dampak, dan mencari pola dalam kelompok. Beberapa contoh kehidupan nyata:

  • layanan produksi kritis memiliki masalah dan Anda perlu menemukan semua sumber daya Kubernetes dengan nama di semua cluster untuk memperbaiki masalah;
  • node mulai turun saat penskalaan, dan Anda perlu menemukan semua polong dengan status "Tertunda" di semua cluster untuk menilai besarnya masalah;
  • pengguna individu melaporkan masalah dengan DaemonSet yang digunakan di semua cluster, dan perlu untuk mengetahui apakah masalahnya total .

Solusi standar saya dalam kasus seperti itu adalah sesuatu seperti for i in $clusters; do kubectl ...; done for i in $clusters; do kubectl ...; done for i in $clusters; do kubectl ...; done Jelas, Anda dapat mengembangkan alat yang menyediakan kemampuan serupa.

Antarmuka Web Kubernet yang ada


Dunia open source dari antarmuka web Kubernetes tidak terlalu besar *, jadi saya mencoba mengumpulkan informasi tambahan menggunakan Twitter :



* Penjelasan saya tentang terbatasnya jumlah antarmuka web untuk Kubernetes: Layanan cloud dan vendor Kubernetes biasanya menawarkan antarmuka mereka sendiri, sehingga pasar untuk UI Kubernetes "baik" gratis relatif kecil.

Saya tweet tentang K8Dash , Kubernator, dan Octant . Mari kita lihat mereka dan solusi Open Source lainnya yang ada, cobalah untuk memahami apa itu.

K8Dash


"K8Dash adalah cara termudah untuk mengelola kluster Kubernetes Anda."



K8Dash terlihat bagus dan terasa cepat, tetapi memiliki beberapa kelemahan untuk kasus penggunaan yang tercantum di atas:

  • Ini hanya berfungsi dalam batas-batas satu cluster.
  • Penyortiran dan penyaringan dimungkinkan, tetapi tidak memiliki tautan permanen.
  • Tidak ada dukungan untuk Custom Resource Definition (CRD).

Kubernator


“Kubernator adalah UI alternatif untuk Kubernetes. Tidak seperti Kubernetes Dashboard tingkat tinggi, ini memberikan kontrol tingkat rendah dan gambaran yang sangat baik dari semua objek dalam cluster dengan kemampuan untuk membuat yang baru, mengeditnya dan menyelesaikan konflik. Menjadi aplikasi yang sepenuhnya klien (seperti kubectl), itu tidak memerlukan backend apa pun kecuali untuk server API Kubernetes itu sendiri, dan juga memperhitungkan aturan untuk mengakses cluster. "



Ini adalah deskripsi Kubernator yang cukup akurat. Sayangnya, ia tidak memiliki beberapa fitur:

  • Hanya melayani satu cluster.
  • Tidak ada mode tampilan daftar (yaitu, Anda tidak dapat menampilkan semua pod dengan status "Tertunda").

Dashboard Kubernetes


“Kubernetes Dashboard adalah antarmuka web universal untuk kluster Kubernetes. Ini memungkinkan pengguna untuk mengelola dan memecahkan masalah aplikasi yang berjalan di cluster, serta mengelola cluster itu sendiri. "



Sayangnya, Kubernetes Dashboard tidak banyak membantu dalam aktivitas dukungan dan respons aktivitas saya, karena:

  • Tidak ada permalink, misalnya, ketika saya memfilter sumber daya atau mengubah urutan pengurutan;
  • tidak ada cara mudah untuk memfilter berdasarkan status - misalnya, lihat semua pod dengan status "Tertunda";
  • hanya satu klaster yang didukung;
  • CRD tidak didukung (fungsi ini sedang dikembangkan);
  • tidak ada kolom khusus (mis. kubectl -L ).

Tampilan Operasional Kubernetes (kube-ops-view)


"Panel Sistem Pengamat Ruang Cluster K8."



Kubernetes Operational View memiliki pendekatan yang sama sekali berbeda: alat ini hanya menampilkan node dan pod cluster menggunakan WebGL, tanpa rincian teks objek. Ini bagus untuk ikhtisar online status kluster (“jangan polong jatuh?”) *, Tetapi tidak untuk kasus dukungan dan respons insiden yang dijelaskan di atas.

* Catatan perev. : Dalam hal ini, Anda mungkin juga tertarik dengan plugin grafana-statusmap kami , yang kami bahas lebih rinci dalam artikel ini .

Laporan Sumberdaya Kubernetes (kube-resource-report)


"Kumpulkan informasi tentang permintaan sumber daya dari pod dan kluster Kubernetes, bandingkan dengan konsumsi sumber daya, dan hasilkan HTML statis."



Laporan Sumber Daya Kubernetes menghasilkan laporan HTML statis tentang penggunaan sumber daya dan distribusi biaya oleh tim / aplikasi dalam kelompok. Laporan ini agak berguna untuk mendukung dan merespons insiden, karena memungkinkan Anda untuk dengan cepat menemukan kluster di mana aplikasi dikerahkan.

Catatan perev. : Dalam melihat informasi tentang distribusi sumber daya dan biayanya dari penyedia cloud, layanan dan alat Kubecost , yang baru-baru ini kami terbitkan, mungkin juga berguna.

Oktan


“Platform pengembangan web yang dapat dikembangkan yang dirancang untuk memberikan pemahaman yang lebih baik tentang kompleksitas cluster Kubernetes.”



Octant , dibuat di VMware, adalah produk baru yang saya pelajari relatif baru. Dengan menggunakannya, akan lebih mudah untuk memeriksa gugus pada mesin lokal (bahkan ada visualisasi), namun, itu hanya menyentuh masalah dukungan dan respons terhadap insiden sampai batas tertentu. Kerugian oktan:

  • Tidak ada pencarian cluster.
  • Ini hanya bekerja pada mesin lokal (tidak digunakan untuk cluster).
  • Tidak dapat mengurutkan / memfilter objek (hanya pemilih label yang didukung).
  • Anda tidak dapat menentukan kolom khusus.
  • Anda tidak bisa mendaftar objek berdasarkan namespace.

Saya juga memiliki masalah stabilitas dengan cluster Zalando Octant: itu jatuh pada beberapa CRD.

Memperkenalkan Tampilan Web Kubernet


"Kubectl untuk web."



Setelah menganalisis opsi antarmuka yang tersedia untuk Kubernetes, saya memutuskan untuk membuat yang baru: Kubernetes Web View . Memang, pada kenyataannya, saya hanya perlu semua kekuatan kubectl di web, yaitu:

  • aksesibilitas semua operasi (hanya baca) di mana pengguna lebih suka menggunakan kubectl;
  • Semua URL harus permanen dan menyajikan halaman dalam bentuk aslinya sehingga kolega dapat membagikannya dan menggunakannya dalam alat lain;
  • dukungan untuk semua objek Kubernetes, yang akan menyelesaikan masalah jenis apa pun;
  • daftar sumber daya harus dapat diunduh untuk pekerjaan lebih lanjut (dalam spreadsheet, alat CLI seperti grep ) dan penyimpanan (misalnya, untuk postmortem);
  • dukungan untuk memilih sumber daya dengan label (mirip dengan kubectl get .. -l );
  • kemampuan untuk membuat daftar gabungan dari berbagai jenis sumber daya (mirip dengan kubectl get all ) untuk mendapatkan gambaran operasional yang umum di antara rekan kerja (misalnya, dalam proses menanggapi insiden);
  • kemampuan untuk menambahkan tautan dalam "pintar" yang dapat disesuaikan ke alat lain, seperti dasbor, penebang, pendaftar aplikasi, dll. untuk memfasilitasi pemecahan masalah / respons insiden;
  • frontend harus sesederhana mungkin (HTML murni) untuk menghindari masalah yang tidak disengaja, misalnya, JavaScript beku;
  • dukungan untuk beberapa kluster untuk memfasilitasi interaksi selama konsultasi jarak jauh (misalnya, untuk mengingat hanya satu URL);
  • jika memungkinkan, analisis situasi harus disederhanakan (misalnya, dengan tautan ke sumber daya unduhan untuk semua cluster / ruang nama);
  • peluang tambahan untuk membuat tautan fleksibel dan menyoroti informasi tekstual, misalnya, sehingga kolega dapat menunjuk ke bagian tertentu dalam deskripsi sumber daya (baris dalam YAML);
  • kemampuan untuk beradaptasi dengan persyaratan klien tertentu, misalnya, memungkinkan Anda untuk membuat templat tampilan khusus untuk CRD, tampilan tabel Anda, mengubah gaya CSS;
  • alat untuk studi lebih lanjut pada baris perintah (misalnya, menunjukkan perintah kubectl lengkap siap untuk menyalin);

Di luar non-tujuan yang dipecahkan oleh Kubernetes Web View, ada:

  • mengabstraksi objek Kubernet;
  • manajemen aplikasi (misalnya, manajemen penempatan, grafik Helm, dll.);
  • operasi tulis (harus dilakukan melalui alat CI / CD dan / atau GitOps yang aman);
  • antarmuka yang indah (JavaScript, tema, dll.);
  • visualisasi (lihat tampilan ops-kubus );
  • analisis biaya (lihat laporan sumber daya kubus ).

Bagaimana Kubernetes Web View membantu mendukung dan merespons insiden?

Dukungan


  • Semua tautan bersifat permanen , yang memfasilitasi pertukaran informasi dengan kolega.
  • Anda dapat membuat tampilan Anda sendiri , misalnya, menampilkan semua Penyebaran dan Pods dengan label tertentu dalam dua cluster spesifik (beberapa nama kluster dan tipe sumber daya dapat ditentukan dalam tautan, dipisahkan dengan koma).
  • Anda dapat mereferensikan garis-garis tertentu dalam file YAML objek , yang mengindikasikan kemungkinan masalah dalam spesifikasi objek.



Pencarian Cluster di Kubernetes Web View

Respon insiden


  • Pencarian global memungkinkan Anda untuk mencari objek di semua cluster.
  • Tampilan daftar dapat menampilkan semua objek dengan keadaan / kolom tertentu di semua cluster (misalnya, kita perlu menemukan semua pod dengan status "Tertunda").
  • Daftar objek dapat diunduh dalam format tab delimited format (TSV) untuk analisis nanti.
  • Tautan eksternal yang dapat disesuaikan memungkinkan Anda untuk beralih ke dasbor dan alat lain yang sesuai.



Kubernetes Web View: daftar pod dengan status Pending di semua cluster

Jika Anda ingin mencoba Kubernetes Web View, saya sarankan Anda membiasakan diri dengan dokumentasi atau melihat versi demo langsung .

Tentu saja, antarmuka bisa lebih baik, tetapi untuk saat ini Kubernetes Web View adalah alat untuk "pengguna tingkat lanjut" yang tidak menghindar dari memanipulasi jalur URL secara manual jika perlu. Jika Anda memiliki komentar / tambahan / keinginan, silakan hubungi saya di Twitter !

Artikel ini adalah laporan singkat tentang premis yang mengarah pada penciptaan Kubernetes Web View. Orang lain akan mengikuti! ( Catatan terjemahan : Mereka harus diharapkan di blog penulis .)

PS dari penerjemah


Baca juga di blog kami:

Source: https://habr.com/ru/post/id468041/


All Articles