Helm qurilmasi va uning tuzoqlari

Helm qurilmasi va uning tuzoqlari
Typhon yuk tashish kontseptsiyasi, Anton Swanepoel

Mening ismim Dmitriy Sugrobov, men Leroy Merlin kompaniyasida ishlab chiquvchiman. Ushbu maqolada men sizga Helm nima uchun kerakligini, Kubernetes bilan ishlashni qanday soddalashtirishi, uchinchi versiyada nima o'zgarganligi va ishlab chiqarishdagi ilovalarni ishlamay turib yangilash uchun qanday foydalanishni aytib beraman.

Bu konferentsiyadagi nutqiga asoslangan xulosa @Kubernetes konferentsiyasi by Mail.ru bulutli echimlar - agar o'qishni xohlamasangiz, videoni tomosha qiling.

Nima uchun biz ishlab chiqarishda Kubernetlardan foydalanamiz

Leroy Merlin Rossiya va Evropada DIY chakana savdo bozorida etakchi hisoblanadi. Bizning kompaniyamizda yuzdan ortiq dasturchilar, 33 000 ichki xodimlar va gipermarketlar va veb-saytlarga tashrif buyuradigan juda ko'p odamlar bor. Ularning barchasini xursand qilish uchun biz sanoat standarti yondashuvlariga amal qilishga qaror qildik. Mikroservis arxitekturasidan foydalangan holda yangi ilovalarni ishlab chiqish; muhitni izolyatsiya qilish va to'g'ri etkazib berishni ta'minlash uchun konteynerlardan foydalaning; va orkestr uchun Kubernetes-dan foydalaning. Orkestrlardan foydalanish narxi tezda arzonlashmoqda: bozorda texnologiyani yaxshi biladigan muhandislar soni ortib bormoqda va provayderlar Kubernetes-ni xizmat sifatida taklif qilmoqdalar.

Kubernetes qiladigan hamma narsa, albatta, boshqa yo'llar bilan amalga oshirilishi mumkin, masalan, ba'zi Jenkins va docker-compose-ni skriptlar bilan qoplash orqali, lekin agar tayyor va ishonchli yechim mavjud bo'lsa, nima uchun hayotni murakkablashtirish kerak? Shuning uchun biz Kubernetesga keldik va bir yildan beri ishlab chiqarishda foydalanmoqdamiz. Hozirda bizda yigirma to‘rtta Kubernetes klasteri mavjud bo‘lib, ularning eng qadimgisi bir yildan oshgan, ikki yuzga yaqin podalar mavjud.

Kubernetesdagi katta YAML fayllarining la'nati

Kubernetesda mikroservisni ishga tushirish uchun biz kamida beshta YAML faylini yaratamiz: Deployment, Service, Ingress, ConfigMap, Secrets uchun - va ularni klasterga yuboramiz. Keyingi dastur uchun biz bir xil jamblar to'plamini yozamiz, uchinchisi bilan boshqasini yozamiz va hokazo. Agar biz hujjatlar sonini muhitlar soniga ko'paytirsak, biz allaqachon yuzlab fayllarni olamiz va bu hali dinamik muhitlarni hisobga olmaydi.

Helm qurilmasi va uning tuzoqlari
Helm kompaniyasining asosiy boshqaruvchisi Adam Riz "kontseptsiyasini taqdim etdi.Kubernetesdagi rivojlanish tsikli", bu shunday ko'rinadi:

  1. Copy YAML - YAML faylini nusxalash.
  2. YAML-ni joylashtirish - uni joylashtirish.
  3. Fix Indents - chekinishlarni tuzatish.
  4. Takrorlang - yana takrorlang.

Variant ishlaydi, lekin siz YAML fayllarini ko'p marta nusxalashingiz kerak. Ushbu tsiklni o'zgartirish uchun Helm ixtiro qilingan.

Helm nima

Birinchidan, Helm - paket menejeri, bu sizga kerakli dasturlarni topish va o'rnatishga yordam beradi. Masalan, MongoDB-ni o'rnatish uchun siz rasmiy veb-saytga o'tishingiz va ikkilik fayllarni yuklab olishingiz shart emas, shunchaki buyruqni bajaring. helm install stable/mongodb.

