Mencipta platform kubernetes di Pinterest

Selama bertahun-tahun, 300 juta pengguna Pinterest telah mencipta lebih daripada 200 bilion pin pada lebih daripada 4 bilion papan. Untuk memberi perkhidmatan kepada tentera pengguna dan pangkalan kandungan yang luas ini, portal itu telah membangunkan beribu-ribu perkhidmatan, daripada perkhidmatan mikro yang boleh dikendalikan oleh beberapa CPU, kepada monolit gergasi yang berjalan pada keseluruhan kumpulan mesin maya. Dan kemudian saatnya tiba apabila mata syarikat jatuh pada k8. Mengapakah "kubus" kelihatan bagus di Pinterest? Anda akan belajar tentang perkara ini daripada terjemahan artikel terbaru kami daripada blog Pinterest kejuruteraan.

Mencipta platform kubernetes di Pinterest

Jadi, ratusan juta pengguna dan ratusan bilion pin. Untuk memberi perkhidmatan kepada pasukan pengguna dan pangkalan kandungan yang luas ini, kami telah membangunkan beribu-ribu perkhidmatan, daripada perkhidmatan mikro yang boleh dikendalikan oleh beberapa CPU, kepada monolit gergasi yang berjalan pada keseluruhan kumpulan mesin maya. Selain itu, kami mempunyai pelbagai rangka kerja yang mungkin juga memerlukan CPU, memori atau akses I/O.

Dalam mengekalkan zoo alatan ini, pasukan pembangunan menghadapi beberapa cabaran:

  • Tiada cara seragam untuk jurutera menjalankan persekitaran pengeluaran. Perkhidmatan tanpa kewarganegaraan, Perkhidmatan berstatus dan projek dalam pembangunan aktif adalah berdasarkan susunan teknologi yang berbeza sama sekali. Ini membawa kepada penciptaan keseluruhan kursus latihan untuk jurutera, dan juga merumitkan kerja pasukan infrastruktur kami secara serius.
  • Pembangun dengan kumpulan mesin maya mereka sendiri menimbulkan beban yang besar kepada pentadbir dalaman. Akibatnya, operasi mudah seperti mengemas kini OS atau AMI mengambil masa beberapa minggu dan bulan. Ini membawa kepada peningkatan beban kerja dalam situasi yang kelihatan hampir setiap hari.
  • Kesukaran dalam mencipta alatan pengurusan infrastruktur global di samping penyelesaian sedia ada. Keadaan menjadi lebih rumit oleh fakta bahawa mencari pemilik mesin maya tidak mudah. Maksudnya, kami tidak tahu sama ada kapasiti ini boleh diekstrak dengan selamat untuk beroperasi di bahagian lain infrastruktur kami.

Sistem orkestrasi kontena ialah satu cara untuk menyatukan pengurusan beban kerja. Mereka membuka pintu kepada peningkatan kelajuan pembangunan dan memudahkan pengurusan infrastruktur, kerana semua sumber yang terlibat dalam projek diuruskan oleh satu sistem berpusat.

Mencipta platform kubernetes di Pinterest

Rajah 1: Keutamaan infrastruktur (kebolehpercayaan, produktiviti pembangun dan kecekapan).

Pasukan Platform Pengurusan Awan di Pinterest menemui K8 pada 2017. Menjelang separuh pertama 2017, kami telah mendokumenkan kebanyakan keupayaan pengeluaran kami, termasuk API dan semua pelayan web kami. Selepas itu, kami menjalankan penilaian menyeluruh terhadap pelbagai sistem untuk mengatur penyelesaian kontena, membina kelompok dan bekerja dengannya. Menjelang penghujung tahun 2017, kami memutuskan untuk menggunakan Kubernetes. Ia agak fleksibel dan disokong secara meluas dalam komuniti pembangun.

