Pekan lalu,
diumumkan bahwa mulai sekarang semua layanan Reddit baru diluncurkan dalam produksi pada infrastruktur berdasarkan kelompok Kubernetes. Ini adalah tonggak penting di jalur migrasi ke K8 dari salah satu sumber daya online paling populer, dan inilah caranya ...
Likbez : Sampai saat ini, Reddit berada di 20 situs global teratas (dan No. 6 di AS) menurut Alexa . Komunitas online asal Amerika ini terdiri lebih dari 400 juta pengguna aktif (dalam sebulan), 12 juta publikasi, dan 2 miliar suara per hari.Tentang mengapa dan bagaimana insinyur Reddit datang ke Kubernetes, Desember lalu di KubeCon 2018
( presentasi + video ) Greg Taylor, kepala Grup Rekayasa Rilis Proyek Rekayasa, Departemen Infrastruktur.

Mengapa Anda datang ke Kubernetes?
Pada awal 2016, layanan, diimplementasikan sebagai
aplikasi monolitik , hanya memiliki sekitar 20 insinyur yang membentuk 3 tim, salah satunya adalah semacam pahlawan cerita - tim Infrastruktur. Namun, tahun ini telah membawa perubahan besar: pada akhir tahun, lebih dari 60 insinyur bekerja di perusahaan (dan pada akhir 2018, jumlah mereka telah meningkat menjadi 200, yaitu, hanya dalam
3 tahun, ada peningkatan staf 10 kali lipat ).
Tingkat pertumbuhan yang begitu cepat telah menjadikan agenda tidak relevan (inefisiensi) dari arsitektur aplikasi monolitik, karena membuat banyak perubahan pada berbagai komponennya (oleh tim yang berbeda) menjadi sangat sulit. Setelah berkumpul untuk memecahkan masalah dan mempertimbangkan banyak pilihan, para insinyur memilih
jalur arsitektur berorientasi layanan (SOA) .
Beralih ke arsitektur layanan alih-alih monolit besar, Reddit mengalami masalah baru.
Tim infrastruktur telah menjadi penghambat dalam aktivitas pengembang yang ternyata sangat tergantung pada itu pada tahap yang berbeda: selama inisialisasi layanan, selama operasi mereka yang berkelanjutan, selama debugging dan memecahkan masalah kinerja. Sebagai perbaikan cepat untuk masalah ini, perusahaan membentuk lebih banyak tim swasembada yang disebut "berorientasi infrastruktur": para peserta dari tim tersebut memiliki keterampilan yang diperlukan di bidang pengoperasian infrastruktur, yang memungkinkan mereka untuk mengatasi banyak kesulitan tanpa menunggu tindakan tim Infrastruktur, yang dipenuhi dengan banyak simpanan tanpa akhir dari banyak pengembang.
Namun, itu masih merupakan solusi sementara dan praktik menunjukkan bahwa tidak semua orang ingin mengoperasikan seluruh tumpukan untuk layanan mereka:

Bagaimana situasi ini diselesaikan? Organisasi memperkenalkan konsep
pemilik layanan , yang dapat
mengembangkan layanan mereka dari awal hingga akhir,
menyebarkan layanan lebih awal dan sering,
mengoperasikan layanan (termasuk masalah ketersediaan dan kinerjanya). Tetapi bagaimana cara mencapai ini?
Alih-alih mengharapkan tim insinyur dengan keterampilan sempurna untuk menggabungkan layanan bersama dari puluhan bata, yang banyak di antaranya mungkin tidak memiliki pengetahuan, Anda perlu menawarkan mereka jalur yang telah dipikirkan dengan matang dan telah ditentukan sebelumnya untuk membawa layanan ke produksi, yang memengaruhi teknologi minimum. Ini akan menyelamatkan insinyur dari keharusan mempelajari banyak teknologi dan alat baru, yang bisa sangat banyak:

"Untuk mempraktikkan ide ini, kami perlu" mengemas "pengetahuan, proses, praktik terbaik kami, dan banyak lagi ke bentuk yang lebih mudah diakses."
InfreRedd - Kubernetes di Reddit
Beginilah InfreRedd, produk infrastruktur internal Reddit, berdasarkan Kubernetes, muncul.
Bagaimana tiga kebutuhan pemilik layanan yang ditentukan dalam definisi mereka terpenuhi?
1. Pengembangan
Standar untuk pengembangan dalam organisasi tidak menunjukkan pilihan bahasa atau kerangka kerja tertentu, tetapi menetapkan "bentuk" umum dari layanan, yang harus sesuai dengannya. Standar -
spesifikasi layanan yang tidak tergantung pada bahasa pemrograman - termasuk definisi protokol RPC, bekerja dengan rahasia, metrik pengembalian, keterlacakan, dan format untuk mengeluarkan log. Contoh implementasi spesifikasi seperti itu di Python dapat ditemukan di proyek
baseplate , yang, bagaimanapun, tidak mungkin berguna bagi seseorang untuk penggunaan nyata, tetapi itu bisa menjadi inspirasi.
Selain itu, materi diciptakan untuk memulai dengan cepat ketika menulis layanan baru: kode bertopik untuk berbagai bahasa (Python, Go, Node), serta Dockerfile, konfigurasi untuk CI dan bahkan grafik Helm.
Untuk membantu pengembangan lokal, pilihan insinyur Reddit jatuh pada produk Google -
Skaffold , yang menawarkan pengembang siklus
baca -
baca edit → bangun kembali → penyegaran, yang:
- tidak membutuhkan pengetahuan mendalam tentang Kubernet;
- sedekat mungkin dengan produksi;
- memungkinkan Anda untuk menggunakan grafik / gambar standar;
- dan - tidak seperti Minikube yang digunakan sebelumnya - bekerja dengan Skaffold tidak memerlukan sumber daya besar dari laptop yang berfungsi (karena peluncuran dilakukan ke kluster jarak jauh).
2. Menyebarkan
Reddit menggunakan platform pengiriman kontinu
Drone untuk menjalankan tes dan membangun artefak (biasanya gambar Docker).
Kubernetes awalnya menggunakan plugin Helm untuk Drone untuk penyebaran, tetapi cukup cepat para insinyur sampai pada kesimpulan bahwa Helm tidak senang dengan itu karena mereka menginginkan sistem yang "lebih memahami keadaan objek yang dibuat atau diperbarui," dan otomatisasi lebih lanjut dari proses penyebaran menyebabkan perlunya solusi yang dapat menarik bagi alat yang digunakan dan jeda rollback jika ada kegagalan atau masalah kinerja.
Akibatnya,
Spinnaker dipilih untuk mengatur penyebaran di Kubernetes. Baginya, templat dibuat untuk jaringan pipa tipikal (di Jsonnet). Selanjutnya, grafik Helm dihasilkan, yang sudah diluncurkan ke Kubernetes
oleh Spinnaker. Pengguna menerima informasi tentang kemajuan penyebaran dan membantu diagnosis jika terjadi masalah. Inilah yang terlihat seperti proses penyebaran dalam pementasan / produksi secara umum:

3. Operasi
Pertama, bagaimana kewajiban pemilik layanan dan tim infrastruktur dibagi?
- Pemilik layanan : memahami dasar-dasar Kubernetes, menyebarkan dan mengoperasikan layanan mereka;
- Tim infrastruktur : mendukung pengoperasian (peluncuran, dukungan, penskalaan) kluster Kubernetes, memberikan mereka semua sumber daya yang diperlukan, dan juga memberi saran kepada insinyur organisasi tentang desain layanan yang andal, produktif, toleran terhadap kesalahan (khususnya, sesi pelatihan diadakan secara teratur, catatan yang kemudian didistribusikan seluruh perusahaan).
Pemilik layanan terbatas dalam hak mereka. Namun, untuk mendapatkan akses ke produksi (untuk mendiagnosis masalah), dimungkinkan untuk meminta (melalui utilitas konsol khusus) token sementara yang memberi mereka hak penuh untuk ruang nama mereka.
Poin penting lainnya dari operasi adalah meminimalkan potensi kerusakan yang mungkin berasal dari sumber yang berbeda. Inilah yang dilakukan Reddit untuk ini:

Untuk membuat hidup lebih mudah bagi para insinyur yang terlibat dalam operasi, berikut ini juga terlibat:
- Wavefront - untuk metrik;
- PagerDuty - untuk peringatan;
- Zipkin - untuk melacak;
- Sentry - untuk pengecualian dan kesalahan pelacakan;
- sistem logging terpusat.
Status Kubernetes di Reddit
Statistik umum tentang infrastruktur Kubernet pada Desember tahun lalu adalah sebagai berikut:
- 7 cluster (dari 3 hingga 6 cluster baru akan ditambahkan dalam beberapa bulan ke depan);
- dari sepertiga hingga setengah dari semua tim teknik berinteraksi dengan Kubernetes;
- sekitar 20 layanan Reddit diproduksi dengan K8;
- pada hari kerja, 10-20 penyebaran layanan ini ke K8 berlangsung.
Ketersediaan InfreRedd dengan Kubernetes untuk seluruh organisasi direncanakan untuk kuartal pertama 2019, yang menyiratkan penyebaran setiap layanan baru dalam produksi yang dilayani oleh Kubernetes.
(Pada saat itu, ini terjadi selama sekitar 3 dari 4 layanan baru.)Seperti disebutkan di awal artikel, tonggak ini berhasil dicapai minggu lalu:

Artikel lain dari siklus