Ikkinchidan, Helm - shablon dvigateli, fayllarni parametrlashtirishga yordam beradi. Keling, Kubernetes-dagi YAML fayllari bilan bog'liq vaziyatga qaytaylik. Xuddi shu YAML faylini yozish osonroq, unga Helm qiymatlarni almashtiradigan ba'zi to'ldiruvchilarni qo'shing. Ya'ni, katta iskala to'plami o'rniga kerakli qiymatlar o'z vaqtida almashtiriladigan shablonlar to'plami bo'ladi.

Uchinchidan, Helm - joylashtirish ustasi. Uning yordamida siz ilovalarni o'rnatishingiz, orqaga qaytarishingiz va yangilashingiz mumkin. Keling, buni qanday qilishni aniqlaylik.

Helm qurilmasi va uning tuzoqlari

O'z ilovalaringizni joylashtirish uchun Helm-dan qanday foydalanish kerak

Keling, rasmiyga amal qilgan holda Helm mijozini kompyuteringizga o'rnatamiz ko'rsatmalar. Keyinchalik, YAML fayllar to'plamini yaratamiz. Muayyan qiymatlarni ko'rsatish o'rniga, biz Helm kelajakda ma'lumot bilan to'ldiradigan to'ldiruvchilarni qoldiramiz. Bunday fayllar to'plami Helm diagrammasi deb ataladi. U Helm konsol mijoziga uchta usulda yuborilishi mumkin:

  • shablonlari bo'lgan jildni ko'rsating;
  • arxivni .tar-ga to'plang va unga ishora qiling;
  • shablonni masofaviy omborga qo'ying va Helm mijozidagi omborga havola qo'shing.

Bundan tashqari, qiymatlari bo'lgan fayl kerak - values.yaml. U yerdan olingan ma'lumotlar shablonga kiritiladi. Keling, uni ham yarataylik.

Helm qurilmasi va uning tuzoqlari
Helm-ning ikkinchi versiyasida qo'shimcha server ilovasi mavjud - Tiller. U Kubernetes tashqarisida osilib turadi va Helm mijozidan so'rovlarni kutadi va chaqirilganda kerakli qiymatlarni shablonga almashtiradi va uni Kubernetesga yuboradi.

Helm qurilmasi va uning tuzoqlari
Helm 3 oddiyroq: serverda shablonlarni qayta ishlash o‘rniga, ma’lumotlar to‘liq Helm mijoz tomonida qayta ishlanadi va bevosita Kubernetes API’ga yuboriladi. Ushbu soddalashtirish klaster xavfsizligini yaxshilaydi va tarqatish sxemasini osonlashtiradi.

Hammasi qanday ishlaydi

Buyruqni ishga tushiring helm install. Ilova reliz nomini ko'rsatamiz va values.yaml ga yo'l beramiz. Oxirida biz diagramma joylashgan omborni va diagramma nomini ko'rsatamiz. Misolda, bular mos ravishda "lmru" va "bestchart".

helm install --name bestapp --values values.yaml lmru/bestchart

Buyruq faqat bir marta bajarilishi mumkin, uning o'rniga yana bajarilganda install foydalanish kerak upgrade. Oddiylik uchun ikkita buyruq o'rniga siz buyruqni bajarishingiz mumkin upgrade qo'shimcha kalit bilan --install. Birinchi marta bajarilganda, Helm relizni o'rnatish uchun buyruq yuboradi va kelajakda uni yangilaydi.

helm upgrade --install bestapp --values values.yaml lmru/bestchart

Helm bilan ilovaning yangi versiyalarini o'rnatishning tuzoqlari

Hikoyaning shu nuqtasida men tomoshabinlar bilan “Kim millioner bo'lishni xohlaydi” o'yinini o'ynayapman va biz Helmni ilova versiyasini yangilash uchun qanday qilib olish kerakligini aniqlayapmiz. Videoni tomosha qiling.

