Papanggihan urang ti sataun migrasi GitLab.com ka Kubernetes

Catetan. narjamahkeun.: Nyokot Kubernetes di GitLab dianggap salah sahiji dua faktor utama anu nyumbang kana kamekaran perusahaan. Nanging, dugi ka ayeuna, infrastruktur jasa online GitLab.com diwangun dina mesin virtual, sareng ngan sakitar sataun katukang migrasina ka K8s dimimitian, anu henteu acan réngsé. Kami resep nampilkeun tarjamahan tina tulisan panganyarna ku insinyur GitLab SRE ngeunaan kumaha ieu kajadian sareng naon kacindekan para insinyur anu milu dina proyék éta.

Papanggihan urang ti sataun migrasi GitLab.com ka Kubernetes

Sakitar sataun ayeuna, divisi infrastruktur urang parantos migrasi sadaya jasa anu dijalankeun dina GitLab.com ka Kubernetes. Salila ieu, urang ngalaman tangtangan anu aya hubunganana sanés ngan ukur mindahkeun jasa ka Kubernetes, tapi ogé pikeun ngatur panyebaran hibrid nalika transisi. Palajaran berharga anu urang diajar bakal dibahas dina artikel ieu.

Ti mimiti GitLab.com, server na dijalankeun dina awan dina mesin virtual. Mesin virtual ieu dikelola ku Chef sareng dipasang nganggo kami pakét Linux resmi. Strategi panyebaran bisi aplikasi perlu diropéa, diwangun ku saukur ngamutahirkeun armada server dina cara ngagabung, sequential maké pipa CI. Metoda ieu - albeit slow sarta saeutik pikaboseneun - mastikeun yén GitLab.com nganggo pamasangan sareng konfigurasi anu sami sareng pangguna offline (diurus sorangan) Pamasangan GitLab nganggo bungkusan Linux kami pikeun ieu.

Kami nganggo metodeu ieu sabab penting pisan pikeun ngalaman sagala kasedihan sareng kabungahan anu dialami anggota komunitas biasa nalika masang sareng ngonpigurasikeun salinan GitLab. Pendekatan ieu tiasa dianggo pikeun sababaraha waktos, tapi nalika jumlah proyék di GitLab ngaleuwihan 10 juta, urang sadar yén éta henteu deui nyumponan kabutuhan urang pikeun skala sareng panyebaran.

Léngkah munggaran pikeun Kubernetes sareng GitLab asli awan

Proyék ieu didamel dina 2017 Bagan GitLab pikeun nyiapkeun GitLab pikeun panyebaran awan, sareng pikeun ngaktipkeun pangguna masang GitLab dina klaster Kubernetes. Kami terang yén mindahkeun GitLab ka Kubernetes bakal ningkatkeun skalabilitas platform SaaS, nyederhanakeun panyebaran, sareng ningkatkeun efisiensi sumberdaya komputasi. Dina waktos anu sami, seueur fungsi aplikasi kami gumantung kana partisi NFS anu dipasang, anu ngalambatkeun transisi tina mesin virtual.

Dorongan ka arah asli awan sareng Kubernetes ngamungkinkeun insinyur urang ngarencanakeun transisi bertahap, nalika urang ngantunkeun sababaraha katergantungan aplikasi dina panyimpenan jaringan bari terus ngembangkeun fitur anyar. Kusabab urang mimiti ngarencanakeun migrasi dina usum panas 2019, seueur watesan ieu parantos direngsekeun, sareng prosés migrasi GitLab.com ka Kubernetes ayeuna parantos dilaksanakeun!

Fitur GitLab.com di Kubernetes

Pikeun GitLab.com, kami nganggo klaster GKE régional tunggal anu ngatur sadaya lalu lintas aplikasi. Pikeun ngaleutikan pajeulitna migrasi (geus tricky), urang difokuskeun jasa nu teu ngandelkeun gudang lokal atawa NFS. GitLab.com ngagunakeun basis kodeu Rails anu utamana monolithic, sarta kami ngarutekeun lalu lintas dumasar kana karakteristik beban kerja ka titik tungtung anu béda anu diisolasi kana pools node sorangan.

