Syarat kanggo ngembangake aplikasi ing Kubernetes

Dina iki aku arep ngomong babagan carane nulis aplikasi lan apa syarat aplikasi sampeyan bisa digunakake ing Kubernetes. Supaya ora ngelu karo aplikasi kasebut, supaya sampeyan ora kudu nggawe lan mbangun "cratches" ing saubengé - lan kabeh bisa mlaku kaya sing dikarepake Kubernetes.

Kuliah iki minangka bagian saka "Slurm Night School ing Kubernetes" Sampeyan bisa ndeleng ceramah teoritis mbukak saka Sekolah Petang ing Youtube, diklompokaké dadi dhaptar lagu. Kanggo sing luwih seneng teks tinimbang video, kita wis nyiapake artikel iki.

Jenengku Pavel Selivanov, saiki aku dadi insinyur DevOps terkemuka ing Mail.ru Cloud Solutions, kita nggawe awan, kita nggawe manajemen kubernetes lan liya-liyane. Tugasku saiki kalebu pitulungan ing pangembangan, nggulung awan iki, nggulung aplikasi sing kita tulis lan langsung ngembangake alat sing diwenehake kanggo pangguna.

Syarat kanggo ngembangake aplikasi ing Kubernetes

Aku wis nindakake DevOps, aku mikir suwene telung taun. Nanging, ing prinsip, aku wis nindakake apa sing ditindakake DevOps kira-kira limang taun saiki. Sakdurunge, aku biasane melu urusan admin. Aku wiwit makarya karo Kubernetes wiwit biyen - mbokmenawa udakara patang taun kepungkur wiwit aku miwiti nggarap.

Umumé, aku miwiti nalika Kubernetes ana versi 1.3, mbokmenawa, lan bisa uga 1.2 - nalika isih cilik. Saiki wis ora ana maneh - lan ketok yen ana panjaluk gedhe ing pasar kanggo insinyur sing pengin bisa nindakake Kubernetes. Lan perusahaan duwe panjaluk sing dhuwur banget kanggo wong kasebut. Mula, nyatane ceramah iki muncul.

Yen kita ngomong miturut rencana apa sing bakal dakkandhakake, kaya mangkene, ing kurung ditulis (TL;DR) - "dawa banget; ora maca". Presentasiku dina iki bakal kalebu dhaptar tanpa wates.

Syarat kanggo ngembangake aplikasi ing Kubernetes

Nyatane, aku dhewe ora seneng karo presentasi kasebut nalika digawe, nanging iki minangka topik sing nalika nyiapake presentasi iki, aku mung ora ngerti carane ngatur informasi iki kanthi cara sing beda.

Amarga, umume, informasi iki minangka "ctrl + c, ctrl + v", saka, ing antarane, Wiki kita ing bagean DevOps, ing ngendi kita wis nulis syarat kanggo pangembang: "wong lanang, supaya kita miwiti aplikasi sampeyan ing Kubernetes, kudune kaya iki."

Pramila presentasi kasebut dadi dhaptar gedhe. Nuwun sewu. Aku bakal nyoba kanggo ngandhani sabisa-bisa supaya ora bosen yen bisa.

Apa sing bakal kita deleng saiki:

  • iki, pisanan, log (log aplikasi?), Apa sing kudu dilakoni ing Kubernetes, apa sing kudu dilakoni, apa sing kudu dilakoni;
  • apa karo konfigurasi ing Kubernetes, apa cara sing paling apik lan paling ala kanggo ngatur aplikasi kanggo Kubernetes;
  • Ayo dadi pirembagan bab apa mriksa aksesibilitas ing umum, apa padha kudu katon kaya;
  • ayo padha ngrembug babagan apa shutdown anggun;
  • ayo ngomong babagan sumber daya maneh;
  • Ayo ndemek topik panyimpenan data maneh;
  • lan ing pungkasan aku bakal pitutur marang kowe apa istilah aplikasi maya-native misterius iki. Cloudnativeness, minangka adjective saka istilah iki.

Log

Aku suggest miwiti karo log - karo ngendi log iki kudu shoved ing Kubernetes. Saiki sampeyan wis mbukak aplikasi ing Kubernetes. Miturut klasik, aplikasi sadurunge tansah nulis log nang endi wae ing file. Aplikasi ala nulis log menyang file ing direktori ngarep pangembang sing ngluncurake aplikasi kasebut. Aplikasi apik nulis log menyang file nang endi wae /var/log.

Syarat kanggo ngembangake aplikasi ing Kubernetes

Mulane, luwih, administrator apik wis sawetara iku diatur ing prasarana sing log iki bisa muter - rsyslog padha, kang katon ing log iki lan nalika ana kedaden kanggo wong-wong mau, ana akeh, iku nggawe salinan serep , nempatno log ana. , mbusak file lawas, luwih saka seminggu, nem sasi lan sawetara liyane. Ing teori, kita kudu duwe pranata supaya mung amarga aplikasi nulis log, spasi ing server produksi (server pertempuran?) Ora entek. Lan, kanthi mangkono, kabeh produksi ora mandheg amarga log.

Nalika kita pindhah menyang donya Kubernetes lan mbukak bab sing padha ana, ing bab pisanan sampeyan bisa mbayar manungsa waé kanggo kasunyatan sing wong, nalika padha nulis log ing file, terus nulis.

Pranyata yen kita ngomong babagan Kubernetes, panggonan sing tepat kanggo nulis log nang endi wae saka wadhah docker mung nulis saka aplikasi menyang Stdout / Stderr, yaiku, aliran output standar saka sistem operasi. output kesalahan standar. Iki minangka cara sing paling bener, paling gampang lan paling logis kanggo nyelehake log ing Docker lan khusus ing Kubernetis. Amarga yen aplikasi sampeyan nulis log menyang Stdout / Stderr, mula Docker lan Kubernetes nambahake kanggo mutusake apa sing kudu ditindakake karo log kasebut. Docker bakal nggawe file khusus kanthi standar ing format JSON.

Ing kene ana pitakonan, apa sing bakal sampeyan tindakake sabanjure karo log kasebut? Cara paling gampang cetha, kita duwe kemampuan kanggo nindakake kubectl logs lan katon ing log iki "pods". Nanging, mbokmenawa, iki dudu pilihan sing apik banget - ana sing kudu ditindakake kanthi log.

Saiki, ayo ngomong bebarengan, amarga kita ndemek topik log, babagan apa sing kudu katon kaya log. Yaiku, iki ora ditrapake langsung menyang Kubernetes, nanging nalika kita wiwit mikir babagan apa sing kudu ditindakake karo log, luwih becik mikir babagan iki.

Kita butuh sawetara alat, kanthi cara sing ramah, sing bakal njupuk log iki sing dilebokake dening docker menyang file lan dikirim menyang endi wae. Umumé, kita biasane ngluncurake sawetara agen ing Kubernetes ing wangun DaemonSet - kolektor log, sing mung dicritakake ing ngendi log sing dikumpulake Docker. Lan agen ngempalaken iki mung njupuk wong-wong mau, mbok menawa malah piye wae parses ing sadawane dalan, mbok menawa enriched karo sawetara meta-informasi tambahan lan, wekasanipun, dikirim kanggo panyimpenan nang endi wae. Variasi wis bisa ana. Sing paling umum yaiku Elasticsearch, ing ngendi sampeyan bisa nyimpen log lan sampeyan bisa kanthi gampang njupuk saka kono. Banjur, nggunakake panyuwunan, nggunakake Kibana, umpamane, nggawe grafik adhedhasar dheweke, nggawe tandha adhedhasar, lan liya-liyane.

Ide sing paling penting, aku pengin mbaleni maneh, yaiku ing Docker, utamane ing Kubernetes, nyimpen log sampeyan ing file minangka ide sing ala banget.

