Nggawe platform kubernetes ing Pinterest

Swara taun, 300 yuta pangguna Pinterest wis nggawe luwih saka 200 milyar pin ing luwih saka 4 milyar papan. Kanggo nglayani tentara pangguna lan basis konten sing akeh, portal kasebut wis ngembangake ewu layanan, wiwit saka layanan mikro sing bisa ditangani sawetara CPU, nganti monolit raksasa sing mlaku ing kabeh armada mesin virtual. Banjur wayahe teka nalika mripat perusahaan tiba ing k8s. Napa "kubus" katon apik ing Pinterest? Sampeyan bakal sinau babagan iki saka terjemahan artikel anyar saka blog Pinterest engineering.

Nggawe platform kubernetes ing Pinterest

Dadi, atusan yuta pangguna lan atusan milyar pin. Kanggo nglayani tentara pangguna lan basis konten sing akeh, kita wis ngembangake ewu layanan, wiwit saka layanan mikro sing bisa ditangani dening sawetara CPU, nganti monolit raksasa sing mlaku ing kabeh armada mesin virtual. Kajaba iku, kita duwe macem-macem kerangka sing uga mbutuhake akses CPU, memori, utawa I/O.

Kanggo njaga alat zoo iki, tim pangembangan ngadhepi sawetara tantangan:

  • Ora ana cara seragam kanggo insinyur kanggo mbukak lingkungan produksi. Layanan stateless, layanan Stateful lan proyek ing pembangunan aktif adhedhasar tumpukan teknologi temen beda. Iki nyebabake nggawe kabeh kursus pelatihan kanggo insinyur, lan uga nggawe rumit kerja tim infrastruktur kita.
  • Pangembang kanthi armada mesin virtual dhewe nggawe beban gedhe kanggo pangurus internal. AkibatΓ©, operasi prasaja kaya nganyari OS utawa AMI njupuk minggu lan sasi. Iki nyebabake tambah beban kerja ing kahanan sing katon saben dina.
  • Kesulitan nggawe alat manajemen infrastruktur global ing ndhuwur solusi sing wis ana. Kahanan kasebut luwih rumit amarga nemokake pamilik mesin virtual ora gampang. Yaiku, kita ora ngerti apa kapasitas iki bisa diekstrak kanthi aman kanggo beroperasi ing bagean liya saka infrastruktur kita.

Sistem orkestrasi kontainer minangka cara kanggo nggabungake manajemen beban kerja. Dheweke mbukak lawang kanggo nambah kacepetan pangembangan lan nyederhanakake manajemen infrastruktur, amarga kabeh sumber daya sing ana ing proyek kasebut dikelola dening siji sistem terpusat.

Nggawe platform kubernetes ing Pinterest

Gambar 1: Prioritas infrastruktur (reliabilitas, produktivitas pangembang, lan efisiensi).

Tim Platform Manajemen Awan ing Pinterest nemokake K8 ing 2017. Ing separo pisanan 2017, kita wis nyathet sebagian besar kemampuan produksi, kalebu API lan kabeh server web kita. SawisΓ© iku, kita nganakake evaluasi lengkap babagan macem-macem sistem kanggo ngatur solusi wadhah, mbangun kluster lan nggarap. Ing pungkasan taun 2017, kita mutusake nggunakake Kubernetes. Iku cukup fleksibel lan akeh didhukung ing komunitas pangembang.

Nganti saiki, kita wis nggawe alat boot cluster dhewe adhedhasar Kops lan migrasi komponen infrastruktur sing wis ana kayata jaringan, keamanan, metrik, logging, manajemen identitas, lan lalu lintas menyang Kubernetes. Kita uga ngetrapake sistem pemodelan beban kerja kanggo sumber daya kita, kerumitan sing didhelikake saka pangembang. Saiki kita fokus kanggo njamin stabilitas kluster, skala lan nyambungake klien anyar.

Kubernetes: Cara Pinterest

Miwiti karo Kubernetes ing skala Pinterest minangka platform sing bakal disenengi para insinyur kita teka kanthi akeh tantangan.

Minangka perusahaan gedhe, kita wis nandur modal akeh ing alat infrastruktur. Conto kalebu alat keamanan sing nangani pangolahan sertifikat lan distribusi kunci, komponen kontrol lalu lintas, sistem panemuan layanan, komponen visibilitas, lan komponen pengiriman log lan metrik. Kabeh iki diklumpukake kanggo alesan: kita tindak liwat path normal nyoba lan kesalahan, lan mila kita wanted kanggo nggabungake kabeh peralatan iki menyang infrastruktur anyar ing Kubernetes tinimbang reinventing lawas wheel ing platform anyar. Pendekatan iki sakabehe nyederhanakake migrasi, amarga kabeh dhukungan aplikasi wis ana lan ora perlu digawe saka awal.

