Alat untuk pengembang aplikasi yang berjalan di Kubernetes

Alat untuk pengembang aplikasi yang berjalan di Kubernetes

Pendekatan modern terhadap operasi memecahkan banyak masalah bisnis yang mendesak. Kontainer dan orkestra memudahkan penskalaan proyek dengan kompleksitas apa pun, menyederhanakan rilis versi baru, menjadikannya lebih andal, namun pada saat yang sama menciptakan masalah tambahan bagi pengembang. Pemrogram, pertama-tama, peduli dengan kodenya: arsitektur, kualitas, kinerja, keanggunan - dan bukan cara kerjanya di Kubernetes dan cara menguji dan men-debugnya setelah melakukan perubahan minimal sekalipun. Oleh karena itu, sangatlah wajar jika alat untuk Kubernetes dikembangkan secara aktif, membantu memecahkan masalah bahkan bagi pengembang yang paling β€œkuno” dan memungkinkan mereka untuk fokus pada hal utama.

Ulasan ini memberikan informasi singkat tentang beberapa alat yang membuat hidup lebih mudah bagi seorang programmer yang kodenya dijalankan di pod'ax cluster Kubernetes.

Pembantu sederhana

Kubectl-debug

  • Intinya: tambahkan container Anda ke sebuah Pod dan lihat apa yang terjadi di dalamnya.
  • GitHub.
  • Statistik GH singkat: 715 bintang, 54 komitmen, 9 kontributor.
  • Bahasa: Pergi.
  • Lisensi: Lisensi Apache 2.0.

Plugin untuk kubectl ini memungkinkan Anda membuat container tambahan di dalam pod yang diinginkan, yang akan berbagi namespace proses dengan container lain. Di dalamnya Anda dapat men-debug operasi pod: memeriksa jaringan, mendengarkan lalu lintas jaringan, melakukan strace dari proses yang diinginkan, dll.

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

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

telepresence

  • Intinya: mentransfer aplikasi ke komputer Anda. Kembangkan dan debug secara lokal.
  • Situs web; GitHub.
  • Statistik GH singkat: 2131 bintang, 2712 komitmen, 33 kontributor.
  • Bahasa: Piton.
  • Lisensi: Lisensi Apache 2.0.

Ide dari snap-in ini adalah untuk meluncurkan sebuah container dengan aplikasi di komputer pengguna lokal dan mem-proxy semua lalu lintas dari cluster ke sana dan kembali. Pendekatan ini memungkinkan Anda mengembangkan secara lokal hanya dengan mengedit file di IDE favorit Anda: hasilnya akan segera tersedia.

Keuntungan menjalankan secara lokal adalah kemudahan pengeditan dan hasil instan, kemampuan untuk men-debug aplikasi dengan cara biasa. Kelemahannya adalah ia menuntut kecepatan koneksi, yang terutama terlihat ketika Anda harus bekerja dengan aplikasi dengan RPS dan lalu lintas yang cukup tinggi. Selain itu, Telepresence mempunyai masalah dengan pemasangan volume pada Windows, yang dapat menjadi batasan yang menentukan bagi pengembang yang terbiasa dengan OS ini.

Kami telah berbagi pengalaman kami menggunakan Telepresence di sini.

sinkronisasi

  • Intinya: sinkronisasi kode yang hampir seketika dengan container di cluster.
  • GitHub.
  • Statistik GH singkat: 555 bintang, 362 komitmen, 11 kontributor.
  • Bahasa: Pergi.
  • Lisensi: Lisensi Apache 2.0.

Utilitas ini memungkinkan Anda untuk menyinkronkan konten direktori lokal dengan direktori kontainer yang berjalan di cluster. Alat seperti itu sangat cocok untuk pengembang dalam bahasa pemrograman skrip, yang masalah utamanya adalah mengirimkan kode ke wadah yang sedang berjalan. Ksync dirancang untuk meredakan sakit kepala ini.

