Alat untuk pembangun aplikasi yang berjalan pada Kubernetes

Alat untuk pembangun aplikasi yang berjalan pada Kubernetes

Pendekatan moden untuk operasi menyelesaikan banyak masalah perniagaan yang mendesak. Bekas dan pengaturcara memudahkan untuk menskalakan projek dengan sebarang kerumitan, memudahkan keluaran versi baharu, menjadikannya lebih dipercayai, tetapi pada masa yang sama ia menimbulkan masalah tambahan untuk pembangun. Pengaturcara, pertama sekali, mengambil berat tentang kodnya: seni bina, kualiti, prestasi, keanggunan - dan bukannya bagaimana ia akan berfungsi dalam Kubernetes dan cara menguji dan nyahpepijatnya selepas membuat perubahan yang minimum. Oleh itu, adalah wajar bahawa alat untuk Kubernetes sedang dibangunkan secara aktif, membantu menyelesaikan masalah walaupun pembangun yang paling "kuno" dan membenarkan mereka menumpukan perhatian pada perkara utama.

Semakan ini memberikan maklumat ringkas tentang beberapa alatan yang memudahkan hidup seorang pengaturcara yang kodnya dijalankan dalam pod'ax gugusan Kubernetes.

Pembantu sederhana

Kubectl-debug

  • Garisan bawah: tambahkan bekas anda pada Pod dan lihat apa yang berlaku di dalamnya.
  • GitHub.
  • Statistik GH ringkas: 715 bintang, 54 komitmen, 9 penyumbang.
  • Bahasa: Pergi.
  • Lesen: Lesen Apache 2.0.

Pemalam untuk kubectl ini membolehkan anda mencipta bekas tambahan di dalam pod yang diminati, yang akan berkongsi ruang nama proses dengan bekas lain. Di dalamnya anda boleh menyahpepijat operasi pod: semak rangkaian, dengar trafik rangkaian, lakukan proses yang diminati, dsb.

Anda juga boleh bertukar kepada bekas proses dengan menjalankan chroot /proc/PID/root - ini boleh menjadi sangat mudah apabila anda perlu mendapatkan cangkerang akar dalam bekas yang mana ia ditetapkan dalam manifes securityContext.runAs.

Alat ini mudah dan berkesan, jadi ia boleh berguna kepada setiap pembangun. Kami menulis lebih lanjut mengenainya dalam artikel berasingan.

telepresence

  • Garisan bawah: pindahkan aplikasi ke komputer anda. Membangunkan dan nyahpepijat secara setempat.
  • Website; GitHub.
  • Statistik GH ringkas: 2131 bintang, 2712 komitmen, 33 penyumbang.
  • Bahasa: Python.
  • Lesen: Lesen Apache 2.0.

Idea snap-in ini adalah untuk melancarkan bekas dengan aplikasi pada komputer pengguna tempatan dan proksi semua trafik dari kluster ke sana dan belakang. Pendekatan ini membolehkan anda membangun secara tempatan dengan hanya mengedit fail dalam IDE kegemaran anda: hasilnya akan tersedia serta-merta.

Kelebihan menjalankan secara tempatan adalah kemudahan suntingan dan hasil segera, keupayaan untuk menyahpepijat aplikasi dengan cara biasa. Kelemahannya ialah ia menuntut kelajuan sambungan, yang amat ketara apabila anda perlu bekerja dengan aplikasi dengan RPS dan trafik yang agak tinggi. Di samping itu, Telepresence mempunyai masalah dengan lekapan volum pada Windows, yang boleh menjadi had yang menentukan untuk pembangun yang terbiasa dengan OS ini.

Kami telah pun berkongsi pengalaman kami menggunakan Telepresence di sini.

Ksync

  • Garisan bawah: penyegerakan kod hampir serta-merta dengan bekas dalam kelompok.
  • GitHub.
  • Statistik GH ringkas: 555 bintang, 362 komitmen, 11 penyumbang.
  • Bahasa: Pergi.
  • Lesen: Lesen Apache 2.0.

Utiliti ini membolehkan anda menyegerakkan kandungan direktori tempatan dengan direktori bekas yang berjalan dalam kelompok. Alat sedemikian sesuai untuk pembangun dalam bahasa pengaturcaraan skrip, yang masalah utamanya ialah menghantar kod ke bekas yang sedang berjalan. Ksync direka untuk melegakan sakit kepala ini.

