Kepiye prioritas pod ing Kubernetes nyebabake downtime ing Grafana Labs

Cathetan. nerjemahake.: Kita menehi perhatian marang rincian teknis babagan alasan downtime anyar ing layanan awan sing dikelola dening para pangripta Grafana. Iki minangka conto klasik babagan carane fitur anyar lan katon banget migunani sing dirancang kanggo ningkatake kualitas infrastruktur ... bisa nyebabake cilaka yen sampeyan ora nyedhiyakake akeh nuansa aplikasi ing kasunyatan produksi. Iku apik nalika materi kaya iki katon sing ngidini sampeyan sinau ora mung saka kesalahane. Rincian ana ing terjemahan teks iki saka wakil presiden produk saka Grafana Labs.

Kepiye prioritas pod ing Kubernetes nyebabake downtime ing Grafana Labs

Ing dina Jumuah, 19 Juli, layanan Hosted Prometheus ing Grafana Cloud mandheg udakara udakara 30 menit. Nyuwun pangapunten kanggo kabeh pelanggan sing kena gangguan. Tugas kita yaiku nyedhiyakake alat ngawasi sing dibutuhake, lan kita ngerti yen ora kasedhiya bisa nggawe urip luwih angel. Kita njupuk kedadeyan iki kanthi serius. Cathetan iki nerangake apa sing kedadeyan, kepiye nanggapi, lan apa sing ditindakake supaya ora kedadeyan maneh.

prasejarah

Layanan Grafana Cloud Hosted Prometheus adhedhasar corteks - Proyek CNCF kanggo nggawe layanan Prometheus multi-tenant sing bisa diukur kanthi horisontal, kasedhiya banget. Arsitèktur Cortex kasusun saka set microservices individu, saben kang nindakake fungsi dhewe: replikasi, panyimpenan, pitakon, etc. Cortex ana ing pembangunan aktif lan terus nambah fitur anyar lan nambah kinerja. Kita ajeg masang rilis Cortex anyar menyang kluster supaya pelanggan bisa njupuk kauntungan saka fitur iki - untunge, Cortex bisa dianyari tanpa downtime.

Kanggo nganyari sing lancar, layanan Ingester Cortex mbutuhake replika Ingester tambahan sajrone proses nganyari. (Cathetan. nerjemahake.: Ingester - komponèn dhasar saka Korteks. Tugase yaiku ngumpulake aliran sampel sing terus-terusan, nglumpukake dadi potongan Prometheus lan simpen ing basis data kaya DynamoDB, BigTable utawa Cassandra.) Iki ngidini Ingesters lawas nerusake data saiki menyang Ingesters anyar. Wigati dicathet yen Ingesters mbutuhake sumber daya. Kanggo bisa, sampeyan kudu duwe 4 intine lan 15 GB memori saben pod, i.e. 25% saka daya pangolahan lan memori saka mesin dhasar ing cilik saka klompok Kubernetes kita. Umumé, kita biasane duwe sumber daya liyane sing ora digunakake ing kluster saka 4 intine lan 15 memori GB, supaya kita bisa gampang muter munggah iki ingesters tambahan sak upgrade.

Nanging, asring kedadeyan nalika operasi normal ora ana mesin sing duwe 25% sumber daya sing ora digunakake. Ya, kita malah ora ngupayakake: CPU lan memori bakal tansah migunani kanggo proses liyane. Kanggo ngatasi masalah iki, kita mutusaké kanggo nggunakake Prioritas Pod Kubernetes. Ide iki kanggo menehi prioritas sing luwih dhuwur tinimbang layanan mikro liyane (stateless). Nalika kita kudu mbukak tambahan (N + 1) Ingester, kita ngganti sementara liyane, pods cilik. Pods iki ditransfer kanggo free sumber daya ing mesin liyane, ninggalake cukup gedhe "bolongan" kanggo mbukak Ingester tambahan.

Ing Kamis, 18 Juli, kita ngluncurake papat tingkat prioritas anyar kanggo klompok kita: kritis, dhuwur, rata-rata и kurang. Dheweke dites ing kluster internal tanpa lalu lintas klien sajrone seminggu. Kanthi gawan, pods tanpa prioritas tartamtu ditampa rata-rata prioritas, kelas disetel kanggo Ingesters karo dhuwur prioritas. Kritis dilindhungi undhang-undhang kanggo ngawasi (Prometheus, Alertmanager, node-eksportir, kube-state-metrics, etc.). Konfigurasi kita mbukak, lan sampeyan bisa ndeleng PR kene.

Kacilakan

Ing dina Jumuah, 19 Juli, salah sawijining insinyur ngluncurake kluster Cortex khusus kanggo klien gedhe. Konfigurasi kanggo kluster iki ora kalebu prioritas pod anyar, mula kabeh pod anyar diwenehi prioritas standar - rata-rata.