Dina kasus frontend, jenis ieu dibagi kana pamundut ka web, API, Git SSH / HTTPS jeung pendaptaran. Dina kasus backend, urang dibeulah jobs dina antrian nurutkeun rupa ciri gumantung kana wates sumberdaya nu geus ditangtukeun, anu ngamungkinkeun urang pikeun nyetél Tujuan Tingkat Layanan (SLO) pikeun sagala rupa beban kerja.

Sadaya jasa GitLab.com ieu dikonpigurasi nganggo bagan Helm GitLab anu teu dirobih. Konfigurasi dilumangsungkeun dina subcharts, nu bisa selektif diaktipkeun salaku urang laun migrasi jasa kana klaster. Sanaos kami mutuskeun henteu ngalebetkeun sababaraha jasa stateful kami dina migrasi, sapertos Redis, Postgres, GitLab Pages sareng Gitaly, ngagunakeun Kubernetes ngamungkinkeun urang sacara radikal ngirangan jumlah VM anu ayeuna diurus ku Chef.

Visibilitas Konfigurasi Kubernetes sareng Manajemén

Sadaya setélan diurus ku GitLab sorangan. Pikeun ieu, tilu proyék konfigurasi dumasar kana Terraform sareng Helm dianggo. Kami nyobian nganggo GitLab sorangan sabisana pikeun ngajalankeun GitLab, tapi pikeun tugas operasional kami gaduh instalasi GitLab anu misah. Ieu diperlukeun pikeun mastikeun yén anjeun teu gumantung kana kasadiaan GitLab.com nalika ngajalankeun GitLab.com deployments jeung apdet.

Sanaos jalur pipa kami pikeun klaster Kubernetes dijalankeun dina pamasangan GitLab anu misah, aya kaca spion tina repositori kode anu sayogi umum di alamat ieu:

  • k8s-beban pagawean / gitlab-com - Kerangka konfigurasi GitLab.com pikeun bagan GitLab Helm;
  • k8s-beban pagawean / gitlab-helmfiles - Ngandung konfigurasi pikeun jasa anu henteu langsung pakait sareng aplikasi GitLab. Ieu kalebet konfigurasi pikeun logging sareng ngawaskeun klaster, ogé alat terpadu sapertos PlantUML;
  • Gitlab-com-infrastruktur - Konfigurasi Terraform pikeun Kubernetes sareng infrastruktur VM warisan. Di dieu anjeun ngonpigurasikeun sadaya sumber anu dipikabutuh pikeun ngajalankeun kluster, kalebet kluster sorangan, pools node, akun jasa, sareng reservations alamat IP.

Papanggihan urang ti sataun migrasi GitLab.com ka Kubernetes
Pintonan umum dipidangkeun nalika parobihan dilakukeun. kasimpulan pondok kalawan tumbu ka diff lengkep nu SRE nganalisa saméméh nyieun parobahan klaster.

Pikeun SRE, tautanna nyababkeun bédana lengkep dina pamasangan GitLab, anu dianggo pikeun produksi sareng aksés anu diwatesan. Hal ieu ngamungkinkeun karyawan jeung masarakat, tanpa aksés ka proyék operasional (anu ngan kabuka pikeun SREs), pikeun nempo parobahan konfigurasi diusulkeun. Ku ngagabungkeun hiji conto GitLab umum pikeun kode jeung conto swasta pikeun pipelines CI, urang ngajaga workflow tunggal bari mastikeun kamerdikaan ti GitLab.com pikeun apdet konfigurasi.

Naon anu urang mendakan nalika hijrah

Salami pindah, pangalaman anu ditampi ku urang dilarapkeun ka migrasi sareng panyebaran énggal di Kubernetes.

1. Ngaronjat waragad alatan lalulintas antara zona kasadiaan

Papanggihan urang ti sataun migrasi GitLab.com ka Kubernetes
Statistik kaluar poéan (bait per poé) pikeun armada gudang Git on GitLab.com

Google ngabagi jaringanna kana daérah. Éta, kahareupna dibagi kana zona aksesibilitas (AZ). Git hosting dikaitkeun sareng jumlah data anu ageung, janten penting pikeun urang ngontrol kaluar jaringan. Pikeun lalu lintas internal, jalan kaluar ngan gratis upami tetep dina zona kasadiaan anu sami. Nalika tulisan ieu, kami nyayogikeun kirang langkung 100 TB data dina dinten kerja biasa (sareng éta ngan pikeun repositori Git). Ladenan anu cicing dina mesin virtual anu sami dina topologi basis VM kuno urang ayeuna dijalankeun dina pods Kubernetes anu béda. Ieu ngandung harti yén sababaraha lalulintas anu saméméhna lokal pikeun VM berpotensi ngarambat ka luar zona kasadiaan.