Amarga sepisanan, angel mlebu log ing wadhah ing file. Sampeyan kudu pindhah menyang wadhah, eksekusi ana, lan banjur ndeleng log. Titik sabanjure yaiku yen sampeyan duwe log ing file, mula wadah biasane duwe lingkungan minimalis lan ora ana keperluan sing biasane dibutuhake kanggo karya normal karo log. Kubur, delengen, bukak ing editor teks. Wektu sabanjure yaiku nalika kita duwe log ing file ing njero wadhah, yen wadhah iki dibusak, sampeyan ngerti, log bakal mati bebarengan. Dadi, manawa wadhah kasebut diwiwiti maneh tegese ora ana log maneh. Maneh, pilihan ala.

Lan titik pungkasan yaiku ing njero kontaner sampeyan biasane duwe aplikasi lan iku - biasane mung proses sing mlaku. Ora ana omongan babagan proses apa wae sing bakal muter file nganggo log sampeyan. Sanalika log wiwit ditulis menyang file, iki tegese, nyuwun pangapunten, kita bakal kelangan server produksi. Amarga, sepisanan, angel ditemokake, ora ana sing nglacak, lan ora ana sing ngontrol - mula file kasebut tuwuh tanpa wates nganti papan ing server mung entek. Mulane, aku ngomong maneh yen mlebu ing Docker, utamane ing Kubernetes, menyang file minangka ide sing ala.

Titik sabanjure, ing kene aku pengin ngomong maneh - amarga kita lagi ndemek topik log, luwih becik kanggo ngomong babagan carane log kudu katon supaya trep kanggo nggarap. Kaya sing dakkandhakake, topik kasebut ora ana hubungane langsung karo Kubernetes, nanging ana hubungane banget karo topik DevOps. Ing topik budaya pembangunan lan paseduluran antarane loro departemen beda - Dev lan Ops, supaya saben wong nyaman.

Iki tegese saenipun, dina iki, log kudu ditulis ing format JSON. Yen sampeyan duwe sawetara aplikasi sing ora bisa dimangerteni dhewe, sing nulis log ing format sing ora bisa dimengerteni amarga sampeyan nglebokake sawetara jinis print utawa kaya, banjur wektu kanggo google sawetara jenis framework, sawetara jenis pambungkus sing ngijini sampeyan kanggo ngleksanakake logging normal; ngaktifake paramèter logging ing JSON ana, amarga JSON iku format prasaja, parsing iku prasaja.

Yen JSON sampeyan ora bisa digunakake miturut sawetara kritéria, ora ana sing ngerti, banjur paling ora nulis log ing format sing bisa diurai. Ing kene, luwih becik mikir babagan kasunyatan manawa, contone, yen sampeyan mbukak akeh kontaner utawa mung ngolah nganggo nginx, lan saben duwe setelan logging dhewe, mula mesthine bakal dadi ora trep kanggo sampeyan. parse wong. Amarga kanggo saben conto nginx anyar sampeyan kudu nulis parser dhewe, amarga padha nulis log kanthi beda. Maneh, mesthine kudu dipikirake manawa kabeh kedadeyan nginx iki duwe konfigurasi logging sing padha lan nulis kabeh log kanthi seragam. Padha ditrapake kanggo pancen kabeh aplikasi.

Ing pungkasan, aku uga pengin nambah bahan bakar kanggo geni sing, saenipun, log format multi-line kudu nyingkiri. Punika bab, yen sampeyan wis tau kerjo karo kolektor log, banjur paling kamungkinan sampeyan wis ndeleng apa padha janji sampeyan, sing padha bisa karo multi-line log, ngerti carane ngumpulake, lan ing. Nyatane, ing mratelakake panemume, ora kolektor siji dina bisa ngumpulake multi-line log biasane, kanthi lan tanpa kasalahan. Kanthi cara manungsa, supaya trep lan ora ana kesalahan.

Syarat kanggo ngembangake aplikasi ing Kubernetes

Nanging tumpukan tilak tansah multi-line log lan carane supaya wong-wong mau. Pitakonan ing kene yaiku log minangka rekaman acara, lan stactrace dudu log. Yen kita ngumpulake log lan dilebokake ing endi wae ing Elasticsearch banjur tarik grafik saka wong-wong mau, gawe sawetara laporan aktivitas pangguna ing situs sampeyan, banjur nalika sampeyan entuk tilak tumpukan, tegese ana sing ora dikarepke kedadeyan ing aplikasi sampeyan. Lan iku ndadekake pangertèn kanggo otomatis upload tilak tumpukan nang endi wae menyang sistem sing bisa trek wong.

Iki minangka piranti lunak (Sentry sing padha) sing digawe khusus kanggo nggarap jejak tumpukan. Bisa langsung nggawe tugas otomatis, nemtokake wong, tandha nalika stacttraces kelakon, klompok stacttraces iki dening siji jinis, lan ing. Ing asas, iku ora nggawe akeh pangertèn kanggo pirembagan bab stactraces nalika kita pirembagan bab log, amarga iki, sawise kabeh, iku beda karo tujuan beda.

Konfigurasi

Sabanjure, kita ngomong babagan konfigurasi ing Kubernetes: apa sing kudu ditindakake lan carane aplikasi ing Kubernetes kudu dikonfigurasi. Umumé, aku biasane ujar manawa Docker ora babagan kontaner. Saben uwong ngerti yen Docker babagan kontaner, malah sing durung kerja akeh karo Docker. Aku mbaleni, Docker ora babagan kontaner.

Docker, miturut pendapatku, babagan standar. Lan ana standar kanggo meh kabeh: standar kanggo mbangun aplikasi sampeyan, standar kanggo nginstal aplikasi sampeyan.

Syarat kanggo ngembangake aplikasi ing Kubernetes

Lan bab iki - kita digunakake sadurunge, iku mung dadi utamané populer karo tekane saka kontaner - bab iki disebut ENV (lingkungan) variabel, sing, variabel lingkungan sing ana ing sistem operasi. Iki umume cara becik kanggo ngatur aplikasi, amarga yen sampeyan duwe aplikasi ing JAVA, Python, Go, Perl, Gusti Allah ngalang-alangi, lan kabeh padha bisa maca host database, pangguna database, variabel sandi database, banjur iku becik. Sampeyan duwe aplikasi ing papat basa sing dikonfigurasi ing rencana database kanthi cara sing padha. Ora ana konfigurasi liyane sing beda.

Kabeh bisa diatur nggunakake variabel ENV. Nalika kita ngomong babagan Kubernetes, ana cara sing apik kanggo ngumumake variabel ENV ing Deployment. Mulane, yen kita ngomong babagan data rahasia, mula kita bisa langsung push data rahasia saka variabel ENV (sandi menyang database, lan liya-liyane) dadi rahasia, nggawe kluster rahasia lan nuduhake ing deskripsi ENV ing Deployment sing ora langsung nyatakake. Nilai variabel iki, lan nilai variabel sandi database iki bakal diwaca saka rahasia. Iki minangka prilaku standar Kubernetes. Lan iki minangka pilihan sing paling cocog kanggo ngatur aplikasi sampeyan. Mung ing tingkat kode, maneh iki ditrapake kanggo pangembang. Yen sampeyan DevOps, sampeyan bisa takon: "Wong lanang, ajari aplikasi sampeyan maca variabel lingkungan. Lan kita kabeh bakal seneng."

Yen kabeh wong ing perusahaan maca variabel lingkungan sing padha, mula apik banget. Supaya ora kedadeyan yen ana sing nunggu database postgres, liyane ngenteni jeneng database, liyane ngenteni liyane, liyane ngenteni dbn saka sawetara jinis, supaya, miturut, ana uniformity.

Masalah kasebut muncul nalika sampeyan duwe akeh variabel lingkungan sing sampeyan mung mbukak Deployment - lan ana limang atus baris variabel lingkungan. Ing kasus iki, sampeyan mung wis ngluwihi variabel lingkungan - lan sampeyan ora perlu maneh nyiksa dhewe. Ing kasus iki, iku bakal nggawe pangertèn kanggo miwiti nggunakake configs. Yaiku, olahraga aplikasi sampeyan nggunakake konfigurasi.

