Salom, Xabr!
O'z vaqtida biz ushbu mavzuni Rossiya bozoriga birinchi bo'lib kiritgan edik
kirish
Kubernetes fuqaroligi bo'lmagan ish yuklarini boshqarish uchun mo'ljallangan. Odatda, bunday ish yuklari mikroservis arxitekturasi ko'rinishida taqdim etiladi, ular engil, gorizontal ravishda yaxshi o'lchaydi, 12 faktorli ilovalar tamoyillariga amal qiladi va o'chirgichlar va xaos maymunlari bilan ishlay oladi.
Boshqa tomondan, Kafka asosan taqsimlangan ma'lumotlar bazasi vazifasini bajaradi. Shunday qilib, ishlayotganda siz davlat bilan shug'ullanishingiz kerak va bu mikroservisdan ancha og'irroq. Kubernetes davlat yuklarini qo'llab-quvvatlaydi, ammo Kelsi Xaytauer ikkita tvitda ta'kidlaganidek, ularga ehtiyotkorlik bilan munosabatda bo'lish kerak:
Ba'zi odamlar, agar siz Kubernetes-ni statistik ish yukiga aylantirsangiz, u RDS bilan raqobatlashadigan to'liq boshqariladigan ma'lumotlar bazasiga aylanadi deb o'ylashadi. Bu unday emas. Ehtimol, agar siz etarlicha ishlasangiz, qo'shimcha komponentlar qo'shsangiz va SRE muhandislari jamoasini jalb qilsangiz, siz Kubernetes tepasida RDS qura olasiz.
Men har doim hammaga Kubernetes-da statistik ish yuklarini ishga tushirishda juda ehtiyot bo'lishni tavsiya qilaman. "Kubernetes-da shtat yuklarini ishga tushira olamanmi" deb so'ragan ko'pchilik odamlar Kubernetes bilan va ko'pincha ular so'ragan ish yukida etarli tajribaga ega emaslar.
Xo'sh, siz Kafkani Kubernetesda boshqarishingiz kerakmi? Qarshi savol: Kafka Kubernetessiz yaxshiroq ishlaydimi? Shuning uchun men ushbu maqolada Kafka va Kubernetes qanday qilib bir-birini to'ldirishi va ularni birlashtirishda qanday tuzoqlar paydo bo'lishi mumkinligini ta'kidlamoqchiman.
Tugatish vaqti
Keling, asosiy narsa - ish vaqti muhitining o'zi haqida gapiraylik
jarayon
Kafka brokerlari protsessorga mos keladi. TLS ba'zi bir qo'shimcha xarajatlarni kiritishi mumkin. Biroq, Kafka mijozlari shifrlashdan foydalansalar, ko'proq CPU intensiv bo'lishi mumkin, ammo bu brokerlarga ta'sir qilmaydi.
xotira
Kafka brokerlari xotirani yeyishadi. JVM yig'ish hajmi odatda 4-5 GB bilan cheklangan, ammo Kafka sahifa keshini juda ko'p ishlatganligi uchun sizga juda ko'p tizim xotirasi kerak bo'ladi. Kubernetes-da konteyner manbasini o'rnating va shunga mos ravishda cheklovlarni so'rang.
Ma'lumotlar do'koni
Konteynerlarda ma'lumotlarni saqlash vaqtinchalik - qayta ishga tushirilganda ma'lumotlar yo'qoladi. Kafka ma'lumotlari uchun siz hajmdan foydalanishingiz mumkin emptyDir
, va ta'sir shunga o'xshash bo'ladi: sizning broker ma'lumotlaringiz tugagandan so'ng yo'qoladi. Sizning xabarlaringiz hali ham boshqa brokerlarda replika sifatida saqlanishi mumkin. Shuning uchun, qayta ishga tushirilgandan so'ng, muvaffaqiyatsiz broker birinchi navbatda barcha ma'lumotlarni takrorlashi kerak va bu jarayon juda ko'p vaqt talab qilishi mumkin.
Shuning uchun siz uzoq muddatli ma'lumotlarni saqlashdan foydalanishingiz kerak. XFS fayl tizimi yoki aniqrog'i ext4 bilan mahalliy bo'lmagan uzoq muddatli saqlash bo'lsin. NFS dan foydalanmang. Men sizni ogohlantirdim. NFS v3 yoki v4 versiyalari ishlamaydi. Xulosa qilib aytganda, Kafka brokeri NFSdagi "nomini o'zgartirish ahmoqona" muammosi tufayli ma'lumotlar katalogini o'chira olmasa, ishlamay qoladi. Agar sizni hali ishontirmagan bo'lsam, juda ehtiyotkorlik bilan
Tarmoq
Aksariyat taqsimlangan tizimlarda bo'lgani kabi, Kafkaning ishlashi tarmoqning kechikishini minimal darajada va o'tkazish qobiliyatini maksimal darajada saqlashga bog'liq. Barcha brokerlarni bitta tugunga joylashtirishga urinmang, chunki bu mavjudlikni kamaytiradi. Agar Kubernetes tugunlari ishlamay qolsa, butun Kafka klasteri ishlamay qoladi. Bundan tashqari, Kafka klasterini butun ma'lumotlar markazlari bo'ylab tarqatmang. Xuddi shu narsa Kubernetes klasteriga ham tegishli. Bu holatda yaxshi kelishuv turli xil mavjudlik zonalarini tanlashdir.
Konfiguratsiya
Doimiy manifestlar
Kubernetes veb-saytida mavjud
- ostida: Pod - Kubernetesdagi eng kichik joylashtiriladigan birlik. Pod sizning ish yukingizni o'z ichiga oladi va podning o'zi klasteringizdagi jarayonga mos keladi. Podada bir yoki bir nechta konteyner mavjud. Ansambldagi har bir ZooKeeper serveri va Kafka klasteridagi har bir broker alohida podda ishlaydi.
- Stateful Set: StatefulSet - bu Kubernetes ob'ekti bo'lib, u bir nechta statusli ish yuklarini boshqaradi va bunday ish yuklari muvofiqlashtirishni talab qiladi. StatefulSets podkastlarni tartibga solish va ularning o'ziga xosligi bo'yicha kafolatlar beradi.
- Boshsiz xizmatlar: Xizmatlar mantiqiy nom yordamida mijozlardan podkastlarni ajratish imkonini beradi. Kubernetes bu holda yukni muvozanatlash uchun javobgardir. Biroq, ZooKeeper va Kafka kabi statistik ish yuklarini ishlatganda, mijozlar ma'lum bir misol bilan bog'lanishlari kerak. Bu erda boshsiz xizmatlar foydali bo'ladi: bu holda, mijoz hali ham mantiqiy ismga ega bo'ladi, lekin siz to'g'ridan-to'g'ri podga murojaat qilishingiz shart emas.
- Uzoq muddatli saqlash hajmi: Ushbu hajmlar yuqorida aytib o'tilgan mahalliy bo'lmagan blokli doimiy xotirani sozlash uchun kerak.
ning
Rulda jadvallari
Helm - yum, apt, Homebrew yoki Chocolatey kabi OS paket menejerlari bilan taqqoslanishi mumkin bo'lgan Kubernetes uchun paket menejeri. Bu Helm diagrammalarida tasvirlangan oldindan belgilangan dasturiy paketlarni o'rnatishni osonlashtiradi. Yaxshi tanlangan Helm diagrammasi Kubernetes-da Kafkadan foydalanish uchun barcha parametrlarni qanday qilib to'g'ri sozlash bo'yicha qiyin vazifani osonlashtiradi. Bir nechta Kafka diagrammasi mavjud: rasmiysi joylashgan
Operatorlar
Helm-ning ma'lum kamchiliklari borligi sababli, yana bir vosita katta mashhurlikka erishmoqda: Kubernetes operatorlari. Operator nafaqat Kubernetes uchun dasturiy ta'minotni paketlaydi, balki bunday dasturiy ta'minotni joylashtirish va uni boshqarish imkonini beradi.
ro'yxat
unumdorlik
Kafka misolingizni taqqoslash orqali unumdorlikni sinab ko'rish muhimdir. Bunday testlar muammolar paydo bo'lishidan oldin mumkin bo'lgan to'siqlarni topishga yordam beradi. Yaxshiyamki, Kafka allaqachon ikkita ishlashni tekshirish vositasini taqdim etadi: kafka-producer-perf-test.sh
и kafka-consumer-perf-test.sh
. Ulardan faol foydalaning. Malumot uchun siz maqolada tasvirlangan natijalarga murojaat qilishingiz mumkin
operatsiyalar
Monitoring
Tizimdagi shaffoflik juda muhim - aks holda siz unda nima bo'layotganini tushunolmaysiz. Bugungi kunda bulutli mahalliy uslubda o'lchovlarga asoslangan monitoringni ta'minlaydigan mustahkam vositalar to'plami mavjud. Ushbu maqsadlar uchun ikkita mashhur vosita Prometey va Grafana. Prometey JMX eksportchisi yordamida barcha Java jarayonlaridan (Kafka, Zookeeper, Kafka Connect) ko'rsatkichlarni to'plashi mumkin - eng oddiy usulda. Agar siz cAdvisor ko'rsatkichlarini qo'shsangiz, Kubernetes-da resurslar qanday ishlatilishini to'liqroq tushunishingiz mumkin.
Strimzi Kafka uchun Grafana boshqaruv panelining juda qulay namunasiga ega. U asosiy ko'rsatkichlarni, masalan, kam takrorlangan yoki oflayn bo'lgan tarmoqlar haqida tasavvur beradi. U erda hamma narsa juda aniq. Ushbu ko'rsatkichlar resurslardan foydalanish va samaradorlik haqidagi ma'lumotlar, shuningdek barqarorlik ko'rsatkichlari bilan to'ldiriladi. Shunday qilib, siz asosiy Kafka klaster monitoringini behudaga olasiz!
Manba:
Bularning barchasini mijozlar monitoringi (iste'molchilar va ishlab chiqaruvchilar bo'yicha ko'rsatkichlar), shuningdek kechikish monitoringi (buning uchun mavjud) bilan to'ldirish yaxshi bo'lar edi.
Jurnal yozish
Ro'yxatga olish yana bir muhim vazifadir. Kafka o'rnatishingizdagi barcha konteynerlar tizimga kirganligiga ishonch hosil qiling stdout
и stderr
, shuningdek, Kubernetes klasteringiz barcha jurnallarni markaziy logging infratuzilmasiga jamlashiga ishonch hosil qiling, masalan.
Funktsional test
Kubernetes podkastlaringiz normal ishlayotganligini tekshirish uchun jonlilik va tayyorlik problaridan foydalanadi. Agar jonlilikni tekshirish muvaffaqiyatsiz tugasa, Kubernetes konteynerni to'xtatadi va agar qayta ishga tushirish siyosati mos ravishda o'rnatilgan bo'lsa, uni avtomatik ravishda qayta ishga tushiradi. Agar tayyorlikni tekshirish muvaffaqiyatsiz tugasa, Kubernetes podni xizmat ko'rsatish so'rovlaridan ajratadi. Shunday qilib, bunday hollarda qo'lda aralashuv endi umuman talab qilinmaydi, bu katta ortiqcha.
Yangilanishlarni tarqatish
StatefulSets avtomatik yangilanishlarni qo'llab-quvvatlaydi: agar siz RollingUpdate strategiyasini tanlasangiz, Kafka ostidagi har biri o'z navbatida yangilanadi. Shu tarzda, ishlamay qolish vaqtini nolga kamaytirish mumkin.
Masshtablash
Kafka klasterini masshtablash oson ish emas. Biroq, Kubernetes podkastlarni ma'lum miqdordagi replikalarga o'lchashni juda oson qiladi, ya'ni siz o'zingiz xohlagancha Kafka brokerlarini deklarativ ravishda belgilashingiz mumkin. Bu holatda eng qiyin narsa masshtabni kattalashtirgandan keyin yoki qisqartirishdan oldin sektorlarni qayta tayinlashdir. Shunga qaramay, Kubernetes sizga bu vazifani bajarishda yordam beradi.
Ma'muriyat
Mavzular yaratish va sektorlarni qayta tayinlash kabi Kafka klasteringizni boshqarish bilan bog'liq vazifalar podkastlaringizdagi buyruq qatori interfeysini ochish orqali mavjud qobiq skriptlari yordamida bajarilishi mumkin. Biroq, bu yechim juda chiroyli emas. Strimzi boshqa operator yordamida mavzularni boshqarishni qo'llab-quvvatlaydi. Bu yerda yaxshilanish uchun joy bor.
Zaxiralash va tiklash
Endi Kafkaning mavjudligi Kubernetesning mavjudligiga ham bog'liq bo'ladi. Agar Kubernetes klasteringiz muvaffaqiyatsiz bo'lsa, eng yomon stsenariyda Kafka klasteringiz ham muvaffaqiyatsiz bo'ladi. Merfi qonuniga ko'ra, bu albatta sodir bo'ladi va siz ma'lumotlarni yo'qotasiz. Ushbu turdagi xavfni kamaytirish uchun yaxshi zaxira kontseptsiyasiga ega bo'ling. Siz MirrorMaker dan foydalanishingiz mumkin, boshqa variant esa buning uchun S3 dan foydalanish, bunda tasvirlanganidek
xulosa
Kichik va o'rta kattalikdagi Kafka klasterlari bilan ishlashda, albatta, Kubernetes-dan foydalanishga arziydi, chunki u qo'shimcha moslashuvchanlikni ta'minlaydi va operator tajribasini soddalashtiradi. Agar sizda juda muhim ishlamaydigan kechikish va/yoki o'tkazish qobiliyatiga qo'yiladigan talablar bo'lsa, boshqa joylashtirish variantini ko'rib chiqish yaxshiroqdir.
Manba: www.habr.com