Alat pikeun pamekar aplikasi anu dijalankeun dina Kubernetes

Alat pikeun pamekar aplikasi anu dijalankeun dina Kubernetes

Pendekatan modern pikeun operasi ngarengsekeun seueur masalah bisnis anu mendesak. Wadah sareng orkestra ngagampangkeun skala proyék tina pajeulitna naon waé, nyederhanakeun sékrési vérsi énggal, ngajantenkeun aranjeunna langkung dipercaya, tapi dina waktos anu sami nyiptakeun masalah tambahan pikeun pamekar. Programmer, mimitina, paduli ngeunaan kode na: arsitéktur, kualitas, kinerja, kaanggunan - sareng sanés kumaha éta bakal tiasa dianggo dina Kubernetes sareng kumaha nguji sareng debug saatos ngadamel perobahan anu minimal. Ku alatan éta, éta ogé wajar yén alat pikeun Kubernetes aktip dikembangkeun, ngabantosan pikeun ngabéréskeun masalah bahkan pamekar anu paling "kuno" sareng ngamungkinkeun aranjeunna fokus kana hal utama.

Tinjauan ieu nyayogikeun inpormasi ringkes ngeunaan sababaraha alat anu ngagampangkeun kahirupan pikeun programer anu kodena dijalankeun dina pod'ax klaster Kubernetes.

Pembantu basajan

Kubectl-debug

  • Handap garis: tambahkeun wadahna ka Pod sareng tingali naon anu lumangsung di jerona.
  • GitHub.
  • statistik GH ringkes: 715 béntang, 54 commits, 9 kontributor.
  • Basa: indit.
  • Lisensi: Lisensi Apache 2.0.

Plugin ieu pikeun kubectl ngamungkinkeun anjeun nyiptakeun wadah tambahan di jero pod anu dipikaresep, anu bakal ngabagi rohangan ngaran prosés sareng wadah anu sanés. Di jerona anjeun tiasa debug operasi pod: pariksa jaringan, ngadangukeun lalu lintas jaringan, laksanakeun prosés anu dipikaresep, jsb.

Anjeun oge bisa pindah ka wadah prosés ku ngajalankeun chroot /proc/PID/root - ieu tiasa pisan merenah mun anjeun kudu meunang cangkang akar dina wadahna nu eta diatur dina manifest securityContext.runAs.

Alatna saderhana sareng efektif, janten tiasa mangpaat pikeun unggal pamekar. Kami nyerat langkung seueur ngeunaan éta dina tulisan misahkeun.

telepresence

  • Handap garis: mindahkeun aplikasi ka komputer Anjeun. Ngembangkeun sareng debug sacara lokal.
  • website; GitHub.
  • statistik GH ringkes: 2131 béntang, 2712 commits, 33 kontributor.
  • Basa: Python.
  • Lisensi: Lisensi Apache 2.0.

Gagasan snap-in ieu nyaéta pikeun ngaluncurkeun wadah kalayan aplikasi dina komputer pangguna lokal sareng proxy sadaya lalu lintas ti kluster ka dinya sareng deui. Pendekatan ieu ngamungkinkeun anjeun pikeun ngembangkeun sacara lokal ku ngan saukur ngédit file dina IDE karesep anjeun: hasilna bakal langsung sayogi.

Kaunggulan tina ngajalankeun lokal nyaéta genah éditan jeung hasil instan, kamampuhan pikeun debug aplikasi dina cara biasa. The downside téh nya éta nuntut on speed sambungan, nu utamana noticeable mun anjeun kudu digawekeun ku hiji aplikasi kalawan RPS cukup tinggi na lalulintas. Salaku tambahan, Telepresence ngagaduhan masalah sareng volume mounts dina Windows, anu tiasa janten watesan anu penting pikeun pamekar anu biasa OS ieu.

Kami parantos ngabagi pangalaman ngagunakeun Telepresence di dieu.

Ksync

  • Handap garis: sinkronisasi ampir sakedapan kode jeung wadahna dina klaster.
  • GitHub.
  • statistik GH ringkes: 555 béntang, 362 commits, 11 kontributor.
  • Basa: indit.
  • Lisensi: Lisensi Apache 2.0.

Utiliti ngamungkinkeun anjeun pikeun nyingkronkeun eusi diréktori lokal sareng diréktori wadah anu dijalankeun dina kluster. Alat sapertos anu sampurna pikeun pamekar dina basa programming scripting, anu masalah utama delivering kode ka wadahna ngajalankeun. Ksync dirancang pikeun ngagentos nyeri sirah ieu.