Klaster GKE régional ngidinan Anjeun pikeun bentang sababaraha Zona Kasadiaan pikeun redundansi. Urang tempo kamungkinan ngabagi klaster GKE régional kana klaster zona tunggal pikeun jasa anu ngahasilkeun volume lalu lintas anu ageung. Ieu bakal ngirangan biaya kaluar bari ngajaga redundansi tingkat klaster.

2. wates, requests sumberdaya sarta skala

Papanggihan urang ti sataun migrasi GitLab.com ka Kubernetes
Jumlah réplika ngolah lalu lintas produksi dina registry.gitlab.com. Puncak lalulintas jam ~15:00 UTC.

Carita migrasi urang dimimitian dina bulan Agustus 2019, nalika urang migrasi jasa munggaran urang, GitLab Container Registry, ka Kubernetes. Ladenan anu kritis-misi, lalu lintas tinggi ieu mangrupikeun pilihan anu saé pikeun migrasi anu munggaran kusabab éta mangrupikeun aplikasi anu teu aya kaayaan sareng sababaraha katergantungan éksternal. Masalah kahiji anu urang tepang nyaéta sajumlah ageung pods anu digusur kusabab kurangna mémori dina titik. Kusabab ieu, urang kedah ngarobih pamundut sareng wates.

Kapanggih yén dina kasus aplikasi dimana pamakean mémori ningkat kana waktosna, nilai-nilai anu rendah pikeun pamundut (nyéépkeun mémori pikeun unggal pod) ditambah ku wates anu "berehan" dina pamakean nyababkeun jenuh. (saturasi) titik jeung tingkat luhur evictions. Pikeun nungkulan masalah ieu, éta eta ieu mutuskeun pikeun ngaronjatkeun requests sarta wates handap. Ieu nyandak tekanan kaluar titik sarta ensured pods boga siklus hirup nu teu nempatkeun teuing tekanan dina titik. Ayeuna urang mimitian migrations kalawan berehan (jeung ampir identik) pamundut na wates nilai, nyaluyukeun aranjeunna sakumaha perlu.

3. Métrik jeung log

Papanggihan urang ti sataun migrasi GitLab.com ka Kubernetes
Divisi infrastruktur museurkeun kana latency, tingkat kasalahan sareng jenuh sareng dipasang tujuan tingkat palayanan (SLO) numbu ka kasadiaan umum sistem kami.

Sapanjang taun katukang, salah sahiji acara konci dina divisi infrastruktur nyaéta perbaikan dina ngawaskeun sareng damel sareng SLO. SLOs ngamungkinkeun urang pikeun nyetél tujuan pikeun jasa individu anu urang diawaskeun sacara saksama nalika migrasi. Tapi sanajan kalawan observability ningkat ieu, teu salawasna mungkin mun langsung ningali masalah ngagunakeun metrics na ngabejaan. Contona, ku fokus dina latency jeung ongkos kasalahan, urang teu pinuh nutupan sakabeh kasus pamakéan pikeun layanan ngalaman migrasi.

Masalah ieu kapanggih ampir langsung saatos migrasi sababaraha beban kerja ka kluster. Ieu janten utamana akut lamun urang kudu pariksa fungsi nu jumlah requests éta leutik, tapi nu miboga kagumantungan konfigurasi pisan husus. Salah sahiji palajaran konci tina migrasi éta kedah tumut kana akun henteu ngan ukur métrik nalika ngawaskeun, tapi ogé log sareng "buntut panjang" (ieu ngeunaan sapertos distribusi maranéhanana dina bagan - approx. tarjamah.) kasalahan. Ayeuna pikeun unggal migrasi kami kalebet daptar detil patarosan log (Queries log) sarta rencanana prosedur rollback jelas nu bisa ditransfer ti hiji shift ka hareup lamun masalah timbul.

