Муносибат IaC (Инфраструктура ҳамчун Кодекс) на танҳо аз коде, ки дар анбор нигоҳ дошта мешавад, балки аз одамон ва равандҳое иборат аст, ки ин кодро иҳота мекунанд. Оё имкон дорад, ки равишҳоро аз таҳияи нармафзор то идоракунӣ ва тавсифи инфрасохтор дубора истифода кард? Хуб мебуд, ки ҳангоми хондани мақола ин ақидаро дар хотир нигоҳ доред.
Ин стенограммаи ман аст
Слайдҳо ва видеоҳо
нусхаи англисӣ Версияи русӣ - Давраи хушк 2019-04-24
SpbLUG Видео(RU) аз DevopsConf 2019-05-28 Видео(RU) аз DINS DevOps BEBENG 2019-06-20 слайдҳо
Инфрасохтор ҳамчун таърихи баш
Фарз мекунем, ки шумо ба лоиҳаи нав омадед ва онҳо ба шумо мегӯянд: «Мо дорем Инфраструктура ҳамчун кодекс". Дар хакикат маълум мешавад Инфрасохтор ҳамчун таърихи баш ё масалан Ҳуҷҷатҳо ҳамчун таърихи bash. Ин вазъияти хеле реалй аст, масалан, чунин ходисаро Денис Лысенко дар баромади худ баён карда буд
Бо баъзе хохиш мо гуфта метавонем Инфрасохтор ҳамчун таърихи баш ин мисли код аст:
- такроршавандагӣ: Шумо метавонед таърихи bash-ро гиред, фармонҳоро аз он ҷо иҷро кунед ва дар омади гап, шумо метавонед конфигуратсияи кориро ҳамчун натиҷа ба даст оред.
- нусхабардорӣ: шумо медонед, ки кӣ ворид шуд ва онҳо чӣ кор карданд, боз ҳам ин далел нест, ки ин шуморо ба конфигуратсияи корӣ дар баромад оварда мерасонад.
- таърих: достони кӣ чӣ кор кардааст. танҳо шумо наметавонед онро истифода баред, агар шумо серверро гум кунед.
Чӣ бояд кард?
Инфраструктура ҳамчун кодекс
Хатто чунин ходисаи ачибе монанди Инфрасохтор ҳамчун таърихи баш шумо метавонед онро аз гӯшҳо кашед Инфраструктура ҳамчун кодекс, аммо вақте ки мо мехоҳем, ки нисбат ба сервери хуби кӯҳнаи LAMP чизи мураккабтаре анҷом диҳем, мо ба хулосае меоем, ки ин код бояд ба навъе тағир дода шавад, тағир дода шавад, такмил дода шавад. Минбаъд мо мехоҳем параллелҳои байни Инфраструктура ҳамчун кодекс ва таҳияи нармафзор.
ХУШК
Дар лоиҳаи таҳияи системаи нигаҳдорӣ зервазифа вуҷуд дошт
- тавассути ssh дар ин ҷо ворид шавед ва фармонро иҷро кунед.
- файлро дар он ҷо нусхабардорӣ кунед.
- конфигуратсияро дар ин ҷо ислоҳ кунед.
- дар он ҷо хидматро оғоз кунед
- ...
- ФАҚАТ!
Барои мантиқи тавсифшуда, bash беш аз кофист, махсусан дар марҳилаҳои аввали лоиҳа, вақте ки он нав оғоз мешавад. Ин
Маълум мешавад, ки чунин амалия ба монанди Д.Р. (Худро такрор накунед). Идеяи истифодаи дубораи коди мавҷуда аст. Ин оддӣ ба назар мерасад, аммо мо дарҳол ба ин наомадаем. Дар ҳолати мо, ин як идеяи ғайриоддӣ буд: ҷудо кардани конфигуратсияҳо аз скриптҳо. Онхое. мантиқи тиҷорӣ дар бораи он ки чӣ тавр насб алоҳида ҷойгир карда мешавад, конфигуратсияҳо алоҳида.
S.O.L.ID. барои CFM
Бо мурури замон лоиҳа афзоиш ёфт ва
Принсипи масъулиятшиносии ягона
Ҳар як синф танҳо як вазифаро иҷро мекунад.
Ба омехта кардани код ва сохтани ҳаюлоҳои спагеттии монолитӣ лозим нест. Инфраструктура бояд аз хишти оддй иборат бошад. Маълум мешавад, ки агар шумо китоби бозии Ansible-ро ба қисмҳои хурд тақсим кунед, нақшҳои Ansible-ро хонед, нигоҳ доштани онҳо осонтар аст.
Принсипи кушодаи пӯшида
Принсипи кушода / пӯшида.
- Ба васеъшавӣ кушода: маънои онро дорад, ки рафтори объект метавонад тавассути эҷоди намудҳои нави объект васеъ карда шавад.
- Барои тағирот пӯшида аст: Дар натиҷаи васеъ кардани рафтори субъект, набояд ба коде, ки ин объектҳоро истифода мебарад, тағирот ворид карда шавад.
Дар аввал, мо инфрасохтори санҷиширо дар мошинҳои виртуалӣ ҷойгир кардем, аммо аз сабаби он, ки мантиқи тиҷории ҷобаҷогузорӣ аз татбиқ ҷудо буд, мо ба baremetall бе мушкилот илова кардем.
Принсипи ивазкунии Лисков
Принсипи ивазкунии Барбара Лисков. объектҳо дар барнома бояд бо мисолҳои зернамудҳои онҳо иваз карда шаванд, бе тағир додани иҷрои дурусти барнома
Агар шумо ба он васеътар назар кунед, он хусусияти ягон лоиҳаи мушаххас нест, ки дар он ҷо татбиқ карда мешавад S.O.L.ID., он умуман дар бораи CFM меравад, масалан, дар як лоиҳаи дигар бояд як барномаи қуттии Java дар болои Java, серверҳои барномаҳо, пойгоҳи додаҳо, OS ва ғайра ҷойгир карда шавад. Бо истифода аз ин мисол, ман принсипҳои минбаъдаро баррасӣ мекунам S.O.L.ID.
Дар ҳолати мо, дар дохили дастаи инфрасохтор созиш мавҷуд аст, ки агар мо нақши imbjava ё oraclejava-ро насб карда бошем, пас мо иҷрошавандаи дуии java дорем. Ин зарур аст, зеро Нақшҳои болоӣ аз ин рафтор вобастаанд; онҳо java-ро интизоранд. Дар айни замон, ин ба мо имкон медиҳад, ки як амалисозӣ/версияи java-ро бо дигараш бе тағир додани мантиқи густариши барнома иваз кунем.
Мушкилот дар ин ҷо дар он аст, ки онро дар Ansible амалӣ кардан ғайриимкон аст, ки дар натиҷа дар дохили даста баъзе созишномаҳо пайдо мешаванд.
Принсипи сегрегатсияи интерфейс
Принсипи ҷудокунии интерфейс: "Бисёр интерфейсҳои мушаххаси муштарӣ аз як интерфейси таъиноти умумӣ беҳтаранд.
Дар аввал, мо кӯшиш кардем, ки тамоми тағирёбии ҷойгиркунии барномаҳоро дар як китоби Ansible ҷойгир кунем, аммо дастгирӣ кардан душвор буд ва равиш вақте ки мо интерфейси берунаро муайян кардаем (муштарӣ порти 443-ро интизор аст), пас инфрасохторро метавон аз инфиродӣ ҷамъ кард. хишт барои татбиқи мушаххас.
Принсипи инверсияи вобастагӣ
Принсипи инверсияи вобастагӣ. Модулҳои сатҳҳои боло набояд аз модулҳои сатҳҳои поёнӣ вобаста бошанд. Ҳарду намуди модулҳо бояд аз абстраксияҳо вобаста бошанд. Абстраксияҳо набояд аз тафсилот вобаста бошанд. Тафсилот бояд аз абстраксияҳо вобаста бошад.
Дар ин ҷо мисол ба антипаттерн асос меёбад.
- Яке аз муштариён абри хусусӣ дошт.
- Мо мошинҳои виртуалиро дар дохили абр фармоиш додем.
- Аммо аз сабаби хусусияти абр, ҷойгиркунии барнома ба гипервизоре, ки VM фаъол аст, вобаста буд.
Онхое. Мантиқи густариши барномаҳои сатҳи баланд бо вобастагӣ ба сатҳҳои поёнии гипервизор ҷорӣ мешуд ва ин маънои мушкилотро ҳангоми истифодаи дубораи ин мантиқ дошт. Ин тавр накунед.
Муносибат
Инфрасохтор ҳамчун код на танҳо дар бораи код, балки инчунин дар бораи муносибати байни код ва одамон, дар бораи ҳамкории байни таҳиягарони инфрасохтор аст.
Омили автобус
Фарз мекунем, ки шумо дар лоиҳаи худ Вася доред. Вася ҳама чизро дар бораи инфрасохтори шумо медонад, агар Вася ногаҳон нопадид шавад, чӣ мешавад? Ин вазъияти хеле воқеӣ аст, зеро ӯро автобус пахш карда метавонад. Баъзан чунин мешавад. Агар ин рӯй диҳад ва дониш дар бораи код, сохтори он, тарзи кор, намуди зоҳирӣ ва паролҳо дар байни даста тақсим карда нашавад, пас шумо метавонед ба як қатор ҳолатҳои ногувор дучор шавед. Барои кам кардани ин хатарҳо ва паҳн кардани дониш дар дохили гурӯҳ, шумо метавонед равишҳои гуногунро истифода баред
Ҷуфти Девопсинг
Чунин нест
Ҳолати дигари махсус занги ҳодиса аст. Ҳангоми мушкилот як гурӯҳ аз навбатдорон ва шахсони ҷалбшуда ҷамъ мешаванд, як роҳбар таъин карда мешавад, ки экрани худро мубодила мекунад ва қатори фикрро садо медиҳад. Дигар иштирокчиён фикрҳои пешворо пайгирӣ мекунанд, ҳилаҳоро аз консол ҷосусӣ мекунанд, тафтиш мекунанд, ки онҳо дар гузориш як сатрро аз даст надодаанд ва дар бораи система чизҳои навро меомӯзанд. Ин усул бештар кор мекард.
Шарҳи Кодекс
Субъективӣ, паҳн кардани дониш дар бораи инфрасохтор ва тарзи кор бо истифода аз баррасии код самараноктар буд:
- Инфрасохтор бо код дар анбор тавсиф карда мешавад.
- Тағйирот дар филиали алоҳида ба амал меоянд.
- Ҳангоми дархости якҷоякунӣ, шумо метавонед дельти тағиротро дар инфрасохтор бинед.
Чизи барҷаста дар ин ҷо ин буд, ки баррасӣ аз рӯи ҷадвал як ба як интихоб мешуданд, яъне. бо як дараҷаи эҳтимолият шумо ба як пораи нави инфрасохтор меоед.
Услуби код
Бо гузашти вақт, ҳангоми баррасиҳо ҷанҷолҳо пайдо шуданд, зеро ... бознигарон услуби худро доштанд ва гардиши баррасикунандагон онҳоро бо услубҳои гуногун ҷамъ мекард: 2 фосила ё 4, camelCase ё snake_case. Инро фавран ба амал баровардан мумкин набуд.
- Аввалин идея ин буд, ки истифодаи линтер тавсия дода шавад, охир ҳама муҳандис аст, ҳама оқил ҳастанд. Аммо муҳаррирҳои гуногун, OS, қулай нестанд
- Ин ба як бот табдил ёфт, ки барои ҳар як ӯҳдадории мушкилӣ барои сустӣ менавишт ва баромади линтерро замима мекард. Аммо дар аксари мавридҳо корҳои муҳимтаре буданд, ки бояд анҷом дода шаванд ва код ислоҳнашуда боқӣ монд.
Устоди сохтмони сабз
Вақт мегузарад ва мо ба хулосае омадем, ки ӯҳдадориҳоеро, ки аз санҷишҳои муайян намегузаранд, ба устод иҷозат додан мумкин нест. Войла! Мо Green Build Master-ро ихтироъ кардем, ки муддати тӯлонӣ дар таҳияи нармафзор истифода шудааст:
- Дар филиали алохида инкишоф дода мешавад.
- Дар ин ришта озмоишҳо идома доранд.
- Агар санҷишҳо ноком шаванд, код онро ба устод ворид намекунад.
Қабули ин тасмим хеле дардовар буд, зеро... боиси бахсу мунозирахои зиёд шуд, вале меарзад, зеро... Баррасиҳо ба гирифтани дархостҳо дар бораи якҷояшавӣ бидуни тафовут дар услуб шурӯъ карданд ва бо мурури замон шумораи минтақаҳои мушкилот коҳиш ёфт.
Санҷиши IaC
Илова ба санҷиши услуб, шумо метавонед чизҳои дигарро истифода баред, масалан, барои тафтиш кардани он, ки инфрасохтори шумо воқеан ҷойгир карда метавонад. Ё тафтиш кунед, ки тағирот дар инфрасохтор ба талафоти пул оварда намерасонад. Чаро ин метавонад лозим бошад? Савол мураккаб ва фалсафӣ аст, беҳтар аст, ки бо як ҳикоя ҷавоб диҳед, ки гӯё дар Powershell як автоматикӣ мавҷуд буд, ки шароити сарҳадро тафтиш накардааст => VM-ҳои бештар аз зарурӣ сохта шудаанд => муштарӣ аз нақшаи пешбинишуда бештар пул сарф кардааст. Ин чандон гуворо нест, аммо дар марҳилаҳои қаблӣ ба ин хатогӣ дучор шудан комилан имконпазир мебуд.
Метавон пурсад, ки чаро инфраструктураи мураккабро боз хам мураккабтар мегардонем? Санҷишҳо барои инфрасохтор, мисли код, на дар бораи соддасозӣ, балки дар бораи донистани он, ки инфрасохтори шумо чӣ гуна бояд кор кунад.
Пирамидаи санҷиши IaC
Санҷиши IaC: Таҳлили статикӣ
Агар шумо якбора тамоми инфрасохторро ҷойгир кунед ва тафтиш кунед, ки он кор мекунад, шумо метавонед фаҳмед, ки он вақти зиёдро талаб мекунад ва вақти зиёдро талаб мекунад. Бинобар ин, асос бояд чизе бошад, ки зуд кор кунад, он бисьёр аст ва он бисьёр чойхои ибтидоиро дарбар мегирад.
Bash душвор аст
Биёед як мисоли ночизро дида бароем. ҳамаи файлҳоро дар феҳристи ҷорӣ интихоб кунед ва ба ҷои дигар нусхабардорӣ кунед. Аввалин чизе, ки ба хотир меояд:
for i in * ; do
cp $i /some/path/$i.bak
done
Чӣ мешавад, агар дар номи файл фосила мавҷуд бошад? Хуб, хуб, мо оқил ҳастем, мо медонем, ки чӣ гуна иқтибосҳоро истифода барем:
for i in * ; do cp "$i" "/some/path/$i.bak" ; done
Офарин? Не! Чӣ мешавад, агар дар директория чизе набошад, яъне. глобинг кор намекунад.
find . -type f -exec mv -v {} dst/{}.bak ;
Ҳоло хуб кардед? Не... Фаромӯш кардед, ки дар номи файл чӣ буда метавонад n
.
touch x
mv x "$(printf "foonbar")"
find . -type f -print0 | xargs -0 mv -t /path/to/target-dir
Воситаҳои таҳлили статикӣ
Мушкилоти қадами қаблӣ метавонад ҳангоми фаромӯш кардани иқтибосҳо пайдо шавад, барои ин дар табиат воситаҳои зиёде мавҷуданд.
забон
асбоби
bash
лаъл
python
иҷрошаванда
Санҷиши IaC: Санҷишҳои воҳид
Тавре ки мо аз мисоли қаблӣ дидем, линтерҳо қодир нестанд ва наметавонанд ҳамаи соҳаҳои мушкилотро нишон диҳанд. Ғайр аз он, дар муқоиса бо озмоиш дар таҳияи нармафзор, мо метавонем санҷишҳои воҳидро ба ёд орем. Он чизе ки фавран ба хотир меояд
Дар ибтидо мо дар бораи он сӯҳбат кардем S.O.L.ID. ки инфраструктураи мо бояд аз хишти хурд иборат бошад. Вакти онхо расидааст.
- Инфрасохтор ба хиштҳои хурд тақсим карда мешавад, масалан, Нақшҳои Ansible.
- Як намуди муҳити зист ҷойгир карда шудааст, хоҳ докер ё VM.
- Мо нақши Ansible-и худро ба ин муҳити санҷиш истифода мебарем.
- Мо тафтиш мекунем, ки ҳама чиз тавре ки мо интизор будем кор мекардем (мо озмоишҳо мегузаронем).
- Мо қарор медиҳем, ки хуб ё не.
Санҷиши IaC: Воситаҳои санҷиши воҳидҳо
Савол, санҷишҳо барои CFM чист? Шумо метавонед танҳо скриптро иҷро кунед, ё шумо метавонед барои ин ҳалли омодаро истифода баред:
CFM
асбоби
Фаҳмост
сар
сар
намак
Мисол барои testinfra, тафтиши он корбарон test1
, test2
вуҷуд доранд ва дар як гурӯҳ ҳастанд sshusers
:
def test_default_users(host):
users = ['test1', 'test2' ]
for login in users:
assert host.user(login).exists
assert 'sshusers' in host.user(login).groups
Чӣ бояд интихоб кард? Савол мураккаб ва норавшан аст, ин аст як мисоли тағирот дар лоиҳаҳо дар github барои солҳои 2018-2019:
Чаҳорчӯбаҳои санҷиши IaC
Саволе ба миён меояд: чӣ тавр ҳамаро ҷамъ овардан ва ба кор андохтан мумкин аст? Метавонед
CFM
асбоби
Фаҳмост
сар
Терафром
Намунаи тағирот дар лоиҳаҳо дар github барои солҳои 2018-2019:
Молекула vs. Ошхонаи озмоишӣ
Дар аввал мо
- Дар баробари як VM эҷод кунед.
- Нақшҳои Ansible-ро татбиқ кунед.
- Гузаронидани санҷиш.
Барои 25-35 нақш 40-70 дақиқа кор мекард, ки тӯлонӣ буд.
Қадами навбатӣ гузариш ба Ҷенкинс/докер/ансибл/молекула буд. Идиологӣ ҳама чиз якхела аст
- Китобҳои бозӣ Lint.
- Нақшҳоро як қатор кунед.
- Контейнерро оғоз кунед
- Нақшҳои Ansible-ро татбиқ кунед.
- Testinfra-ро иҷро кунед.
- Имкониятро тафтиш кунед.
Линтинг барои 40 нақш ва санҷишҳо барои даҳҳо тақрибан 15 дақиқа тӯл кашиданд.
Чӣ интихоб кардан аз бисёр омилҳо вобаста аст, ба монанди стек истифодашаванда, таҷриба дар гурӯҳ ва ғайра. дар ин ҷо ҳама худашон тасмим мегиранд, ки чӣ гуна саволи санҷиши воҳидро пӯшанд
Санҷиши IaC: Санҷишҳои ҳамгироӣ
Қадами навбатӣ дар пирамидаи санҷиши инфрасохтор санҷишҳои ҳамгироӣ хоҳанд буд. Онҳо ба санҷишҳои воҳид монанданд:
- Инфрасохтор ба хиштҳои хурд тақсим карда мешавад, масалан нақшҳои Ansible.
- Як намуди муҳити зист ҷойгир карда шудааст, хоҳ докер ё VM.
- Барои ин муҳити санҷиш муроҷиат кунед бисёр Нақшҳои қобили мулоҳиза.
- Мо тафтиш мекунем, ки ҳама чиз тавре ки мо интизор будем кор мекардем (мо озмоишҳо мегузаронем).
- Мо қарор медиҳем, ки хуб ё не.
Тақрибан гӯем, мо кори як унсури инфиродии системаро мисли санҷишҳои воҳид тафтиш намекунем, мо месанҷем, ки чӣ тавр сервер дар маҷмӯъ конфигуратсия шудааст.
Санҷиши IaC: Санҷишҳои ниҳоӣ ба охир
Дар болои пирамида моро санҷишҳои End to End пешвоз мегиранд. Онхое. Мо кори сервери алоҳида, скрипти алоҳида ё хишти алоҳидаи инфрасохтори худро тафтиш намекунем. Мо тафтиш мекунем, ки бисёр серверҳо ба ҳам пайвастанд, инфрасохтори мо тавре кор мекунад, ки мо интизорем. Мутаассифона, ман ҳеҷ гоҳ ҳалли қуттиҳои тайёрро надидаам, шояд аз он сабаб... Инфрасохтор аксар вақт беназир аст ва барои шаблон ва сохтани чаҳорчӯба барои санҷиш душвор аст. Дар натиҷа, ҳар кас ҳалли худро эҷод мекунад. Талаб ҳаст, аммо ҷавоб нест. Аз ин рӯ, ман ба шумо мегӯям, ки дигаронро ба фикрҳои солим тела додан ё бинии ман молидан дар он аст, ки ҳама чиз хеле пеш аз мо ихтироъ шудааст.
Лоиҳа бо таърихи бой. Он дар ташкилотҳои калон истифода мешавад ва эҳтимол ҳар яки шумо бавосита бо он роҳҳоро убур кардаед. Ин барнома бисёр пойгоҳи додаҳо, ҳамгироӣ ва ғайраҳоро дастгирӣ мекунад. Донистани инфрасохтор чӣ гуна буда метавонад, шумораи зиёди файлҳои эҷодкунандаи docker ва донистани он, ки кадом озмоишҳо дар кадом муҳит Ҷенкинс иҷро мешаванд.
Ин схема муддати хеле дароз кор мекард, то дар доираи он
Идеяи тадқиқот боз ҳам пеш рафт ва дар openshift онҳо чунин чизеро пайдо карданд, ба монанди APB (Ansible Playbook Bundle), ки ба шумо имкон медиҳад, ки донишро дар бораи ҷойгиркунии инфрасохтор дар контейнер ҷамъ кунед. Онхое. як нуқтаи такроршаванда ва санҷидашавандаи дониш дар бораи чӣ гуна ҷойгир кардани инфрасохтор вуҷуд дорад.
Ҳамаи ин хуб садо медод, то он даме, ки мо ба инфрасохтори гетерогенӣ дучор шавем: барои санҷиш ба мо Windows лозим буд. Дар натиҷа, дониш дар бораи чӣ, дар куҷо, чӣ гуна ҷойгир кардан ва озмоиш дар Ҷенкинс аст.
хулоса
Инфрасохтор ҳамчун Кодекс
- Код дар анбор.
- Муносибати одамон.
- Санҷиши инфрасохтор.
пайвандҳо
Забони англисӣ Паёми салиб аз блоги шахсӣ - Давраи хушк 2019-04-24
SpbLUG Видео(RU) аз DevopsConf 2019-05-28 Видео(RU) аз DINS DevOps BEBENG 2019-06-20 Дарсҳое, ки аз навиштани зиёда аз 300,000 XNUMX сатри кодекси инфрасохторӣ гирифта шудаанд &версияи матнӣ Интегратсияи инфрасохтор ҳамчун код ба қубури интиқоли доимӣ Озмоиши инфрасохтор ҳамчун код Рушди самаранок ва нигоҳдории нақшҳои Ansible Ansible баш нест!
Манбаъ: will.com