Pitakonan mung yaiku konfigurasi ora kaya sing sampeyan pikirake. Config.pi ora config sing trep kanggo nggunakake. Utawa sawetara config ing format dhewe, Utawa wasis - iki uga ora config Maksudku.

Apa aku ngomong bab iku konfigurasi ing format ditrima, sing adoh standar paling populer punika standar .yaml. Cetha carane maca, iku bisa diwaca manungsa, iku cetha carane maca saka aplikasi.

Mulane, saliyane YAML, sampeyan uga bisa, contone, nggunakake JSON, parsing kira-kira trep kaya YAML ing syarat-syarat maca konfigurasi aplikasi saka ing kono. Iku noticeably liyane ora trep kanggo wong kanggo maca. Sampeyan bisa nyoba format, a la iki. Cukup trep kanggo maca, saka sudut pandang manungsa, nanging bisa uga ora trep kanggo ngolah kanthi otomatis, amarga yen sampeyan pengin nggawe konfigurasi dhewe, format iki bisa uga ora trep kanggo ngasilake.

Nanging ing kasus apa wae, format apa wae sing sampeyan pilih, titik kasebut saka sudut pandang Kubernetes, trep banget. Sampeyan bisa nyelehake kabeh konfigurasi ing Kubernetes, ing ConfigMap. Banjur njupuk configmap iki lan takon kanggo dipasang nang pod ing sawetara direktori tartamtu, ngendi aplikasi bakal maca konfigurasi saka configmap iki minangka yen mung file. Iki, nyatane, apa sing kudu ditindakake nalika sampeyan duwe akeh opsi konfigurasi ing aplikasi sampeyan. Utawa mung sawetara jenis struktur Komplek, ana nesting.

Yen sampeyan duwe configmap a, sampeyan bisa banget uga mulang aplikasi, contone, kanggo trek otomatis owah-owahan ing file ngendi configmap wis dipasang, lan uga kanthi otomatis mbukak maneh aplikasi nalika configs diganti. Iki umume bakal dadi pilihan sing cocog.

Maneh, aku wis ngomong babagan iki - informasi rahasia ora ana ing configmap, informasi rahasia ora ana ing variabel, informasi rahasia ora ana ing rahasia. Saka ing kono, sambungake informasi rahasia iki menyang diplomasi. Biasane kita nyimpen kabeh deskripsi obyek Kubernetes, penyebaran, konfigurasi, layanan ing git. Mulane, nglebokake sandhi menyang database ing git, sanajan iku git sampeyan, sing sampeyan duwe internal ing perusahaan, iku gagasan ala. Amarga, paling ora, git ngelingi kabeh lan mung mbusak sandhi saka kono ora gampang.

Priksa kesehatan

Titik sabanjure yaiku bab iki sing diarani Priksa Kesehatan. Umumé, mriksa Kesehatan mung mriksa manawa aplikasi sampeyan bisa digunakake. Ing wektu sing padha, kita paling kerep ngomong babagan aplikasi web tartamtu, sing, miturut, saka sudut pandang pemeriksaan kesehatan (luwih becik ora nerjemahake ing kene lan luwih) iki bakal dadi URL khusus, sing diproses minangka standar, padha biasane nindakake /health.

Nalika ngakses URL iki, aplikasi kita ujar manawa "ya, oke, kabeh apik karo aku, 200" utawa "ora, kabeh ora apik karo aku, udakara 500." Mulane, yen aplikasi kita dudu http, dudu aplikasi web, saiki kita ngomong babagan sawetara jinis daemon, kita bisa nemtokake cara mriksa kesehatan. Yaiku, ora perlu, yen aplikasi kasebut dudu http, mula kabeh bisa ditindakake tanpa mriksa kesehatan lan iki ora bisa ditindakake kanthi cara apa wae. Sampeyan bisa kanthi periodik nganyari sawetara informasi ing file, sampeyan bisa teka munggah karo sawetara printah khusus kanggo daemon Panjenengan, kaya, daemon status, sing bakal ngomong "ya, kabeh apik, daemon bisa digunakake, urip."

Kanggo apa? Wangsulan: Bab ingkang pisanan lan paling ketok mbokmenawa apa perlu mriksa kesehatan - kanggo ngerti sing aplikasi bisa digunakake. Maksude mung bodho, yen wis munggah saiki, katon kerjane, supaya sampeyan yakin yen bisa. Lan ternyata aplikasi kasebut mlaku, wadhah mlaku, contone bisa digunakake, kabeh apik - banjur pangguna wis ngilangi kabeh nomer telpon saka dhukungan teknis lan ujar "apa sampeyan ..., sampeyan keturon, ora ana apa-apa.”

Priksa kesehatan mung minangka cara kanggo ndeleng saka sudut pandang pangguna sing bisa digunakake. Salah sawijining cara. Ayo dadi sijine iku cara iki. Saka sudut pandang Kubernetes, iki uga minangka cara kanggo ngerti nalika aplikasi diwiwiti, amarga kita ngerti manawa ana bedane nalika wadhah kasebut diluncurake, digawe lan diwiwiti, lan nalika aplikasi diluncurake langsung ing wadhah iki. Amarga yen kita njupuk sawetara aplikasi java rata-rata lan nyoba kanggo miwiti ing dock, banjur kanggo bab patang puluh detik, utawa malah menit, utawa malah sepuluh, iku bisa miwiti mung apik. Ing kasus iki, paling ora bisa ngalahake bandar sawijining, iku ora bakal mangsuli ana, sing, iku durung siap kanggo nampa lalu lintas.

Maneh, kanthi bantuan mriksa kesehatan lan kanthi bantuan kasunyatan sing kita bali ing kene, kita bisa ngerti ing Kubernetes yen ora mung wadhah sing wis munggah ing aplikasi kasebut, nanging aplikasi kasebut dhewe wis diwiwiti, wis nanggapi mriksa kesehatan, kang tegese kita bisa ngirim lalu lintas ana.

Syarat kanggo ngembangake aplikasi ing Kubernetes

Apa sing dakkandhakake saiki diarani Tes Kesiapan / Liveness ing Kubernetes, tes kesiapan kita tanggung jawab kanggo kasedhiyan aplikasi ing imbangan. Yaiku, yen tes kesiapan ditindakake ing aplikasi kasebut, mula kabeh ok, lalu lintas klien bakal menyang aplikasi kasebut. Yen tes kesiapan ora dileksanakake, mula aplikasi kasebut mung ora melu, conto tartamtu iki ora melu imbangan, dibusak saka imbangan, lan lalu lintas klien ora mili. Mula, tes Liveness ing Kubernetes dibutuhake supaya yen aplikasi macet, bisa diwiwiti maneh. Yen tes liveness ora bisa digunakake kanggo aplikasi sing diumumake ing Kubernetes, mula aplikasi kasebut ora mung dibusak saka imbangan, nanging bakal diwiwiti maneh.

Lan ing kene ana titik penting sing dakkarepake: saka sudut pandang praktis, tes kesiapan biasane digunakake luwih asring lan luwih asring dibutuhake tinimbang tes liveness. Tegese, mung tanpa dipikirake kanthi nyatakake tes kesiapan lan urip, amarga Kubernetes bisa nindakake, lan ayo nggunakake kabeh sing bisa ditindakake, dudu ide sing apik banget. Aku bakal nerangake apa. Amarga titik nomer loro ing tes yaiku luwih becik mriksa layanan dhasar ing pemeriksaan kesehatan. Iki tegese yen sampeyan duwe aplikasi web sing menehi sawetara informasi, sing mesthine kudu njupuk saka ngendi wae. Ing database, contone. Inggih, nyimpen informasi sing teka menyang REST API iki menyang database padha. Banjur, yen pemeriksaan kesehatan sampeyan mung nanggapi kaya slashhealth sing dikontak, aplikasi kasebut ujar "200, oke, kabeh ora apa-apa," lan ing wektu sing padha, database aplikasi sampeyan ora bisa diakses, lan aplikasi healthcheck ujar "200, oke, kabeh apik. "- Iki minangka pemeriksaan kesehatan sing ala. Iki ora carane kudu bisa.

