Kubernetes Meluncurkan Alat Pengembang Aplikasi



Pendekatan modern untuk operasi memecahkan banyak masalah bisnis yang mendesak. Kontainer dan orkestra memudahkan untuk skala proyek dari segala kompleksitas, menyederhanakan rilis versi baru, membuatnya lebih dapat diandalkan, tetapi pada saat yang sama menciptakan masalah tambahan bagi pengembang. Programmer, pertama-tama, peduli tentang kode-nya: arsitektur, kualitas, kinerja, keanggunan, dan bukan bagaimana ia akan pergi ke Kubernetes dan bagaimana menguji dan men-debug-nya setelah membuat perubahan sekecil apa pun. Oleh karena itu, sangat wajar bahwa alat untuk Kubernetes aktif berkembang, membantu memecahkan masalah bahkan pengembang yang paling "kuno" dan memungkinkan mereka untuk fokus pada hal utama.

Ulasan ini menyediakan ringkasan dari beberapa alat yang membuat hidup lebih mudah bagi seorang programmer yang kodenya berputar di kluster pod'ax Kubernetes.

Pembantu sederhana


Kubectl-debug


  • Intinya: tambahkan wadah Anda ke Pod dan lihat apa yang terjadi di dalamnya .
  • Github
  • Statistik GH singkat: 715 bintang, 54 komit, 9 kontributor.
  • Bahasa: Pergi.
  • Lisensi: Apache License 2.0.

Plugin ini untuk kubectl memungkinkan Anda untuk membuat wadah tambahan di dalam pod yang menarik minat Anda, yang akan berbagi ruang proses dengan sisa wadah. Dimungkinkan untuk men-debug pekerjaan pod di dalamnya: memeriksa jaringan, mendengarkan lalu lintas jaringan, membuat strace dari proses yang diinginkan, dll.

Anda juga dapat beralih ke wadah proses dengan menjalankan chroot /proc/PID/root - ini sangat nyaman ketika Anda perlu mendapatkan shell root di wadah yang securityContext.runAs diatur dalam manifes.

Alat ini sederhana dan efisien, sehingga dapat bermanfaat bagi setiap pengembang. Kami menulis lebih banyak tentang itu di artikel terpisah .

Telepresence


  • Intinya: transfer aplikasi ke komputer Anda. Kembangkan dan debug secara lokal .
  • Situs ; Github
  • Statistik singkat GH: 2131 bintang, 2712 komit, 33 kontributor.
  • Bahasa: Python.
  • Lisensi: Apache License 2.0.

Gagasan snap-in ini adalah untuk meluncurkan wadah dengan aplikasi di komputer pengguna lokal dan proksi semua lalu lintas dari cluster ke sana dan sebaliknya. Pendekatan ini memungkinkan Anda untuk melakukan pengembangan secara lokal, cukup mengubah file di IDE favorit Anda: hasilnya akan segera tersedia.

Keuntungan dari peluncuran lokal adalah kemudahan mengedit dan hasil instan, kemampuan untuk debug aplikasi dengan cara biasa. Kekurangannya adalah kecepatan koneksi yang menuntut, yang terutama terlihat ketika Anda harus bekerja dengan aplikasi dengan RPS dan lalu lintas yang cukup tinggi. Selain itu, Telepresence memiliki masalah dengan volume mount pada Windows, yang bisa menjadi pembatas yang menentukan bagi para pengembang yang terbiasa dengan OS ini.

Kami telah berbagi pengalaman menggunakan Telepresence di sini .

Ksync


  • Intinya: sinkronisasi kode hampir instan dengan wadah di cluster .
  • Github
  • Statistik GH singkat: 555 bintang, 362 komit, 11 kontributor.
  • Bahasa: Pergi.
  • Lisensi: Apache License 2.0.

Utilitas ini memungkinkan Anda untuk menyinkronkan konten direktori lokal dengan direktori wadah yang berjalan di cluster. Alat seperti itu sangat cocok untuk pengembang dalam bahasa pemrograman scripting yang masalah utamanya adalah mengirimkan kode ke wadah yang berfungsi. Ksync bertujuan untuk meringankan sakit kepala ini.