Apabila dimulakan sekali dengan arahan ksync init DaemonSet dicipta dalam kelompok, yang digunakan untuk memantau keadaan sistem fail bekas yang dipilih. Pada komputer tempatannya, pembangun menjalankan arahan ksync watch, yang memantau konfigurasi dan berjalan syncthing, yang menyegerakkan fail secara langsung dengan kluster.

Yang tinggal hanyalah mengarahkan ksync apa yang hendak disegerakkan dengan apa. Sebagai contoh, arahan ini:

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

... akan mencipta pemerhati bernama myprojectyang akan mencari pod dengan label app=backend dan cuba menyegerakkan direktori tempatan /home/user/myproject/ dengan katalog /var/www/myproject/ pada bekas yang dipanggil php.

Masalah dan nota mengenai ksync dari pengalaman kami:

  • Mesti digunakan pada nod kelompok Kubernetes overlay2 sebagai pemacu storan untuk Docker. Utiliti tidak akan berfungsi dengan mana-mana yang lain.
  • Apabila menggunakan Windows sebagai OS pelanggan, pemerhati sistem fail mungkin tidak berfungsi dengan betul. Pepijat ini diperhatikan apabila bekerja dengan direktori yang besar - dengan sejumlah besar fail dan direktori bersarang. Kami mencipta isu berkaitan dalam projek penyegerakan, tetapi belum ada kemajuan mengenainya (sejak awal bulan Julai).
  • Gunakan fail .stignore untuk menentukan laluan atau corak fail yang tidak perlu disegerakkan (contohnya, direktori app/cache ΠΈ .git).
  • Secara lalai, ksync akan memulakan semula bekas apabila fail berubah. Untuk Node.js ini mudah, tetapi untuk PHP ia sama sekali tidak diperlukan. Lebih baik matikan opcache dan gunakan bendera --reload=false.
  • Konfigurasi sentiasa boleh dibetulkan dalam $HOME/.ksync/ksync.yaml.

Skuasy

  • Garisan bawah: proses nyahpepijat terus dalam kelompok.
  • GitHub.
  • Statistik GH ringkas: 1154 bintang, 279 komitmen, 23 penyumbang.
  • Bahasa: Pergi.
  • Lesen: Lesen Apache 2.0.

Alat ini direka untuk proses penyahpepijatan terus dalam pod. Utiliti ini mudah dan secara interaktif membolehkan anda memilih penyahpepijat yang dikehendaki (lihat di bawah) dan ruang nama + pod, dalam proses yang anda perlu campur tangan. Pada masa ini disokong:

  • menyelidiki - untuk aplikasi Go;
  • GDB - melalui jarak jauh sasaran + pemajuan port;
  • Pemajuan port JDWP untuk menyahpepijat aplikasi Java.

Di sisi IDE, sokongan hanya tersedia dalam VScode (menggunakan pengembangan), bagaimanapun, rancangan untuk tahun semasa (2019) termasuk Eclipse dan Intellij.

Untuk menyahpepijat proses, Skuasy menjalankan bekas istimewa pada nod kluster, jadi anda mesti membiasakan diri dengan keupayaan terlebih dahulu safe mode untuk mengelakkan masalah keselamatan.

Penyelesaian lengkap

Mari kita beralih kepada artileri berat - lebih banyak projek "berskala besar" yang direka untuk segera memenuhi banyak keperluan pemaju.

NB: Dalam senarai ini, sudah tentu, terdapat tempat untuk utiliti Sumber Terbuka kami werf (dahulunya dikenali sebagai dapp). Walau bagaimanapun, kami telah menulis dan membincangkannya lebih daripada sekali, dan oleh itu memutuskan untuk tidak memasukkannya dalam semakan. Bagi mereka yang ingin menjadi lebih biasa dengan keupayaannya, kami mengesyorkan membaca/mendengar laporan "werf ialah alat kami untuk CI/CD dalam Kubernetes'.

DevSpace

  • Garisan bawah: bagi mereka yang ingin mula bekerja di Kubernetes, tetapi tidak mahu menyelami jauh ke dalam hutannya.
  • GitHub.
  • Statistik GH ringkas: 630 bintang, 1912 komited, 13 penyumbang.
  • Bahasa: Pergi.
  • Lesen: Lesen Apache 2.0.

Penyelesaian daripada syarikat dengan nama yang sama, yang menyediakan kluster terurus dengan Kubernetes untuk pembangunan pasukan. Utiliti telah dicipta untuk kelompok komersial, tetapi berfungsi hebat dengan mana-mana yang lain.