Sehingga kini, kami telah membina alatan but kelompok kami sendiri berdasarkan Kops dan memindahkan komponen infrastruktur sedia ada seperti rangkaian, keselamatan, metrik, pengelogan, pengurusan identiti dan trafik ke Kubernetes. Kami juga melaksanakan sistem pemodelan beban kerja untuk sumber kami, yang kerumitannya disembunyikan daripada pembangun. Kini kami memberi tumpuan untuk memastikan kestabilan kluster, menskalakannya dan menghubungkan pelanggan baharu.

Kubernetes: Cara Pinterest

Bermula dengan Kubernetes pada skala Pinterest sebagai platform yang disukai oleh jurutera kami datang dengan banyak cabaran.

Sebagai sebuah syarikat besar, kami telah melabur banyak dalam alatan infrastruktur. Contohnya termasuk alatan keselamatan yang mengendalikan pemprosesan sijil dan pengedaran kunci, komponen kawalan trafik, sistem penemuan perkhidmatan, komponen keterlihatan dan komponen penghantaran log dan metrik. Semua ini dikumpul atas sebab: kami melalui laluan percubaan dan kesilapan biasa, dan oleh itu kami mahu menyepadukan semua peralatan ini ke dalam infrastruktur baharu di Kubernetes dan bukannya mencipta semula roda lama pada platform baharu. Pendekatan ini secara keseluruhan memudahkan penghijrahan, kerana semua sokongan aplikasi sudah wujud dan tidak perlu dibuat dari awal.

Sebaliknya, model ramalan beban dalam Kubernetes sendiri (seperti penempatan, kerja dan set Daemon) tidak mencukupi untuk projek kami. Isu kebolehgunaan ini merupakan halangan besar untuk berpindah ke Kubernetes. Sebagai contoh, kami telah mendengar pemaju perkhidmatan mengeluh tentang tetapan log masuk yang hilang atau salah. Kami juga mengalami penggunaan enjin templat yang tidak betul, apabila beratus-ratus salinan dicipta dengan spesifikasi dan tugas yang sama, yang mengakibatkan masalah nyahpepijat mimpi ngeri.

Ia juga sangat sukar untuk mengekalkan versi yang berbeza dalam kelompok yang sama. Bayangkan kerumitan sokongan pelanggan jika anda perlu bekerja secara serentak dalam berbilang versi persekitaran masa jalan yang sama, dengan semua masalah, pepijat dan kemas kini mereka.

Harta dan Pengawal Pengguna Pinterest

Untuk memudahkan jurutera kami melaksanakan Kubernetes, dan untuk memudahkan serta mempercepatkan infrastruktur kami, kami telah membangunkan definisi sumber tersuai (CRD) kami sendiri.

CRD menyediakan fungsi berikut:

  1. Menggabungkan sumber Kubernetes asli yang berbeza supaya ia berfungsi sebagai satu beban kerja. Contohnya, sumber PinterestService termasuk penempatan, perkhidmatan log masuk dan peta konfigurasi. Ini membolehkan pembangun tidak bimbang tentang menyediakan DNS.
  2. Laksanakan sokongan aplikasi yang diperlukan. Pengguna perlu menumpukan hanya pada spesifikasi kontena mengikut logik perniagaan mereka, manakala pengawal CRD melaksanakan semua bekas init, pembolehubah persekitaran dan spesifikasi pod yang diperlukan. Ini memberikan tahap keselesaan yang berbeza secara asas untuk pembangun.
  3. Pengawal CRD juga mengurus kitaran hayat sumber asli dan meningkatkan ketersediaan nyahpepijat. Ini termasuk menyelaraskan spesifikasi yang diingini dan sebenar, mengemas kini status CRD dan menyelenggara log peristiwa, dan banyak lagi. Tanpa CRD, pembangun akan terpaksa mengurus pelbagai sumber, yang hanya akan meningkatkan kemungkinan ralat.

Berikut ialah contoh PinterestService dan sumber dalaman yang diuruskan oleh pengawal kami:

Mencipta platform kubernetes di Pinterest