Ketika diinisialisasi sekali dengan perintah ksync init , ksync init dibuat di cluster, yang digunakan untuk memantau keadaan sistem file wadah yang dipilih. Di komputer lokalnya, pengembang menjalankan ksync watch , yang memonitor konfigurasi dan menjalankan sinkronisasi , yang secara langsung menyinkronkan file dengan cluster.

Tetap menginstruksikan ksync apa yang harus disinkronkan dan apa. Misalnya, perintah seperti ini:

 ksync create --name=myproject --namespace=test --selector=app=backend --container=php --reload=false /home/user/myproject/ /var/www/myproject/ 

... akan membuat pengamat bernama myproject , yang akan mencari pod dengan label app=backend dan mencoba menyinkronkan direktori lokal /home/user/myproject/ dengan direktori /var/www/myproject/ dalam wadah bernama php .

Masalah dan catatan tentang ksync dari pengalaman kami:

  • Pada node cluster Kubernetes, overlay2 harus digunakan sebagai driver penyimpanan untuk Docker. Utilitas tidak akan berfungsi dengan yang lain.
  • Saat menggunakan Windows sebagai OS klien, sistem file pengamat mungkin tidak berfungsi dengan benar. Bug ini diketahui ketika bekerja dengan direktori besar - dengan banyak lampiran file dan direktori. Kami telah membuat masalah terkait dalam proyek sinkronisasi, tetapi sejauh ini belum ada kemajuan (sejak awal Juli).
  • Gunakan file .stignore untuk menentukan jalur atau templat file yang tidak perlu disinkronkan (misalnya, .git app/cache dan .git ).
  • Secara default, ksync akan memuat ulang wadah setiap kali file diubah. Ini nyaman untuk Node.js, tetapi sepenuhnya berlebihan untuk PHP. Lebih baik mematikan opcache dan menggunakan flag --reload=false .
  • Konfigurasi selalu dapat diperbaiki dalam $HOME/.ksync/ksync.yaml .

Squash


  • Intinya: proses debug tepat di cluster .
  • Github
  • Statistik GH singkat: 1154 bintang, 279 komit, 23 kontributor.
  • Bahasa: Pergi.
  • Lisensi: Apache License 2.0.

Alat ini dimaksudkan untuk proses debugging langsung di pod. Utilitasnya sederhana dan interaktif memungkinkan Anda untuk memilih debugger yang diinginkan (lihat di bawah) dan namespace + pod, di mana Anda perlu melakukan intervensi. Saat ini didukung:

  • delve - untuk aplikasi di Go;
  • GDB - melalui target remote + port forwarding;
  • Penerusan port JDWP untuk debugging aplikasi Java.

Dari sisi IDE, dukungan hanya tersedia dalam VScode (dengan bantuan ekstensi ), namun, rencana untuk tahun ini (2019) termasuk Eclipse dan Intellij.

Untuk proses debug, Squash menjalankan wadah istimewa pada node cluster, jadi Anda harus terlebih dahulu menjadi terbiasa dengan mode aman untuk menghindari masalah keamanan.

Solusi Terpadu


Kami beralih ke artileri berat - lebih banyak proyek "skala besar" yang dirancang untuk segera menutup banyak kebutuhan pengembang.

NB : Daftar kami tentu memiliki tempat di utilitas werf Open Source kami (sebelumnya dikenal sebagai dapp). Namun, kami menulis dan membicarakannya lebih dari sekali, dan karena itu memutuskan untuk tidak memasukkannya dalam ulasan. Bagi mereka yang ingin berkenalan dengan kemampuannya, kami sarankan membaca / mendengarkan laporan " werf - alat kami untuk CI / CD di Kubernetes ".

Devspace


  • Intinya: bagi mereka yang ingin mulai bekerja di Kubernetes, tetapi tidak ingin pergi jauh ke hutannya .
  • Github
  • Statistik GH singkat: 630 bintang, komit 1912, 13 kontributor.
  • Bahasa: Pergi.
  • Lisensi: Apache License 2.0.

Solusinya adalah dari perusahaan dengan nama yang sama yang menyediakan kluster yang dikelola dengan Kubernet untuk pengembangan tim. Utilitas ini dibuat untuk klaster komersial, tetapi berfungsi baik dengan yang lain.

