Piranti kanggo pangembang aplikasi sing mlaku ing Kubernetes

Piranti kanggo pangembang aplikasi sing mlaku ing Kubernetes

Pendekatan modern kanggo operasi ngrampungake akeh masalah bisnis sing penting. Kontainer lan orkestra nggampangake skala proyek kanthi kerumitan apa wae, nyederhanakake rilis versi anyar, nggawe luwih dipercaya, nanging ing wektu sing padha nggawe masalah tambahan kanggo pangembang. Programmer, pisanan kabeh, peduli karo kode: arsitektur, kualitas, kinerja, keanggunan - lan ora carane bakal bisa ing Kubernetes lan carane nyoba lan debug sawise nggawe owah-owahan minimal. Mulane, uga cukup alami yen alat kanggo Kubernetes aktif dikembangake, mbantu ngatasi masalah malah pangembang sing paling "kuna" lan ngidini dheweke fokus ing perkara utama.

Tinjauan iki menehi informasi ringkes babagan sawetara alat sing nggawe urip luwih gampang kanggo programmer sing kode mlaku ing pod'ax kluster Kubernetes.

Pembantu sing prasaja

Kubectl-debug

  • Sisih ngisor: nambah wadhah kanggo Pod lan ndeleng apa mengkono ing.
  • GitHub.
  • Statistik GH Brief: 715 lintang, 54 komitmen, 9 kontributor.
  • Basa: Go.
  • Lisensi: Lisensi Apache 2.0.

Plugin iki kanggo kubectl ngidini sampeyan nggawe wadhah tambahan ing polong kapentingan, sing bakal nuduhake ruang jeneng proses karo wadhah liyane. Ing kono sampeyan bisa debug operasi pod: mriksa jaringan, ngrungokake lalu lintas jaringan, nglakokake proses kapentingan, lsp.

Sampeyan uga bisa ngalih menyang wadhah proses kanthi mlaku chroot /proc/PID/root - iki bisa dadi trep banget yen sampeyan kudu njupuk cangkang ROOT ing wadhah sing wis disetel ing manifest securityContext.runAs.

Alat kasebut prasaja lan efektif, saengga bisa migunani kanggo saben pangembang. We wrote liyane babagan ing kapisah artikel.

telepresence

  • Sisih ngisor: transfer aplikasi menyang komputer. Ngembangake lan debug sacara lokal.
  • situs; GitHub.
  • statistik GH Brief: 2131 lintang, 2712 laku, 33 kontributor.
  • Basa: Python.
  • Lisensi: Lisensi Apache 2.0.

Gagasan snap-in iki yaiku mbukak wadhah kanthi aplikasi ing komputer pangguna lokal lan proxy kabeh lalu lintas saka kluster menyang lan bali. Pendekatan iki ngidini sampeyan ngembangake sacara lokal kanthi mung nyunting file ing IDE favorit: asil bakal kasedhiya langsung.

Kauntungan saka mlaku sacara lokal yaiku kepenak suntingan lan asil cepet, kemampuan kanggo debug aplikasi kanthi cara biasa. Kelemahane yaiku nuntut kacepetan sambungan, sing katon utamane nalika sampeyan kudu nggarap aplikasi kanthi RPS lan lalu lintas sing cukup dhuwur. Kajaba iku, Telepresence duwe masalah karo volume mount ing Windows, sing bisa dadi watesan sing nemtokake kanggo pangembang sing wis biasa karo OS iki.

Kita wis nuduhake pengalaman nggunakake Telepresence kene.

Ksync

  • Sisih ngisor: sinkronisasi meh cepet kode karo wadhah ing kluster.
  • GitHub.
  • Statistik GH Brief: 555 lintang, 362 komitmen, 11 kontributor.
  • Basa: Go.
  • Lisensi: Lisensi Apache 2.0.

Utilitas kasebut ngidini sampeyan nyinkronake isi direktori lokal karo direktori wadhah sing mlaku ing kluster. Alat kasebut sampurna kanggo pangembang ing basa pemrograman skrip, sing masalah utama yaiku ngirim kode menyang wadhah sing mlaku. Ksync dirancang kanggo ngredhakaké sirah iki.

