Ansible - bir nechta serverlarning konfiguratsiyasini bir marta amalga oshirish

Ansible - bir nechta serverlarning konfiguratsiyasini bir marta amalga oshirish

Kirish

Bizning muhitimizda ko'p serverlar mavjud. Bir-ikki ta emas, 100 dan ortiq server mavjud. Va bu serverlarda umumiy ravishda Nexus o'rnatilgan. Tashqi kutubxona yoki paketlarni olishda, har safar internetdan to'g'ridan-to'g'ri olish o'rniga, yaqin dastlabki Nexus bir marta olib, keshlab qo'yib, tezda taqdim etadigan “o'rtacha ombor” vazifasini bajaradi. Tashqi tarmoqlar notinch bo'lgan muhitda bu juda muhim uskunadir.

Muammo shundaki, har bir Nexus uchun proxy sozlamalarini bir xil qilib qo'yish kerak, yoki Repository qo'shilishi yoki bir necha parametrlar qo'shilishi ko'p hollarda yuz beradi. Qaysi tashqi omborni ko'zda tutish, qaysi omborni birlashtirib ko'rsatish kerak bo'lsa, serverlar ko'p bo'lsa, bu sozlamalarni ko'p marta takrorlashga to'g'ri keladi. Bir serverga kirib sozlash, chiqib ketish va keyingi serverga kirib, yana o'sha sozlamalarni bajarish jarayonida takrorlanaverdim.

Birinchi bir necha serverlarni sozlash oson edi. Ammo, serverlar ko'paygani sayin, ba'zi serverlar sozlamani esdan chiqarib qo'ydim, ba'zi serverlar xato yozuvlarga ega bo'lib qolishdi, ba'zi serverlar esa men bilmagan holda noaniq farqlarda sozlangan edi. Albatta, “barchasi bir xil qilindi” deb o'ylardim, lekin aslida har biri o'ziga xos edi.

Shunda birdan bunday fikr paydo bo'ldi. Ushbu serverlarning sozlamalari natijada barchasi bir xil bo'lishi kerak. Agar shunday bo'lsa, unda “shunday sozlanishi kerak” bo'lgan to'g'ri javobni bir marta yozib qo'yish va qolganlarini mashina barcha serverlarga bir xil tarzda qo'llasa qanday bo'ladi? Bu menga Ansible ni topishimga sabab bo'ldi.

Shuning uchun Ansible nima?

Ansible, qisqacha aytganda, “bir nechta serverda bir xil ishni bajaradigan avtomatlashtirish vositasi”dir. Agar men “bu serverlar shunday holatga kelishi kerak” deb yozsam, Ansible o'sha serverlarga har biriga bog'lanib, aynan shunday qilib yaratadi. O'nlab yoki yuzlab bo'lsa, bir komanda kifoya.

Men Ansible ga jalb qilingan bir nechta sabablarim bor edi. Alohida o'zingiz bilan yoqishi juda yaxshi bo'lar ekan.

Birinchidan, serverga biror narsani oldindan o'rnatish zarurati yo'q edi.Avtomatlashtirish vositalaridan ba'zilari boshqariladigan serverlarda “agent” deb ataladigan dasturlarni oldindan o'rnatishni talab qiladi. Biroq, Ansible faqat SSH orqali bog'lanish kerak. Bizning kabi o'nlab tarqatilgan serverlar holatida, o'sha serverlarga hali yana biror narsani o'rnatish va boshqarish aslida qiyinchilik edi, buni o'zida hech qanday yuklamalarga ega bo'lmaganligi katta ahamiyatga ega edi.

Ikkinchidan, bir necha marta bajarilsa ham xavfsiz edi.Ushbu nuqta boshlanishida juda tushunarli bo'lmasdi, lekin ishlatganimda, bu haqiqatan ham muhim xususiyat ekanligini angladim. Ansible “agar allaqachon shunday bo'lsa, u holda tegmang.” Masalan, agar biror sozlama allaqachon to'g'ri bo'lgan serverga yana bajarsak, bir xil qilib yaratmaydi, balki “allaqachon to'g'ri” deb hisoblaydi va davom etadi. Shuning uchun “bu server allaqachon qilinmaganmikan” deb har birini eslab qolish kerak emas edi. Umumiy holda bir marta bajarilsa, bajarilmaganlari avtomatik ravishda to'ldirildi.