Yaiku, aplikasi sampeyan, nalika ana panjaluk /health, ora mung nanggapi, "200, ok", pisanan pindhah, contone, menyang database, nyoba kanggo nyambung menyang, nindakake soko banget dhasar ana, kaya pilih salah siji, mung mriksa yen ana sambungan ing database lan sampeyan bisa takon database. Yen kabeh iki sukses, banjur jawabane "200, ok." Yen ora sukses, ngandika ana kesalahan, database ora kasedhiya.

Mulane, ing babagan iki, aku bali maneh menyang tes Kesiapan / Liveness - kenapa sampeyan mbutuhake tes kesiapan, nanging tes liveness ana pitakonan. Amarga yen sampeyan nerangake pemeriksaan kesehatan persis kaya sing dakkandhakake, mula ora kasedhiya ing bagean conto.в или со всех instanceing database, contone. Nalika sampeyan ngumumake tes kesiapan, pamriksaan kesehatan kita wiwit gagal, lan kabeh aplikasi sing ora bisa diakses database, mung dipateni saka imbangan lan nyatane "nyumerepi" mung ing kahanan sing diabaikan lan ngenteni database kasebut. nyambut gawe.

Yen kita wis ngumumake tes liveness, banjur bayangake, database kita wis rusak, lan ing Kubernetes sampeyan setengah saka kabeh wiwit diwiwiti maneh amarga tes liveness gagal. Iki tegese sampeyan kudu miwiti maneh. Iki ora kabeh sing dikarepake, aku malah duwe pengalaman pribadi ing praktik. Kita duwe aplikasi chatting sing ditulis ing JS lan diisi menyang database Mongo. Lan masalah iku ana ing awal karya karo Kubernetes, kita diterangake ing siyap, liveness saka tes ing asas sing Kubernetes bisa nindakake, supaya kita bakal nggunakake. Patut, ing sawetara titik Mongo dadi sethitik "kusam" lan sampel wiwit gagal. Mulane, miturut tes udan, polong wiwit "mateni".

Nalika sampeyan ngerti, nalika lagi "matèni", iki chatting, sing, ana akeh sambungan saka klien hanging ing. Dheweke uga "dipateni" - ora, dudu klien, mung sambungan - ora kabeh bebarengan, lan amarga kasunyatane ora dipateni ing wektu sing padha, sawetara sadurunge, sawetara mengko, ora diwiwiti bebarengan. wektu. Plus standar acak, kita ora bisa prédhiksi karo akurasi millisecond wektu wiwitan aplikasi saben wektu, supaya padha nindakake iku siji Kayata ing wektu. Siji infospot mundhak, ditambahake ing imbangan, kabeh klien teka ing kono, ora bisa nahan beban kasebut, amarga mung siji, lan kira-kira, ana rolas sing kerja ing kono, lan tiba. Sing sabanjure mundhak, kabeh beban ana ing dheweke, dheweke uga tiba. Inggih, iki tiba mung terus cascade. Pungkasane, kepiye carane iki ditanggulangi - kita mung kudu mandhegake lalu lintas pangguna menyang aplikasi iki, supaya kabeh kedadeyan munggah lan banjur miwiti kabeh lalu lintas pangguna bebarengan supaya wis disebarake ing kabeh sepuluh kasus.

Yen ora amarga tes liveness iki diumumake, sing bakal meksa kabeh diwiwiti maneh, aplikasi kasebut bakal ditangani kanthi becik. Nanging kabeh saka imbangan dipateni kanggo kita, amarga database ora bisa diakses lan kabeh pangguna wis "ambruk". Banjur, nalika database iki kasedhiya, kabeh kalebu ing imbangan, nanging aplikasi ora perlu kanggo miwiti maneh, lan ora perlu kanggo sampah wektu lan sumber daya iki. Kabeh wis ana ing kene, wis siyap kanggo lalu lintas, mula lalu lintas mung mbukak, kabeh apik - aplikasi wis ana, kabeh terus mlaku.

Mulane, tes kesiapan lan liveness beda-beda, malah luwih, sampeyan bisa kanthi teoritis nindakake pemeriksaan kesehatan sing beda, siji jinis radii, siji jinis liv, contone, lan mriksa macem-macem. Sajrone tes kesiapan, priksa backend sampeyan. Lan ing test liveness, contone, sampeyan ora mriksa saka sudut pandang sing test liveness umume mung aplikasi respon, yen bisa nanggapi ing kabeh.

Amarga tes liveness, umume, nalika kita "macet". Daur ulang tanpa wates wis diwiwiti utawa liya - lan ora ana panjaluk maneh sing diproses. Mulane, iku ndadekake pangertèn kanggo malah misahake - lan ngleksanakake logika beda ing wong.

Babagan apa sing kudu dijawab nalika sampeyan duwe tes, nalika nindakake pemeriksaan kesehatan. Iku mung tenan pain. Wong-wong sing ngerti iki bisa uga ngguyu - nanging kanthi serius, aku wis ndeleng layanan ing uripku sing mangsuli "200" ing XNUMX% kasus. Yaiku sapa sing sukses. Nanging ing wektu sing padha ing awak tanggapan dheweke nulis "kesalahan kasebut lan kaya ngono."

Sing, status respon teka kanggo sampeyan - kabeh sukses. Nanging ing wektu sing padha, sampeyan kudu ngurai awak, amarga awak ujar "nuwun sewu, panjaluk kasebut rampung kanthi kesalahan" lan iki mung kasunyatan. Aku weruh iki ing urip nyata.

Lan supaya sawetara wong ora nemokake iku lucu, lan liyane nemokake iku banget nglarani, iku isih worth adhering kanggo aturan prasaja. Ing mriksa kesehatan, lan ing asas nalika nggarap aplikasi web.

Yen kabeh mlaku kanthi becik, banjur wangsulana kanthi wangsulan rong atus. Ing asas, sembarang jawaban rong atus bakal cocog karo sampeyan. Yen maca ragsy banget lan ngerti sing sawetara status respon beda saka liyane, njawab karo sing cocok: 204, 5, 10, 15, apa wae. Yen ora apik banget, banjur mung "loro nol nol." Yen kabeh dadi ala lan priksa kesehatan ora nanggapi, banjur wangsulana kanthi limang atus. Maneh, yen sampeyan ngerti carane nanggapi, carane beda status respon beda-beda saka saben liyane. Yen sampeyan ora ngerti, banjur 502 minangka pilihan sampeyan kanggo nanggapi pemeriksaan kesehatan yen ana masalah.

Iki minangka titik liyane, aku pengin bali sethithik babagan mriksa layanan dhasar. Yen sampeyan miwiti, umpamane, mriksa kabeh layanan dhasar sing ana ing mburi aplikasi sampeyan - kabeh umume. Apa sing dipikolehi saka sudut pandang arsitektur layanan mikro, kita duwe konsep kaya "gandeng kurang" - yaiku, nalika layanan sampeyan gumantung banget. Yen salah siji gagal, kabeh liyane tanpa fungsi iki mung bakal terus bisa digunakake. Sawetara fungsi mung ora bisa digunakake. Dadi, yen sampeyan nyambungake kabeh pemeriksaan kesehatan, mula sampeyan bakal entuk siji prasarana sing tiba ing infrastruktur, lan amarga ambruk, kabeh pemeriksaan kesehatan kabeh layanan uga wiwit gagal - lan ana luwih akeh prasarana kanggo umume. kabeh arsitektur microservice No. Kabeh dadi peteng ing kono.

Mula, aku pengin mbaleni maneh yen sampeyan kudu mriksa layanan dhasar, sing tanpa aplikasi sampeyan ing satus persen kasus ora bisa nindakake tugase. Yaiku, logis yen sampeyan duwe API REST ing ngendi pangguna nyimpen menyang database utawa njupuk saka database, banjur yen ora ana database, sampeyan ora bisa njamin karya karo pangguna.