Nalika initialized sapisan dening printah ksync init DaemonSet digawe ing kluster, sing digunakake kanggo ngawasi kahanan sistem file saka wadhah sing dipilih. Ing komputer lokal, pangembang mbukak perintah kasebut ksync watch, sing ngawasi konfigurasi lan mlaku sinkronisasi, sing langsung nyinkronake file karo kluster.

Kabeh sing isih ana yaiku nglatih ksync apa sing kudu disinkronake karo apa. Contone, printah iki:

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

... bakal nggawe watcher jenenge myprojectkang bakal nelusuri pod karo label app=backend lan nyoba kanggo nyinkronake direktori lokal /home/user/myproject/ karo katalog /var/www/myproject/ ing wadhah disebut php.

Masalah lan cathetan babagan ksync saka pengalaman kita:

  • Kudu digunakake ing node kluster Kubernetes overlay2 minangka driver panyimpenan kanggo Docker. Utilitas kasebut ora bakal bisa digunakake karo wong liya.
  • Nalika nggunakake Windows minangka OS klien, pengawas sistem file bisa uga ora bisa digunakake kanthi bener. Bug iki diweruhi nalika nggarap direktori gedhe - kanthi file lan direktori sing akeh. Kita digawe masalah sing relevan ing proyek sinkronisasi, nanging durung ana kemajuan (wiwit awal Juli).
  • Gunakake file .stignore kanggo nemtokake path utawa pola file sing ora perlu disinkronake (contone, direktori app/cache и .git).
  • Kanthi gawan, ksync bakal miwiti maneh wadhah nalika file diganti. Kanggo Node.js iki trep, nanging kanggo PHP pancen ora perlu. Iku luwih apik kanggo mateni opcache lan nggunakake gendera --reload=false.
  • Konfigurasi bisa tansah didandani ing $HOME/.ksync/ksync.yaml.

Squash

  • Sisih ngisor: pangolahan debug langsung ing kluster.
  • GitHub.
  • statistik GH Brief: 1154 stars, 279 commits, 23 kontributor.
  • Basa: Go.
  • Lisensi: Lisensi Apache 2.0.

Alat iki dirancang kanggo proses debugging langsung ing pods. Utilitas kasebut gampang lan interaktif ngidini sampeyan milih debugger sing dikarepake (ndeleng ngisor) lan namespace + pod, ing proses sing sampeyan kudu ngintervensi. Saiki didhukung:

  • delve - kanggo aplikasi Go;
  • GDB - liwat target remote + port forwarding;
  • Terusake port JDWP kanggo debugging aplikasi Java.

Ing sisih IDE, dhukungan mung kasedhiya ing VScode (nggunakake ekspansi), Nanging, rencana kanggo taun saiki (2019) kalebu Eclipse lan Intellij.

Kanggo proses debug, Squash mbukak wadhah khusus ing simpul kluster, mula sampeyan kudu ngerti kemampuan mode aman kanggo nyegah masalah keamanan.

Solusi terpadu

Ayo pindhah menyang artileri abot - luwih akeh proyek "skala gedhe" sing dirancang kanggo nyukupi kabutuhan pangembang.

NB: Ing dhaptar iki, mesthi ana panggonan kanggo sarana Open Source kita werf (sadurunge dikenal minangka dapp). Nanging, kita wis nulis lan ngomong babagan iki luwih saka sepisan, lan mulane mutusake ora kalebu ing review. Kanggo sing pengin luwih kenal karo kemampuane, disaranake maca / ngrungokake laporan "werf minangka alat kanggo CI/CD ing Kubernetes".

DevSpace

  • Sisih ngisor: kanggo wong-wong sing pengin miwiti karya ing Kubernetes, nanging ora pengin delve jero menyang alas.
  • GitHub.
  • statistik GH Brief: 630 stars, 1912 commits, 13 kontributor.
  • Basa: Go.
  • Lisensi: Lisensi Apache 2.0.

Solusi saka perusahaan kanthi jeneng sing padha, sing nyedhiyakake klompok sing dikelola karo Kubernetes kanggo pangembangan tim. Utilitas kasebut digawe kanggo klompok komersial, nanging bisa digunakake karo liyane.