Uchinchidan, sozlamalarni matn kabi yozishim mumkin edi.Ansible ning sozlama fayli odam o'qish uchun qulay formatda bo'lganligi sababli, dasturlashni chuqur bilmasangiz ham, “nima qilishni xohlayotganingiz” ko'zga yaqqol tushadi. Katta kod emas, “bu omborni shunday qiling” ni astoydil bayon etgan ko'rsatma kabi edi. Keyinchalik yana bir bor ko'rib chiqsangiz, hamkasb ko'rsa, tushunishi mumkinligi yaxshi edi.

Ansible ning asosiy tuzilishi

Ansible qanday ishlashini tasvirda ko'rsangiz, tushunish ancha oson bo'ladi. Umumiy tuzilma kutilmaganda oddiy.

image1.png

Rasm manbasi: https://spacelift.io/blog/ansible-architecture

Rasmning har bir elementini alohida ko'rib chiqsak, quyidagi kabi. O'qilishi qiyin atamalar kabi ko'rinadi, lekin roli bilinsa, oddiy.

Avtomatlashtirish dvigateli (Automation Engine): Rasmning o'rtasida joylashgan asosiy element. Bajarilishi kerak bo'lgan ishlarni haqiqatan ham amalga oshiruvchi “miya” vazifasini bajaradi, odatda ish uchun mo'ljallangan kompyuter yoki alohida boshqaruv serverida joylashadi. Buni boshqaruv tuguni (Control Node) deb atashadi va hamma narsa shu yerda boshlanadi.

Playbook (pleybuk): “Nima va qanday qilish kerak” degan ishlash ko'rsatmasidir. Odamlar uchun o'qilishi oson formatda (YAML) “Bu saqlashni shunday qiling” kabi ishlashni bosqichma-bosqich yozib borishadi. To'g'ri javobni bir marta yozish joyi aynan shu.

Inventarizatsiya (Inventory): “Qanday serverlarga qo'llash kerak” ro'yxati. Bizning misolimizda bir necha o'nlab Nexus serverlarining manzillari kabi. Yangi server paydo bo'lsa, bu yerga bir qator qo'shasiz. Men uchun esa, ish tugaguncha server manzillarini avtomatik ravishda izohlayman, takroriy bajarishni oldini olib, ish olib bordim.

Modullar (Modules): Haqiqiy ishlarni bajaradigan kichik vositalardir. “Faylni nusxalash”, “sozlamalarni o'zgartirish” kabi ishlarni amalga oshiradigan qismlarini Ansible kerak bo'lganda maqsadli serverga bir oz yuborib bajarib, tugaganidan so'ng tozalaydi.

Plugins (plaginlar) / API: Ansible ning funksiyalarini kengaytirishga yoki boshqa tizimlarga ulanishda ishlatiladigan qism. Dastlab bu haqda chuqur bilish shart emas, “bunday bo'lsa kengaytirish mumkin” degan ma'lumot yetarli.

Hosts / Networking (maqsadlar): Rasmning o'ng tomonidagi, haqiqatan ham ishlar qo'llaniladigan serverlar yoki tarmoqlar. Bizning holatda, Nexus o'rnatilgan o'nlab serverlar shu yerga to'g'ri keladi. Asosiysi shuki, bu maqsadlarga hech narsa oldindan o'rnatish shart emas.

Bu rasmdagi eng e'tiborlisi oqimning yo'nalishi.Chap tomondan (yozilgan ko'rsatmalar) → o'rtada (dvigatel) orqali → o'ng tomonga (o'nlab serverlar) ish bir vaqtning o'zida tarqaladi. Men qiladigan ish chap tomonda “to'g'ri javob”ni yozishgacha, qolgan hamma serverlarga ayni shu javobni yetkazish ishini dvigatel o'z zimmasiga oladi. Qolishiga kirmasdan, har bir serverga kirib borishning takrorlanishi, bitta rasmga yig'ilgan.

Nima o'zgardi

Avtomatlashtirishni qo'llashdan keyin eng avvalo his etganimiz vaqt edi. Avvalgi kunlari o'nlab serverlarni ishlatishga to'liq bir kun sarflavidik, endi bitta buyruq bilan tugaydi. Yangi server qo'shilsa ham, ro'yxatga bir qator qo'shish va yana bajarish kifoya.