Nanging yen pangguna sampeyan, nalika sampeyan njupuk metu saka database, ditambahake karo sawetara metadata liyane, saka backend liyane, sing sampeyan lebokake sadurunge ngirim respon menyang frontend - lan backend iki ora kasedhiya, iki tegese sampeyan menehi sampeyan njawab tanpa bagean metadata.

Sabanjure, kita uga duwe salah sawijining masalah sing lara nalika mbukak aplikasi.

Nyatane, iki ora mung ditrapake kanggo Kubernetes lan umume kedadeyan manawa budaya pangembangan massa lan DevOps utamane wiwit nyebar ing wektu sing padha karo Kubernetes. Mula, umume, sampeyan kudu mateni aplikasi kanthi apik tanpa Kubernetes. Malah sadurunge Kubernetes, wong wis nindakake iki, nanging karo tekane saka Kubernetes, kita miwiti ngomong bab iku massal.

Anggun Mati

Umumé, apa iku Graceful Shutdown lan kenapa perlu? Iki babagan nalika aplikasi sampeyan nabrak amarga sawetara alasan, sampeyan kudu nindakake app stop - utawa sampeyan nampa, contone, sinyal saka sistem operasi, aplikasi sampeyan kudu ngerti lan nindakake soko babagan. Skenario paling ala, mesthi, nalika aplikasi sampeyan nampa SIGTERM lan kaya "SIGTERM, ayo terus kerja, ora nindakake apa-apa." Iki pilihan downright ala.

Syarat kanggo ngembangake aplikasi ing Kubernetes

Opsi sing meh padha yaiku nalika aplikasi sampeyan nampa SIGTERM lan kaya "jarene segterm, tegese kita wis rampung, aku ora weruh, aku ora ngerti panjaluk pangguna, aku ora ngerti apa jenis panjaluk sing dakkarepake saiki, ujare SIGTERM, tegese kita wis rampung " Iki uga pilihan sing ala.

Opsi endi sing apik? Titik pisanan yaiku nimbang rampung operasi. Pilihan sing apik kanggo server sampeyan isih njupuk akun apa sing ditindakake yen nampa SIGTERM.

SIGTERM minangka soft shutdown, dirancang khusus, bisa dicegat ing tingkat kode, bisa diproses, ujar saiki, ngenteni, kita bakal ngrampungake karya sing ana, banjur metu.

Saka perspektif Kubernetes, iki katon kaya. Nalika kita ngomong menyang pod sing mlaku ing kluster Kubernetes, "mangga mandheg, lunga," utawa kita diwiwiti maneh, utawa ana nganyari nalika Kubernetes nggawé ulang pods, Kubernetes ngirim pesen SIGTERM sing padha menyang pod, ngenteni sawetara wektu, lan, iki wektu kang ngenteni, iku uga diatur, ana parameter khusus ing diploma lan diarani Anggun ShutdownTimeout. Sing ngerti, iku ora disebut apa-apa, lan iku ora kanggo apa-apa sing kita ngomong bab iku saiki.

Ing kana, kita bisa ngomong kanthi khusus suwene wektu kita kudu ngenteni ing antarane wektu ngirim SIGTERM menyang aplikasi kasebut lan nalika kita ngerti manawa aplikasi kasebut katon gila amarga ana apa-apa utawa "macet" lan ora bakal rampung - lan kita kudu ngirim SIGKILL, sing, hard rampung sawijining karya. Dadi, kita duwe sawetara jinis daemon sing mlaku, ngolah operasi. Kita ngerti yen rata-rata operasi sing digunakake daemon ora luwih saka 30 detik sekaligus. Dadi, nalika SIGTERM teka, kita ngerti manawa daemon kita bisa rampung 30 detik sawise SIGTERM. Kita nulis, contone, 45 detik mung ing kasus lan ngomong sing SIGTERM. Banjur ngenteni 45 detik. Ing teori, sak iki setan kudu rampung karya lan mungkasi dhewe. Nanging yen dumadakan ora bisa, tegese kemungkinan macet-ora ngolah panjaluk kita kanthi normal. Lan ing 45 detik sampeyan bisa kanthi aman nangkep dheweke.

Lan ing kene, nyatane, malah 2 aspek bisa dianggep. Kaping pisanan, mangertos yen sampeyan nampa panjalukan, sampeyan miwiti nggarap apa wae lan ora menehi respon marang pangguna, nanging sampeyan nampa SIGTERM, umpamane. Iku ndadekake pangertèn kanggo nyaring lan menehi jawaban kanggo pangguna. Iki minangka titik nomer siji ing babagan iki. Titik nomer loro ing kene yaiku yen sampeyan nulis aplikasi sampeyan dhewe, umume mbangun arsitektur kanthi cara supaya sampeyan nampa panjalukan kanggo aplikasi sampeyan, banjur sampeyan miwiti sawetara karya, miwiti ndownload file saka ngendi wae, ndownload database, lan liya-liyane. Iku. Umumé, pangguna sampeyan, panjaluk sampeyan macet nganti setengah jam lan ngenteni sampeyan mangsuli - banjur, paling kamungkinan, sampeyan kudu nggarap arsitektur. Tegese, mung nggatekake akal sehat yen operasi sampeyan cendhak, mula ora ana gunane kanggo nglirwakake SIGTERM lan ngowahi. Yen operasi sampeyan dawa, mula ora ana gunane kanggo nglirwakake SIGTERM ing kasus iki. Iku ndadekake pangertèn kanggo ngrancang ulang arsitektur supaya ora operasi dawa kuwi. Supaya pangguna ora mung nongkrong lan ngenteni. Aku ora ngerti, nggawe sawetara jinis websocket ana, nggawe pancingan mbalikke sing server sampeyan wis bakal dikirim menyang klien, liyane, nanging ora meksa pangguna kanggo nyumerepi kanggo setengah jam lan mung ngenteni sesi nganti sampeyan wangsulane dheweke. Amarga ora bisa diprediksi ing ngendi bisa pecah.

Nalika aplikasi sampeyan mandheg, sampeyan kudu menehi kode metu sing cocog. Yaiku, yen aplikasi sampeyan dijaluk nutup, mandheg, lan bisa mandheg kanthi normal, mula sampeyan ora perlu mbalekake sawetara jinis kode metu 1,5,255 lan liya-liyane. Apa wae sing ora kode nol, paling ora ing sistem Linux, aku yakin iki, dianggep ora kasil. Yaiku, dianggep yen aplikasi sampeyan ing kasus iki rampung kanthi kesalahan. Dadi, kanthi cara sing ramah, yen aplikasi sampeyan rampung tanpa kesalahan, sampeyan bakal ujar 0 ing output. Yen aplikasi gagal sakperangan alesan, sampeyan ngomong non-0 ing output. Lan sampeyan bisa nggarap informasi iki.

Lan pilihan pungkasan. Iku ala yen pangguna ngirim panjalukan lan macet nganti setengah jam nalika sampeyan ngolah. Nanging umume, aku uga pengin ngomong babagan apa sing umume worth saka sisih klien. Ora Matter yen sampeyan duwe aplikasi seluler, ngarep-mburi, etc. Perlu dicathet yen umume sesi pangguna bisa diakhiri, apa wae bisa kedadeyan. Panyuwunan bisa dikirim, contone, underprocessed lan ora ana respon bali. Frontend utawa aplikasi seluler sampeyan - frontend apa wae ing umum, ayo digatekake - kudu digatekake. Yen sampeyan nggarap websockets, iki umume lara paling awon sing dakalami.