Helm qanday ishlashini o'rganayotganimda, ishlaydigan ilovalarning versiyalarini yangilashga urinayotganda g'alati xatti-harakatlar meni hayratda qoldirdi. Men dastur kodini yangiladim, Docker registriga yangi rasm yukladim, joylashtirish buyrug'ini yubordim - va hech narsa sodir bo'lmadi. Quyida ilovalarni yangilashning to'liq muvaffaqiyatli bo'lmagan ba'zi usullari keltirilgan. Ularning har birini batafsil o'rganib chiqib, siz asbobning ichki tuzilishini va bu aniq bo'lmagan xatti-harakatlarning sabablarini tushunishni boshlaysiz.

Usul 1. Oxirgi ishga tushirilgandan beri ma'lumotni o'zgartirmang

Aytgandek rasmiy veb-saytga Helm, "Kubernetes jadvallari katta va murakkab bo'lishi mumkin, shuning uchun Helm hech narsaga ortiqcha tegmaslikka harakat qiladi." Shuning uchun, agar siz docker registridagi ilova tasvirining so'nggi versiyasini yangilasangiz va buyruqni bajarsangiz helm upgrade, keyin hech narsa bo'lmaydi. Helm hech narsa o'zgarmagan deb o'ylaydi va dasturni yangilash uchun Kubernetesga buyruq yuborishning hojati yo'q.

Bu erda va quyida so'nggi teg faqat misol sifatida ko'rsatilgan. Ushbu tegni belgilaganingizda, Kubernetes imagePullPolicy parametridan qat'i nazar, har safar tasvirni docker registridan yuklab oladi. Eng so'nggi ishlab chiqarishdan foydalanish istalmagan va yon ta'sirga olib keladi.

2-usul. Rasmdagi LABEL ni yangilang

Xuddi shunday yozilganidek hujjatlar, "Helm ilovani faqat oxirgi versiyadan keyin o'zgargan bo'lsa yangilaydi." Buning mantiqiy varianti docker tasviridagi LABELni yangilashdek tuyuladi. Biroq, Helm ilova tasvirlarini ko'rib chiqmaydi va ulardagi o'zgarishlar haqida hech qanday tasavvurga ega emas. Shunga ko'ra, tasvirdagi teglarni yangilashda Helm ular haqida bilmaydi va dasturni yangilash buyrug'i Kubernetesga yuborilmaydi.

3-usul: Kalitdan foydalaning --force

Helm qurilmasi va uning tuzoqlari
Keling, qo'llanmalarga murojaat qilaylik va kerakli kalitni qidiramiz. Kalit eng mantiqiy --force. Aniq nomga qaramay, xatti-harakatlar kutilganidan farq qiladi. Ilova yangilanishini majburlash o'rniga, uning asl maqsadi MUVOFIQ holatida bo'lgan versiyani tiklashdir. Agar siz ushbu kalitdan foydalanmasangiz, buyruqlarni ketma-ket bajarishingiz kerak helm delete && helm install --replace. Buning o'rniga kalitdan foydalanish tavsiya etiladi --force, bu buyruqlarning ketma-ket bajarilishini avtomatlashtiradi. Bu haqida batafsil ma'lumot tortish so'rovi. Helmga ilova versiyasini yangilashni aytish uchun, afsuski, bu kalit ishlamaydi.

4-usul. Yorliqlarni to'g'ridan-to'g'ri Kubernetesda o'zgartiring

Helm qurilmasi va uning tuzoqlari
Buyruq yordamida yorliqni to'g'ridan-to'g'ri klasterda yangilash kubectl edit - yomon fikr. Ushbu harakat ishlayotgan dastur va dastlab joylashtirish uchun yuborilgan ma'lumotlarning nomuvofiqligiga olib keladi. Bu holda Helmning o'rnatish vaqtidagi harakati uning versiyasidan farq qiladi: Helm 2 hech narsa qilmaydi va Helm 3 ilovaning yangi versiyasini joylashtiradi. Buning sababini tushunish uchun Helm qanday ishlashini tushunishingiz kerak.

Helm qanday ishlaydi?

Ilova oxirgi nashrdan beri o'zgarganligini aniqlash uchun Helm quyidagilarni ishlatishi mumkin:

  • Kubernetesda ishlaydigan dastur;
  • yangi qiymatlar.yaml va joriy grafik;
  • Helmning ichki nashri haqida ma'lumot.