Seperti yang anda lihat di atas, untuk menyokong bekas tersuai, kami perlu menyepadukan bekas init dan beberapa alat tambah untuk menyediakan keselamatan, keterlihatan dan trafik rangkaian. Selain itu, kami mencipta templat peta konfigurasi dan melaksanakan sokongan untuk templat PVC untuk kerja kelompok, serta menjejaki berbilang pembolehubah persekitaran untuk menjejak identiti, penggunaan sumber dan pengumpulan sampah.

Sukar untuk membayangkan bahawa pembangun mahu menulis fail konfigurasi ini dengan tangan tanpa sokongan CRD, apatah lagi mengekalkan dan menyahpepijat konfigurasi tersebut.

Aliran kerja penggunaan aplikasi

Mencipta platform kubernetes di Pinterest

Imej di atas menunjukkan cara untuk menggunakan sumber tersuai Pinterest ke gugusan Kubernetes:

  1. Pembangun berinteraksi dengan kelompok Kubernetes kami melalui CLI dan antara muka pengguna.
  2. Alat CLI/UI mendapatkan semula fail YAML konfigurasi aliran kerja dan sifat binaan lain (ID versi yang sama) daripada Artifactory dan kemudian menyerahkannya kepada Perkhidmatan Penyerahan Kerja. Langkah ini memastikan bahawa hanya versi pengeluaran dihantar ke kluster.
  3. JSS ialah pintu masuk untuk pelbagai platform, termasuk Kubernetes. Di sini pengguna disahkan, kuota dikeluarkan dan konfigurasi CRD kami disemak sebahagiannya.
  4. Selepas menyemak CRD di bahagian JSS, maklumat dihantar ke API platform k8s.
  5. Pengawal CRD kami memantau acara pada semua sumber pengguna. Ia menukar CR kepada sumber k8s asli, menambah modul yang diperlukan, menetapkan pembolehubah persekitaran yang sesuai dan melaksanakan kerja sokongan lain untuk memastikan aplikasi pengguna dalam kontena mempunyai sokongan infrastruktur yang mencukupi.
  6. Pengawal CRD kemudian menghantar data yang diterima ke API Kubernetes supaya ia boleh diproses oleh penjadual dan dimasukkan ke dalam pengeluaran.

Nota: Aliran kerja prakeluaran penempatan ini dibuat untuk pengguna pertama platform k8s baharu. Kami sedang dalam proses memperhalusi proses ini untuk disepadukan sepenuhnya dengan CI/CD baharu kami. Ini bermakna kami tidak boleh memberitahu anda semua yang berkaitan dengan Kubernetes. Kami berharap untuk berkongsi pengalaman kami dan kemajuan pasukan ke arah ini dalam catatan blog kami yang seterusnya, "Membina platform CI/CD untuk Pinterest."

Jenis sumber khas

Berdasarkan keperluan khusus Pinterest, kami telah membangunkan CRD berikut untuk disesuaikan dengan aliran kerja yang berbeza:

  • PinterestService ialah perkhidmatan tanpa kewarganegaraan yang telah berjalan sejak sekian lama. Kebanyakan sistem teras kami adalah berdasarkan set perkhidmatan sedemikian.
  • PinterestJobSet memodelkan kerja kumpulan kitaran penuh. Senario biasa di Pinterest ialah berbilang kerja menjalankan bekas yang sama secara selari, tanpa mengira proses lain yang serupa.
  • PinterestCronJob digunakan secara meluas bersama-sama dengan beban berkala yang kecil. Ini ialah pembalut untuk kerja cron asli dengan mekanisme sokongan Pinterest yang bertanggungjawab untuk keselamatan, trafik, log dan metrik.
  • PinterestDaemon termasuk Daemon infrastruktur. Keluarga ini terus berkembang apabila kami menambah lebih banyak sokongan kepada kluster kami.
  • PinterestTrainingJob meluas kepada proses Tensorflow dan Pytorch, memberikan tahap sokongan masa jalan yang sama seperti semua CRD lain. Memandangkan Pinterest secara aktif menggunakan Tensorflow dan sistem pembelajaran mesin yang lain, kami mempunyai sebab untuk membina CRD berasingan di sekelilingnya.