Ing sisih liya, model prakiraan beban kerja ing Kubernetes dhewe (kayata panyebaran, proyek, lan set Daemon) ora cukup kanggo proyek kita. Masalah migunani iki minangka alangan gedhe kanggo pindhah menyang Kubernetes. Contone, kita wis krungu pangembang layanan sambat babagan setelan login sing ilang utawa salah. Kita uga nemokke salah nggunakake mesin Cithakan, nalika atusan salinan padha digawe karo specifications lan tugas padha, kang nyebabake masalah debugging ngipi elek.

Iku uga angel banget kanggo njaga versi beda ing kluster padha. Mbayangno kerumitan dhukungan pelanggan yen sampeyan kudu bisa bebarengan ing macem-macem versi lingkungan runtime padha, karo kabeh masalah sing, kewan omo lan nganyari.

Properti Pangguna lan Pengontrol Pinterest

Kanggo nggampangake para insinyur kita ngetrapake Kubernetes, lan nyederhanakake lan nyepetake infrastruktur, kita wis ngembangake definisi sumber daya khusus (CRD).

CRD nyedhiyakake fungsi ing ngisor iki:

  1. Nggabungake sumber daya Kubernetes asli sing beda-beda supaya bisa digunakake minangka beban kerja siji. Contone, sumber PinterestService kalebu panyebaran, layanan login, lan peta konfigurasi. Iki ngidini pangembang ora kuwatir babagan nyetel DNS.
  2. Ngleksanakake dhukungan aplikasi sing dibutuhake. Pangguna kudu fokus mung ing spesifikasi wadhah miturut logika bisnis, dene pengontrol CRD ngetrapake kabeh wadhah init, variabel lingkungan lan spesifikasi pod sing dibutuhake. Iki menehi tingkat comfort dhasar beda kanggo pangembang.
  3. Pengontrol CRD uga ngatur siklus urip sumber daya asli lan nambah kasedhiyan debug. Iki kalebu rekonsiliasi spesifikasi sing dikarepake lan nyata, nganyari status CRD lan njaga log acara, lan liya-liyane. Tanpa CRD, pangembang bakal dipeksa ngatur macem-macem sumber daya, sing mung nambah kemungkinan kesalahan.

Iki conto PinterestService lan sumber daya internal sing dikelola dening pengontrol kita:

Nggawe platform kubernetes ing Pinterest

Kaya sing sampeyan deleng ing ndhuwur, kanggo ndhukung wadhah khusus, kita kudu nggabungake wadhah init lan sawetara tambahan kanggo nyedhiyakake keamanan, visibilitas, lan lalu lintas jaringan. Kajaba iku, kita nggawe cithakan peta konfigurasi lan ngleksanakake dhukungan kanggo template PVC kanggo proyek kumpulan, uga nelusuri macem-macem variabel lingkungan kanggo nglacak identitas, konsumsi sumber daya, lan koleksi sampah.

Pancen angel mbayangno manawa pangembang pengin nulis file konfigurasi kasebut kanthi tangan tanpa dhukungan CRD, apamaneh luwih njaga lan debug konfigurasi kasebut.

Alur kerja panyebaran aplikasi

Nggawe platform kubernetes ing Pinterest

Gambar ing ndhuwur nuduhake carane masang sumber daya khusus Pinterest menyang kluster Kubernetes:

  1. Pangembang sesambungan karo kluster Kubernetes liwat CLI lan antarmuka panganggo.
  2. Piranti CLI/UI njupuk file YAML konfigurasi alur kerja lan properti mbangun liyane (ID versi sing padha) saka Artifactory banjur dikirim menyang Layanan Pengajuan Proyek. Langkah iki njamin yen mung versi produksi sing dikirim menyang kluster.
  3. JSS minangka gateway kanggo macem-macem platform, kalebu Kubernetes. Ing kene pangguna wis dikonfirmasi, kuota ditanggepi lan konfigurasi CRD kita dicenthang sebagian.
  4. Sawise mriksa CRD ing sisih JSS, informasi dikirim menyang API platform k8s.
  5. Pengontrol CRD kita ngawasi acara ing kabeh sumber daya pangguna. Ngonversi CR dadi sumber k8s asli, nambah modul sing dibutuhake, nyetel variabel lingkungan sing cocok, lan nindakake karya dhukungan liyane kanggo mesthekake yen aplikasi pangguna containerized duwe dhukungan infrastruktur sing cukup.
  6. Kontroler CRD banjur ngirim data sing ditampa menyang API Kubernetes supaya bisa diproses dening panjadwal lan dilebokake ing produksi.

komentar: Aliran kerja pra-release saka penyebaran iki digawe kanggo pangguna pisanan saka platform k8s anyar. Saiki kita lagi proses nyaring proses iki kanggo nggabungake kanthi lengkap karo CI/CD anyar. Iki tegese kita ora bisa ngandhani kabeh sing ana gandhengane karo Kubernetes. Kita ngarepake nuduhake pengalaman lan kemajuan tim ing arah iki ing kirim blog sabanjure, "Mbangun platform CI / CD kanggo Pinterest."

Jinis sumber daya khusus

