Cara menghubungkan cluster Kubernetes di pusat data yang berbeda
Selamat datang di seri Mulai Cepat Kubernetes kami. Ini adalah kolom reguler dengan pertanyaan paling menarik yang kami terima secara online dan dalam pelatihan kami. Jawaban pakar Kubernetes.
Pakar saat ini adalah Daniel Polenchik (Daniele Polensik). Daniel bekerja sebagai instruktur dan pengembang perangkat lunak di Pelajari8s.
Seringkali, infrastruktur direplikasi dan didistribusikan ke berbagai wilayah, terutama di lingkungan yang terkendali.
Jika satu wilayah tidak tersedia, lalu lintas dialihkan ke wilayah lain untuk menghindari gangguan.
Dengan Kubernetes, Anda dapat menggunakan strategi serupa dan mendistribusikan beban kerja ke berbagai wilayah.
Anda dapat memiliki satu atau beberapa klaster per tim, wilayah, lingkungan, atau kombinasi elemen-elemen ini.
Kluster Anda dapat dihosting di cloud dan lokal yang berbeda.
Namun bagaimana Anda merencanakan infrastruktur untuk penyebaran geografis seperti itu?
Apakah Anda perlu membuat satu cluster besar untuk beberapa lingkungan cloud melalui satu jaringan?
Atau punya banyak cluster kecil dan menemukan cara untuk mengontrol dan menyinkronkannya?
Satu kelompok kepemimpinan
Membuat satu cluster melalui satu jaringan tidaklah mudah.
Bayangkan Anda mengalami kecelakaan, konektivitas antar segmen cluster terputus.
Jika Anda memiliki satu server master, setengah dari sumber daya tidak akan dapat menerima perintah baru karena mereka tidak akan dapat menghubungi master.
Dan pada saat yang sama Anda memiliki tabel perutean lama (kube-proxy tidak dapat mengunduh yang baru) dan tidak ada pod tambahan (kubelet tidak dapat meminta pembaruan).
Lebih buruknya lagi, jika Kubernetes tidak melihat sebuah node, maka Kubernetes akan menandainya sebagai node yatim piatu dan mendistribusikan pod yang hilang ke node yang ada.
Hasilnya, Anda memiliki pod dua kali lebih banyak.
Jika Anda membuat satu server master untuk setiap wilayah, maka akan terjadi masalah pada algoritma konsensus di database etcd. (kira-kira. ed. β Faktanya, database etcd tidak harus ditempatkan di server master. Itu dapat dijalankan pada grup server terpisah di wilayah yang sama. Benar, sekaligus mendapatkan titik kegagalan cluster. Tapi dengan cepat.)
kegunaan dll algoritma rakituntuk menegosiasikan nilai sebelum menulisnya ke disk.
Artinya, sebagian besar kasus harus mencapai konsensus sebelum negara bagian dapat ditulis ke dll.
Jika latensi antara instance etcd meningkat secara dramatis, seperti halnya dengan tiga instance etcd di wilayah berbeda, diperlukan waktu lama untuk menegosiasikan nilai dan menulisnya ke disk.
Hal ini tercermin pada pengontrol Kubernetes.
Manajer pengontrol memerlukan lebih banyak waktu untuk mempelajari perubahan dan menulis respons ke database.
Dan karena pengontrolnya bukan hanya satu, melainkan beberapa, hasil reaksi berantai dan seluruh cluster mulai bekerja sangat lambat.
Saat ini tidak ada contoh jaringan besar yang bagus untuk satu cluster.
Pada dasarnya, komunitas pengembang dan grup cluster SIG mencoba mencari cara untuk mengatur cluster dengan cara yang sama seperti Kubernetes mengatur container.
Untuk pertama kalinya, kami mencoba mengelola kumpulan cluster sebagai satu objek menggunakan alat federasi kube.
Awalnya bagus, namun pada akhirnya federasi kube tidak pernah menjadi populer karena tidak mendukung semua sumber daya.
Ini mendukung pengiriman dan layanan gabungan, tetapi tidak mendukung StatefulSets, misalnya.
Selain itu, konfigurasi federasi dikirimkan dalam bentuk anotasi dan tidak fleksibel.
Bayangkan bagaimana Anda bisa mendeskripsikan partisi replika untuk setiap cluster dalam federasi hanya dengan menggunakan anotasi.
Benar-benar berantakan.
Cluster SIG melakukan banyak pekerjaan setelah kubefed v1 dan memutuskan untuk mendekati masalah dari sudut pandang yang berbeda.
Alih-alih anotasi, mereka memutuskan untuk merilis pengontrol yang diinstal pada cluster. Itu dapat dikustomisasi menggunakan Custom Resource Definitions (CRDs).
Untuk setiap sumber daya yang akan menjadi bagian dari federasi, Anda memiliki definisi CRD khusus dengan tiga bagian:
definisi standar sumber daya, misalnya penerapan;
bagian placement, tempat Anda menentukan bagaimana sumber daya akan didistribusikan di federasi;
bagian override, di mana untuk sumber daya tertentu Anda dapat mengganti bobot dan parameter dari penempatan.
Berikut adalah contoh pengiriman gabungan dengan bagian penempatan dan penggantian.
Seperti yang Anda lihat, pasokan didistribusikan ke dua cluster: cluster1 ΠΈ cluster2.
Cluster pertama menyediakan tiga replika, dan cluster kedua diatur ke 5.
Jika kamu memerlukan kontrol lebih terhadap jumlah replika, kubefed2 menyediakan objek ReplicaSchedulingPreference baru dimana replika dapat diberi bobot:
Opsi 2: menggabungkan cluster dengan gaya Booking.com
Pengembang Booking.com tidak mengerjakan kubefed v2, tetapi mereka menciptakan Pengirim - operator untuk pengiriman di beberapa cluster, di beberapa wilayah, dan di beberapa cloud.
Kedua alat tersebut memungkinkan Anda menyesuaikan strategi penerapan multi-kluster (kluster mana yang digunakan dan berapa banyak replika yang dimilikinya).
Tetapi Tujuan pengirim adalah untuk mengurangi risiko kesalahan selama pengiriman.
Di Pengirim, Anda dapat menentukan serangkaian langkah yang menjelaskan pembagian replika antara penerapan sebelumnya dan saat ini serta volume lalu lintas masuk.
Saat Anda memasukkan sumber daya ke sebuah klaster, pengontrol Pengirim secara bertahap meluncurkan perubahan tersebut ke seluruh klaster yang bergabung.
Selain itu, Pengirim sangat terbatas.
Misalnya, ia menerima diagram kemudi sebagai masukan dan tidak mendukung sumber daya vanilla.
Secara umum, Pengirim bekerja seperti ini.
Daripada pengiriman standar, Anda perlu membuat sumber daya aplikasi yang menyertakan bagan Helm:
Namun alih-alih menemukan cara baru untuk berinteraksi dengan cluster dan menggabungkan sumber daya dalam definisi khusus, penjadwal multi-cluster tertanam dalam siklus hidup Kubernetes standar dan mencegat semua panggilan yang membuat pod.
Setiap pod yang dibuat segera diganti dengan boneka.
penggunaan penjadwal multi-cluster webhook untuk modifikasi aksesuntuk mencegat panggilan dan membuat pod tiruan yang menganggur.
Pod asli melewati siklus perencanaan lain di mana, setelah melakukan survei terhadap seluruh federasi, keputusan penempatan dibuat.
Terakhir, pod dikirimkan ke cluster target.
Hasilnya, Anda memiliki pod tambahan yang tidak melakukan apa pun, hanya memakan ruang.
Keuntungannya adalah Anda tidak perlu menulis sumber daya baru untuk menggabungkan persediaan.
Setiap sumber daya yang membuat pod secara otomatis siap untuk digabungkan.
Ini menarik, karena tiba-tiba Anda memiliki perbekalan yang tersebar di beberapa wilayah, dan Anda bahkan tidak menyadarinya. Namun, hal ini cukup beresiko, karena semua yang ada di sini bertumpu pada sihir.
Namun sementara Pengirim mencoba untuk mengurangi sebagian besar dampak pengiriman, penjadwal multi-cluster menangani tugas-tugas yang lebih umum dan mungkin lebih cocok untuk pekerjaan batch.
Ia tidak memiliki mekanisme penyampaian bertahap yang canggih.
Lebih lanjut tentang penjadwal multi-cluster dapat ditemukan di halaman repositori resmi.
Jika Anda ingin membaca tentang aksi multi-cluster-scheduler, Admiralty punya kasus penggunaan yang menarik dengan Argo β alur kerja, acara, CI dan CD Kubernetes.
Alat dan solusi lainnya
Menghubungkan dan mengelola beberapa cluster adalah tugas yang kompleks, dan tidak ada solusi universal.
Jika Anda ingin menjelajahi topik ini lebih jauh, berikut beberapa sumber:
Kapal Selam oleh Rancher adalah alat yang menghubungkan jaringan overlay dari cluster Kubernetes yang berbeda.
Cilium, plugin antarmuka jaringan kontainer, menawarkan fungsi jaring cluster, yang memungkinkan Anda menggabungkan beberapa cluster
Itu saja untuk hari ini
Terima kasih telah membaca sampai akhir!
Jika Anda mengetahui cara menghubungkan beberapa cluster dengan lebih efisien, Beritahu kami.
Kami akan menambahkan metode Anda ke tautan.
Terima kasih khusus kepada Chris Nesbitt-Smith (Chris Nesbitt-Smith) dan Vincent de Sme (Vincent De Smet) (insinyur keandalan di swatmobile.io) untuk membaca artikel dan berbagi informasi berguna tentang cara kerja federasi.