
Kubernetes klasteringiz uchun yangilanish jarayoni
Kubernetes klasterining ishlashi paytida bir nuqtada ishlaydigan tugunlarni yangilash kerak bo'ladi. Bunga paket yangilanishi, yadro yangilanishi yoki yangi virtual mashina tasvirlarini joylashtirish kiradi. Kubernetes terminologiyasida bu deyiladi .
Bu post 4 postlik turkumning bir qismidir:
- Bu post.
- Kubernetes klasteridagi podslarni ajoyib tarzda o'chirish
- Pod o'chirilganda uni kechiktirish
- PodDisruptionBudgets yordamida Kubernetes klasterining ishlamay qolishidan qanday qochish mumkin
(Tarjimonning eslatmasi: tez orada turkumdagi qolgan maqolalar tarjimasini kuting)
Ushbu maqolada biz Kubernetes klasteringizda ishlaydigan tugunlar uchun nol ish vaqtiga erishish uchun taqdim etadigan barcha vositalarni tasvirlab beramiz.
Muammoni aniqlash
Biz dastlab sodda yondashuvdan foydalanamiz, muammolarni aniqlaymiz va ushbu yondashuvning potentsial xavflarini baholaymiz va tsikl davomida duch keladigan har bir muammoni hal qilish uchun bilimlarni to'playmiz. Yakuniy natija bizning nol ishlamay qolish maqsadimizga erishish uchun hayot aylanish ilgaklari, tayyorlik zondlari va podkastlarni buzish byudjetlaridan foydalanadigan konfiguratsiya bo'ladi.
Sayohatimizni boshlash uchun keling, aniq bir misol keltiraylik. Aytaylik, bizda ikkita tugunli Kubernetes klasteri bor, uning orqasida ikkita pods bor. Service:

Keling, ikkita Kubernetes klaster tugunlarida ishlaydigan Nginx va Service bilan ikkita podkastdan boshlaylik.
Biz klasterimizdagi ikkita ishchi tugunning yadro versiyasini yangilamoqchimiz. Buni qanday qilamiz? Oddiy yechim yangilangan konfiguratsiyaga ega yangi tugunlarni ishga tushirish va keyin yangilarini ishga tushirish paytida eski tugunlarni o'chirishdir. Bu ishlayotgan bo'lsa-da, bu yondashuv bilan bir qator muammolar mavjud:
- Qadimgi tugunlarni yopib qo'yganingizda, ularda ishlaydigan podalar ham o'chadi. To'g'ri o'chirish uchun podlarni tozalash kerak bo'lsa-chi? Siz foydalanayotgan virtualizatsiya tizimi tozalash jarayoni tugashini kutmasligi mumkin.
- Agar bir vaqtning o'zida barcha tugunlarni o'chirib qo'ysangiz nima bo'ladi? Qopqoqlar yangi tugunlarga koʻchib oʻtganda siz sezilarli uzilishlarni boshdan kechirasiz.
Tugunga o‘zgartirishlar kiritayotganimizda ish oqimlarimizdan hech biri ishlamasligiga ishonch hosil qilib, eski tugunlardan podkastlarni oqilona ko‘chirish usuli kerak. Yoki biz misoldagi kabi to'liq klasterni almashtirishni amalga oshirayotganimizda (ya'ni, VM tasvirlarini almashtirish), biz ishlaydigan ilovalarni eski tugunlardan yangilariga o'tkazmoqchimiz. Ikkala holatda ham biz eski tugunlarda yangi podlarni rejalashtirishni oldini olishni va keyin barcha ishlaydigan podlarni ulardan chiqarib tashlashni xohlaymiz. Ushbu maqsadlarga erishish uchun biz buyruqni ishlatishimiz mumkin kubectl drain.
Tugundan barcha podlarni qayta taqsimlash
Drenaj operatsiyasi tugundagi barcha podlarni qayta taqsimlash imkonini beradi. Drenaj paytida tugun rejalashtirilmagan deb belgilanadi (bayroq NoSchedule). Bu uning ustida yangi podlar yaratilishining oldini oladi. Shundan so'ng drenaj tugundan podkalarni chiqarib tashlashni boshlaydi va signal yuborish orqali tugun ustida ishlayotgan konteynerlarni tugatadi. TERM idishdagi idishlar.
Garchi kubectl drain Bu podkastlarni olib tashlash uchun juda yaxshi ishlayotgan bo'lsa-da, drenaj ishini muvaffaqiyatsizlikka olib kelishi mumkin bo'lgan yana ikkita omil mavjud:
- Sizning arizangiz topshirilgandan so'ng yaxshi tarzda tugatilishi kerak.
TERMsignal. Qopqoqlar chiqarib yuborilganda, Kubernetes signal yuboradiTERMkonteynerlarni to'xtatib turadi va belgilangan vaqt davomida to'xtashini kutadi, shundan so'ng ular to'xtamagan bo'lsa, ularni majburan to'xtatadi. Har qanday holatda, konteyneringiz signalga to'g'ri javob bermasa, siz hali ham podslarni noto'g'ri to'xtatishingiz mumkin, agar ular hozirda ishlayotgan bo'lsa (masalan, ma'lumotlar bazasi tranzaksiyasi davom etayotgan bo'lsa). - Siz ilovangizni o'z ichiga olgan barcha podlarni yo'qotasiz. Yangi tugunlarda yangi konteynerlarni ishga tushirganingizda, u mavjud bo'lmasligi mumkin yoki podkastlaringiz kontrollerlarsiz o'rnatilgan bo'lsa, ular umuman qayta ishga tushmasligi mumkin.
To'xtab qolishning oldini olish
Ixtiyoriy uzilishlar, masalan, tugunni to'kish operatsiyasi natijasida to'xtab qolish vaqtini minimallashtirish uchun Kubernetes quyidagi nosozliklarni hal qilish variantlarini taqdim etadi:
Ushbu seriyaning qolgan bo‘limlarida biz pod migratsiyasining ta’sirini yumshatish uchun ushbu Kubernetes xususiyatlaridan foydalanamiz. Kontseptsiyaga amal qilishni osonlashtirish uchun biz yuqoridagi misolimizdan quyidagi manba konfiguratsiyasi bilan foydalanamiz:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15
ports:
- containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
targetPort: 80
port: 80Ushbu konfiguratsiya minimal misoldir. Deployment, bu klasterdagi nginx podslarini boshqaradi. Bundan tashqari, konfiguratsiya resursni tavsiflaydi Service, bu klasterdagi nginx podslariga kirish uchun ishlatilishi mumkin.
Butun tsikl davomida biz ushbu konfiguratsiyani takroriy ravishda kengaytiramiz, shunda u oxir-oqibat Kubernetes ishlamay qolish vaqtini qisqartirish uchun taqdim etadigan barcha xususiyatlarni o'z ichiga oladi.
AWS va boshqa manbalarda nol ishlamay qolish uchun Kubernetes klaster yangilanishlarining toʻliq joriy qilingan va sinovdan oʻtgan versiyasini olish uchun tashrif buyuring. .
Shuningdek, bizning blogimizdagi boshqa maqolalarni o'qing:
Manba: www.habr.com