Nalika pangembang sawetara obrolan biasa ora ngerti, ternyata websocket bisa pecah. Kanggo wong-wong mau, nalika ana sing kedadeyan ing proxy, kita mung ngganti konfigurasi, lan nindakake reload. Alami, kabeh sesi sing dawa wis suwe saya suwe ing kasus iki. Pangembang teka menyang kita lan ujar: "Guys, apa sing sampeyan lakoni, obrolan wis rusak kanggo kabeh klien kita!" Awaké dhéwé kandha marang wong-wong mau: “Apa sing koktindakké? Apa klien sampeyan ora bisa nyambung maneh? Dheweke kandha: "Ora, kita butuh sesi supaya ora ambruk." Ing cendhak, iki bener omong kosong. Sisih klien kudu dianggep. Utamane, kaya sing dakkandhakake, kanthi sesi sing dawa kayata websockets, bisa pecah lan, ora diweruhi dening pangguna, sampeyan kudu bisa nginstal maneh sesi kasebut. Banjur kabeh sampurna.

Sumber Daya

Bener, ing kene aku mung bakal crita langsung. Maneh saka urip nyata. Sing paling lara sing dakrungu babagan sumber daya.

Resources ing kasus iki, Maksudku, sawetara jenis panjalukan, watesan sing bisa sijine pods ing kluster Kubernetes Panjenengan. Sing paling lucu sing dakrungu saka pangembang ... Salah sawijining kanca pangembang ing papan kerja sadurunge ujar: "Aplikasiku ora bakal diwiwiti ing kluster." Aku katon kanggo ndeleng sing ora miwiti, nanging salah siji ora pas karo sumber daya, utawa padha nyetel watesan cilik banget. Ing cendhak, aplikasi ora bisa diwiwiti amarga sumber daya. Aku ujar: "Ora bakal diwiwiti amarga sumber daya, sampeyan mutusake sepira sampeyan butuh lan nyetel nilai sing cukup." Dheweke kandha: "Sumber daya apa?" Aku miwiti nerangake marang sing Kubernetes, watesan ing panjalukan lan blah, blah, blah kudu disetel. Wong kasebut ngrungokake limang menit, manthuk lan ujar: "Aku teka ing kene kanggo kerja minangka pangembang, aku ora pengin ngerti apa-apa babagan sumber daya. Aku teka ing kene kanggo nulis kode lan iku wae. Sedhih. Iki minangka konsep sing sedhih banget saka sudut pandang pangembang. Utamané ing donya modern, supaya bisa ngomong, saka devops progresif.

Yagene sumber daya dibutuhake? Ana 2 jinis sumber daya ing Kubernetes. Sawetara diarani panjaluk, liyane diarani watesan. Miturut sumber daya kita bakal ngerti sing ana Sejatine tansah mung loro Watesan dhasar. Yaiku, watesan wektu CPU lan watesan RAM kanggo wadhah sing mlaku ing Kubernetes.

Watesan menehi watesan ndhuwur babagan carane sumber daya bisa digunakake ing aplikasi sampeyan. Dadi, yen sampeyan ujar 1GB RAM ing watesan, aplikasi sampeyan ora bakal bisa nggunakake luwih saka 1GB RAM. Lan yen dumadakan kepengin lan nyoba kanggo nindakake iki, banjur proses disebut pembunuh oom, metu saka memori, yaiku, bakal teka lan mateni aplikasi - iku mung bakal miwiti maneh. Aplikasi ora bakal diwiwiti maneh adhedhasar CPU. Ing babagan CPU, yen aplikasi nyoba nggunakake akeh, luwih saka sing ditemtokake ing watesan, CPU mung bakal dipilih kanthi ketat. Iki ora mimpin kanggo miwiti maneh. Iki watesan - iki watesan ndhuwur.

Lan ana panjaluk. Panyuwunan yaiku carane Kubernetes ngerti kepiye node ing kluster Kubernetes sampeyan diisi karo aplikasi. Tegese, panjaluk minangka jinis komitmen saka aplikasi sampeyan. Iku ngandika apa aku arep kanggo nggunakake: "Aku pengin sampeyan cadangan CPU iki akeh lan memori akeh iki kanggo kula." Analogi sing prasaja. Apa yen kita duwe simpul sing wis, Aku ora ngerti, 8 CPU total. Lan polong teka ing kana, sing panjaluke 1 CPU, tegese simpul kasebut isih ana 7 CPU. Dadi, nalika 8 pods teka ing simpul iki, sing saben duwe 1 CPU ing panjaluke, simpul kasebut, kaya-kaya saka sudut pandang Kubernetes, wis entek CPU lan luwih akeh pods kanthi panjalukan ora bisa. diluncurake ing simpul iki. Yen kabeh simpul kehabisan CPU, mula Kubernetes bakal ujar manawa ora ana simpul sing cocog ing kluster kanggo mbukak pod sampeyan amarga CPU wis entek.

Napa panyuwunan dibutuhake lan kenapa tanpa panjaluk, aku rumangsa ora perlu mbukak apa wae ing Kubernetes? Ayo mbayangno kahanan hipotetis. Sampeyan miwiti aplikasi tanpa panjaluk, Kubernetes ora ngerti apa sing sampeyan duwe, simpul apa sing bisa ditindakake. Inggih, dheweke nyurung, nyorong, nyopir menyang simpul. Ing sawetara titik, sampeyan bakal miwiti entuk lalu lintas menyang aplikasi sampeyan. Lan salah sawijining aplikasi dumadakan wiwit nggunakake sumber daya nganti watesan sing diduweni miturut watesan kasebut. Pranyata ana aplikasi liyane ing cedhak lan uga butuh sumber daya. Simpul kasebut wiwit kehabisan sumber daya, contone, OP. Simpul kasebut wiwit kehabisan sumber daya, contone, memori akses acak (RAM). Nalika simpul kehabisan daya, pisanan docker bakal mandheg nanggapi, banjur cubelet, banjur OS. Dheweke mung bakal semaput lan EVERYTHING mesthi bakal mandheg nggarap sampeyan. Yaiku, iki bakal nyebabake simpul sampeyan macet lan sampeyan kudu miwiti maneh. Ing cendhak, kahanan ora apik banget.

Lan yen sampeyan duwe panjaluk, watesan kasebut ora beda banget, paling ora kaping pirang-pirang tinimbang watesan utawa panjaluk, mula sampeyan bisa ngisi aplikasi sing normal lan rasional ing simpul klompok Kubernetes. Ing wektu sing padha, Kubernetes kira-kira ngerti apa sing dilebokake ing ngendi, pira sing digunakake ing ngendi. Sing, iku mung wayahe. Iku penting kanggo ngerti. Lan iku penting kanggo ngontrol sing iki dituduhake.

Panyimpenan data

Titik sabanjure yaiku babagan panyimpenan data. Apa sing kudu ditindakake lan umume, apa sing kudu ditindakake kanthi terus-terusan ing Kubernetes?

Aku, maneh, ing kita Sekolah Sore, ana topik babagan database ing Kubernetes. Lan misale jek aku malah ngerti apa sing diomongake karo kanca-kanca nalika takon: "Apa bisa mbukak database ing Kubernetes?" Kanggo sawetara alasan, misale jek kula rekan sampeyan kudu ngandhani yen sampeyan takon apa bisa mbukak database ing Kubernetes, mula ora mungkin.

Logika ing kene prasaja. Yen ngono, aku bakal nerangake maneh, yen sampeyan pancen wong sing apik banget sing bisa mbangun sistem panyimpenan jaringan distribusi sing cukup toleran, ngerti carane pas karo database ing kasus iki, kepiye carane awan asli ing kontaner kudu bisa digunakake. ing basis data umume. Paling kamungkinan, sampeyan ora duwe pitakonan babagan carane mbukak. Yen sampeyan duwe pitakonan kuwi, lan sampeyan pengin nggawe manawa iku kabeh unfolds lan stands tengen pati ing produksi lan tau tiba, banjur iki ora kelakon. Sampeyan dijamin kanggo njupuk dhewe ing sikil karo pendekatan iki. Mulane, luwih becik ora.

Apa sing kudu kita lakoni karo data sing pengin disimpen aplikasi kita, sawetara gambar sing diunggah pangguna, sawetara perkara sing digawe aplikasi sajrone operasi, umpamane, nalika wiwitan? Apa sing kudu ditindakake ing Kubernetes?