Kluster Kubernetes ora duwe sumber daya sing cukup kanggo kluster Cortex anyar, lan kluster Cortex produksi sing wis ana ora dianyari (Ingesters ditinggal tanpa dhuwur prioritas). Wiwit Ingesters kluster anyar minangka standar wis rata-rata prioritas, lan pods ana ing produksi makarya tanpa prioritas ing kabeh, Ingesters saka kluster anyar diganti Ingesters saka kluster produksi Cortex ana.

ReplicaSet kanggo Ingester sing diusir ing kluster produksi ndeteksi pod sing diusir lan nggawe sing anyar kanggo njaga jumlah salinan sing ditemtokake. Pod anyar ditugasake kanthi gawan rata-rata prioritas, lan liyane "lawas" Ingester ing produksi ilang sumber daya. Asil punika proses longsor, sing nyebabake pamindahan kabeh pods saka Ingester kanggo kluster produksi Cortex.

Ingesters minangka stateful lan nyimpen data sajrone 12 jam sadurunge. Iki ngidini kita ngompres kanthi luwih efisien sadurunge nulis menyang panyimpenan jangka panjang. Kanggo entuk iki, Cortex shards data antarane seri nggunakake Tabel Hash Distributed (DHT) lan replicates saben seri ing telung Ingesters nggunakake Dynamo-gaya quorum konsistensi. Cortex ora nulis data menyang Ingesters sing dipatèni. Mangkono, nalika nomer akeh Ingesters ninggalake DHT, Cortex ora bisa nyedhiyani réplikasi cekap saka entri, lan padha nabrak.

Deteksi lan Remediasi

Kabar Prometheus anyar adhedhasar "anggaran kesalahan" (kesalahan-budget basis - rincian bakal katon ing artikel mangsa) wiwit muni weker 4 menit sawise wiwitan mati. Sajrone limang menit sabanjure, kita nindakake sawetara diagnostik lan nggedhekake kluster Kubernetes sing ndasari kanggo dadi tuan rumah kluster produksi anyar lan sing wis ana.

Sawise limang menit liyane, Ingesters lawas kasil nulis data, sing anyar diwiwiti, lan kluster Cortex kasedhiya maneh.

10 menit liyane digunakake kanggo diagnosa lan mbenerake kesalahan metu saka memori (OOM) saka proxy mbalikke otentikasi sing ana ing ngarep Cortex. Kesalahan OOM disebabake kenaikan QPS kaping sepuluh (kita percaya amarga panjaluk sing agresif banget saka server Prometheus klien).

Akibat

Total downtime yaiku 26 menit. Ora ana data sing ilang. Ingester wis kasil ngemot kabeh data ing memori menyang panyimpenan jangka panjang. Sajrone mati, klien Prometheus server buffered dibusak (remote) rekaman nggunakake API anyar remote_write adhedhasar WAL (ditulis dening Callum Styan saka Grafana Labs) lan mbaleni nulis gagal sawise kacilakan.

Kepiye prioritas pod ing Kubernetes nyebabake downtime ing Grafana Labs
Operasi nulis kluster produksi

temonan

Penting sinau saka kedadeyan kasebut lan njupuk langkah-langkah sing dibutuhake supaya ora kedadeyan maneh.

Ing mburi, kita ora kudu nyetel standar rata-rata prioritas nganti kabeh Ingesters ing produksi wis ditampa dhuwur prioritas. Kajaba iku, iku perlu kanggo njupuk care saka wong-wong mau ing advance dhuwur prioritas. Kabeh wis didandani saiki. Muga-muga pengalaman kita bakal mbantu organisasi liyane nimbang nggunakake prioritas pod ing Kubernetes.

Kita bakal nambah tingkat kontrol tambahan liwat penyebaran obyek tambahan sing konfigurasi global kanggo kluster. Wiwit saiki owah-owahan kuwi bakal dibiji bоluwih akeh wong. Kajaba iku, modifikasi sing nyebabake kacilakan dianggep cilik banget kanggo dokumen proyek sing kapisah - mung dibahas ing masalah GitHub. Wiwit saiki, kabeh owah-owahan menyang konfigurasi bakal diiringi dokumentasi proyek sing cocog.

Pungkasan, kita bakal ngotomatisasi ukuran proxy mbalikke otentikasi kanggo nyegah OOM kakehan sing kita deleng, lan bakal mriksa setelan standar Prometheus sing ana gandhengane karo mundur lan skala kanggo nyegah masalah sing padha ing mangsa ngarep.

Gagal kasebut uga duwe sawetara akibat positif: nampa sumber daya sing dibutuhake, Cortex kanthi otomatis pulih tanpa intervensi tambahan. Kita uga entuk pengalaman sing migunani kanggo nggarap Grafana Loki - sistem agregasi log anyar - sing mbantu mesthekake yen kabeh Ingesters tumindak kanthi bener sajrone lan sawise gagal.

PS saka penerjemah

Waca uga ing blog kita:

Source: www.habr.com

Add a comment