Hey Habr!
Kita ngelingake yen kita wis ngeculake liyane sing menarik lan migunani babagan pola Kubernetes. Iku kabeh diwiwiti karo ""Brendan Burns, lan, kanthi cara, kita duwe kerja ing bagean iki . Dina iki kita ngajak sampeyan maca artikel saka blog MiniIO sing nerangake kanthi ringkes tren lan spesifik pola panyimpenan data ing Kubernetes.
Kubernetes wis ngganti pola pangembangan lan panyebaran aplikasi tradisional kanthi dhasar. Saiki tim bisa ngembangake, nguji, lan masang aplikasi sajrone sawetara dina-ing pirang-pirang lingkungan, kabeh ana ing kluster Kubernetes. Pakaryan kasebut karo teknologi generasi sadurunge biasane njupuk minggu, yen ora sasi.
Akselerasi iki bisa ditindakake kanthi abstraksi sing diwenehake dening Kubernetes - yaiku, amarga Kubernetes dhewe sesambungan karo rincian tingkat rendah saka mesin fisik utawa virtual, ngidini pangguna ngumumake prosesor sing dikarepake, jumlah memori sing dikarepake, lan jumlah wadhah. conto, antarane paramèter liyane. Kanthi komunitas gedhe sing ndhukung Kubernetes lan adopsi sing terus berkembang, Kubernetes dadi pimpinan ing antarane kabeh platform orkestrasi kontainer kanthi wates sing amba.
Nalika panggunaan Kubernetes saya tambah akeh, uga kebingungan babagan pola panyimpenan..
Kanthi saben wong saingan kanggo Piece saka kue Kubernetes (i.e., panyimpenan data), nalika nerangake bab panyimpenan data, sinyal klelep ing akèh gangguan.
Kubernetes ngemot model modern kanggo pangembangan, panyebaran, lan manajemen aplikasi. Model modern iki ngilangi panyimpenan data saka komputasi. Kanggo ngerti detasemen kanthi lengkap ing konteks Kubernetes, sampeyan uga kudu ngerti apa aplikasi stateful lan stateless, lan carane panyimpenan data cocog karo iku. Iki minangka pendekatan REST API sing digunakake dening S3 duwe kaluwihan sing jelas tinimbang pendekatan POSIX / CSI saka solusi liyane.
Ing artikel iki, kita bakal ngomong babagan pola panyimpenan data ing Kubernetes lan khusus nyentuh debat antarane aplikasi stateful lan stateless kanggo luwih ngerti apa bedane antarane aplikasi kasebut lan kenapa pentinge. Teks liyane bakal katon ing aplikasi lan pola panyimpenan data kanthi cara paling apik kanggo nggarap wadhah lan Kubernetes.
Wadah Stateless
Wadhah kasebut kanthi alami entheng lan ora suwe. Padha bisa gampang mandheg, dibusak, utawa disebarake menyang simpul liyane - kabeh ing sawetara detik. Ing sistem orkestrasi kontaner sing gedhe, operasi kasebut terus-terusan, lan pangguna ora ngerti owah-owahan kasebut. Nanging, pamindhahan mung bisa ditindakake yen wadhah kasebut ora duwe ketergantungan ing simpul sing ana. Wadah kaya ngono diarani bisa digunakake stateless.
Wadhah Stateful
Yen wadhah nyimpen data ing piranti sing dipasang sacara lokal (utawa ing piranti pamblokiran), banjur nyimpen data sing dienggoni kudu dipindhah menyang simpul anyar, bebarengan karo wadhah kasebut, yen ana kegagalan. Iki penting amarga yen ora, aplikasi sing mlaku ing wadhah ora bisa mlaku kanthi bener amarga kudu ngakses data sing disimpen ing media lokal. Wadah kaya ngono diarani bisa digunakake stateful.
Saka sudut pandang teknis, wadhah stateful uga bisa dipindhah menyang simpul liyane. Iki biasane digayuh nggunakake sistem file sing disebarake utawa pamblokiran panyimpenan jaringan sing dipasang ing kabeh wadah sing mlaku. Kanthi cara iki, kontaner ngakses volume kanggo panyimpenan data sing terus-terusan, lan informasi disimpen ing disk sing ana ing saindhenging jaringan. Aku bakal nelpon cara iki "pendekatan wadhah stateful", lan ing artikel liyane aku bakal nyebataken kasebut kanggo keseragaman.