Ketika diinisialisasi sekali dengan perintah ksync init DaemonSet dibuat di cluster, yang digunakan untuk memantau status sistem file dari container yang dipilih. Di komputer lokalnya, pengembang menjalankan perintah ksync watch, yang memantau konfigurasi dan berjalan syncthing, yang secara langsung menyinkronkan file dengan cluster.

Yang tersisa hanyalah menginstruksikan ksync apa yang harus disinkronkan dengan apa. Misalnya, perintah ini:

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

...akan membuat pengamat bernama myprojectyang akan mencari pod dengan label app=backend dan coba sinkronkan direktori lokal /home/user/myproject/ dengan katalog /var/www/myproject/ di wadah yang disebut php.

Masalah dan catatan tentang ksync dari pengalaman kami:

  • Harus digunakan pada node cluster Kubernetes overlay2 sebagai driver penyimpanan untuk Docker. Utilitas ini tidak akan berfungsi dengan utilitas lain.
  • Saat menggunakan Windows sebagai OS klien, pengamat sistem file mungkin tidak berfungsi dengan benar. Bug ini diketahui saat bekerja dengan direktori besar - dengan sejumlah besar file dan direktori bersarang. Kami membuat masalah yang relevan dalam proyek sinkronisasi, tetapi belum ada kemajuan (sejak awal Juli).
  • Gunakan berkas .stignore untuk menentukan jalur atau pola file yang tidak perlu disinkronkan (misalnya, direktori app/cache ΠΈ .git).
  • Secara default, ksync akan memulai ulang container setiap kali file berubah. Untuk Node.js ini nyaman, tetapi untuk PHP sama sekali tidak diperlukan. Lebih baik matikan opcache dan gunakan flag --reload=false.
  • Konfigurasi selalu dapat diperbaiki $HOME/.ksync/ksync.yaml.

labu

  • Intinya: proses debug langsung di cluster.
  • GitHub.
  • Statistik GH singkat: 1154 bintang, 279 komitmen, 23 kontributor.
  • Bahasa: Pergi.
  • Lisensi: Lisensi Apache 2.0.

Alat ini dirancang untuk proses debug langsung di pod. Utilitasnya sederhana dan interaktif memungkinkan Anda memilih debugger yang diinginkan (Lihat di bawah) dan namespace + pod, yang prosesnya perlu Anda campur tangan. Saat ini didukung:

  • menyelidiki - untuk aplikasi Go;
  • GDB - melalui penerusan port jarak jauh target;
  • Penerusan port JDWP untuk men-debug aplikasi Java.

Di sisi IDE, dukungan hanya tersedia di VScode (menggunakan ekspansi), namun, rencana untuk tahun ini (2019) mencakup Eclipse dan Intellij.

Untuk men-debug proses, Squash menjalankan kontainer istimewa pada node cluster, jadi Anda harus terlebih dahulu memahami kemampuannya mode aman untuk menghindari masalah keamanan.

Solusi lengkap

Mari beralih ke artileri berat - lebih banyak proyek β€œberskala besar” yang dirancang untuk segera memenuhi banyak kebutuhan pengembang.

NB: Tentu saja, dalam daftar ini terdapat tempat untuk utilitas Open Source kami wer (sebelumnya dikenal sebagai dapp). Namun, kami telah menulis dan membicarakannya lebih dari sekali, dan oleh karena itu kami memutuskan untuk tidak memasukkannya ke dalam ulasan. Bagi mereka yang ingin lebih mengenal kemampuannya, kami menyarankan untuk membaca/mendengarkan laporannya β€œwerf adalah alat kami untuk CI/CD di Kubernetes'.

Ruang Pengembang

  • Intinya: bagi mereka yang ingin mulai bekerja di Kubernetes, tetapi tidak ingin mendalami hutannya.
  • GitHub.
  • Statistik GH singkat: 630 bintang, 1912 komitmen, 13 kontributor.
  • Bahasa: Pergi.
  • Lisensi: Lisensi Apache 2.0.