Ketika Anda menjalankan perintah devspace init di direktori dengan proyek, mereka akan menawarkan Anda (dalam mode interaktif):

  • pilih cluster Kubernetes yang berfungsi,
  • gunakan Dockerfile ada (atau buat yang baru) untuk membuat wadah berdasarkan itu,
  • pilih repositori untuk menyimpan gambar kontainer, dll.

Setelah semua langkah persiapan ini, Anda dapat memulai pengembangan dengan menjalankan perintah devspace dev . Ini akan mengumpulkan wadah, mengunggahnya ke repositori, meluncurkan penyebaran ke kluster dan mulai meneruskan porta dan menyinkronkan wadah dengan direktori lokal.

Secara opsional akan ditawarkan untuk pergi ke wadah oleh terminal. Anda tidak boleh menolak, karena dalam kenyataannya wadah dimulai dengan perintah sleep, dan untuk pengujian yang sebenarnya aplikasi harus dimulai secara manual.

Akhirnya, perintah devspace deploy aplikasi dan infrastruktur terkait ke dalam cluster, setelah semuanya mulai berfungsi dalam mode pertempuran.

Seluruh konfigurasi proyek disimpan dalam file devspace.yaml . Selain pengaturan lingkungan untuk pengembangan, di dalamnya Anda dapat menemukan deskripsi infrastruktur, mirip dengan manifes Kubernet standar, hanya sangat disederhanakan.


Arsitektur dan tonggak dengan DevSpace

Selain itu, mudah untuk menambahkan komponen yang telah ditentukan sebelumnya (misalnya, DBMS MySQL) atau bagan Helm ke proyek. Baca lebih lanjut dalam dokumentasi - ini sederhana.

Skaffold


  • Situs ; Github
  • Statistik GH singkat: 7423 bintang, 4173 komitmen, 136 kontributor.
  • Bahasa: Pergi.
  • Lisensi: Apache License 2.0.

Utilitas ini dari Google mengklaim untuk memenuhi semua kebutuhan pengembang yang kodenya akan berjalan di cluster Kubernetes. Mulai menggunakannya tidak sesederhana devspace: Anda tidak akan ditawari interaktivitas, definisi bahasa, atau Dockerfile otomatis Dockerfile .

Namun, jika itu tidak menakutkan - inilah yang dapat dilakukan Skaffold:

  • Lacak perubahan kode sumber.
  • Sinkronisasi dengan wadah pod jika tidak memerlukan perakitan.
  • Kumpulkan wadah dengan kode jika bahasa ditafsirkan, atau kompilasi artefak dan kemas dalam wadah.
  • Gambar yang dihasilkan diperiksa secara otomatis menggunakan uji struktur wadah .
  • Tandai dan unggah gambar ke Register Docker.
  • Menyebarkan aplikasi dalam sebuah cluster menggunakan kubectl, Helm, atau menyesuaikan.
  • Lakukan port forwarding.
  • Aplikasi debug ditulis dalam Java, Node.js, Python.

Alur kerja dalam berbagai variasi dijelaskan secara deklaratif dalam file skaffold.yaml . Untuk suatu proyek, Anda juga dapat menentukan beberapa profil untuk mengubah sebagian dan seluruh tahap pemasangan dan penerapan secara sebagian atau seluruhnya. Misalnya, untuk pengembangan, tentukan gambar dasar yang sesuai untuk pengembang, dan untuk pementasan dan produksi - minimum (+ gunakan securityContext untuk wadah atau mendefinisikan kembali kluster di mana aplikasi akan digunakan).

Kontainer Docker dapat dibuat secara lokal atau jarak jauh: di Google Cloud Build atau di cluster menggunakan Kaniko . Bazel dan Jib Maven / Gradle juga didukung. Untuk memberi tag, Skaffold mendukung banyak strategi: dengan git commit hash, tanggal / waktu, jumlah sumber, dll.