Nalika nindakake printah devspace init ing katalog proyek sampeyan bakal ditawakake (secara interaktif):

  • pilih kluster Kubernetes sing bisa digunakake,
  • nggunakake ana Dockerfile (utawa ngasilake sing anyar) kanggo nggawe wadhah adhedhasar,
  • pilih repositori kanggo nyimpen gambar wadhah, etc.

Sawise kabeh langkah preparatory iki, sampeyan bisa miwiti pembangunan kanthi mbukak printah devspace dev. Bakal mbangun wadhah kasebut, upload menyang repositori, gulungake penyebaran menyang kluster lan miwiti port forwarding lan sinkronisasi wadhah karo direktori lokal.

Opsional, sampeyan bakal dijaluk mindhah terminal menyang wadhah. Sampeyan ora kudu nolak, amarga nyatane wadhah kasebut diwiwiti kanthi prentah turu, lan kanggo tes nyata aplikasi kasebut kudu diluncurake kanthi manual.

Akhire, tim devspace deploy nggulung aplikasi lan infrastruktur sing gegandhengan karo kluster, sawise kabeh wiwit dienggo ing mode pertempuran.

Kabeh konfigurasi project disimpen ing file devspace.yaml. Saliyane setelan lingkungan pembangunan, sampeyan uga bisa nemokake gambaran saka infrastruktur ing, padha karo standar manifests Kubernetes, mung nemen simplified.

Piranti kanggo pangembang aplikasi sing mlaku ing Kubernetes
Arsitektur lan tahapan utama nggarap DevSpace

Kajaba iku, gampang kanggo nambah komponen sing wis ditemtokake (contone, MySQL DBMS) utawa grafik Helm menyang proyek kasebut. Waca liyane ing dokumentasi - iku ora rumit.

Skaffold

  • situs; GitHub.
  • statistik GH Brief: 7423 stars, 4173 commits, 136 kontributor.
  • Basa: Go.
  • Lisensi: Lisensi Apache 2.0.

Utilitas iki saka Google ngaku kanggo nutupi kabeh kabutuhan pangembang sing kode bakal mlaku ing kluster Kubernetes. Miwiti nggunakake ora gampang kaya devspace: ora ana interaktivitas, deteksi basa lan nggawe otomatis Dockerfile padha ora bakal kurban kanggo sampeyan kene.

Nanging, yen iki ora medeni sampeyan, iki Skaffold ngidini sampeyan nindakake:

  • Lacak owah-owahan kode sumber.
  • Sinkronake karo wadhah pod yen ora mbutuhake perakitan.
  • Nglumpukake wadhah kanthi kode, yen basa diinterpretasikake, utawa ngumpulake artefak lan dikemas ing wadhah.
  • Gambar sing diasilake kanthi otomatis dicenthang nggunakake wadhah-struktur-test.
  • Tagging lan upload gambar menyang Registry Docker.
  • Nyebarake aplikasi ing kluster nggunakake kubectl, Helm utawa kustomize.
  • Nindakake port forwarding.
  • Debug aplikasi sing ditulis ing Jawa, Node.js, Python.

Alur kerja ing macem-macem variasi diterangake kanthi deklaratif ing file kasebut skaffold.yaml. Kanggo proyek, sampeyan uga bisa nemtokake sawetara profil sing bisa ngganti sebagian utawa rampung tahap perakitan lan penyebaran. Contone, kanggo pangembangan, nemtokake gambar dhasar sing trep kanggo pangembang, lan kanggo pementasan lan produksi - minimal (+ nggunakake securityContext kontainer utawa nemtokake maneh kluster ing ngendi aplikasi bakal disebarake).

Wadhah Docker bisa dibangun sacara lokal utawa adoh: ing Google Cloud Mbangun utawa ing kluster nggunakake Kaniko. Bazel lan Jib Maven / Gradle uga didhukung. Kanggo menehi tag, Skaffold ndhukung akeh strategi: dening git commit hash, tanggal / wektu, sha256-jumlah sumber, lsp.

Kanthi kapisah, kudu dicathet kemungkinan tes kontaner. Kerangka kontainer-struktur-test sing wis kasebut nawakake cara verifikasi ing ngisor iki:

  • Nglakokake printah ing konteks wadhah kanthi nelusuri status metu lan mriksa output teks printah kasebut.
  • Priksa anané file ing wadhah lan cocog karo atribut sing ditemtokake.
  • Kontrol isi file nggunakake ekspresi reguler.
  • Verifikasi metadata gambar (ENV, ENTRYPOINT, VOLUMES lsp).
  • Priksa kompatibilitas lisensi.