Nalika dimimitian sakali ku paréntah ksync init a DaemonSet dijieun dina klaster, nu dipaké pikeun ngawas kaayaan sistem file tina wadahna dipilih. Dina komputer lokalna, pamekar ngajalankeun paréntah ksync watch, nu ngawas konfigurasi tur ngajalankeun sinkronisasi, anu langsung nyinkronkeun file sareng kluster.

Sadaya anu tetep nyaéta ngalatih ksync naon anu disingkronkeun sareng naon. Contona, paréntah ieu:

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

... bakal nyieun pangawas ngaranna myprojectnu bakal neangan pod kalawan labél a app=backend sareng cobian nyingkronkeun diréktori lokal /home/user/myproject/ kalawan katalog /var/www/myproject/ dina wadah disebut php.

Masalah sareng catetan ngeunaan ksync tina pangalaman urang:

  • Kedah dianggo dina titik kluster Kubernetes overlay2 salaku supir gudang pikeun Docker. Utiliti moal tiasa dianggo sareng anu sanés.
  • Nalika nganggo Windows salaku OS klien, pangawas sistem file tiasa henteu jalan leres. Kutu ieu diperhatoskeun nalika damel sareng diréktori ageung - kalayan sajumlah ageung file sareng diréktori sarang. Urang nyiptakeun isu relevan dina proyék syncthing, tapi teu acan aya kamajuan (saprak awal Juli).
  • Paké file .stignore pikeun nangtukeun jalur atanapi pola file anu henteu kedah disingkronkeun (contona, diréktori app/cache и .git).
  • Sacara standar, ksync bakal balikan deui wadahna iraha waé file robih. Pikeun Node.js ieu merenah, tapi pikeun PHP eta sagemblengna teu perlu. Éta langkung saé pikeun mareuman opcache sareng nganggo bandéra --reload=false.
  • Konfigurasi salawasna bisa dilereskeun dina $HOME/.ksync/ksync.yaml.

Waluh

  • Handap garis: prosés debug langsung dina klaster.
  • GitHub.
  • statistik GH ringkes: 1154 béntang, 279 commits, 23 kontributor.
  • Basa: indit.
  • Lisensi: Lisensi Apache 2.0.

Alat ieu dirancang pikeun prosés debugging langsung dina pods. Utilitasna basajan sareng sacara interaktif ngamungkinkeun anjeun milih debugger anu dipikahoyong (tingali kahandap) sareng namespace + pod, dina prosés anu anjeun kedah campur. Dirojong ayeuna:

  • delve - pikeun aplikasi Go;
  • GDB - via target jauh + port diteruskeun;
  • JDWP port diteruskeun pikeun debugging aplikasi Java.

Di sisi IDE, dukungan ngan ukur aya dina VScode (nganggo ékspansi), kumaha oge, rencana pikeun taun ayeuna (2019) kalebet Eclipse sareng Intellij.

Pikeun prosés debug, Squash ngajalankeun wadah khusus dina titik kluster, janten anjeun kedah familiarize diri sareng kamampuan modeu aman pikeun ngahindarkeun masalah kaamanan.

solusi lengkep

Hayu urang ngaléngkah ka artileri beurat - leuwih "skala badag" proyék dirancang pikeun langsung minuhan loba kaperluan pamekar.

NB: Dina daptar ieu, tangtosna, aya tempat pikeun utilitas Open Source urang werf (baheulana katelah dapp). Nanging, kami parantos nyerat sareng nyarioskeun éta langkung ti sakali, sareng ku kituna mutuskeun henteu ngalebetkeun éta dina ulasan. Pikeun anu hoyong langkung akrab sareng kamampuanna, kami nyarankeun maca / ngadangukeun laporan "werf mangrupikeun alat kami pikeun CI / CD di Kubernetes".

DevSpace

  • Handap garis: pikeun maranéhanana anu rék ngamimitian digawé di Kubernetes, tapi teu hayang delve jero kana leuweung na.
  • GitHub.
  • statistik GH ringkes: 630 béntang, 1912 commits, 13 kontributor.
  • Basa: indit.
  • Lisensi: Lisensi Apache 2.0.

Solusi ti perusahaan anu nami sami, anu nyayogikeun klaster anu diurus ku Kubernetes pikeun ngembangkeun tim. Utiliti didamel pikeun klaster komérsial, tapi tiasa dianggo sareng anu sanés.

Nalika ngajalankeun paréntah devspace init dina katalog proyék anjeun bakal ditawarkeun (sacara interaktif):

  • pilih klaster Kubernetes anu tiasa dianggo,
  • ngagunakeun aya Dockerfile (atanapi ngahasilkeun anu énggal) pikeun nyiptakeun wadah dumasar kana éta,
  • pilih gudang pikeun nyimpen gambar wadahna, jsb.