Ing pendekatan wadhah stateful sing khas, kabeh pod aplikasi digandhengake karo sistem file sing disebarake - jinis panyimpenan sing dienggo bareng ing ngendi kabeh data aplikasi manggon. Nalika sawetara variasi bisa uga, iki minangka pendekatan tingkat dhuwur.
Saiki ayo goleki kenapa pendekatan wadah stateful minangka anti-pola ing jagad awan-sentris.
Desain aplikasi cloud-native
Cara tradisional, aplikasi nggunakake database kanggo panyimpenan terstruktur informasi lan disk lokal utawa sistem file sing disebarake ing ngendi kabeh data sing ora terstruktur utawa malah semi-terstruktur dibuwang. Nalika volume data sing ora terstruktur tansaya tambah, pangembang nyadari yen POSIX banget cerewet, duwe overhead sing signifikan, lan pungkasane ngalangi kinerja aplikasi nalika pindhah menyang skala gedhe.
Iki utamané nyumbang kanggo emergence saka standar anyar kanggo panyimpenan data, yaiku, panyimpenan basis maya, digunakake utamané adhedhasar REST API lan freeing aplikasi saka pangopènan burdensome saka panyimpenan data lokal. Ing kasus iki, aplikasi kanthi efektif dadi mode stateless (amarga negara kasebut ana ing panyimpenan remot). Aplikasi modern dibangun saka awal kanthi nimbang faktor iki. Minangka aturan, aplikasi modern sing ngolah data saka siji utawa liyane (log, metadata, blobs, lan liya-liyane) dibangun miturut paradigma berorientasi awan, ing ngendi negara kasebut ditransfer menyang sistem piranti lunak khusus kanggo panyimpenan.
Pendekatan wadhah stateful meksa kabeh paradigma iki bali persis ing ngendi diwiwiti!
Kanthi nggunakake antarmuka POSIX kanggo nyimpen data, aplikasi beroperasi kaya-kaya stateful, lan amarga iki, padha mangkat saka prinsip desain cloud-centric sing paling penting, yaiku, kemampuan kanggo macem-macem ukuran benang pekerja aplikasi gumantung saka mlebu. input, mbukak, pindhah menyang simpul anyar sanalika simpul saiki gagal, lan ing.
Njupuk dipikir nyedhaki ing kahanan iki, kita temokake yen milih nyimpen data, kita maneh lan maneh ngadhepi karo dilema POSIX vs. mligine,
- POSIX iku cerewet: Semantik POSIX mbutuhake saben operasi digandhengake karo metadata lan deskriptor file sing mbantu njaga kahanan operasi. Iki nyebabake biaya sing signifikan sing ora ana nilai nyata. API panyimpenan obyek, utamane API S3, nyingkirake syarat kasebut, ngidini aplikasi kasebut murub lan banjur "lali" babagan telpon kasebut. Tanggepan sistem panyimpenan nuduhake manawa tumindak kasebut sukses utawa ora. Yen gagal, aplikasi bisa nyoba maneh.
- Watesan jaringan: Ing sistem mbagekke, iku diwenehake sing ana uga akeh aplikasi nyoba kanggo nulis data menyang media ditempelake padha. Mulane, aplikasi ora mung bakal saingan karo saben liyane kanggo bandwidth transfer data (kanggo ngirim data menyang media), nanging sistem panyimpenan dhewe bakal saingan kanggo bandwidth iki dening ngirim data liwat disk fisik. Amarga loquaciousness saka POSIX, nomer telpon jaringan mundhak kaping pirang-pirang. Ing sisih liya, S3 API nyedhiyakake bedane sing jelas antarane panggilan jaringan antarane sing asale saka klien menyang server lan sing kedadeyan ing server.
- Keamanan: Model keamanan POSIX dirancang kanggo partisipasi manungsa aktif: pangurus ngatur tingkat akses tartamtu kanggo saben pangguna utawa grup. Paradigma iki angel dicocogake karo jagad sing fokus ing awan. Aplikasi modern gumantung ing model keamanan basis API, ngendi hak akses ditetepake minangka pesawat saka kawicaksanan, akun layanan, kredensial sauntara, etc.
- Manageability: Wadhah stateful duwe sawetara overhead Manajemen. Kita ngomong babagan nyinkronake akses paralel menyang data, njamin konsistensi data, kabeh iki mbutuhake pertimbangan sing ati-ati babagan pola akses data sing digunakake. Piranti lunak tambahan kudu diinstal, dipantau, lan dikonfigurasi, ora kanggo sebutno upaya pangembangan tambahan.
Antarmuka Panyimpenan Data Wadhah
Nalika Container Storage Interface (CSI) wis bantuan gedhe karo proliferasi lapisan volume Kubernetes, sebagian outsourcing menyang vendor panyimpenan pihak katelu, iku uga ora sengaja nyumbang kanggo yakin sing pendekatan wadhah stateful cara dianjurake kanggo nyimpen data ing Kubernetes.
CSI dikembangake minangka standar kanggo nyediakake sistem pamblokiran lan panyimpenan file sing sewenang-wenang kanggo aplikasi warisan nalika mlaku ing Kubernetes. Lan, kaya sing dituduhake artikel iki, siji-sijine kahanan ing ngendi pendekatan wadhah stateful (lan CSI ing wangun saiki) bisa dingerteni yaiku nalika aplikasi kasebut minangka sistem warisan sing ora bisa nambah dhukungan kanggo API panyimpenan obyek. .
Penting kanggo ngerti yen nggunakake CSI ing wangun saiki, yaiku, volume sing dipasang nalika nggarap aplikasi modern, kita bakal nemokake kira-kira masalah sing padha sing muncul ing sistem ing ngendi panyimpenan data diatur ing gaya POSIX.
Pendekatan sing luwih apik
Ing kasus iki, penting kanggo ngerti manawa umume aplikasi ora dirancang khusus kanggo karya stateful utawa stateless. Prilaku iki gumantung ing arsitektur sistem sakabèhé lan pilihan desain tartamtu sing digawe. Ayo ngobrol sethithik babagan aplikasi stateful.
Ing asas, kabeh data aplikasi bisa dipérang dadi sawetara jinis amba:
- Data log
- Data cap wektu
- Data transaksi
- Metadata
- Gambar wadhah
- Data blob (obyek gedhe binar).
Kabeh jinis data iki didhukung banget ing platform panyimpenan modern, lan ana sawetara platform cloud-native sing dirancang kanggo ngirim data ing saben format tartamtu. Contone, data transaksi lan metadata bisa uga ana ing basis data asli awan modern kayata CockroachDB, YugaByte, lsp. Gambar kontainer utawa data blob bisa disimpen ing registri docker adhedhasar MiniIO. Data timestamp bisa disimpen ing basis data seri wektu kayata InfluxDB, lsp. Kita ora bakal njlèntrèhaké rinci babagan saben jinis data lan aplikasi ing kene, nanging gagasan umum kanggo ngindhari panyimpenan data sing terus-terusan sing gumantung ing pemasangan disk lokal.