Umumé, saenipun, ya, mesthi, Kubernetes dirancang kanthi apik lan umume dirancang kanggo aplikasi tanpa negara. Sing, kanggo aplikasi sing ora nyimpen informasi ing kabeh. Iki becik.

Nanging, mesthi, pilihan becik ora tansah ana. Dadi apa? Titik pisanan lan paling gampang kanggo njupuk sawetara jenis S3, mung ora ngarep-digawe, kang uga ora cetha cara kerjane, nanging saka sawetara panyedhiya. Panyedhiya sing apik lan normal - lan ajar aplikasi sampeyan nggunakake S3. Yaiku, nalika pangguna sampeyan pengin ngunggah file, ucapake "kene, mangga, upload menyang S3." Nalika arep nampa, ngomong: "Iki link menyang S3 bali lan njupuk saka kene." Iki becik.

Yen dumadakan sakperangan alesan pilihan becik iki ora cocok, sampeyan duwe aplikasi sing ora nulis, sampeyan ora berkembang, utawa iku sawetara jenis warisan elek, ora bisa nggunakake protokol S3, nanging kudu bisa karo direktori lokal ing folder lokal. Njupuk soko liyane utawa kurang prasaja, masang Kubernetes. Sing, langsung anggar Ceph kanggo sawetara tugas minimal, misale jek kula, iku idea ala. Amarga Ceph, mesthi, apik lan modis. Nanging yen sampeyan ora ngerti apa sing sampeyan tindakake, banjur yen sampeyan sijine soko ing Ceph, sampeyan bisa gampang banget lan mung ora njaluk metu saka kono maneh. Amarga, kaya sing sampeyan ngerteni, Ceph nyimpen data ing kluster ing wangun binar, lan ora ing wangun file sing prasaja. Mulane, yen dumadakan kluster Ceph rusak, banjur ana kemungkinan lengkap lan dhuwur sing ora bakal njaluk data saka ing kono maneh.

Kita bakal duwe kursus ing Ceph, sampeyan bisa familiarize dhewe karo program lan ngirim aplikasi.

Mulane, iku luwih apik kanggo nindakake soko prasaja kaya server NFS. Kubernetes bisa nggarap, sampeyan bisa masang direktori ing server NFS - aplikasi sampeyan kaya direktori lokal. Ing wektu sing padha, kanthi alami, sampeyan kudu ngerti manawa, maneh, sampeyan kudu nindakake apa wae karo NFS, sampeyan kudu ngerti yen kadhangkala bisa uga ora bisa diakses lan nimbang pitakonan apa sing bakal ditindakake ing kasus iki. Mbok iku kudu digawe serep nang endi wae ing mesin kapisah.

Titik sabanjure sing dakkandhakake yaiku apa sing kudu ditindakake yen aplikasi sampeyan ngasilake sawetara file sajrone operasi. Contone, nalika diwiwiti, ngasilake sawetara file statis, sing adhedhasar sawetara informasi sing ditampa aplikasi mung nalika diluncurake. Apa wayahe. Yen ora akeh data kasebut, mula sampeyan ora perlu repot, mung nginstal aplikasi iki kanggo awake dhewe lan kerja. Pitakonan mung ing kene yaiku apa, deleng. Asring banget, kabeh jinis sistem warisan, kayata WordPress lan liya-liyane, utamane kanthi modifikasi sawetara plugin sing pinter, pangembang PHP sing pinter, dheweke kerep ngerti carane nggawe supaya bisa ngasilake sawetara jinis file kanggo awake dhewe. Dadi, siji ngasilake siji file, sing liyane ngasilake file liyane. Padha beda. Keseimbangan kedadeyan ing kluster Kubernetes klien kanthi kebetulan. Patut, pranyata padha ora ngerti carane bisa bebarengan ing Kayata. Siji menehi informasi siji, liyane menehi pangguna informasi liyane. Iki soko sampeyan kudu nyingkiri. Yaiku, ing Kubernetes, kabeh sing diluncurake dijamin bisa digunakake ing pirang-pirang kasus. Amarga Kubernetes minangka barang sing obah. Mulane, dheweke bisa mindhah apa wae, kapan wae dheweke pengin, tanpa takon sapa wae. Mulane, sampeyan kudu ngetung babagan iki. Kabeh sing diluncurake ing salah siji conto bakal cepet utawa mengko gagal. Luwih akeh leladen sampeyan, luwih apik. Nanging maneh, Aku pitutur marang kowe, yen sampeyan duwe sawetara file kuwi, sampeyan bisa sijine wong tengen ing sampeyan, padha nimbang jumlah cilik. Yen ana sing luwih cilik, mesthine sampeyan ora kudu nyurung ing wadhah kasebut.

Aku maringi pitutur sing ana kuwi apik banget ing Kubernetes, sampeyan bisa nggunakake volume. Utamane, ana volume jinis dir kosong. Yaiku, mung Kubernetes bakal kanthi otomatis nggawe direktori ing direktori layanan ing server sing sampeyan miwiti. Lan dheweke bakal menehi sampeyan supaya sampeyan bisa nggunakake. Mung ana siji titik penting. Tegese, data sampeyan ora bakal disimpen ing wadhah kasebut, nanging ing host sing sampeyan lakoni. Kajaba iku, Kubernetes bisa ngontrol dir kosong kasebut ing konfigurasi normal lan bisa ngontrol ukuran maksimal lan ora ngidini ngluwihi. Siji-sijine yaiku apa sing wis ditulis ing dir kosong ora ilang nalika pod diwiwiti maneh. Yaiku, yen polong sampeyan tiba kanthi ora sengaja lan mundhak maneh, informasi ing dir kosong ora bakal ana ing endi wae. Dheweke bisa nggunakake maneh ing wiwitan anyar - lan iku apik. Yen polong sampeyan lunga ing endi wae, mula dheweke bakal lunga tanpa data. Tegese, sanalika pod saka simpul sing diluncurake kanthi dir kosong ilang, dir kosong bakal dibusak.

Apa maneh sing apik babagan dir kosong? Contone, bisa digunakake minangka cache. Coba bayangake yen aplikasi kita ngasilake barang kanthi cepet, menehi pangguna, lan nindakake kanthi suwe. Mulane, aplikasi, contone, ngasilake lan menehi kanggo kedhaftar, lan ing wektu sing padha nyimpen nang endi wae, supaya ing wektu sabanjuré pangguna teka kanggo bab sing padha, iku bakal luwih cepet kanggo menehi langsung kui. Dir kosong bisa dijaluk menyang Kubernetes kanggo nggawe ing memori. Lan kanthi mangkono, cache sampeyan umume bisa mlaku kanthi kacepetan kilat - babagan kacepetan akses disk. Yaiku, sampeyan duwe dir kosong ing memori, ing OS disimpen ing memori, nanging kanggo sampeyan, kanggo pangguna ing njero pod, katon mung direktori lokal. Sampeyan ora perlu app kanggo khusus mulang sihir apa wae. Sampeyan mung langsung njupuk lan sijine file ing direktori, nanging, nyatane, ing memori ing OS. Iki uga minangka fitur sing trep banget babagan Kubernetes.

Masalah apa sing dialami Minio? Masalah utama karo Minio yaiku supaya perkara iki bisa digunakake, kudu mlaku ing endi wae, lan kudu ana sawetara sistem file, yaiku, panyimpenan. Lan ing kene kita nemoni masalah sing padha karo Ceph. Tegese, Minio kudu nyimpen file ing endi wae. Iku mung antarmuka HTTP kanggo file sampeyan. Kajaba iku, fungsi kasebut jelas luwih miskin tinimbang S3 Amazon. Sadurunge, ora bisa menehi wewenang kanthi bener marang pangguna. Saiki, aku ngerti, wis bisa nggawe ember karo wewenang beda, nanging maneh, misale jek kula sing masalah utama, supaya ngandika, sistem panyimpenan ndasari ing minimal.

