Taqsimlangan tizimlarning ishlashida muhim nuqta - nosozliklarni bartaraf etish. Kubernetes tizimingizning sog'lig'ini nazorat qiluvchi va ishlamay qolgan xizmatlarni qayta ishga tushiradigan kontrollerlardan foydalanish orqali yordam beradi. Biroq, Kubernetes tizimning umumiy sog'lig'ini ta'minlash uchun ilovalaringizni majburan to'xtatishi mumkin. Ushbu turkumda biz Kubernetesga o'z ishini samaraliroq bajarishga va ilovalarning ishlamay qolish vaqtini kamaytirishga qanday yordam berishingizni ko'rib chiqamiz.
Konteynerlardan oldin ko'pgina ilovalar virtual yoki jismoniy mashinalarda ishlagan. Agar dastur ishdan chiqqan yoki qotib qolgan bo'lsa, bajarilayotgan vazifani bekor qilish va dasturni qayta yuklash uchun uzoq vaqt kerak bo'ldi. Eng yomon stsenariyda, kimdir bu muammoni tunda, eng mos bo'lmagan soatlarda qo'lda hal qilishi kerak edi. Agar faqat 1-2 ta ishlaydigan mashina muhim vazifani bajarayotgan bo'lsa, bunday buzilish mutlaqo qabul qilinishi mumkin emas edi.
Shuning uchun, qo'lda qayta yuklash o'rniga, ular g'ayritabiiy tugatilgan taqdirda dasturni avtomatik ravishda qayta ishga tushirish uchun jarayon darajasidagi monitoringdan foydalanishni boshladilar. Agar dastur muvaffaqiyatsiz bo'lsa, monitoring jarayoni chiqish kodini oladi va serverni qayta ishga tushiradi. Kubernetes kabi tizimlarning paydo bo'lishi bilan tizimdagi nosozliklarga javob berishning bunday turi oddiygina infratuzilmaga birlashtirildi.
Kubernetes resurslarning konteynerlardan tugunlarga o'tishida sog'lom bo'lishini ta'minlash uchun kuzatish-farqni-harakat qilish hodisasi tsiklidan foydalanadi.
Bu endi jarayon monitoringini qo'lda ishga tushirishingiz shart emasligini anglatadi. Agar resurs Sog'liqni saqlash tekshiruvidan o'tmasa, Kubernetes uni avtomatik ravishda almashtirish bilan ta'minlaydi. Biroq, Kubernetes dasturingizni nosozliklarni kuzatishdan ko'ra ko'proq narsani qiladi. U bir nechta mashinalarda ishlash uchun ilovaning ko'proq nusxalarini yaratishi, ilovani yangilashi yoki bir vaqtning o'zida ilovangizning bir nechta versiyasini ishga tushirishi mumkin.
Shuning uchun, Kubernetes mukammal sog'lom konteynerni to'xtatishi uchun juda ko'p sabablar mavjud. Misol uchun, agar siz joylashtirishni yangilasangiz, Kubernetes asta-sekin eski podlarni to'xtatib, yangilarini ishga tushiradi. Agar siz tugunni o'chirsangiz, Kubernetes ushbu tugundagi barcha podslarni ishga tushirishni to'xtatadi. Nihoyat, agar tugun resurslari tugab qolsa, Kubernetes ushbu resurslarni bo'shatish uchun barcha podlarni o'chiradi.
Shuning uchun, sizning ilovangiz oxirgi foydalanuvchiga minimal ta'sir ko'rsatishi va minimal tiklanish vaqti bilan tugashi juda muhimdir. Bu shuni anglatadiki, o'chirishdan oldin u saqlanishi kerak bo'lgan barcha ma'lumotlarni saqlashi, barcha tarmoq ulanishlarini yopishi, qolgan ishni bajarishi va boshqa shoshilinch vazifalarni boshqarishi kerak.
Amalda, bu sizning ilovangiz Unix operatsion tizimlarida o'ldirish yordam dasturi uchun standart signal bo'lgan jarayonni tugatish signali bo'lgan SIGTERM xabarini boshqarishi kerakligini anglatadi. Ushbu xabarni olgandan so'ng, dastur o'chirilishi kerak.
Kubernetes podani tugatishga qaror qilgandan so'ng, bir qator voqealar sodir bo'ladi. Keling, konteyner yoki podani o'chirishda Kubernetesning har bir qadamini ko'rib chiqaylik.
Aytaylik, biz podkastlardan birini tugatmoqchimiz. Bu vaqtda u yangi trafikni qabul qilishni to'xtatadi - podda ishlaydigan konteynerlarga ta'sir qilmaydi, lekin barcha yangi trafik bloklanadi.
Keling, preStop kancasini ko'rib chiqaylik, bu maxsus buyruq yoki poddagi konteynerlarga yuboriladigan HTTP so'rovidir. Agar SIGTERM qabul qilinganda ilovangiz toʻgʻri oʻchmasa, toʻgʻri oʻchirish uchun preStop-dan foydalanishingiz mumkin.
Aksariyat dasturlar SIGTERM signalini qabul qilgandan so'ng o'z-o'zidan chiqib ketadi, lekin agar siz uchinchi tomon kodidan yoki siz to'liq nazorat qila olmaydigan tizimdan foydalanayotgan bo'lsangiz, preStop kancasi dasturni o'zgartirmasdan o'chirib qo'yishning ajoyib usuli hisoblanadi.
Ushbu kancani ishga tushirgandan so'ng, Kubernetes poddagi konteynerlarga SIGTERM signalini yuboradi va ular tez orada uzilishini bildiradi. Ushbu signalni olganingizdan so'ng, kodingiz o'chirish jarayoniga o'tadi. Bu jarayon ma'lumotlar bazasi ulanishi yoki WebSocket oqimi kabi uzoq muddatli ulanishlarni to'xtatish, joriy holatni saqlash va shunga o'xshashlarni o'z ichiga olishi mumkin.
Agar siz preStop ilgagidan foydalansangiz ham, dasturga SIGTERM signalini yuborganingizda aynan nima sodir bo'lishini va uning o'zini qanday tutishini tekshirish juda muhim, shunda pod yopilishi natijasida yuzaga kelgan hodisalar yoki tizim ishidagi o'zgarishlar ro'y bermasligi uchun. sizga ajablanib.
Bu vaqtda Kubernetes keyingi harakatlarni amalga oshirishdan oldin terminationGracePeriodSecond deb ataladigan ma’lum vaqtni yoki SIGTERM signalini olgandan so‘ng sekin o‘chirish davrini kutadi.
Odatiy bo'lib, bu muddat 30 soniya. Shuni ta'kidlash kerakki, u preStop kancasi va SIGTERM signali bilan parallel ishlaydi. Kubernetes preStop kancasi va SIGTERM tugashini kutmaydi - agar sizning arizangiz TerminationGracePeriod tugashidan oldin chiqsa, Kubernetes darhol keyingi bosqichga o'tadi. Shuning uchun, bu davrning soniyalardagi qiymati podni to'g'ri o'chirish uchun zarur bo'lgan vaqtdan kam emasligini tekshirib ko'ring va agar u 30 s dan oshsa, davrni YAMLda kerakli qiymatga oshiring. Keltirilgan misolda bu 60 lar.
Va nihoyat, oxirgi qadam, agar konteynerlar terminationGracePerioddan keyin ham ishlayotgan bo'lsa, ular SIGKILL signalini yuboradi va majburan o'chiriladi. Shu nuqtada, Kubernetes boshqa barcha pod obyektlarini ham tozalaydi.
Kubernetes ko'plab sabablarga ko'ra podlarni tugatadi, shuning uchun barqaror xizmatni ta'minlash uchun ilovangiz har qanday holatda ham chiroyli tarzda tugatilishiga ishonch hosil qiling.
Ba'zi reklamalar 🙂
Biz bilan qolganingiz uchun tashakkur. Bizning maqolalarimiz sizga yoqdimi? Ko'proq qiziqarli tarkibni ko'rishni xohlaysizmi? Buyurtma berish yoki do'stlaringizga tavsiya qilish orqali bizni qo'llab-quvvatlang,
Amsterdamdagi Equinix Tier IV ma'lumotlar markazida Dell R730xd 2 baravar arzonmi? Faqat shu yerda
Manba: www.habr.com