Adhedhasar kabutuhan khusus Pinterest, kita wis ngembangake CRD ing ngisor iki supaya cocog karo alur kerja sing beda:

  • PinterestService minangka layanan tanpa negara sing wis mlaku suwe. Akeh sistem inti kita adhedhasar sakumpulan layanan kasebut.
  • PinterestJobSet model proyek kumpulan siklus lengkap. Skenario umum ing Pinterest yaiku macem-macem proyek mbukak wadhah sing padha kanthi paralel, tanpa dipikirake proses liyane sing padha.
  • PinterestCronJob akeh digunakake bebarengan karo beban periodik cilik. Iki minangka bungkus kanggo karya cron asli karo mekanisme dhukungan Pinterest sing tanggung jawab kanggo keamanan, lalu lintas, log lan metrik.
  • PinterestDaemon kalebu Daemon infrastruktur. Kulawarga iki terus berkembang amarga kita nambah dhukungan kanggo klompok kita.
  • PinterestTrainingJob ngluwihi proses Tensorflow lan Pytorch, nyedhiyakake tingkat dhukungan runtime sing padha karo kabeh CRD liyane. Wiwit Pinterest kanthi aktif nggunakake Tensorflow lan sistem pembelajaran mesin liyane, kita duwe alasan kanggo mbangun CRD sing kapisah ing saubengΓ©.

Kita uga nggarap PinterestStatefulSet, sing bakal dicocogake kanggo gudang data lan sistem stateful liyane.

Dhukungan runtime

Nalika pod aplikasi mlaku ing Kubernetes, kanthi otomatis nampa sertifikat kanggo ngenali dhewe. Sertifikat iki digunakake kanggo ngakses panyimpenan rahasia utawa kanggo komunikasi karo layanan liyane liwat mTLS. Sauntara kuwi, Konfigurator Init Kontainer lan Daemon bakal ndownload kabeh dependensi sing dibutuhake sadurunge mbukak aplikasi wadah. Yen kabeh wis siyap, sidecar lalu lintas lan Daemon bakal ndhaptar alamat IP modul karo Zookeeper supaya klien bisa nemokake. Kabeh iki bakal bisa digunakake amarga modul jaringan wis dikonfigurasi sadurunge aplikasi diluncurake.

Ing ndhuwur minangka conto khas dhukungan runtime kanggo beban kerja. Jinis beban kerja liyane mbutuhake dhukungan sing rada beda, nanging kabeh ana ing bentuk sidecar tingkat pod, level simpul utawa Daemon tingkat mesin virtual. Kita mesthekake yen kabeh iki disebarake ing infrastruktur manajemen lan konsisten ing aplikasi, sing pungkasane nyuda beban kerja teknis lan dhukungan pelanggan.

Pengujian lan QA

Kita mbangun pipa test end-to-end ing ndhuwur infrastruktur test Kubernetes sing wis ana. Tes kasebut ditrapake kanggo kabeh klompok kita. Pipa kita ngalami pirang-pirang revisi sadurunge dadi bagian saka kluster produk.

Saliyane sistem tes, kita duwe sistem ngawasi lan tandha sing terus-terusan ngawasi status komponen sistem, konsumsi sumber daya lan indikator penting liyane, mung menehi kabar yen perlu campur tangan manungsa.

Pilihan

Kita ndeleng sawetara alternatif kanggo sumber daya khusus, kayata pengontrol akses mutasi lan sistem cithakan. Nanging, kabeh mau duwe tantangan operasional sing signifikan, mula kita milih rute CRD.

Kontrol diakoni mutasi digunakake kanggo ngenalake sidecars, variabel lingkungan, lan dhukungan runtime liyane. Nanging, ngadhepi macem-macem masalah, kayata ikatan sumber daya lan manajemen siklus urip, ing ngendi masalah kasebut ora muncul ing CRD.

Wigati: Sistem cithakan kayata Helm chart uga akeh digunakake kanggo mbukak aplikasi kanthi konfigurasi sing padha. Nanging, aplikasi karya kita macem-macem banget kanggo dikelola nggunakake cithakan. Uga sajrone panyebaran terus-terusan bakal akeh kesalahan nalika nggunakake cithakan.

Karya sing bakal teka

Saiki kita ngatasi beban campuran ing kabeh klompok kita. Kanggo ndhukung pangolahan saka macem-macem jinis lan ukuran, kita kerja ing wilayah ing ngisor iki:

  • Koleksi klompok nyebarake aplikasi gedhe ing macem-macem klompok kanggo skalabilitas lan stabilitas.
  • Njamin stabilitas kluster, skalabilitas lan visibilitas kanggo nggawe konektivitas aplikasi lan SLA.
  • Ngatur sumber daya lan kuota supaya aplikasi ora konflik karo siji liyane, lan ukuran kluster dikontrol ing bagean kita.
  • Platform CI/CD anyar kanggo ndhukung lan nyebarake aplikasi ing Kubernetes.

Source: www.habr.com

Add a comment