Saatos sadaya léngkah persiapan ieu, anjeun tiasa ngamimitian pangwangunan ku ngajalankeun paréntah devspace dev. Bakal ngawangun wadahna, unggah ka Repository nu, gulung kaluar deployment kana klaster tur mimitian port diteruskeun tur sinkronisasi wadahna jeung diréktori lokal.

Optionally, anjeun bakal dipenta pikeun mindahkeun terminal ka wadahna. Anjeun teu kedah nampik, sabab dina kanyataanana wadahna dimimitian ku paréntah sare, sarta pikeun nguji nyata aplikasi kudu dibuka sacara manual.

Tungtungna, tim devspace deploy gulung kaluar aplikasi jeung infrastruktur pakait kana klaster, nu satutasna sagalana mimiti fungsina dina mode tempur.

Sadaya konfigurasi proyék disimpen dina file devspace.yaml. Salian setelan lingkungan ngembangkeun, anjeun ogé tiasa manggihan pedaran infrastruktur di dinya, sarupa jeung manifests Kubernetes baku, ngan greatly disederhanakeun.

Alat pikeun pamekar aplikasi anu dijalankeun dina Kubernetes
Arsitéktur sareng tahapan utama damel sareng DevSpace

Salaku tambahan, gampang pikeun nambihan komponén anu tos siapkeun (contona, MySQL DBMS) atanapi bagan Helm pikeun proyék éta. Baca leuwih dina dokuméntasi - éta henteu pajeulit.

Skaffold

  • website; GitHub.
  • statistik GH ringkes: 7423 béntang, 4173 commits, 136 kontributor.
  • Basa: indit.
  • Lisensi: Lisensi Apache 2.0.

Utilitas ieu ti Google ngaku pikeun nutupan sadaya kabutuhan pamekar anu kodena kumaha waé bakal dijalankeun dina klaster Kubernetes. Ngamimitian ngagunakeun éta henteu segampang devspace: henteu aya interaktivitas, deteksi basa sareng nyiptakeun otomatis Dockerfile aranjeunna moal nawiskeun ka anjeun didieu.

Nanging, upami ieu henteu nyingsieunan anjeun, ieu anu ngamungkinkeun Skaffold anjeun lakukeun:

  • Lacak parobahan kode sumber.
  • Singkronkeun eta jeung wadah pod lamun teu merlukeun assembly.
  • Kumpulkeun wadah nganggo kode, upami basana diinterpretasi, atanapi kompilkeun artefak sareng bungkus kana wadahna.
  • Gambar anu dihasilkeun sacara otomatis dipariksa nganggo wadah-struktur-test.
  • Tagging sareng unggah gambar ka Docker Registry.
  • Nyebarkeun aplikasi dina klaster ngagunakeun kubectl, Helm atanapi kustomize.
  • Ngalaksanakeun port diteruskeun.
  • Aplikasi debug ditulis dina Java, Node.js, Python.

Alur kerja dina sababaraha variasi dijelaskeun sacara déklaratif dina file skaffold.yaml. Pikeun proyék, anjeun ogé tiasa nangtukeun sababaraha profil dimana anjeun tiasa sawaréh atanapi lengkep ngarobih tahapan assembly sareng panyebaran. Contona, pikeun pamekaran, tangtukeun gambar dasar anu cocog pikeun pamekar, sareng pikeun pementasan sareng produksi - minimal (+ nganggo securityContext peti atawa ngartikeun ulang klaster dimana aplikasi bakal disebarkeun).

Wadah Docker tiasa diwangun sacara lokal atanapi jarak jauh: di Google Cloud Bangun atawa dina klaster maké Kaniko. Bazel sareng Jib Maven / Gradle ogé dirojong. Pikeun méré tag, Skaffold ngadukung seueur strategi: ku git commit hash, tanggal / waktos, sha256-jumlah sumber, jsb.

Kapisah, éta sia noting kamungkinan nguji wadahna. Kerangka kontainer-struktur-test anu parantos disebatkeun nawiskeun metode verifikasi ieu:

  • Ngalaksanakeun paréntah dina kontéks wadahna kalayan ngalacak status kaluar sareng mariksa kaluaran téks paréntah.
  • Mariksa ayana file dina wadahna sareng cocog sareng atribut anu ditangtukeun.
  • Kontrol eusi file nganggo ekspresi biasa.
  • Verifikasi metadata gambar (ENV, ENTRYPOINT, VOLUMES teras salajengna.).
  • Mariksa kasaluyuan lisénsi.