Qizig'i shundaki, Helm nashrlar haqidagi ichki ma'lumotlarni qayerda saqlaydi?Buyruqni bajarish orqali helm history, biz Helm yordamida o'rnatilgan versiyalar haqida barcha ma'lumotlarni olamiz.

Helm qurilmasi va uning tuzoqlari
Shuningdek, yuborilgan shablon va qiymatlar haqida batafsil ma'lumot mavjud. Biz buni so'rashimiz mumkin:

Helm qurilmasi va uning tuzoqlari
Helm-ning ikkinchi versiyasida bu ma'lumot Tiller ishlayotgan bir xil nomlar maydonida (sukut bo'yicha kub tizimi), ConfigMapda "HONER=TILLER" yorlig'i bilan belgilangan:

Helm qurilmasi va uning tuzoqlari
Helm-ning uchinchi versiyasi paydo bo'lganda, ma'lumotlar sirlarga va dastur ishlayotgan bir xil nomlar maydoniga o'tdi. Buning yordamida bir vaqtning o'zida bir xil reliz nomi bilan turli nomlar bo'shliqlarida bir nechta ilovalarni ishga tushirish mumkin bo'ldi. Ikkinchi versiyada nomlar bo'shliqlari ajratilganda, lekin bir-biriga ta'sir qilishi mumkin bo'lsa, bu jiddiy bosh og'rig'i edi.

Helm qurilmasi va uning tuzoqlari

Ikkinchi Helm, yangilanish zarurligini tushunishga harakat qilganda, faqat ikkita ma'lumot manbasidan foydalanadi: hozir unga taqdim etilgan narsalar va ConfigMap-da joylashgan relizlar haqidagi ichki ma'lumotlar.

Helm qurilmasi va uning tuzoqlari
Uchinchi Helm uch tomonlama birlashtirish strategiyasidan foydalanadi: bu ma'lumotlarga qo'shimcha ravishda, u hozir Kubernetesda ishlayotgan dasturni ham hisobga oladi.

Helm qurilmasi va uning tuzoqlari
Shu sababli, Helm-ning eski versiyasi hech narsa qilmaydi, chunki u klasterdagi dastur ma'lumotlarini hisobga olmaydi, lekin Helm 3 o'zgarishlarni qabul qiladi va yangi dasturni joylashtirish uchun yuboradi.

5-usul. --recreate-pods kalitidan foydalaning

Kalit bilan --recreate-pods kalit bilan dastlab erishmoqchi bo'lgan narsangizga erishishingiz mumkin --force. Konteynerlar qayta ishga tushadi va imagePullPolicy: Har doim eng soʻnggi teg uchun siyosat (bu haqda yuqoridagi izohda) koʻra, Kubernetes rasmning yangi versiyasini yuklab oladi va ishga tushiradi. Bu eng yaxshi tarzda amalga oshirilmaydi: joylashtirishning Strategiya turini hisobga olmagan holda, u barcha eski ilovalarni to'satdan o'chiradi va yangilarini ishga tushira boshlaydi. Qayta ishga tushirish vaqtida tizim ishlamaydi, foydalanuvchilar zarar ko'radi.

Kubernetesning o'zida ham shunga o'xshash muammo uzoq vaqtdan beri mavjud edi. Va endi, ochilishdan 4 yil o'tib Nashr, muammo hal qilindi va Kubernetesning 1.15 versiyasidan boshlab, podkalarni qayta ishga tushirish imkoniyati paydo bo'ladi.

Helm shunchaki barcha ilovalarni o'chiradi va yaqin atrofdagi yangi konteynerlarni ishga tushiradi. Ilovaning ishlamay qolishiga olib kelmaslik uchun siz buni ishlab chiqarishda qila olmaysiz. Bu faqat rivojlanish ehtiyojlari uchun kerak va faqat sahna muhitida amalga oshirilishi mumkin.

Helm yordamida dastur versiyasini qanday yangilash mumkin?