Apabila menjalankan arahan devspace init dalam katalog projek anda akan ditawarkan (secara interaktif):

  • pilih kelompok Kubernetes yang berfungsi,
  • guna yang sedia ada Dockerfile (atau jana yang baharu) untuk mencipta bekas berdasarkannya,
  • pilih repositori untuk menyimpan imej bekas, dsb.

Selepas semua langkah persediaan ini, anda boleh memulakan pembangunan dengan menjalankan arahan devspace dev. Ia akan membina bekas, memuat naiknya ke repositori, melancarkan penggunaan ke kluster dan memulakan penghantaran port dan penyegerakan bekas dengan direktori tempatan.

Secara pilihan, anda akan digesa untuk mengalihkan terminal ke bekas. Anda tidak sepatutnya menolak, kerana sebenarnya bekas bermula dengan arahan tidur, dan untuk ujian sebenar aplikasi itu perlu dilancarkan secara manual.

Akhirnya, pasukan devspace deploy melancarkan aplikasi dan infrastruktur yang berkaitan ke kluster, selepas itu semuanya mula berfungsi dalam mod pertempuran.

Semua konfigurasi projek disimpan dalam fail devspace.yaml. Sebagai tambahan kepada tetapan persekitaran pembangunan, anda juga boleh mencari penerangan tentang infrastruktur di dalamnya, serupa dengan manifes Kubernetes standard, hanya dipermudahkan.

Alat untuk pembangun aplikasi yang berjalan pada Kubernetes
Seni bina dan peringkat utama bekerja dengan DevSpace

Di samping itu, adalah mudah untuk menambah komponen yang dipratentukan (contohnya, MySQL DBMS) atau carta Helm pada projek. Baca lebih lanjut dalam dokumentasi - ia tidak rumit.

Skaffold

  • Website; GitHub.
  • Statistik GH ringkas: 7423 bintang, 4173 komitmen, 136 penyumbang.
  • Bahasa: Pergi.
  • Lesen: Lesen Apache 2.0.

Utiliti daripada Google ini mendakwa untuk menampung semua keperluan pembangun yang kodnya entah bagaimana akan berjalan pada kelompok Kubernetes. Mula menggunakannya tidak semudah devspace: tiada interaktiviti, pengesanan bahasa dan ciptaan automatik Dockerfile mereka tidak akan menawarkannya kepada anda di sini.

Walau bagaimanapun, jika ini tidak menakutkan anda, berikut ialah perkara yang Skaffold benarkan anda lakukan:

  • Jejaki perubahan kod sumber.
  • Segerakkannya dengan bekas pod jika ia tidak memerlukan pemasangan.
  • Kumpulkan bekas dengan kod, jika bahasa ditafsirkan, atau susun artifak dan bungkusnya ke dalam bekas.
  • Imej yang terhasil disemak secara automatik menggunakan ujian-struktur bekas.
  • Menandai dan memuat naik imej ke Pendaftaran Docker.
  • Sebarkan aplikasi dalam kelompok menggunakan kubectl, Helm atau kustomize.
  • Lakukan penghantaran port.
  • Aplikasi nyahpepijat yang ditulis dalam Java, Node.js, Python.

Aliran kerja dalam pelbagai variasi diterangkan secara deklaratif dalam fail skaffold.yaml. Untuk projek, anda juga boleh menentukan beberapa profil di mana anda boleh menukar sebahagian atau sepenuhnya peringkat pemasangan dan penggunaan. Sebagai contoh, untuk pembangunan, nyatakan imej asas yang sesuai untuk pembangun, dan untuk pementasan dan pengeluaran - yang minimum (+ gunakan securityContext bekas atau takrifkan semula kluster di mana aplikasi akan digunakan).

Bekas docker boleh dibina secara tempatan atau dari jauh: in Binaan Awan Google atau dalam kelompok menggunakan Kaniko. Bazel dan Jib Maven/Gradle juga disokong. Untuk penandaan, Skaffold menyokong banyak strategi: dengan git commit hash, tarikh/masa, sha256-sum sumber, dsb.

Secara berasingan, perlu diperhatikan kemungkinan bekas ujian. Rangka kerja ujian struktur kontena yang telah disebutkan menawarkan kaedah pengesahan berikut:

  • Melaksanakan arahan dalam konteks bekas dengan menjejak status keluar dan menyemak output teks arahan.
  • Menyemak kehadiran fail dalam bekas dan memadankan atribut yang ditentukan.
  • Kawalan kandungan fail menggunakan ungkapan biasa.
  • Pengesahan metadata imej (ENV, ENTRYPOINT, VOLUMES dan sebagainya).
  • Menyemak keserasian lesen.