Nyingkronkeun file sareng wadahna henteu dilaksanakeun ku cara anu paling optimal: Skaffold ngan saukur nyiptakeun arsip sareng sumberna, nyalin sareng ngabongkar dina wadahna (tar kedah dipasang). Ku alatan éta, lamun tugas utama Anjeun nyaéta sinkronisasi kode, eta leuwih hade pikeun nempo ka arah solusi husus (ksync).

Alat pikeun pamekar aplikasi anu dijalankeun dina Kubernetes
Tahap utama operasi Skaffold

Sacara umum, alat nu teu ngidinan Anjeun pikeun abstrak tina manifests Kubernetes tur teu boga interactivity wae, jadi sigana hésé ngawasaan. Tapi ieu ogé kauntungan - kabebasan gede tina aksi.

kebon

  • website; GitHub.
  • statistik GH ringkes: 1063 béntang, 1927 commits, 17 kontributor.
  • Basa: TypeScript (direncanakeun pikeun ngabagi proyék kana sababaraha komponén, sababaraha di antarana bakal aya dina Go, sareng ogé ngadamel SDK pikeun nyiptakeun tambihan dina TypeScript/JavaScript sareng Go).
  • Lisensi: Lisensi Apache 2.0.

Kawas Skaffold, Taman boga tujuan pikeun ngajadikeun otomatis prosés delivering kode aplikasi ka klaster K8s. Jang ngalampahkeun ieu, Anjeun mimitina kudu ngajelaskeun struktur proyék dina file YAML, lajeng ngajalankeun paréntah garden dev. Anjeunna bakal ngalakukeun sagala sihir:

  • Kumpulkeun wadah sareng sababaraha bagian tina proyék.
  • Ngalaksanakeun integrasi sareng uji unit, upami aya anu dijelaskeun.
  • Gulung kaluar sadaya komponén proyék kana kluster.
  • Lamun kodeu sumber robah, éta bakal balikan deui sakabéh pipa.

Fokus utama ngagunakeun alat ieu nyaéta ngabagi klaster jauh sareng tim pamekaran. Dina hal ieu, lamun sababaraha wangunan jeung nguji léngkah geus dipigawé, ieu nyata bakal nyepetkeun sakabéh prosés, saprak Taman bakal tiasa make hasil sindangan.

A modul proyék bisa jadi wadahna, wadahna Maven, bagan Helm, manifest pikeun kubectl apply atawa malah hiji fungsi OpenFaaS. Sumawona, salah sahiji modul tiasa ditarik tina gudang Git jauh. Hiji modul tiasa atanapi henteu nangtukeun jasa, tugas, sareng tés. Jasa sareng tugas tiasa gaduh katergantungan, ku kituna anjeun tiasa nangtoskeun sekuen panyebaran jasa tinangtu sareng ngatur peluncuran tugas sareng tés.

Taman nyayogikeun pangguna dasbor anu saé (ayeuna di kaayaan ékspérimén), nu mintonkeun grafik proyék: komponén, runtuyan assembly, palaksanaan tugas jeung tés, sambungan maranéhanana sarta kagumantungan. Katuhu dina browser, anjeun tiasa ningali log sadaya komponén proyék sareng pariksa naon anu kaluaran komponén tinangtu via HTTP (upami, tangtosna, sumber daya ingress dinyatakeun pikeun éta).

Alat pikeun pamekar aplikasi anu dijalankeun dina Kubernetes
Panel pikeun Taman

Ieu pakakas ogé ngabogaan mode panas-reload, nu saukur nyingkronkeun parobahan Aksara jeung wadahna dina klaster, greatly nyepetkeun prosés debugging aplikasi. Taman ngagaduhan anu saé dokuméntasi jeung teu goréng set conto, ngamungkinkeun anjeun gancang ngabiasakeun sareng ngamimitian ngagunakeunana. Ku jalan kitu, ngan nembe urang diterbitkeun tarjamahan artikel ti pangarangna.

kacindekan

Tangtosna, daptar alat ieu pikeun ngembangkeun sareng nga-debug aplikasi dina Kubernetes henteu dugi ka. Aya loba deui pisan mangpaat tur praktis Utiliti anu pantes, lamun teu artikel misah, lajeng sahenteuna nyebut a. Béjakeun ka kami naon anu anjeun anggo, masalah naon anu anjeun hadapi sareng kumaha anjeun ngarengsekeunana!

PS

Baca ogé dina blog urang:

sumber: www.habr.com

Tambahkeun komentar