Doker va Kubernetes "Eng yaxshi arxitektura" ni taklif qiladilarmi?

Salom, yana bir maqola bilan qaytdim. Ammo bu safar men ba'zi afsonalarni hal qilish niyatidaman.

Dunyo har soniyada, texnologiya ham o'zgarmoqda. Docker va Kubernetesga kelsak, siz ko'p narsalarni tinglashingiz kerak. Ayniqsa, ularning arxitekturasini taqqoslash. Ko'pchilik qaysi biri yaxshiroq ekanligi haqida savol tug'diradi?

Boshqa ko'plab savollar mavjud va men ularning hammasini eslatib o'taman. Nima uchun? Yagona sabab bu Kubernetes va Dockerni tushunishga yordam beradi. Xo'sh, Docker va Kubernetes dasturiy ta'minotni qanday o'zgartirdi? Ularning birortasi kuchli arxitekturani taklif qiladimi? Rivojlanish va integratsiya jarayonlarini birlashtirish mumkinmi? Ha bo'lsa, qanday cheklovlar mavjud? Bu ishlab chiquvchilar uchun asoratlarni kamaytiradimi?

Avvalo, Docker va Kubernetes o'rtasidagi taqqoslash siz o'ylaganingizdek oson emasligini tushuning. Yaxshisi nima? Docker yoki Kubernetes? Menimcha, "bundan yaxshi" yo'q, chunki ular ikkalasi ham bir-birlaridan farq qiladi. Docker - bu avtobus, Kubernetes esa - port porti. Xo'sh, nima muhim? Shubhasiz, ikkalasi ham muhimdir. Ikkalasiga ham kerak.

Shunday qilib, ushbu maqolada biz haqiqiy hayotdan rivojlanish jarayonlariga arxitekturaga va haqiqiy hayotga qaytamiz.

Bundan tashqari, biz arxitekturaning bir qismi bo'lgan turli xil komponentlar va tamoyillarni aniqlaymiz. Oxir-oqibat, xulosa sizni ajablantirishi yoki sizni xursand qilishi mumkin. Bu sizning Docker va Kubernetes bilan bo'lgan tajribangizga bog'liq.

Haqiqiy hayotdan rivojlanish ish oqimlariga birinchi harakat

Rivojlanish jarayonlari nima uchun muhimligini bilasizmi? Agar rivojlanish jarayoni bo'lmasa, yaxshi yo'naltirilgan umumlashtirilgan yondashuv mavjud emas. Rivojlanish jarayoni g'oyaning tug'ilishi va uni etkazishgacha bo'lgan vaqtni qisqartiradi. Bu jarayonni soddalashtiradi va sifatni saqlaydi.

Ikkita fikr mavjud, biri yaxshi, ikkinchisi yomon. Rivojlanishda oraliq g'oyaning uchinchi turi yo'q. Fikr yaxshi yoki yomon bo'lishi mumkin, ammo uni amalga oshirish bilan o'lchash mumkin. Agar u yomon fikr bo'lsa, siz amalga oshirasiz va orqaga qaytarasiz! Agar u yaxshi fikr bo'lsa, siz shunchaki davom etasiz. Orqaga qaytarish robot, ya'ni avtomatlashtirish tomonidan boshqariladi.

Bularning barchasidan doimiy uzluksiz integratsiya va etkazib berish tizimi qutqaruvchi sifatida paydo bo'ldi. Bu ishni osonlashtirdi. Agar sizning fikringiz va kodingiz bo'lsa, uni amalga oshiring! Ammo integratsiya va etkazib berish tizimida bitta kichik muammo mavjud. Ushbu jarayonni sizning kompaniyangizga xos bo'lgan texnologiya va biznes jarayonlaridan ajratib rasmiylashtirish qiyin.

Xo'sh, bu muammo qanday hal qilindi?