Ngalayanan pamundut anu sami dina paralel dina infrastruktur VM lami sareng infrastruktur basis Kubernetes énggal masihan tangtangan anu unik. Beda jeung migrasi lift-and-shift (Transfer gancang aplikasi "sapertos aya" ka infrastruktur anyar; langkung rinci tiasa dibaca, contona, di dieu - kira-kira. tarjamah.), Karya paralel dina "heubeul" VMs na Kubernetes merlukeun parabot ngawaskeun cocog sareng duanana lingkungan sarta bisa ngagabungkeun metrics kana hiji pintonan. Kadé urang ngagunakeun dashboards sarua jeung queries log pikeun ngahontal observability konsisten salila periode transisi.

4. Ngalihkeun lalulintas ka klaster anyar

Pikeun GitLab.com, bagian tina server didedikasikeun pikeun panggung kanaria. Canary Park ngalayanan proyék internal urang sareng tiasa ogé diaktipkeun ku pamaké. Tapi utamina dirancang pikeun nguji parobahan anu dilakukeun kana infrastruktur sareng aplikasi. Ladenan hijrah munggaran dimimitian ku narima jumlah kawates patalimarga internal, sarta kami terus ngagunakeun métode ieu pikeun mastikeun SLOs anu patepung saméméh ngirim sakabeh lalulintas keur kluster.

Dina kasus migrasi, ieu ngandung harti yén requests ka proyék internal dikirim ka Kubernetes munggaran, lajeng urang laun pindah sesa lalulintas kana klaster ku cara ngarobah beurat backend ngaliwatan HAProxy. Salila migrasi ti VM ka Kubernetes, janten jelas yén éta pisan mangpaatna boga cara nu panggampangna pikeun alihan lalulintas antara infrastruktur heubeul jeung anyar jeung, sasuai, ngajaga infrastruktur heubeul siap pikeun rollback dina sababaraha poé kahiji sanggeus migrasi.

5. Cagar kapasitas pods sarta pamakéan maranéhna

Ampir langsung masalah di handap ieu dicirikeun: pods pikeun layanan pendaptaran dimimitian gancang, tapi launching pods pikeun Sidekiq nyandak nepi ka dua menit. Waktu ngamimitian anu panjang pikeun pod Sidekiq janten masalah nalika urang ngamimitian migrasi beban kerja ka Kubernetes pikeun pagawé anu kedah ngolah padamelan gancang sareng gancang.

Dina hal ieu, palajaran nya éta bari Kubernetes 'Horizontal Pod Autoscaler (HPA) nanganan pertumbuhan lalulintas ogé, hal anu penting pikeun mertimbangkeun karakteristik beban gawé sarta allocate kapasitas cadang ka pods (utamana lamun paménta disebarkeun unevenly). Dina kasus urang, aya surge ngadadak dina jobs, ngarah kana skala gancang, nu ngarah ka jenuh sumberdaya CPU saméméh urang boga waktu pikeun skala pool titik.

Sok aya godaan pikeun squeeze saloba mungkin kaluar tina klaster a, kumaha oge, sanggeus mimitina encountered masalah kinerja, urang ayeuna dimimitian ku anggaran pod berehan jeung ngurangan eta engké, ngajaga hiji panon nutup on SLOs. Ngaluncurkeun pod pikeun jasa Sidekiq parantos gancangan sacara signifikan sareng ayeuna peryogi rata-rata 40 detik. Ti ngurangan waktu peluncuran pods meunang GitLab.com sareng pangguna pamasangan anu diurus ku nyalira damel sareng bagan GitLab Helm resmi.

kacindekan

Saatos migrasi unggal jasa, kami bungah ku mangpaat ngagunakeun Kubernetes dina produksi: panyebaran aplikasi anu langkung gancang sareng aman, skala, sareng alokasi sumberdaya anu langkung efisien. Sumawona, kaunggulan migrasi ngalangkungan jasa GitLab.com. Unggal pamutahiran kana bagan Helm resmi nguntungkeun pamakéna.

Abdi ngarepkeun anjeun resep kana carita petualangan migrasi Kubernetes kami. Urang terus migrasi sadaya jasa anyar kana klaster. Inpormasi tambahan tiasa dipendakan dina publikasi ieu:

PS ti penerjemah

Baca ogé dina blog urang:

sumber: www.habr.com

Tambahkeun komentar