Kami juga sedang mengusahakan PinterestStatefulSet, yang tidak lama lagi akan disesuaikan untuk gudang data dan sistem stateful lain.

Sokongan masa jalan

Apabila pod aplikasi berjalan pada Kubernetes, ia secara automatik menerima sijil untuk mengenal pasti dirinya. Sijil ini digunakan untuk mengakses storan rahsia atau untuk berkomunikasi dengan perkhidmatan lain melalui mTLS. Sementara itu, Configurator Init Container dan Daemon akan memuat turun semua kebergantungan yang diperlukan sebelum menjalankan aplikasi kontena. Apabila semuanya sudah sedia, kereta sisi trafik dan Daemon akan mendaftarkan alamat IP modul dengan Zookeeper kami supaya pelanggan boleh menemuinya. Semua ini akan berfungsi kerana modul rangkaian telah dikonfigurasikan sebelum aplikasi dilancarkan.

Di atas adalah contoh biasa sokongan masa jalan untuk beban kerja. Jenis beban kerja lain mungkin memerlukan sokongan yang sedikit berbeza, tetapi semuanya datang dalam bentuk sidecar peringkat pod, Daemon peringkat nod atau mesin maya. Kami memastikan bahawa semua ini digunakan dalam infrastruktur pengurusan dan konsisten merentas aplikasi, yang akhirnya mengurangkan beban dengan ketara dari segi kerja teknikal dan sokongan pelanggan.

Ujian dan QA

Kami membina saluran paip ujian hujung ke hujung di atas infrastruktur ujian Kubernetes sedia ada. Ujian ini digunakan untuk semua kluster kami. Saluran paip kami telah melalui banyak semakan sebelum ia menjadi sebahagian daripada kluster produk.

Selain sistem ujian, kami mempunyai sistem pemantauan dan amaran yang sentiasa memantau status komponen sistem, penggunaan sumber dan penunjuk penting lain, memberitahu kami hanya apabila campur tangan manusia diperlukan.

Alternatif

Kami melihat beberapa alternatif kepada sumber tersuai, seperti pengawal capaian mutasi dan sistem templat. Walau bagaimanapun, kesemuanya datang dengan cabaran operasi yang ketara, jadi kami memilih laluan CRD.

Pengawal kemasukan mutasi telah digunakan untuk memperkenalkan sidecar, pembolehubah persekitaran dan sokongan masa jalan yang lain. Walau bagaimanapun, ia menghadapi pelbagai masalah, seperti pengikatan sumber dan pengurusan kitaran hayat, di mana masalah tersebut tidak timbul dalam CRD.

Nota: Sistem templat seperti carta Helm juga digunakan secara meluas untuk menjalankan aplikasi dengan konfigurasi yang serupa. Walau bagaimanapun, aplikasi kerja kami terlalu pelbagai untuk diuruskan menggunakan templat. Juga semasa penggunaan berterusan akan terdapat terlalu banyak ralat semasa menggunakan templat.

Kerja akan datang

Kami sedang menangani beban bercampur merentasi semua kluster kami. Untuk menyokong proses jenis dan saiz yang berbeza, kami bekerja dalam bidang berikut:

  • Koleksi kluster mengedarkan aplikasi besar merentas kluster berbeza untuk kebolehskalaan dan kestabilan.
  • Memastikan kestabilan kluster, skalabiliti dan keterlihatan untuk mewujudkan ketersambungan aplikasi dan SLA.
  • Menguruskan sumber dan kuota supaya aplikasi tidak bercanggah antara satu sama lain, dan skala kluster dikawal di pihak kami.
  • Platform CI/CD baharu untuk menyokong dan menggunakan aplikasi pada Kubernetes.

Sumber: www.habr.com

Tambah komen