Menyegerakkan fail dengan bekas tidak dijalankan dengan cara yang paling optimum: Skaffold hanya mencipta arkib dengan sumber, menyalinnya dan membongkarnya dalam bekas (tar mesti dipasang). Oleh itu, jika tugas utama anda ialah penyegerakan kod, adalah lebih baik untuk melihat ke arah penyelesaian khusus (ksync).

Alat untuk pembangun aplikasi yang berjalan pada Kubernetes
Peringkat utama operasi Skaffold

Secara umum, alat ini tidak membenarkan anda membuat abstrak daripada manifes Kubernetes dan tidak mempunyai sebarang interaktiviti, jadi ia mungkin kelihatan sukar untuk dikuasai. Tetapi ini juga kelebihannya - kebebasan bertindak yang lebih besar.

Taman

  • Website; GitHub.
  • Statistik GH ringkas: 1063 bintang, 1927 komited, 17 penyumbang.
  • Bahasa: TypeScript (ia dirancang untuk membahagikan projek kepada beberapa komponen, sebahagian daripadanya akan berada dalam Go, dan juga membuat SDK untuk membuat alat tambah dalam TypeScript/JavaScript dan Go).
  • Lesen: Lesen Apache 2.0.

Seperti Skaffold, Garden bertujuan untuk mengautomasikan proses penghantaran kod aplikasi kepada kluster K8s. Untuk melakukan ini, anda perlu terlebih dahulu menerangkan struktur projek dalam fail YAML, dan kemudian jalankan arahan garden dev. Dia akan melakukan semua keajaiban:

  • Kumpul bekas dengan pelbagai bahagian projek.
  • Menjalankan ujian integrasi dan unit, jika ada yang telah diterangkan.
  • Melancarkan semua komponen projek ke kluster.
  • Jika kod sumber berubah, ia akan memulakan semula keseluruhan saluran paip.

Fokus utama menggunakan alat ini adalah untuk berkongsi kluster jauh dengan pasukan pembangunan. Dalam kes ini, jika beberapa langkah bangunan dan ujian telah dilakukan, ini akan mempercepatkan keseluruhan proses dengan ketara, memandangkan Garden akan dapat menggunakan hasil cache.

Modul projek boleh menjadi bekas, bekas Maven, carta Helm, manifes untuk kubectl apply atau pun fungsi OpenFaaS. Selain itu, mana-mana modul boleh ditarik dari repositori Git jauh. Modul mungkin atau mungkin tidak mentakrifkan perkhidmatan, tugasan dan ujian. Perkhidmatan dan tugasan boleh mempunyai kebergantungan, jadi anda boleh menentukan urutan penggunaan perkhidmatan tertentu dan mengatur pelancaran tugasan dan ujian.

Garden menyediakan pengguna dengan papan pemuka yang cantik (kini dalam keadaan eksperimen), yang memaparkan graf projek: komponen, urutan pemasangan, pelaksanaan tugas dan ujian, sambungan dan kebergantungannya. Dalam penyemak imbas, anda boleh melihat log semua komponen projek dan menyemak apa yang dihasilkan oleh komponen tertentu melalui HTTP (jika, sudah tentu, sumber kemasukan diisytiharkan untuknya).

Alat untuk pembangun aplikasi yang berjalan pada Kubernetes
Panel untuk Taman

Alat ini juga mempunyai mod muat semula panas, yang hanya menyegerakkan perubahan skrip dengan bekas dalam kelompok, dengan sangat mempercepatkan proses penyahpepijatan aplikasi. Taman mempunyai yang baik dokumentasi dan tidak teruk set contoh, membolehkan anda membiasakan diri dengan cepat dan mula menggunakannya. By the way, baru-baru ini kami menerbitkan terjemahan artikel daripada pengarangnya.

Kesimpulan

Sudah tentu, senarai alat untuk membangunkan dan menyahpepijat aplikasi dalam Kubernetes ini tidak terhad kepada. Terdapat banyak lagi utiliti yang sangat berguna dan praktikal yang layak, jika bukan artikel yang berasingan, maka sekurang-kurangnya sebutan. Beritahu kami perkara yang anda gunakan, masalah yang anda hadapi dan cara anda menyelesaikannya!

PS

Baca juga di blog kami:

Sumber: www.habr.com

Tambah komen