Endi bu muammo Doker va Kubernetes yordamida hal qilindi. Ularning ikkalasi ham Masih qiyofasida ko'rindi. Abstraktsiya darajasi va mafkuraviy yondashuv muammoning deyarli 80 foizini hal qildi. Yaxshi yodda tuting, 80% rivojlanish sohasidagi juda yaxshi foiz. 20% hali ham mavjud va uni hal qilish uchun ijodiy daho bo'lishi kerak. Bu dastur turiga va uni qanday hal qilishingizga bog'liq.

Docker ish oqimini rivojlantirish muammosini hal qiladi. Docker oddiy jarayonni taklif qiladi va ish muhitining aksariyati uchun etarli.

Rasm manbai: https://cdn-images-1.medium.com/max/800/0*nDrc_jeOKTMS7akB.

Ushbu yondashuv yordamida hamma narsani avtomatlashtirish va birlashtirish mumkin.

Rivojlanish muhitiga kirish

Avvalo, loyiha docker-compose.yml faylidan iborat bo'lishi kerak. Ushbu faylning afzalligi shundaki, u mahalliy mashinada dastur / xizmatni ishga tushirish yukini olib tashlaydi. Dasturchi bu haqda o'ylashi shart emas. Aslida, dasturni boshlash uchun oddiy docker-compos up buyrug'i kifoya qiladi. Buyruq, shuningdek, qaramlik haqida g'amxo'rlik qiladi, ma'lumotlar bazasini armatura bilan to'ldiradi, idishni ichiga mahalliy kodni yuklaydi, kod izini yoqadi va kutilgan portda javob beradi.

Bularga qo'shimcha ravishda, siz boshlash, o'zgartirishlar kiritish, ramkalarni tanlash va hokazolar haqida qayg'urmasligingiz kerak. Har biri va har bir narsa oldindan standart yo'riqnomada keltirilgan. Bu oldingi, orqa va ishchi kabi sozlashlarga ko'ra xizmat shablonlari bilan belgilanadi.

Avtomatlashtirilgan sinov vaqti

Siz "Qora quti" haqida eshitganmisiz? U hamma narsani, hatto samolyot qulashidan so'nggi soniyalarni yozib oladi. Nima bo'ldi? Bu qanday sodir bo'ldi? Bularning barchasi qora qutidan olinadi. Xuddi shunday, bu erda ham qora quti.

Rasm manbai: https://cdn-images-1.medium.com/max/800/0*B5Qn9D5W4lscB86h.

Asl qora quti singari, bizning konteyner qora qutimiz ham hamma narsani saqlaydi. 1 yoki 0 va boshqa barcha ikkilik ma'lumotlar qora qutida saqlanadi. Xo'sh, avtomatlashtirish qanday sodir bo'ladi? Bu juda oson, sizda ko'plab buyruqlar mavjud va docker-compose.yml uning barcha bog'liqliklarini tavsiflaydi. Bu avtomatlashtirish va yagona sinovga olib keladi. Amalga oshirish tafsilotlariga e'tibor qaratishning hojati yo'q.

Tizimlarni etkazib berish

Rasm manbai: https://cdn-images-1.medium.com/max/800/0*DC5Ubn7Y5seJPeSO.

Loyihangizni o'rnatish joyi va vaqti muhim emas. Siz ekotizimning qaysi qismini o'rnatmoqchi ekanligingizda farq yo'q. O'rnatish jarayonining natijasi har doim bir xil bo'ladi. Eng asosiysi, bu "beparvolik". O'rnatishni boshqaradigan parametrlarni o'zingiz tomondan belgilang.

Bularning barchasi uchun algoritm mavjud. Keling, buni bosqichma-bosqich sanab o'tamiz.

(1) Rasmlarni Dockerfiles-dan to'plang.

(2) Tasvirlarni etkazish uchun meta-loyihadan foydalaning. Ular Kubernetesga Kube API orqali etkazib berilishi kerak. Kirish parametrlari quyidagilar:

(a) A Kube API so'nggi nuqtasi

(b) Turli xil kontekstlarda farq qiluvchi yashirin ob'ekt (mahalliy / ko'rgazma zali / sahna ko'rinishi / ishlab chiqarish)

