Saya telah melakukan banyak penggalian di Kubernetes, dan saya sangat menyukai apa yang saya lihat! Satu hal yang tidak dapat saya ketahui dengan jelas adalah apa perbedaan persisnya antara sumber daya Deployment dan StatefulSet dan di skenario mana Anda akan menggunakan masing-masing (atau yang umumnya lebih disukai daripada yang lain).
Pengalaman apa pun yang dapat dibagikan orang akan luar biasa !!
sumber
deployment
konfigurasi dengan spesifikasi sederhana untuk mengatur 1-per-node (daemonset), replika, atau pengurutan stateful.Deployment - Anda menentukan PersistentVolumeClaim yang digunakan bersama oleh semua replika pod. Dengan kata lain, volume bersama.
Penyimpanan pendukung jelas harus memiliki akses ReadWriteMany atau ReadOnlyMany jika Anda memiliki lebih dari satu replika pod.
StatefulSet - Anda menentukan volumeClaimTemplates sehingga setiap pod replika mendapatkan PersistentVolumeClaim unik yang terkait dengannya. Dengan kata lain, tidak ada volume bersama.
Di sini, penyimpanan cadangan dapat memiliki AccessMode ReadWriteOnce .
StatefulSet berguna untuk menjalankan sesuatu dalam cluster misalnya cluster Hadoop, cluster MySQL, di mana setiap node memiliki penyimpanannya sendiri.
sumber
TL; DR
Deployment adalah resource untuk menerapkan aplikasi stateless, jika menggunakan PVC, semua replika akan menggunakan Volume yang sama dan tidak ada replika yang memiliki statusnya sendiri.
Statefulsets digunakan untuk aplikasi Stateful, setiap replika pod akan memiliki statusnya sendiri, dan akan menggunakan Volume-nya sendiri.
DaemonSet adalah pengontrol yang memastikan bahwa pod berjalan di semua node cluster. Jika sebuah node ditambahkan / dihapus dari sebuah cluster, DaemonSet secara otomatis menambahkan / menghapus pod tersebut.
Saya telah menulis tentang perbedaan mendetail antara Deployments, StatefulSets & Daemonsets, dan cara menerapkan aplikasi sampel menggunakan Resources K8s ini: Deployments vs StatefulSets vs DaemonSets .
sumber
StatefulSet
Gunakan 'StatefulSet' dengan Stateful Distributed Applications, yang mengharuskan setiap node memiliki status persisten . StatefulSet menyediakan kemampuan untuk mengonfigurasi sejumlah node yang berubah-ubah, untuk aplikasi / komponen berstatus, melalui konfigurasi (replika = N).
Ada dua jenis aplikasi terdistribusi berstatus: Master-Master dan Master-Slave. Semua node dalam konfigurasi Master-Master dan node Slave dalam konfigurasi Master-Slave dapat menggunakan StatefulSet.
Contoh:
Master-Slave -> Datanodes (slave) dalam cluster Hadoop
Master-Master -> Node database (master-master) dalam cluster Cassandra
Setiap Pod (replika / node) dalam StatefulSet memiliki identitas jaringan yang Unik dan Stabil. Misalnya dalam Cassandra StatefulSet dengan nama 'cassandra' dan jumlah node replika sebagai N, setiap pod Cassandra (node) memiliki:
Lihat: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
Penyebaran
'Deployment' di sisi lain cocok untuk aplikasi / layanan stateless di mana node tidak memerlukan identitas khusus. Penyeimbang beban dapat menjangkau node mana pun yang dipilihnya. Semua node sama. Deployment berguna untuk membuat sejumlah node arbitrer, melalui konfigurasi (replicas = N).
sumber
Perbedaan antara StatefulSet dan penyebaran
StatefulSet setara dengan penerapan khusus. Setiap pod di StatefulSet memiliki pengenal jaringan unik yang stabil yang dapat digunakan untuk menemukan anggota lain di cluster. Jika nama StatefulSet adalah Kafka, maka pod pertama disebut Kafka-0, Kafka-1 kedua, dan seterusnya; urutan mulai dan berhenti dari salinan pod yang dikontrol oleh StatefulSet dikontrol. Ketika pod ke-n dioperasikan, N-1 pod pertama sudah berjalan dan siap dalam keadaan Baik; pod di StatefulSet menggunakan volume penyimpanan persisten yang stabil, yang diimplementasikan oleh PV atau PVC. Saat menghapus pod, volume penyimpanan yang terkait dengan StatefulSet tidak dihapus secara default (untuk keamanan data); StatefulSet terikat untuk terikat ke volume PV. Digunakan untuk menyimpan data status pod, dan juga digunakan bersama dengan layanan headless, yang dideklarasikan sebagai milik layanan headless tersebut;
sumber