Secara terpisah, perlu dicatat kemungkinan menguji wadah. Kerangka uji struktur wadah yang telah disebutkan menawarkan metode verifikasi berikut:

  • Eksekusi perintah dalam konteks wadah dengan melacak status keluar dan memeriksa teks "knalpot" dari perintah.
  • Memeriksa keberadaan file dalam wadah dan atribut yang cocok ditentukan.
  • Kontrol ekspresi reguler dari konten file.
  • Verifikasi metadata gambar ( ENV , ENTRYPOINT , ENTRYPOINT , dll.).
  • Periksa kompatibilitas lisensi.

File tidak disinkronkan dengan wadah dengan cara yang paling optimal: Skaffold hanya membuat arsip dengan sumber, menyalinnya dan membukanya di wadah (tar harus dipasang). Oleh karena itu, jika tugas utama Anda adalah menyinkronkan kode, lebih baik mencari solusi khusus (ksync).


Tonggak sejarah di Skaffold

Secara umum, alat ini tidak memungkinkan abstrak dari manifes Kubernetes dan tidak memiliki interaktivitas, sehingga mungkin tampak sulit untuk dikuasai. Tapi ini juga plus - kebebasan bertindak yang besar.

Taman


  • Situs ; Github
  • Statistik singkat GH: 1063 bintang, komitmen 1927, 17 kontributor.
  • Bahasa: TypeScript (direncanakan untuk membagi proyek menjadi beberapa komponen, beberapa di antaranya akan on Go, serta membuat SDK untuk membuat add-on pada TypeScript / JavaScript dan Go) .
  • Lisensi: Apache License 2.0.

Seperti Skaffold, Garden bertujuan untuk mengotomatiskan proses pengiriman kode aplikasi ke kluster K8s. Untuk melakukan ini, Anda harus terlebih dahulu menggambarkan struktur proyek dalam file YAML, dan kemudian jalankan perintah Garden garden dev . Dia akan melakukan semua keajaiban:

  • Akan mengumpulkan kontainer dengan berbagai bagian proyek.
  • Akan melakukan tes integrasi dan unit, jika ada yang dijelaskan.
  • Luncurkan semua komponen proyek ke kluster.
  • Jika kode sumber berubah, itu akan memulai kembali seluruh pipa.

Fokus utama saat menggunakan alat ini adalah pada pembagian cluster jarak jauh oleh tim pengembang. Dalam hal ini, jika beberapa tahap perakitan dan pengujian telah dilakukan, ini akan secara signifikan mempercepat seluruh proses, karena Garden akan dapat menggunakan hasil yang di-cache.

Modul proyek dapat berupa wadah, wadah Maven, bagan Helm, manifes untuk kubectl apply atau bahkan fungsi OpenFaaS. Dan salah satu modul dapat ditarik dari repositori Git jarak jauh. Modul dapat menentukan (atau mungkin tidak) layanan, tugas, dan tes. Layanan dan tugas dapat memiliki dependensi, sehingga Anda dapat menentukan urutan penyebaran layanan, mengatur peluncuran tugas dan tes.

Garden menyediakan pengguna dengan dashboard yang indah (masih dalam keadaan eksperimental ) di mana grafik proyek ditampilkan: komponen, urutan perakitan, tugas dan tes, hubungan dan ketergantungan mereka. Langsung di browser, Anda juga dapat melihat log dari semua komponen proyek, memeriksa apa yang ditampilkan komponen ini atau melalui HTTP (kecuali, tentu saja, sumber daya masuk dinyatakan untuk itu).


Panel untuk Taman

Alat ini juga memiliki mode hot-reload, yang hanya menyinkronkan perubahan skrip dengan wadah di cluster, sangat mempercepat proses debugging aplikasi. Garden memiliki dokumentasi yang baik dan sekumpulan contoh yang baik untuk segera memulai dan mulai menggunakan. Ngomong-ngomong, baru-baru ini, kami menerbitkan terjemahan artikel dari penulisnya.

Kesimpulan


Tentu saja, daftar alat untuk mengembangkan dan men-debug aplikasi di Kubernetes tidak terbatas. Ada banyak utilitas yang sangat berguna dan praktis yang layak, jika bukan artikel terpisah, maka - setidaknya - sebutkan. Beri tahu kami apa yang Anda gunakan, masalah apa yang Anda temui dan bagaimana Anda menyelesaikannya!

PS


Baca juga di blog kami:

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


All Articles