Lekin yanada asosiy o'zgarish “barqarorlik” edi. Endi barcha serverlarning bir xil sozlanishi mumkinligiga ishonishimiz mumkin. Inson qo'li bilan bajarilganda yuzaga keladigan nozik tafovutlar yo'qoldi.

Va yurak ham ancha tinchlandi. Avval “hechqisi yo'q bomi?” degan noaniq qo'rquv doim bor edi, endi esa butuniga bir marta bajarib qo'yishim mumkin. Aviya mos serverlar avvaldan turaveradi, faqat nosozlik tug'dirgan serverlarni o'zlari to'g'irlaydi. Bu “bajarilmaganlarni to'ldirish” barqarorligi o'nlab serverlar uchun mas'uliyatni katta darajada yengillashtirdi.

Albatta, avtomatlashtirish hamma narsani hal etmaydi. Aksincha, “bir marta hamma uchun qo'llanadi” degan kuchli kuchi, xuddi shunday xavfga aylanishi mumkin.

Qo'l bilan qilganda, bitta joyda xato qilsangiz, faqat o'sha bitta joy muammo bo'ldi. Ammo avtomatlashtirishda bu holat boshqacha. To'g'ri javobni noto'g'ri yozsangiz, o'sha noto'g'ri sozlama “hamma” serverlarga bir xil, tezda tarqaladi. Bir joydagi xato o'nlab muammoga aylanishi mumkin. Shuning uchun, umumiy qo'llanilmasdan oldin, avval bitta-yu ikki ta'ga sinov o'tkazish odati talab etiladi.

Shuningdek, barcha ishlar maksimal darajada ehtiyotkorlik bilan cheklanib, sozlanishi maqsadga muvofiqdir. Nihoyat, o'z-o'zidan tushunmagan muammolar paydo bo'lsa, bu umuman katta muammo bo'lishi mumkin.

Xavfsizlik nuqtai nazaridan ham o'rganilgan jihatlar bor. Ushbu vosita, oxir-oqibat, bir qancha serverlarga “ulanish” orqali ishlaydi. Bu, ulanish uchun kerakli hisob ma'lumotlari yoki Nexus admin paroli kabi sezgir qiymatlar bir joyda yozilishi kerakligini bildiradi. Dastlab, qulaylik uchun sozlash fayliga to'g'ridan-to'g'ri yozish istagi bor edi. Ammo bu, o'sha faylni ko'rayotgan har qanday kishiga parolni to'liq uzatish bilan teng bo'ldi.

Yaxshiyamki, bunday vositalar sezgir qiymatlarni alohida shifrlash orqali saqlash usullariga ega edi. Parolni sozlash matnidan ajratib, yashirish va saqlash joyiga o'tkazmaslikka harakat qildik. “Oson yozib qo'yishni xohlayman” degan tuyg'u bir marta to'xtash, keyinchalik katta muammolarni oldini olish uchun yo'l bo'ldi. Avtomatlashtirish, shuningdek, bir joyda juda ko'p sezgir ma'lumotlarni boshqarishni anglatadi.

Xulosa tariqasida

Orqaga nazar solganimda, Ansible'ni joriy etishim texnik o'rganishga bog'liq emas edi. Faqatgina “bir xil ishni o'nlab marta takrorlash murakkabligi” va “odam qo'li bilan doim xato qilish natijasida” edi.

Ammo bu jarayonda kutilmagan narsa oldim. Faqat vaqtni tejash emas, balki ish uslubi o'zgardi. “Jarayonni esda tutgan shaxs”dan “kerakli holatni yozib qo'ygan shaxs”ga o'tdi. Boshimdagi bilimlar, har kim o'qiydigan va tuzatadigan matnga aylandi. Va “bizning serverlarimiz hammasi bir xil” deb umid qilish emas, balki haqiqatga aylanishini bilib oldim.

Agar o'nlab serverlar oldida shunga o'xshash tashvishlar bilan shug'ullanayotgan inson bo'lsa, bir marta o'ylab ko'rishni tavsiya qilaman. Ushbu takroriy ishni qo'l bilan qilish shartmi? “Javobni bir marta yozing, qolganini mexanizmgam berib qo'ying” g'oyasi, o'ylaganimizdan ko'ra ko'proq narsalarni o'zgartiradi. Kamida men uchun shunday bo'ldi. Kamchiliklarini o'qiganingiz uchun rahmat.

Bang

Site footer