Nyinkronake file karo wadhah ora ditindakake kanthi cara sing paling optimal: Skaffold mung nggawe arsip karo sumber, nyalin lan mbongkar ing wadhah (tar kudu diinstal). Dadi, yen tugas utama sampeyan yaiku sinkronisasi kode, luwih becik golek solusi khusus (ksync).

Piranti kanggo pangembang aplikasi sing mlaku ing Kubernetes
Tahap utama operasi Skaffold

Umumé, alat kasebut ora ngidini sampeyan abstrak saka manifests Kubernetes lan ora duwe interaktivitas, mula bisa uga angel dikuasai. Nanging iki uga kauntungan - luwih bebas tumindak.

Garden

  • situs; GitHub.
  • statistik GH Brief: 1063 lintang, 1927 commits, 17 kontributor.
  • Basa: TypeScript (direncanakake kanggo pamisah proyek kasebut dadi sawetara komponen, sawetara bakal ana ing Go, lan uga nggawe SDK kanggo nggawe tambahan ing TypeScript/JavaScript lan Go).
  • Lisensi: Lisensi Apache 2.0.

Kaya Skaffold, Garden yakuwi ngotomatisasi proses ngirim kode aplikasi menyang kluster K8s. Kanggo nindakake iki, sampeyan kudu njlèntrèhaké struktur project ing file YAML, banjur mbukak printah garden dev. Dheweke bakal nindakake kabeh sihir:

  • Nglumpukake kontaner kanthi macem-macem bagean proyek.
  • Nindakake tes integrasi lan unit, yen ana sing wis diterangake.
  • Nggulung kabeh komponen proyek menyang kluster.
  • Yen kode sumber diganti, bakal miwiti maneh kabeh pipa.

Fokus utama nggunakake alat iki yaiku nuduhake klompok remot karo tim pangembangan. Ing kasus iki, yen sawetara saka bangunan lan testing langkah wis rampung, iki bakal Ngartekno nyepetake kabeh proses, wiwit Taman bakal bisa nggunakake asil cached.

A modul project bisa dadi wadhah, wadhah Maven, grafik Helm, manifest kanggo kubectl apply utawa malah fungsi OpenFaaS. Kajaba iku, modul apa wae bisa ditarik saka repositori Git sing adoh. Modul bisa uga ora nemtokake layanan, tugas, lan tes. Layanan lan tugas bisa duwe dependensi, supaya sampeyan bisa nemtokake urutan penyebaran layanan tartamtu lan ngatur peluncuran tugas lan tes.

Taman menehi pangguna dashboard sing apik (saiki ing negara eksperimen), sing nampilake grafik proyek: komponen, urutan perakitan, eksekusi tugas lan tes, sambungan lan dependensi. Tengen ing browser, sampeyan bisa ndeleng log kabeh komponen project lan mriksa apa komponèn tartamtu output liwat HTTP (yen, mesthi, sumber ingress diumumake kanggo iku).

Piranti kanggo pangembang aplikasi sing mlaku ing Kubernetes
Panel kanggo Taman

Alat iki uga nduweni mode hot-reload, sing mung nyinkronake owah-owahan skrip karo wadhah ing kluster, kanthi cepet nyepetake proses debugging aplikasi. Taman duwe sing apik dokumentasi lan ora ala set conto, ngidini sampeyan cepet digunakake lan miwiti nggunakake. Miturut cara, mung bubar kita diterbitake terjemahan artikel saka panulise.

kesimpulan

Mesthi, dhaptar alat iki kanggo ngembangake lan debugging aplikasi ing Kubernetes ora diwatesi. Ana akeh liyane banget migunani lan praktis keperluan sing pantes, yen ora artikel kapisah, banjur paling sebutno. Dakkandhani apa sing sampeyan gunakake, masalah apa sing sampeyan temoni lan kepiye cara ngatasi!

PS

Waca uga ing blog kita:

Source: www.habr.com

Add a comment