Ushbu tizimlar uchun tizim nomlari va Docker rasmlarining teglari.

Masalan, barcha tizim va xizmatlardan iborat meta-loyihani ko'rib chiqing. Bu shuni anglatadiki, loyiha ekotizimni tartibga solishni va unga qanday yangilanishlarni tavsiflaydi. Buning uchun men Kube API bilan integratsiya qilish uchun Ansible o'yin kitoblaridan foydalanaman. Ammo, boshqa variantlar ham bor! Umuman olganda, siz arxitekturani boshqarish uchun markazlashtirilgan yo'nalishda o'ylashingiz kerak. Bunga ishonchingiz komil bo'lgach, siz xizmatlarni / tizimlarni qulay boshqarishingiz mumkin.

Ko'rgazma zalida atrofni o'rnatish (qo'lda tekshirish va tizimni tuzatish uchun), sahna (yaqin atrof-muhit va integratsiya uchun) va ishlab chiqarish (oxirgi foydalanuvchi uchun haqiqiy muhit) talab qilinadi.

Doimiy etkazib berish va integratsiya

Agar siz Docker rasmlarini sinashning yagona usuliga amal qilsangiz, siz baxtli odamsiz. Bu sizga filial filialini git omborining yuqori yoki yuqori qismlariga muammosiz birlashtirishga yordam beradi. E'tibor berilishi kerak bo'lgan yagona narsa - bu integratsiya va etkazib berish ketma-ketligini saqlash. Agar relizlar bo'lmasa, bir nechta parallel xususiyatli bitta tizimdagi "poyga holati" ga qanday xalaqit berasiz?

Xo'sh, bu qanday echim? Jarayon raqobat bo'lmaganda boshlanishi kerak.

Bosqichlar:

(1) Xususiy filialni yuqoriga qarab yangilang.

(2) Tasvirlarni yarating.

(3) O'rnatilgan rasmlarni sinab ko'ring.

(4) boshlang va 2-bosqich tugaguncha va tasvirlar etkazilguncha kuting.

(5) Agar 4-bosqich bajarilmasa, ekotizimni oldingi bosqichga qaytaring.

(6) Yuqori oqimdagi funktsional tarmoqni birlashtirish. Uni omborga yuboring.

Yuqoridagi bosqichlardan birortasi bajarilmasa, etkazib berish jarayoni darhol to'xtatiladi. Vazifa hal qilinmaguncha ishlab chiquvchiga qaytariladi. Xuddi shu jarayon bir nechta omborxonalar bilan ishlashi mumkin. Bosqichlarning har biri shunga o'xshash tarzda bajarilishi kerak, ammo har bir ombor uchun. Masalan, A omborxonasi uchun 1-qadam va B ombori uchun qadam va boshqalar.

Kubernetes sizga yangiliklarni qismlarga bo'lib tarqatish erkinligini beradi. Ko'p sonli AB testlari natija berishi va xavf tahlilidan o'tishi mumkin. Kubernetes ichki ravishda xizmatlar va dasturlarni ajratib turadi.

Orqaga qaytarish tizimlari

Kuchli arxitektura ramkasining eng muhim qobiliyatlaridan bittasi orqaga qaytish qobiliyatidir. Bir qator aniq va yashirin nuanslar mavjud. Keling, ularni ko'rib chiqaylik:

(1) Xizmat o'z atrof-muhitini sozlashi, shuningdek orqaga qaytishi kerak.

(2) Qaytishning iloji bo'lmasa, xizmat polimorfik bo'lishi kerak. Kodning eski va yangi versiyalarini qo'llab-quvvatlashi kerak.

(3) Orqaga qaytarilgandan so'ng har qanday xizmat uchun orqaga qarab moslik bo'lishi kerak.

Kubernetes klasterida orqaga qaytarish holatlari oson. Ammo bu sizning meta-loyihangizda ushbu surat haqida ma'lumot mavjud bo'lganda ishlaydi. Qayta tiklashning algoritmlarini rad etish murakkab, ammo zarur.

Shunday qilib, qanday holatlarda orqaga qaytarish mexanizmini ishga tushirish kerak?

(1) ozod qilinganidan keyin dastur xatolarining foizi yuqori bo'lsa.

(2) Siz asosiy nazorat punktlaridan signallarni qabul qila boshlaysiz.

(3) tutun sinovlari muvaffaqiyatsiz bo'lganda.

(4) Buni qo'lda qilish mumkin.

Xavfsizlik choralari

Ekotizimni o'q o'tkazmaydigan qilib qo'yish oson emas. Buni faqat bitta ish oqimini kuzatish orqali amalga oshirish mumkin emas. Arxitektura doirasi har qanday muammolarni hal qilish uchun etarlicha xavfsiz bo'lishi kerak. Kubernetes kirishni boshqarish, tarmoq siyosati, hodisalar auditi va boshqalarni boshqarishning yaxshi o'rnatilgan mexanizmlari bilan ta'minlangan. Axborot xavfsizligi uchun bir qator vositalar mavjud va ular himoya jihatidan juda yaxshi ekanligi isbotlangan.

Rivojlanish jarayonidan arxitekturaga qadar keyingi qadam

Moslashuvchanlik, o'lchovlilik, mavjudlik, ishonchlilik, tahdidlardan himoya qilish va hokazolarni taklif etadigan me'moriy tizim deyarli majburiydir. Bu juda muhim narsa. Aslida, bu ehtiyoj yangi kontseptsiyaga olib keldi. Qandaydir taxminlar? Ha, DevOps. Bu to'liq avtomatlashtirish va optimallashtirish infratuzilmasi kontseptsiyasiga olib keldi.

Endi arxitekturani Monolitikdan Microservicesga o'zgartirish vaqti keldi. U xizmatga yo'naltirilgan arxitekturaning ulkan afzalliklarini taklif etadi. Hech bo'lmaganda Doker va Kubernetes uchun monolitik arxitekturani ishlatish g'oyaviy jihatdan noto'g'ri. Men, albatta, mikroservislar arxitekturasining ba'zi jihatlarini muhokama qilaman. DevOps haqida chuqur ma'lumot olish uchun ushbu maqolani DevOps-da o'qing.

Endi biz asosiy muhim tarkibiy qismlar va yaxshi arxitekturaning echimlarini tezda muhokama qilamiz.

Muhim tarkibiy qismlar

1 raqam - Identifikatsiya xizmati:

Identifikatsiya mikroservisi "identifikatsiya mikroservis" ni anglatadi. Xizmatlar engil. Bu modullikni ta'minlaydi va dasturga moslashuvchanlikni ta'minlaydi. Identifikatsion mikroservis kuchli va profilning barcha ma'lumotlariga kirish huquqiga ega. U barcha dasturlarning markazida zarur bo'lgan barcha narsalarni taqdim etishga qodir.

Agar siz IBM, Google, Microsoft va hokazo kabi yirik korxona platformalarining mijozi bo'lishni istasangiz, kirish sotuvchilar xizmatlari tomonidan boshqariladi. Ammo siz o'zingizning echimingizni xohlasangiz nima bo'ladi? Kelgusi qismdagi ro'yxat sizga qaror qilishga yordam beradi.

2 raqam - Avtomatlashtirilgan xizmatni taqdim etish:

O'rnatilgan xizmatlar bir-biridan mustaqil. Bu oson rivojlanish va kam xatolarga olib keladi. Shuningdek, u boshqa xizmatlarni dinamik va avtomatlashtirilgan rejimda qidirishda yordam beradi.

Kubernetes qo'shimcha tarkibiy qismlarga bo'lgan ehtiyojni kamaytiradi. Shunga qaramay, yangi mashinalarni qo'shishni avtomatlashtirish kerak. Bu erda asboblar ro'yxati:

(1) KOPS - AWS yoki GCE-ga klaster o'rnatishga yordam beradi.

(2) Teraform - har qanday atrof-muhit uchun infratuzilmani boshqarishga yordam beradi.

(3) Ansible - har qanday turdagi avtomatlashtirishni taklif qiladi.

Men shaxsan Ansible-ni tavsiya qilaman, chunki bu ikkala server bilan ham Kubernetes ob'ektlari bilan ishlashga yordam beradi.

3 raqam - Git ombori va vazifalarni kuzatish:

Git omborxonalarida vazifalarni osonlikcha hal qilish mumkin. Asosiy g'oya - kichik omborxonaga ega bo'lish. Atrof-muhitni kuzatuvchi sifatida xizmat qiladi. Tarkib turli xil xizmatlarda ishlatilishi uchun qaysi turdagi versiyalarni o'z ichiga oladi. Buning uchun manba boshqaruv tizimi afzalroqdir "git".

Jamoada ishlash va barcha muhim muhokamalar uchun kodlarni saqlash uchun tegishli ish joyi bo'lishi kerak. Agar bepul xizmatni xohlasangiz, Redmine-ga o'ting. Else, Jira pullik xizmat va juda foydali. Kod ombori uchun Gerrit bepul tanlovdir!

4-raqam - Docker reyestri:

Docker reestri bu saqlash va tarkibni etkazib berish tizimining turi. U Docker rasmlarining nomini oladi va turli xil yorliqli versiyalarda mavjud. Ro'yxatdan o'tish kitobi bilan ishlash uchun foydalanuvchi surish va tortish buyruqlarini ishga solishi kerak.

Docker tasvirni boshqarish tizimi juda muhimdir. Tizim foydalanuvchilar va foydalanuvchilar guruhiga kirishni qo'llab-quvvatlashi kerak. Buning uchun bulutli echimni yoki ba'zi shaxsiy xizmatni tanlang. Yaxshi variant - Vmware Harbor.

5 raqami - CI / CD va xizmatlarni etkazib berish:

Yuqorida muhokama qilingan tarkibiy qismlarni faqat uzluksiz integratsiya va etkazib berish xizmati ulaydi. Uzluksiz etkazib berish bu oddiy va har qanday mantiqdan mahrum bo'lgan xizmatni anglatadi. CI / CD xizmati faqat tashqi dunyo voqealariga, masalan git omboridagi o'zgarishlar va hokazolarga munosabat bildirishi kerak.

Integratsiya xizmati xizmatlarni avtomatik sinovdan o'tkazish, xizmatlarni etkazib berish, orqaga qaytarish, xizmatlarni o'chirish va rasmlarni yaratish uchun javobgardir.

6 raqami - Jurnal to'plash va tahlil qilish:

Har qanday mikroservis dasturida muammoni kuzatish muhimdir. Kuzatish log yordamida amalga oshiriladi. Shunday qilib, tizimga kirish va monitoring sizga tizimning yaxlit ko'rinishini beradi.

Ildiz jarayoniga STDOUT yoki STDERR-ga yozish orqali jurnallarga kirish mumkin. Agar kerak bo'lsa, jurnallar ma'lumotlari mavjud bo'lishi kerak. Shuningdek, unda o'tmishdagi yozuvlar bo'lishi kerak.

7 raqami - Kuzatish, monitoring va ogohlantirish:

Opentracing va Zipkin kabi vositalar sizga xatoni tushunishga yordam beradi. Qaerda xato qildingiz? Ushbu vositalar bunday savollarga javob berishga yordam beradi. Kamchiliklar ro'y beradi va ularni aniqlash muhimdir.

Bundan tashqari, monitoring uch bosqichga bo'lingan. Bular jismoniy daraja, klaster darajasi va xizmat ko'rsatish darajasi. Kuzatuvdagi xatolar uchun cheklov yo'q. Prometey va OpsGenie kabi vositalar kuzatuv uchun juda foydali bo'lgan. OpsGenie shuningdek, barcha darajadagi muammolar haqida ogohlantiradi va xabar beradi. Shuning uchun kuzatuv, monitoring va ogohlantirishlarga hech qachon ahamiyat bermaslik kerak. Ular dasturning mudofaa qismidir.

Raqam 8 - Bir martalik kirish bilan API shlyuzi:

Mikroservislarda barcha qo'ng'iroqlar faqat API Gateway orqali o'tishi kerak. Bu xavfsizlikni saqlashga yordam beradi. Bundan tashqari, u API so'rovlarini yo'naltirish uchun javobgardir. Shunday qilib, API shlyuzi barcha tegishli mikroservislar uchun kirish joyidir. Bitta tizimga kirish seansni anglatadi. Bu foydalanuvchi autentifikatsiya xizmatining bir turi. Ismga ko'ra, kirish ma'lumotlari bir yoki bir marta o'rnatiladi. Keyin undan bir nechta dasturlarga kirish uchun foydalanish mumkin.

Avtorizatsiya, autentifikatsiya, foydalanuvchini ro'yxatga olish, bitta tizimga kirish va hokazo kabi vazifalarni bajarish uchun ishonchli xizmatga ehtiyoj bor. Xizmat API Gateway bilan birlashadi va hamma u orqali ishlaydi.

9 raqami - Tadbir avtobusi:

Agar ekotizim yuzlab xizmatlarga ega bo'lsa, ularga ehtiyotkorlik bilan munosabatda bo'lish kerak. Servis aloqasi shart va xato uchun hech qanday imkoniyat yo'q. Ma'lumotlar oqimini tartibga solish kerak. Voqealar avtobusi bitta mikroservisdan boshqasiga voqealarning yaxshi yo'naltirilgan oqimini anglatadi.

10 raqami - Ma'lumotlar bazalari va davlat xizmatlari:

Mikroservislarga asoslangan dasturda, odatda, ko'plab xizmatlar mavjud. Hamma uchun ma'lumotni saqlash talablari, xizmat ko'rsatish vazifalariga ko'ra har xil. Shunday qilib, ba'zi xizmatlar aloqador ma'lumotlar bazasi bilan yaxshi, boshqalari esa MongoDB kabi NoSQL ma'lumotlar bazasiga muhtoj bo'lishi mumkin.

Docker o'yin qoidalarini o'zgartirdi. Ma'lumotlar bazasi saqlash dunyosida muhim ahamiyatga ega bo'lgan joyni egallaydi. Shunday qilib, nima bo'lishidan qat'i nazar, u Kubernetes muhitida osonlikcha ishlashi kerak.

Arxitekturadan haqiqiy hayotga qaytish

Men o'z fikrlarimni baham ko'rishda siz bilan halol bo'laman. Kelajakda barcha me'morchiliklar muvaffaqiyatsizliklar sifatida ko'rib chiqilishiga ishonaman. Dizayn tamoyillari, asoslari va boshqalar hamma narsa o'zgarmoqda! Ammo siz o'yinning yuqori qismida qolishingiz kerak. Buning uchun professional hamjamiyatga qo'shiling. Ertami-kechmi, siz ushbu o'zgarishlarga moslashishingiz kerak bo'ladi. Unda nega endi o'zidan boshlamaysiz?

Ko'plab imkoniyatlar mavjud, ammo agar siz o'zingizni yangi texnologik yangilanishlar bilan yangilasangiz.

Endi ushbu maqola sarlavhasiga qaytamiz. Docker va Kubernetes eng yaxshi arxitekturaga ega? Hozircha, albatta, ha. Ammo bu hozirgi davr uchun eng yaxshi arxitektura bo'lishi mumkin. Ko'proq narsaga intiling, eng yaxshisidan yaxshiroq arxitekturani qurishga intiling!

Men hammangiz bilan bir nechta foydali havolalarni baham ko'rmoqdaman.

Docker Maqolasi: Docker qo'llanmasi: yangi boshlanuvchilar uchun konteynerlar, VM va docker

Docker Video Tutorial: Docker Video Tutorial Series

Kubernetes Maqola: Yangi boshlanuvchilar va dasturchilar uchun Kubernetes Injili

Kubernetes video darsi: Kubernetes video darslari seriyasi