Solusi dari perusahaan dengan nama yang sama, yang menyediakan cluster terkelola dengan Kubernetes untuk pengembangan tim. Utilitas ini dibuat untuk cluster komersial, tetapi berfungsi baik dengan cluster lainnya.

Saat menjalankan perintah devspace init dalam katalog proyek Anda akan ditawari (secara interaktif):

  • pilih cluster Kubernetes yang berfungsi,
  • menggunakan yang ada Dockerfile (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 membangun kontainer, mengunggahnya ke repositori, meluncurkan penerapan ke cluster dan memulai penerusan porta dan sinkronisasi kontainer dengan direktori lokal.

Secara opsional, Anda akan diminta untuk memindahkan terminal ke container. Anda tidak boleh menolak, karena pada kenyataannya container dimulai dengan perintah sleep, dan untuk pengujian sebenarnya aplikasi perlu diluncurkan secara manual.

Terakhir, tim devspace deploy meluncurkan aplikasi dan infrastruktur terkait ke cluster, setelah itu semuanya mulai berfungsi dalam mode pertempuran.

Semua konfigurasi proyek disimpan dalam file devspace.yaml. Selain pengaturan lingkungan pengembangan, Anda juga dapat menemukan deskripsi infrastruktur di dalamnya, mirip dengan manifes Kubernetes standar, hanya saja sangat disederhanakan.

Alat untuk pengembang aplikasi yang berjalan di Kubernetes
Arsitektur dan tahapan utama bekerja dengan DevSpace

Selain itu, mudah untuk menambahkan komponen yang telah ditentukan sebelumnya (misalnya, DBMS MySQL) atau diagram Helm ke proyek. Baca selengkapnya di dokumentasi - itu tidak rumit.

Perancah

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

Utilitas dari Google ini mengklaim dapat memenuhi semua kebutuhan pengembang yang kodenya akan berjalan di cluster Kubernetes. Memulai menggunakannya tidak semudah devspace: tidak ada interaktivitas, deteksi bahasa, dan pembuatan otomatis Dockerfile mereka tidak akan menawarkannya kepada Anda di sini.

Namun, jika hal ini tidak membuat Anda takut, inilah yang Skaffold izinkan Anda lakukan:

  • Lacak perubahan kode sumber.
  • Sinkronkan dengan wadah pod jika tidak memerlukan perakitan.
  • Kumpulkan wadah dengan kode, jika bahasanya ditafsirkan, atau kompilasi artefak dan kemas ke dalam wadah.
  • Gambar yang dihasilkan diperiksa secara otomatis menggunakan uji struktur wadah.
  • Menandai dan mengunggah gambar ke Docker Registry.
  • Terapkan aplikasi dalam cluster menggunakan kubectl, Helm, atau kustomize.
  • Lakukan penerusan porta.
  • Debug aplikasi yang ditulis dalam Java, Node.js, Python.

Alur kerja dalam berbagai variasi dijelaskan secara deklaratif dalam file skaffold.yaml. Untuk sebuah proyek, Anda juga dapat menentukan beberapa profil di mana Anda dapat mengubah sebagian atau seluruh tahap perakitan dan penerapan. Misalnya, untuk pengembangan, tentukan gambar dasar yang nyaman bagi pengembang, dan untuk pementasan dan produksi - gambar minimal (+ gunakan securityContext container atau mendefinisikan ulang cluster tempat aplikasi akan disebarkan).

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

Secara terpisah, perlu diperhatikan kemungkinan pengujian kontainer. Kerangka kerja pengujian struktur kontainer yang telah disebutkan menawarkan metode verifikasi berikut:

  • Menjalankan perintah dalam konteks wadah dengan melacak status keluar dan memeriksa keluaran teks dari perintah.
  • Memeriksa keberadaan file dalam container dan mencocokkan atribut yang ditentukan.
  • Kontrol konten file menggunakan ekspresi reguler.
  • Verifikasi metadata gambar (ENV, ENTRYPOINT, VOLUMES dll).
  • Memeriksa kompatibilitas lisensi.

Sinkronisasi file dengan wadah tidak dilakukan dengan cara yang paling optimal: Skaffold hanya membuat arsip dengan sumbernya, menyalinnya dan membongkarnya ke dalam wadah (tar harus diinstal). Oleh karena itu, jika tugas utama Anda adalah sinkronisasi kode, lebih baik mencari solusi khusus (ksync).

Alat untuk pengembang aplikasi yang berjalan di Kubernetes
Tahapan utama pengoperasian Skaffold

Secara umum, alat ini tidak memungkinkan Anda melakukan abstraksi dari manifes Kubernetes dan tidak memiliki interaktivitas apa pun, sehingga mungkin tampak sulit untuk dikuasai. Tapi ini juga keuntungannya - kebebasan bertindak yang lebih besar.

Taman

  • Situs web; GitHub.
  • Statistik GH singkat: 1063 bintang, 1927 komitmen, 17 kontributor.
  • Bahasa: Skrip Ketik (rencananya proyek ini akan dibagi menjadi beberapa komponen, beberapa di antaranya akan ada di Go, dan juga membuat SDK untuk membuat add-on di TypeScript/JavaScript dan Go).
  • Lisensi: Lisensi Apache 2.0.

Seperti Skaffold, Garden bertujuan untuk mengotomatiskan proses pengiriman kode aplikasi ke cluster K8s. Untuk melakukannya, pertama-tama Anda perlu menjelaskan struktur proyek dalam file YAML, lalu menjalankan perintah garden dev. Dia akan melakukan semua keajaiban:

  • Kumpulkan kontainer dengan berbagai bagian proyek.
  • Melakukan pengujian integrasi dan unit, jika ada yang dijelaskan.
  • Meluncurkan semua komponen proyek ke cluster.
  • Jika kode sumber berubah, seluruh pipeline akan dimulai ulang.

Fokus utama penggunaan alat ini adalah berbagi cluster jarak jauh dengan tim pengembangan. Dalam hal ini, jika beberapa langkah pembangunan dan pengujian telah dilakukan, ini akan mempercepat keseluruhan proses secara signifikan, karena Garden akan dapat menggunakan hasil cache.

Modul proyek dapat berupa kontainer, kontainer Maven, diagram Helm, manifes kubectl apply atau bahkan fungsi OpenFaaS. Selain itu, modul apa pun dapat diambil dari repositori Git jarak jauh. Sebuah modul mungkin atau mungkin tidak mendefinisikan layanan, tugas, dan tes. Layanan dan tugas dapat memiliki ketergantungan, sehingga Anda dapat menentukan urutan penerapan layanan tertentu dan mengatur peluncuran tugas dan pengujian.

Garden memberi pengguna dasbor yang indah (saat ini ada di keadaan eksperimental), yang menampilkan grafik proyek: komponen, urutan perakitan, pelaksanaan tugas dan pengujian, koneksi dan ketergantungannya. Tepat di browser, Anda dapat melihat log semua komponen proyek dan memeriksa output komponen tertentu melalui HTTP (jika, tentu saja, sumber daya ingress dideklarasikan untuk komponen tersebut).

Alat untuk pengembang aplikasi yang berjalan di Kubernetes
Panel untuk Taman

Alat ini juga memiliki mode hot-reload, yang hanya menyinkronkan perubahan skrip dengan container di cluster, sehingga sangat mempercepat proses debugging aplikasi. Taman punya yang bagus dokumentasi dan tidak buruk kumpulan contoh, memungkinkan Anda dengan cepat terbiasa dan mulai menggunakannya. Omong-omong, kami baru saja menerbitkannya terjemahan artikel dari penulisnya.

Kesimpulan

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

PS

Baca juga di blog kami:

Sumber: www.habr.com

Tambah komentar