Kajaba iku, asring efektif nyedhiyakake lapisan caching sauntara sing dadi nyimpen file sementara kanggo aplikasi, nanging aplikasi ora kudu gumantung ing lapisan iki minangka sumber bebener.
Panyimpenan aplikasi stateful
Nalika akeh kasus migunani kanggo njaga aplikasi tanpa status, aplikasi sing dirancang kanggo nyimpen data - kayata database, toko obyek, toko nilai kunci - kudu stateful. Ayo goleki kenapa aplikasi kasebut dipasang ing Kubernetes. Coba contone MiniIO, nanging prinsip sing padha ditrapake kanggo sistem panyimpenan awan gedhe liyane.
Aplikasi cloud-native dirancang kanggo entuk manfaat saka keluwesan sing ana ing wadhah. Iki tegese dheweke ora nggawe asumsi babagan lingkungan sing bakal ditindakake. Contone, MiniIO nggunakake mekanisme coding erasure internal kanggo nyedhiyakake sistem kanthi daya tahan sing cukup kanggo tetep operasional sanajan setengah disk gagal. MiniIO uga ngatur integritas lan keamanan data nggunakake hashing lan enkripsi sisih server proprietary.
Kanggo aplikasi cloud-centric kasebut, volume persisten lokal (PV) paling trep minangka panyimpenan serep. PV lokal nyedhiyakake kemampuan kanggo nyimpen data mentah, dene aplikasi sing mlaku ing ndhuwur PV kasebut kanthi mandiri ngumpulake informasi kanggo skala data lan ngatur panjaluk data sing akeh.
Pendekatan iki luwih prasaja lan luwih bisa diukur tinimbang PV berbasis CSI, sing ngenalake lapisan manajemen data lan redundansi dhewe menyang sistem; titik iku lapisan iki biasane konflik karo aplikasi sing dirancang kanggo stateful.
A gerakan kuwat menyang decoupling data saka petungan
Ing artikel iki, kita ngomong babagan carane aplikasi diarahake maneh supaya bisa digunakake tanpa nyimpen negara, utawa, kanthi tembung liya, panyimpenan data dipisahake saka komputasi kasebut. Ing kesimpulan, ayo goleki sawetara conto nyata babagan tren iki.
, platform analitik data sing misuwur, sacara tradisional wis stateful lan disebarake ing HDFS. Nanging, nalika Spark pindhah menyang jagad sing fokus ing awan, platform kasebut tambah akeh digunakake tanpa negara nggunakake `s3a`. Spark nggunakake s3a kanggo nransfer negara menyang sistem liyane, nalika wadhah Spark dhewe ora duwe status. Pemain perusahaan utama liyane ing bidang analisis data gedhe, utamane, , , Padha uga obah kanggo bisa karo misahake panyimpenan data lan petungan ing wong.
Pola sing padha uga bisa dideleng ing platform analitis gedhe liyane, kalebu Presto, Tensorflow to R, Jupyter. Kanthi mbebasake negara menyang sistem panyimpenan awan remot, dadi luwih gampang ngatur lan skala aplikasi sampeyan. Kajaba iku, nggampangake portabilitas aplikasi menyang macem-macem lingkungan.
Source: www.habr.com