Biz Helmga yuborilgan qiymatlarni o'zgartiramiz. Odatda, bu tasvir yorlig'i o'rniga almashtiriladigan qiymatlardir. Ko'pincha samarasiz muhitlar uchun ishlatiladigan eng yangi holatda, o'zgaruvchan ma'lumot Kubernetesning o'zi uchun foydasiz bo'lgan izohdir va Helm uchun u ilovani yangilash zarurati uchun signal bo'lib xizmat qiladi. Izoh qiymatini to'ldirish variantlari:

  1. Tasodifiy qiymat standart funksiyadan foydalanish - {{ randAlphaNum 6 }}.
    Bir ogohlantirish bor: bunday o'zgaruvchiga ega bo'lgan diagramma yordamida har bir joylashtirishdan so'ng, izoh qiymati noyob bo'ladi va Helm o'zgarishlar borligini taxmin qiladi. Ma'lum bo'lishicha, biz uning versiyasini o'zgartirmagan bo'lsak ham, biz har doim dasturni qayta ishga tushiramiz. Bu juda muhim emas, chunki to'xtash vaqti bo'lmaydi, lekin bu hali ham yoqimsiz.
  2. Joriyni joylashtiring sana va vaqt - {{ .Release.Date }}.
    Variant doimiy noyob o'zgaruvchiga ega tasodifiy qiymatga o'xshaydi.
  3. To'g'riroq usul - bu foydalanish nazorat summalari. Bu rasmning SHA ko'rsatkichi yoki gitdagi so'nggi bajarilgan SHA - {{ .Values.sha }}.
    Ularni hisoblash va qo'ng'iroq qiluvchi tomonda, masalan, Jenkinsdagi Helm mijoziga yuborish kerak bo'ladi. Agar dastur o'zgargan bo'lsa, nazorat summasi o'zgaradi. Shuning uchun Helm ilovani faqat kerak bo'lganda yangilaydi.

Keling, urinishlarimizni umumlashtiraylik

  • Helm o'zgarishlarni eng kam invaziv usulda amalga oshiradi, shuning uchun Docker registridagi ilova tasviri darajasidagi har qanday o'zgarish yangilanishga olib kelmaydi: buyruq bajarilgandan keyin hech narsa sodir bo'lmaydi.
  • Kalit --force muammoli relizlarni tiklash uchun ishlatiladi va majburiy yangilanishlar bilan bog'liq emas.
  • Kalit --recreate-pods ilovalarni kuch bilan yangilaydi, lekin buni vandal tarzda amalga oshiradi: u barcha konteynerlarni birdan o'chiradi. Foydalanuvchilar bundan aziyat chekishadi, ishlab chiqarishda buni qilmaslik kerak.
  • Buyruq yordamida bevosita Kubernetes klasteriga o'zgartirishlar kiriting kubectl edit qilmang: biz izchillikni buzamiz va xatti-harakatlar Helm versiyasiga qarab farq qiladi.
  • Helmning yangi versiyasi chiqarilishi bilan ko'plab nuanslar paydo bo'ldi. Helm omboridagi muammolar aniq tilda tasvirlangan, ular sizga tafsilotlarni tushunishga yordam beradi.
  • Grafikga tahrirlanadigan izoh qo'shish uni yanada moslashuvchan qiladi. Bu sizga ilovani to'xtab qolmasdan to'g'ri chiqarish imkonini beradi.

Hayotning barcha sohalarida ishlaydigan "dunyo tinchligi" fikri: foydalanishdan oldin ko'rsatmalarni o'qing, keyin emas. Faqat to'liq ma'lumot bilan ishonchli tizimlarni yaratish va foydalanuvchilarni xursand qilish mumkin bo'ladi.

Boshqa tegishli havolalar:

  1. Bilan tanishish dubulg'a 3
  2. Helm rasmiy veb-sayti
  3. GitHub-dagi Helm ombori
  4. 25 foydali Kubernetes vositalari: joylashtirish va boshqarish

Ushbu hisobot birinchi marta taqdim etilgan @Kubernetes konferentsiyasi Mail.ru Cloud Solutions tomonidan. Qarang видео boshqa chiqishlar va Telegram’dagi voqealar anonsiga obuna bo‘ling Mail.ru guruhida Kubernetes atrofida.

Manba: www.habr.com

a Izoh qo'shish