StatefulSets vs Deployments
StatefulSet va Deployment: farqi
Kinoteatrdagi o'rindiqlarni tasavvur qiling: agar hammasi BIR XIL, ALMASHTIRISH mumkin bo'lsa ("istalgan bo'sh joyga o'tir") — bu Deployment'dagi Pod'lar kabi: web-1 o'chib, web-4 yaratilsa, hech kim buni SEZMAYDI, hammasi bir xil ishlaydi. Lekin agar o'rindiqlar RAQAMLANGAN va har biriga MAXSUS buyurtma (masalan, nomer bo'yicha bron) BIRIKTIRILGAN bo'lsa — o'rindiq #3 doim #3 bo'lib QOLISHI, va o'zining bronini SAQLAB qolishi kerak. Bu — StatefulSet talab qiladigan narsa.
Deployment'dagi Pod'lar: StatefulSet'dagi Pod'lar:
web-7d9f8c6b5d-2xk4p db-0
web-7d9f8c6b5d-9mjqz db-1
web-7d9f8c6b5d-vh3rt db-2
- Nomlar TASODIFIY (hash-suffiks) - Nomlar TARTIBLI (0, 1, 2, ...)
- Har biri BIR XIL, ALMASHTIRISH - Har birining O'ZIGA XOS diski bor
mumkin (PersistentVolumeClaim), u BILAN
- O'chsa — istalgan tartibda, birga "ko'chib yuradi"
istalgan songa qayta yaratiladi - Yaratilish/o'chirilish QATIY
- Namuna: web-server, API tartibda: db-0, keyin db-1, ...
- Namuna: PostgreSQL, Kafka, ZooKeeper"ReplicaSet: Keeping N Copies Running" darsida yozgan Reconcile — Pod'larning FAQAT SONIGA e'tibor bergan edi, qaysi nusxa deb ATALISHI muhim emas edi. Bu — Deployment falsafasi: Pod'lar stateless (holatsiz) bo'lsa, ular haqiqatan ham bir-birining O'RNINI ALMASHTIRISHI mumkin. Lekin ma'lumotlar bazasi kabi stateful (holatga ega) tizimlarda, har bir nusxaning o'ZIGA XOS DISKI va, ko'p hollarda, boshqalar bilan ANIQ munosabati (masalan, "db-0 — bosh nusxa, db-1 va db-2 — replika") bo'ladi — bunday holatda nusxalarni tasodifiy nom bilan ALMASHTIRISH ma'lumot yo'qolishiga olib kelishi mumkin.
Shuning uchun StatefulSet uchta muhim kafolat beradi: (1) barqaror nom — db-0 doim db-0 bo'lib qoladi, hatto qayta yaratilsa ham; (2) barqaror disk — db-0ga biriktirilgan PersistentVolumeClaim uni QAYTA yaratilganda ham KUZATIB boradi (ma'lumot yo'qolmaydi); (3) tartibli yaratilish/o'chirish — db-1 faqat db-0 TAYYOR bo'lgandan keyin yaratiladi. Amalda qoida sodda: agar ilovangiz stateless bo'lsa (masalan, HTTP API server) — Deployment ishlating; agar u O'Z holatini SAQLASHI kerak bo'lsa (baza, navbat tizimi) — StatefulSet.
Key Takeaway
Key Takeaway:
Deployment — bir-birining o'rnini bemalol almashtira oladigan, holatsiz (stateless) Pod'lar uchun; StatefulSet — har birining o'ziga xos, barqaror nomi va diski bo'lishi SHART bo'lgan, holatga ega (stateful) tizimlar (masalan, ma'lumotlar bazasi) uchun ishlatiladi.
NEXT UP
Putting It All Together: A Mini Control Plane