Carane dir Kosong ing memori mengaruhi watesan? Ora mengaruhi watesan kanthi cara apa wae. Iku dumunung ing memori inang, lan ora ing memori wadhah Panjenengan. Tegese, wadhah sampeyan ora ndeleng dir kosong ing memori minangka bagean saka memori sing dikuwasani. Tuan rumah ndeleng iki. Patut, ya, saka sudut pandang kubernetes, nalika sampeyan miwiti nggunakake iki, iku bakal apik kanggo ngerti sing sampeyan devoting bagean saka memori kanggo kosongaké dir. Lan patut, ngerti sing memori bisa entek ora mung amarga saka aplikasi, nanging uga amarga wong nulis kanggo iki dirs kosong.

Cloudnativeness

Lan subtopik pungkasan yaiku Cloudnative. Kenapa perlu? Cloudnativeness lan liya-liyane.

Yaiku, aplikasi kasebut sing bisa lan ditulis supaya bisa digunakake ing infrastruktur awan modern. Nanging, nyatane, Cloudnative duwe aspek liyane. Sing iki ora mung aplikasi sing njupuk menyang akun kabeh syarat saka infrastruktur maya modern, nanging uga ngerti carane bisa karo infrastruktur maya modern iki, njupuk kauntungan saka kaluwihan lan cacat saka kasunyatan sing bisa digunakake ing mega iki. Aja mung ngluwihi lan kerja ing awan, nanging manfaatake keuntungan saka kerja ing awan.

Syarat kanggo ngembangake aplikasi ing Kubernetes

Ayo njupuk Kubernetes minangka conto. Aplikasi sampeyan mlaku ing Kubernetes. Aplikasi sampeyan bisa tansah, utawa luwih admin kanggo aplikasi sampeyan, bisa tansah nggawe akun layanan. Yaiku, akun kanggo wewenang ing Kubernetes dhewe ing servere. Tambah sawetara hak sing kita kudu ana. Lan sampeyan bisa ngakses Kubernetes saka aplikasi sampeyan. Apa sampeyan bisa nindakake kanthi cara iki? Contone, saka aplikasi, tampa data babagan lokasi aplikasi liyane, conto liyane sing padha, lan bebarengan kluster ing ndhuwur Kubernetes, yen ana perlu.

Maneh, kita secara harfiah duwe kasus bubar. We duwe siji controller sing ngawasi antrian. Lan nalika sawetara tugas anyar katon ing antrian iki, menyang Kubernetes - lan ing Kubernetes nggawe pod anyar. Menehi pod iki sawetara tugas anyar lan ing framework pod iki, pod nindakake tugas, ngirim respon kanggo controller dhewe, lan controller banjur nindakake soko karo informasi iki. Contone, nambah database. Yaiku, maneh, iki minangka tambahan saka kasunyatan manawa aplikasi kita mlaku ing Kubernetes. Kita bisa nggunakake fungsi Kubernetes sing dibangun dhewe supaya bisa nggedhekake lan nggawe fungsionalitas aplikasi luwih trep. Tegese, aja ndhelikake sawetara sihir babagan carane mbukak aplikasi, carane miwiti buruh. Ing Kubernetes, sampeyan mung ngirim panjalukan ing app yen aplikasi kasebut ditulis nganggo Python.

Padha ditrapake yen kita ngluwihi Kubernetes. Kita duwe Kubernetes sing mlaku ing endi wae - luwih becik yen ana ing awan. Maneh, kita bisa nggunakake, lan malah kudu, aku pracaya, nggunakake kemampuan saka maya dhewe ngendi kita mlaku. Saka perkara dhasar sing diwenehake awan. Balancing, yaiku, kita bisa nggawe keseimbangan awan lan digunakake. Iki minangka kauntungan langsung saka apa sing bisa digunakake. Amarga imbangan maya, sepisanan, kanthi bodho mbusak tanggung jawab saka kita babagan cara kerjane, cara dikonfigurasi. Kajaba iku, trep banget, amarga Kubernetes biasa bisa nggabungake karo awan.

Semono uga kanggo skala. Kubernetes reguler bisa nggabungake karo panyedhiya awan. Ngerti carane ngerti yen kluster metu saka simpul, yaiku, papan simpul wis entek, mula sampeyan kudu nambah - Kubernetes dhewe bakal nambah simpul anyar menyang kluster sampeyan lan miwiti ngluncurake pod ing dheweke. Yaiku, nalika beban sampeyan teka, jumlah tungku wiwit nambah. Nalika simpul ing kluster entek kanggo polong iki, Kubernetes ngluncurake simpul anyar lan, kanthi mangkono, jumlah polong isih bisa saya tambah. Lan trep banget. Iki minangka kesempatan langsung kanggo skala kluster kanthi cepet. Ora cepet banget, ing pangertèn sing ora liya, iku luwih kaya menit kanggo nambah kelenjar anyar.

Nanging saka pengalamanku, maneh, iku paling keren sing dakdeleng. Nalika kluster Cloudnative skala adhedhasar wektu. Iku layanan backend sing digunakake dening wong ing kantor mburi. Yaiku, dheweke kerja jam 9 esuk, wiwit mlebu ing sistem kasebut, lan mulane, kluster Cloudnative, ing endi kabeh mlaku, wiwit swell, ngluncurake pod anyar supaya saben wong sing kerja bisa nggarap aplikasi kasebut. Nalika mangkat kerja jam 8 bengi utawa jam 6 sore, kluster Kubernetes weruh yen ora ana sing nggunakake aplikasi maneh lan wiwit nyusut. Simpenan nganti 30 persen dijamin. Kerjane ing Amazon ing wektu iku ora ana wong ing Rusia sing bisa nindakake kanthi apik.

Aku bakal ngomong langsung, tabungan 30 persen mung amarga kita nggunakake Kubernetes lan njupuk kauntungan saka kemampuan awan. Saiki iki bisa ditindakake ing Rusia. Aku ora bakal ngiklanake sapa wae, mesthi, nanging ayo ngomong yen ana panyedhiya sing bisa nindakake iki, nyedhiyakake langsung saka kothak kanthi tombol.

Ana siji titik pungkasan sing aku uga pengin narik kawigaten sampeyan. Supaya aplikasi sampeyan, infrastruktur sampeyan dadi Cloudnative, sampeyan kudu miwiti adaptasi pendekatan sing diarani Infrastruktur minangka Kode, tegese aplikasi sampeyan, utawa luwih infrastruktur sampeyan, dibutuhake kanthi cara sing padha kode Njlèntrèhaké aplikasi, logika bisnis ing wangun kode. Lan bisa digunakake minangka kode, yaiku, nyoba, gulung metu, simpen ing git, aplikasi CICD.

Lan iki persis sing ngidini sampeyan, sepisanan, supaya bisa ngontrol prasarana sampeyan, supaya bisa ngerti kahanan apa wae. Kapindho, ngindhari operasi manual sing nyebabake kesalahan. Katelu, aja mung apa sing diarani turnover, nalika sampeyan kudu nindakake tugas manual sing padha. Kaping papat, ngidini sampeyan pulih luwih cepet yen ana kegagalan. Ing Rusia, saben-saben aku ngomong babagan iki, mesthi ana akeh wong sing ujar: "Ya, jelas, nanging sampeyan duwe pendekatan, cendhak, ora perlu ndandani apa-apa." Nanging bener. Yen ana sing rusak ing infrastruktur sampeyan, mula saka sudut pandang Cloudnative lan saka sudut pandang Infrastruktur minangka Kode, tinimbang ndandani, pindhah menyang server, ngerteni apa sing rusak lan ndandani, luwih gampang. kanggo mbusak server lan nggawe maneh. Lan aku bakal duwe kabeh iki dibalèkaké.

Kabeh masalah iki rembugan ing liyane rinci ing Kursus video Kubernetes: Junior, Basic, Mega. Kanthi ngetutake tautan kasebut, sampeyan bisa ngerti program lan kahanan. Sing trep yaiku sampeyan bisa nguwasani Kubernetes kanthi sinau saka omah utawa kerja sajrone 1-2 jam saben dina.

Source: www.habr.com

Add a comment