Postgres Сешанбе № 5: "PostgreSQL ва Kubernetes. CI/CD. Автоматикунонии санҷиш"

Postgres Сешанбе № 5: "PostgreSQL ва Kubernetes. CI/CD. Автоматикунонии санҷиш"

Дар охири соли гузашта боз як пахши мустақими ҷомеаи PostgreSQL-и Русия баргузор шуд #RuPostgres, ки дар ҷараёни он ҳаммуассиси он Николай Самохвалов бо директори техникии Flant Дмитрий Столяров дар бораи ин DBMS дар контексти Кубернетес сӯҳбат кард.

Мо стенограммаи кисми асосии ин мубохисаро чоп мекунем ва дар Канали YouTube ҷомеа Видеои пурра нашр шудааст:

Пойгоҳи додаҳо ва Kubernetes

NS: Имрӯз мо дар бораи ВАКУУМ ва НУТҚҲО гап намезанем. Мо мехоҳем дар бораи Кубернетес сӯҳбат кунем. Ман медонам, ки шумо таҷрибаи чандинсола доред. Ман наворҳои шуморо тамошо кардам ва ҳатто баъзеи онҳоро дубора тамошо кардам... Биё рост ба матлаб меоем: чаро умуман Postgres ё MySQL дар K8s?

DS: Ба ин савол чавоби аник нест ва дода наметавонад. Аммо дар маҷмӯъ, ин соддагӣ ва роҳат аст... потенсиал. Ҳама мехоҳанд хидматҳои идорашаванда дошта бошанд.

NS: Чӣ тавр РДС, танҳо дар хона?

DS: Бале: мисли RDS, танҳо дар ҳама ҷо.

NS: "Ҳар ҷо" як нуқтаи хуб аст. Дар ширкатҳои калон ҳама чиз дар ҷойҳои гуногун ҷойгир аст. Пас чаро, агар он як ширкати калон бошад, ҳалли тайёрро нагиред? Масалан, Nutanix таҳияҳои худро дорад, ширкатҳои дигар (VMware...) ҳамон "RDS, танҳо дар хона" доранд.

DS: Аммо сухан дар бораи татбики алохида меравад, ки танхо дар шароити муайян кор хохад кард. Ва агар мо дар бораи Кубернетес сухан ронем, он гоҳ инфрасохтори хеле гуногун вуҷуд дорад (он метавонад дар K8s бошад). Аслан ин стандарт барои APIҳо ба абр аст...

NS: Он инчунин ройгон аст!

DS: Он қадар муҳим нест. Озодӣ барои сегменти на он қадар калони бозор муҳим аст. Чизи дигар муҳим аст... Шояд шумо гузоришро дар хотир доред "Пойгоҳи додаҳо ва Kubernetes"?"

NS: Бале.

DS: Фахмидам, ки онро хеле ду-руст кабул кардаанд. Баъзеҳо фикр карданд, ки ман гуфтам: "Бачаҳо, биёед ҳама пойгоҳи додаҳоро ба Кубернетес гирем!", дар ҳоле ки дигарон тасмим гирифтанд, ки ин ҳама дучархаҳои даҳшатборанд. Вале ман мехостам чизи тамоман дигарро бигуям: «Бубинед, ки чй руй дода истодааст, чй гуна проблемадо мавчуданд ва ондоро чй тавр дал кардан мумкин аст. Оё мо бояд ҳоло пойгоҳи додаҳои Kubernetes-ро истифода барем? истеҳсолот? Хуб, танҳо агар ба шумо маъқул бошад ... баъзе корҳоро иҷро кунед. Аммо барои як dev, ман гуфта метавонам, ки ман онро тавсия медиҳам. Барои таҳиягар динамизми эҷод/нест кардани муҳитҳо хеле муҳим аст."

NS: Бо dev, оё шумо ҳама муҳитҳоеро дар назар доред, ки истеҳсол нестанд? Саҳна, QA…

DS: Агар мо дар бораи стендҳои перф сухан гӯем, пас эҳтимол не, зеро талабот дар он ҷо мушаххасанд. Агар сухан дар бораи ходисахои махсусе равад, ки барои инсценировка базаи хеле калон лозим аст, пас эхтимол не... Агар ин мухити статикй ва дарозмуддат бошад, пас дар K8s чойгир будани базаи маълумот чй фоида дорад?

NS: Ҳеҷ. Аммо дар куҷо мо муҳити статикиро мебинем? Муҳити статикӣ фардо кӯҳна мешавад.

DS: Саҳнасозӣ метавонад статикӣ бошад. Мо мизоҷон дорем...

NS: Бале, ман ҳам дорам. Ин як мушкили бузург аст, агар шумо базаи 10 TB ва 200 ГБ саҳна дошта бошед...

DS: Ман як парвандаи хеле олӣ дорам! Дар саҳна базаи маҳсулот мавҷуд аст, ки ба он тағйирот ворид карда мешавад. Ва тугмача мавҷуд аст: "ба истеҳсолот мебарояд". Ин тағиротҳо - делтаҳо - дар истеҳсолот илова карда мешаванд (ба назар чунин мерасад, ки онҳо танҳо тавассути API ҳамоҳанг карда шудаанд). Ин як варианти хеле экзотикӣ аст.

NS: Ман стартапҳоро дар водӣ дидаам, ки дар RDS ё ҳатто дар Ҳероку нишастаанд - ин ҳикояҳо аз 2-3 сол пеш ҳастанд - ва онҳо партовро ба ноутбуки худ зеркашӣ мекунанд. Зеро базаи маълумот ҳоло ҳам танҳо 80 ГБ аст ва дар ноутбук ҷой мавҷуд аст. Сипас онҳо барои ҳама дискҳои иловагӣ мехаранд, то онҳо 3 пойгоҳи додаҳо барои пешбурди гуногун дошта бошанд. Ин ҳам ҳамин тавр мешавад. Ман инчунин дидам, ки онҳо аз нусхабардории маҳсулот ба саҳна наметарсанд - ин аз ширкат вобаста аст. Аммо ман дидам, ки онҳо хеле метарсанд ва аксар вақт вақт ва даст надоранд. Аммо пеш аз он ки мо ба ин мавзӯъ гузарем, ман мехоҳам дар бораи Кубернетес бишнавам. Оё ман дуруст мефаҳмам, ки то ҳол касе дар истеҳсолот нест?

DS: Мо дар истеҳсолот базаҳои хурд дорем. Сухан дар бораи ҳаҷми даҳҳо гигабайтҳо ва хидматҳои ғайримуқаррарие меравад, ки мо барои сохтани репликаҳо танбал будем (ва чунин зарурат вуҷуд надорад). Ва ба шарте ки дар зери Kubernetes нигоҳдории муқаррарӣ мавҷуд бошад. Ин пойгоҳи додаҳо дар як мошини виртуалӣ кор мекард - шартан дар VMware, дар болои системаи нигоҳдорӣ. Мо онро ҷойгир кардем PV ва акнун мо метавонем онро аз дастгох ба машина гузаронем.

NS: Пойгоҳҳои ин ҳаҷм, то 100 ГБ, метавонанд дар чанд дақиқа дар дискҳои хуб ва шабакаи хуб паҳн карда шаванд, дуруст? Суръати 1 ГБ дар як сония дигар экзотикӣ нест.

DS: Бале, барои амалиёти хатӣ ин мушкилот нест.

NS: Хуб, мо бояд танҳо дар бораи маҳсулот фикр кунем. Ва агар мо Kubernetes-ро барои муҳити ғайриистеҳсолӣ баррасӣ кунем, мо бояд чӣ кор кунем? Ман инро дар Заландо мебинам оператор кунед, дар Crunchy арра кардан, баъзе вариантҳои дигар вуҷуд доранд. Ва вуҷуд дорад OnGres - ин дӯсти хуби мо Алваро аз Испания аст: коре, ки онҳо мекунанд, аслан танҳо нест оператор, ва тамоми тақсимот (StackGres), ки ба он илова ба худи Postgres, онҳо инчунин тасмим гирифтанд, ки нусхаи эҳтиётӣ, прокси фиристодаи...

DS: Фиристода барои чӣ? Мувозинат кардани трафики Postgres махсусан?

NS: Бале. Яъне, онҳо онро чунин мебинанд: агар шумо тақсимоти Linux ва ядроро гиред, пас PostgreSQL муқаррарӣ ядро ​​​​мебошад ва онҳо мехоҳанд тақсимоте созанд, ки ба абр мувофиқ бошад ва дар Kubernetes кор кунад. Онҳо ҷузъҳоро (нусхаҳо ва ғ.) якҷоя мекунанд ва онҳоро ислоҳ мекунанд, то онҳо хуб кор кунанд.

DS: Хеле олӣ! Аслан ин нармафзорест барои эҷоди Postgres-и идорашавандаи худ.

NS: Дистрибюцияҳои Linux мушкилоти абадӣ доранд: чӣ гуна бояд драйверҳоро созем, то ҳама сахтафзор дастгирӣ карда шавад. Ва онҳо ақида доранд, ки онҳо дар Кубернетес кор хоҳанд кард. Ман медонам, ки дар оператори Zalando мо ба наздикӣ пайвастшавӣ ба AWS дидем ва ин дигар он қадар хуб нест. Бо инфрасохтори мушаххас робита набояд дошта бошад - пас чӣ маъно дорад?

DS: Ман аниқ намедонам, ки Заландо ба чӣ вазъият дучор шуд, аммо ҳоло дар Кубернетес нигаҳдории он тавре сохта шудааст, ки бо истифода аз усули умумӣ нусхабардории диск имконнопазир аст. Ба наздикӣ дар стандарт - дар версияи охирин Мушаххасоти CSI — мо суратхои лентаро имконпазир сохтем, аммо он дар кучо ба амал бароварда мешавад? Ростӣ, ҳама чиз то ҳол он қадар хом аст... Мо CSI-ро дар болои AWS, GCE, Azure, vSphere месанҷем, аммо ҳамин ки шумо ба истифодаи он шурӯъ мекунед, мебинед, ки он ҳанӯз омода нест.

NS: Аз ин рӯ, мо баъзан маҷбур мешавем, ки ба инфрасохтор такя кунем. Ман фикр мекунам, ки ин ҳанӯз марҳилаи аввал аст - дардҳои афзоянда. Савол: Шумо ба навовароне, ки мехоҳанд PgSQL-ро дар K8s санҷанд, чӣ маслиҳат медиҳед? Кадом оператор шояд?

DS: Мушкилот дар он аст, ки Postgres барои мо 3% аст. Мо инчунин рӯйхати хеле калони нармафзори гуногунро дар Кубернетес дорем, ман ҳатто ҳама чизро номбар намекунам. Масалан, Elasticsearch. Бисёр операторҳо ҳастанд: баъзеҳо фаъолона инкишоф меёбанд, дигарон нестанд. Мо барои худ талаботҳоеро тартиб додаем, ки оператор бояд чиро дошта бошад, то мо онро ҷиддӣ қабул кунем. Дар оператори махсус барои Kubernetes - на дар "оператор барои иҷрои коре дар шароити Amazon"... Дар асл, мо хеле васеъ (= қариб ҳамаи муштариён) як операторро истифода мебарем - барои Redis (ба наздикӣ дар бораи ӯ мақола нашр хоҳем кард).

NS: Ва на барои MySQL? Ман медонам, ки Percona... азбаски онҳо ҳоло дар MySQL, MongoDB ва Postgres кор мекунанд, онҳо бояд як навъ ҳалли универсалӣ эҷод кунанд: барои ҳама пойгоҳи додаҳо, барои ҳама провайдерҳои абр.

DS: Мо барои дидани операторҳои MySQL вақт надорем. Ин ҳоло диққати асосии мо нест. MySQL дар алоҳидагӣ хуб кор мекунад. Чаро операторро истифода баред, агар шумо танҳо як пойгоҳи додаҳоро оғоз кунед ... Шумо метавонед як контейнери Docker-ро бо Postrges оғоз кунед ё шумо метавонед онро ба таври оддӣ оғоз кунед.

NS: Дар ин бора хам саволе буд. Умуман оператор нест?

DS: Бале, 100% мо PostgreSQL дорем, ки бидуни оператор кор мекунанд. То хол. Мо операторро барои Prometheus ва Redis фаъолона истифода мебарем. Мо нақша дорем, ки оператореро барои Elasticsearch пайдо кунем - ин операторест, ки аз ҳама бештар "дар оташ" аст, зеро мо мехоҳем онро дар 100% ҳолатҳо дар Кубернетес насб кунем. Ҳамон тавре ки мо мехоҳем боварӣ ҳосил кунем, ки MongoDB низ ҳамеша дар Kubernetes насб карда мешавад. Дар ин ҷо хоҳишҳои муайян пайдо мешаванд - эҳсосе вуҷуд дорад, ки дар ин ҳолатҳо коре кардан мумкин аст. Ва мо ҳатто ба Postgres нигоҳ накардаем. Албатта, мо медонем, ки вариантҳои гуногун вуҷуд доранд, аммо дар асл мо як мустақил дорем.

DB барои санҷиш дар Kubernetes

NS: Биёед ба мавзӯи санҷиш мегузарем. Чӣ гуна тағиротро ба пойгоҳи додаҳо ворид кардан мумкин аст - аз нуқтаи назари DevOps. Микросервисҳо вуҷуд доранд, пойгоҳи додаҳои зиёде мавҷуданд, ҳама вақт чизе дар ҷое тағир меёбад. Чӣ гуна бояд CI/CD-и муқаррариро таъмин кард, то ҳама чиз аз нуқтаи назари DBMS мувофиқ бошад. Муносибати шумо чист?

DS: Як ҷавоб буда наметавонад. Якчанд вариант вуҷуд дорад. Якум ин андозаи пойгоҳест, ки мо мехоҳем онро паҳн кунем. Шумо худатон қайд кардед, ки ширкатҳо нисбати доштани нусхаи пойгоҳи додаҳои маҳсулот дар таҳия ва саҳна муносибати гуногун доранд.

NS: Ва дар шароити РДГ, ба фикрам, онхо торафт бештар эхтиёткорона рафтор мекунанд... Метавонам бигуям, ки дар Европа аллакай ба чарима андохтан шуруъ кардаанд.

DS: Аммо аксар вақт шумо метавонед нармафзореро нависед, ки партовҳоро аз истеҳсолот мегирад ва онро парешон мекунад. Маълумоти маҳсулот ба даст оварда мешавад (тасвири фаврӣ, партов, нусхаи дуӣ...), аммо он беном аст. Ба ҷои ин, метавонанд скриптҳои насли вуҷуд дошта бошанд: инҳо метавонанд асбобҳо ё танҳо скрипт бошанд, ки пойгоҳи додаҳои калонро тавлид мекунанд. Масъала ин аст: барои эҷоди тасвири асосӣ чӣ қадар вақт лозим аст? Ва барои ҷойгир кардани он дар муҳити дилхоҳ чӣ қадар вақт лозим аст?

Мо ба як схема омадем: агар муштарӣ маҷмӯи додаҳои собит дошта бошад (версияи ҳадди ақали база), пас мо онҳоро ба таври нобаёнӣ истифода мебарем. Агар мо дар бораи муҳитҳои бознигарӣ сухан ронем, вақте ки мо филиал таъсис додем, мо як мисоли барномаро ҷойгир кардем - мо дар он ҷо як пойгоҳи хурдро паҳн мекунем. Вале хуб шуд интихоб, вақте ки мо як бор дар як рӯз (шабона) аз истеҳсолот партов мегирем ва контейнери Docker бо PostgreSQL ва MySQL бо ин маълумоти боршуда дар асоси он месозем. Агар ба шумо лозим аст, ки пойгоҳи додаҳоро аз ин тасвир 50 маротиба васеъ кунед, ин хеле содда ва зуд анҷом дода мешавад.

NS: Бо нусхабардории оддӣ?

DS: Маълумот бевосита дар тасвири Docker нигоҳ дошта мешавад. Онхое. Мо як тасвири тайёр дорем, ҳарчанд 100 ГБ. Бо шарофати қабатҳои дар Docker, мо метавонем ин тасвирро ба зудӣ ҳарчӣ зудтар ҷойгир кунем. Усул беақл аст, аммо он хуб кор мекунад.

NS: Пас, вақте ки шумо озмоиш мекунед, он дар дохили Docker тағир меёбад, дуруст? Нусхабардорӣ дар дохили Docker - онро партоед ва боз равед, ҳама чиз хуб аст. Класс! Ва оё шумо аллакай онро пурра истифода мебаред?

DS: Ба муддати дуру дароз.

NS: Мо корҳои ба ҳам монандро мекунем. Танҳо мо нусхабардории Docker-ро истифода намебарем, балки чизи дигареро.

DS: Ин умумӣ нест. Ва Docker дар ҳама ҷо кор мекунад.

NS: Дар назария, бале. Аммо мо дар он ҷо модулҳо низ дорем, шумо метавонед модулҳои гуногун созед ва бо системаҳои файлии гуногун кор кунед. Чӣ лаҳзае дар ин ҷо. Аз ҷониби Postgres, мо ба ҳамаи ин ба таври дигар менигарем. Ҳоло ман аз ҷониби Докер нигоҳ кардам ва дидам, ки ҳама чиз барои шумо кор мекунад. Аммо агар базаи маълумотҳо калон бошад, масалан, 1 ТБ, пас ҳамаи ин вақти зиёдро мегирад: амалиёти шабона ва пур кардани ҳама чиз ба Docker... Ва агар 5 TB ба Docker пур карда шавад... Ё ҳама чиз хуб аст?

DS: Фарқият чист: инҳо блобҳо ҳастанд, танҳо битҳо ва байтҳо.

NS: Фарқият ин аст: оё шумо онро тавассути партов ва барқарорсозӣ мекунед?

DS: Ҳеҷ зарурат нест. Усулҳои тавлиди ин тасвир метавонанд гуногун бошанд.

NS: Барои баъзе мизоҷон, мо онро тавре сохтаем, ки ба ҷои мунтазам тавлид кардани тасвири асосӣ, мо онро доимо навсозӣ мекунем. Он аслан нусхабардорӣ аст, аммо он маълумотро на аз устод мустақиман, балки тавассути бойгонӣ мегирад. Архиви бинарӣ, ки дар он WALҳо ҳар рӯз бор карда мешаванд ва дар он ҷо нусхаҳои эҳтиётӣ гирифта мешаванд... Баъдан ин WALҳо бо таъхири андаке (айнан 1-2 сония) ба тасвири асосӣ меоянд. Мо онро бо ҳар роҳ клон мекунем - ҳоло мо ба таври нобаёнӣ ZFS дорем.

DS: Аммо бо ZFS шумо бо як гиреҳ маҳдудед.

NS: Бале. Аммо ZFS низ ҷодугарӣ дорад фиристодан: бо он шумо метавонед як акс фиристед ва ҳатто (ман инро ҳанӯз санҷидаам, аммо...) шумо метавонед як дельтаро байни ду ирсол кунед PGDATA. Дарвоқеъ, мо як асбоби дигаре дорем, ки мо барои чунин вазифаҳо воқеан баррасӣ накардаем. PostgreSQL дорад pg_rewind, ки мисли rsync "интеллектуалӣ" кор мекунад ва бисёр чизҳоеро, ки шумо тамошо кардан лозим нест, гузаред, зеро дар он ҷо ҳеҷ чиз тағир наёфтааст. Мо метавонем синхронизатсияи зудро байни ду сервер анҷом диҳем ва ҳамин тавр ба ақиб гардем.

Ҳамин тавр, аз ин, бештари DBA, мо кӯшиш мекунем, ки асбобе созем, ки ба мо имкон медиҳад ҳамон чизеро, ки шумо гуфтед, иҷро кунем: мо як пойгоҳи додаҳо дорем, аммо мо мехоҳем чизеро 50 маротиба, тақрибан ҳамзамон санҷем.

DS: 50 маротиба маънои онро дорад, ки шумо бояд 50 нусхаи Spot фармоиш диҳед.

NS: Не, мо хама корро дар як дастгох ичро мекунем.

DS: Аммо чӣ гуна шумо 50 маротиба васеъ мекунед, агар ин як базаи маълумот, масалан, терабайт бошад. Эҳтимол ба ӯ 256 ГБ хотираи RAM лозим аст?

NS: Бале, баъзан ба шумо хотираи зиёд лозим аст - ин муқаррарӣ аст. Аммо ин аз хаёт мисол аст. Мошини истеҳсолӣ 96 ядро ​​ва 600 ГБ дорад. Дар айни замон, барои базаи маълумот 32 ядро ​​(ҳатто 16 ядро ​​​​ҳоло баъзан) ва хотираи 100-120 ГБ истифода мешавад.

DS: Ва 50 нусха ба он ҷо мувофиқат мекунад?

NS: Пас, танҳо як нусха вуҷуд дорад, пас copy-on-write (ZFS) кор мекунад ... Ман ба шумо муфассалтар мегӯям.

Масалан, мо базаи 10 TB дорем. Барои он диске сохтанд, ZFS низ андозаи онро 30-40 фоиз фишурдааст. Азбаски мо санҷиши боркуниро анҷом намедиҳем, вақти вокуниши дақиқ барои мо муҳим нест: бигзор он то 2 маротиба сусттар бошад - ин хуб аст.

Мо ба барномасозон, QA, DBA ва ғайра имконият медиҳем. санҷишро дар 1-2 ришта анҷом диҳед. Масалан, онҳо метавонанд як намуди муҳоҷиратро иҷро кунанд. Он якбора 10 ядроро талаб намекунад - он ба 1 пуштибони Postgres, 1 ядро ​​лозим аст. Муҳоҷират оғоз мешавад - шояд автовакуум ҳанӯз оғоз мешавад, пас ядрои дуюм истифода мешавад. Ба мо 16—32 ядро ​​чудо карда шудааст, бинобар ин дар як вакт 10 кас кор карда метавонад, мушкиле нест.

Зеро аз ҷиҳати ҷисмонӣ PGDATA ҳамин тавр, маълум мешавад, ки мо воқеан Постгресро фиреб медиҳем. Ҳилла ин аст: масалан, 10 Postgres ҳамзамон ба кор андохта мешаванд. Мушкилот одатан дар чист? гузоштанд муштарак_буферҳо, фарз кардем 25 фоиз. Мувофиқи он, ин 200 ГБ аст. Шумо наметавонед зиёда аз сетои онҳоро оғоз кунед, зеро хотира тамом мешавад.

Аммо дар баъзе лаҳзаҳо мо фаҳмидем, ки ин зарур нест: мо shared_buffers-ро ба 2 ГБ муқаррар кардем. PostgreSQL дорад Андозаи_кэш_самар, ва дар асл он ягонаест, ки таъсир мерасонад нақшаҳо. Мо онро ба 0,5 ТБ муқаррар кардем. Ва ҳатто муҳим нест, ки онҳо воқеан вуҷуд надоранд: ӯ нақшаҳоро тавре месозад, ки гӯё онҳо вуҷуд доранд.

Муносибат, вақте ки мо ягон намуди муҳоҷиратро месанҷем, мо метавонем ҳама нақшаҳоро ҷамъ кунем - мо мебинем, ки он дар истеҳсолот чӣ гуна мешавад. Сонияҳо дар он ҷо гуногун хоҳанд буд (сусттар), аммо маълумоте, ки мо воқеан мехонем ва худи нақшаҳо (дар он ҷо кадомҳо ҶОИН ҳастанд ва ғайра) маҳз ҳамон тавре ки дар истеҳсолот пайдо мешаванд. Ва шумо метавонед бисёр ин гуна чекҳоро дар як мошин мувозӣ иҷро кунед.

DS: Оё шумо фикр намекунед, ки дар ин ҷо якчанд мушкилот вуҷуд дорад? Аввалин ҳалли он аст, ки танҳо дар PostgreSQL кор мекунад. Ин равиш хеле хусусӣ аст, он умумӣ нест. Дуюм ин аст, ки Кубернетес (ва ҳама чизе, ки технологияҳои абрӣ ҳоло ба он ҷо мераванд) гиреҳҳои зиёдеро дар бар мегиранд ва ин гиреҳҳо муваққатӣ мебошанд. Ва дар ҳолати шумо ин гиреҳи давлатӣ ва доимист. Ин чизҳо маро ихтилоф мекунанд.

NS: Аввалан, ман розӣ ҳастам, ки ин як ҳикояи комилан Postgres аст. Ман фикр мекунам, ки агар мо ягон намуди IO-и мустақим ва ҳавзи буферӣ барои қариб ҳама хотира дошта бошем, ин равиш кор намекунад - нақшаҳо гуногун хоҳанд буд. Аммо ҳоло мо танҳо бо Postgres кор мекунем, мо дар бораи дигарон фикр намекунем.

Дар бораи Кубернетес. Шумо худатон ба мо дар ҳама ҷо мегӯед, ки мо базаи доимӣ дорем. Агар инстансия ноком шавад, чизи асосӣ захира кардани диск аст. Дар ин ҷо мо инчунин тамоми платформаро дар Кубернетес дорем ва ҷузъи Postgres алоҳида аст (гарчанде ки он рӯзе дар он ҷо хоҳад буд). Аз ин рӯ, ҳама чиз чунин аст: инстансия афтод, аммо мо PV-и онро захира кардем ва танҳо онро ба дигар (нав) пайваст кардем, гӯё ҳеҷ чиз рӯй надода бошад.

DS: Аз нуқтаи назари ман, мо дар Кубернетес pods эҷод мекунем. K8s - эластикӣ: гиреҳҳо мувофиқи зарурат фармоиш дода мешаванд. Вазифа аз он иборат аст, ки танҳо як подкаст эҷод кунед ва бигӯед, ки ба он миқдори X захираҳо лозим аст ва он гоҳ K8s онро мустақилона муайян мекунад. Аммо дастгирии нигоҳдорӣ дар Kubernetes то ҳол ноустувор аст: 1.16дар дохили 1.17 (ин нашр нашр шуд аз ҳафта пеш) ин хусусиятҳо танҳо бета мешаванд.

Шаш мох то як сол мегузарад — он каму беш устувор мешавад ва ё акаллан хамин тавр эълон карда мешавад. Он гоҳ имкони аксбардорӣ ва тағир додани андоза мушкилоти шуморо комилан ҳал мекунад. Зеро шумо база доред. Бале, он метавонад хеле зуд набошад, аммо суръат аз он чизе, ки "дар зери сарпӯш" аст, вобаста аст, зеро баъзе татбиқҳо метавонанд дар сатҳи зерсистемаи диск нусхабардорӣ ва нусхабардорӣ кунанд.

NS: Инчунин барои ҳамаи муҳаррикҳо (Amazon, Google...) зарур аст, ки дастгирии ин версияро оғоз кунанд - ин ҳам каме вақт мегирад.

DS: Мо хануз онхоро истифода намебарем. Мо худамонро истифода мебарем.

Рушди маҳаллӣ барои Kubernetes

NS: Оё шумо ба чунин хохиш дучор омадаед, ки ба шумо лозим меояд, ки хамаи под-рядхоро дар як дастгох васл карда, чунин озмоиши хурде гузаронед. Барои зуд ба даст овардани далели консепсия, бубинед, ки барнома дар Kubernetes кор мекунад, бидуни ҷудо кардани як қатор мошинҳо барои он. Миникубе ҳаст, дуруст?

DS: Ба назари ман, ин парванда, ки дар як гиреҳ ҷойгир шудааст, танҳо ба рушди маҳаллӣ дахл дорад. Ё баъзе зуҳуроти чунин намуна. Бихӯред Миникубе, вуҷуд дорад k3s, КИНД. Мо ба сӯи истифодаи Kubernetes IN Docker ҳаракат мекунем. Ҳоло мо бо он барои санҷишҳо кор кардем.

NS: Ман пештар фикр мекардам, ки ин як кӯшиши печонидани ҳамаи подкҳо дар як тасвири Docker аст. Аммо маълум шуд, ки ин дар бораи чизи тамоман дигар меравад. Ба ҳар ҳол, дар Docker контейнерҳои алоҳида, қуттиҳои алоҳида мавҷуданд.

DS: Бале. Ва як тақлиди хеле хандаовар вуҷуд дорад, аммо маънои ин аст ... Мо як утилита барои ҷойгиркунӣ дорем - верф. Мо мехоҳем онро ба ҳолати шартӣ табдил диҳем werf up: "Ба ман Кубернетҳои маҳаллӣ гиред." Ва он гоҳ шартро дар он ҷо иҷро кунед werf follow. Он гоҳ таҳиякунанда метавонад IDE-ро таҳрир кунад ва дар система раванде оғоз мешавад, ки тағиротро мебинад ва тасвирҳоро аз нав барқарор мекунад ва онҳоро ба K8-ҳои маҳаллӣ дубора ҷойгир мекунад. Мо барои халли масъалаи ободонии махалхо хамин тавр кушиш кардан мехохем.

Суратҳо ва клонкунии пойгоҳи додаҳо дар воқеияти K8s

NS: Агар мо ба нусхабардорй баргардем. Ман пайхас кардам, ки абрҳо низ аксҳо доранд. Онҳо ба таври дигар кор мекунанд. Масалан, дар GCP: шумо дар соҳили шарқии Иёлоти Муттаҳида як мисоли бисёртерабайт доред. Шумо давра ба давра акс мегиред. Шумо як нусхаи дискро дар соҳили ғарбӣ аз аксбардорӣ мегиред - пас аз чанд дақиқа ҳама чиз омода аст, он хеле зуд кор мекунад, танҳо кэш бояд дар хотира пур карда шавад. Аммо ин клонҳо (тасвирҳо) барои "таъмин кардани" як ҷилди нав мебошанд. Ин хеле хуб аст, вақте ки шумо бояд мисолҳои зиёде эҷод кунед.

Аммо барои санҷишҳо, ба назарам чунин менамояд, ки аксҳое, ки шумо дар бораи онҳо дар Docker гап мезанед ё ман дар ZFS, btrfs ва ҳатто LVM гап мезанед... - онҳо ба шумо имкон медиҳанд, ки дар як мошин маълумоти воқеан нав эҷод накунед. Дар абр шумо ба ҳар ҳол барои онҳо ҳар дафъа пардохт хоҳед кард ва на сонияҳо, балки дақиқаҳоро интизор шавед (ва дар сурати бори танбал, эҳтимолан соат).

Ба ҷои ин, шумо метавонед ин маълумотро дар як ё ду сония ба даст оред, санҷишро иҷро кунед ва онро партоед. Ин аксҳо мушкилоти гуногунро ҳал мекунанд. Дар ҳолати аввал - васеъ кардан ва гирифтани нусхаҳои нав, ва дар дуюм - барои санҷишҳо.

DS: Ман розӣ нестам. Кори дурусти клонкунии ҳаҷм вазифаи абр аст. Ман ба татбиқи онҳо нигоҳ накардаам, аммо ман медонам, ки мо онро дар сахтафзор чӣ гуна мекунем. Мо Ceph дорем, он ба ҳама гуна ҳаҷми физикӣ имкон медиҳад (РБД) мегуянд Clone ва ҷилди дуюмро бо ҳамон хусусиятҳо дар даҳҳо миллисонияҳо ба даст оред, IOPS'ами ва гайра. Шумо бояд фаҳмед, ки дар дохили он як нусхаи ҳассос дар навиштан вуҷуд дорад. Чаро абр набояд ҳамин тавр кунад? Ман боварӣ дорам, ки онҳо кӯшиш мекунанд, ки ин ё он роҳро иҷро кунанд.

NS: Аммо барои эҷод кардани як мисол, ба он ҷо овардани Docker ва ғайра ба онҳо сонияҳо, даҳҳо сония лозим аст.

DS: Чаро як мисоли пурраро бардоштан лозим аст? Мо як мисол дорем, ки 32 ядро ​​дорад, 16... ва он метавонад ба он мувофиқат кунад - масалан, чаҳор. Вақте ки мо ба панҷум фармоиш медиҳем, инстансия аллакай бардошта мешавад ва он гоҳ он нест карда мешавад.

NS: Бале, ҷолиб, Кубернетес як ҳикояи дигар мешавад. Пойгоҳи мо дар K8s нест ва мо як мисол дорем. Аммо клон кардани базаи бисёртерабайтӣ на бештар аз ду сонияро мегирад.

DS: Ин бузург аст. Аммо нуқтаи ибтидоии ман ин аст, ки ин як ҳалли умумӣ нест. Бале, ин хуб аст, аммо он танҳо барои Postgres ва танҳо дар як гиреҳ мувофиқ аст.

NS: Он на танҳо барои Postgres мувофиқ аст: ин нақшаҳо, тавре ки ман тавсиф кардам, танҳо дар он кор хоҳанд кард. Аммо агар мо дар бораи нақшаҳо ташвиш надиҳем ва ба мо танҳо тамоми маълумот барои санҷиши функсионалӣ лозим аст, пас ин барои ҳама гуна DBMS мувофиқ аст.

DS: Чанд сол пеш мо дар аксҳои LVM як чизи шабеҳро анҷом дода будем. Ин як классикӣ аст. Ин усул хеле фаъолона истифода мешуд. Гиреҳҳои давлатӣ танҳо дардоваранд. Барои он ки шумо набояд онҳоро тарк кунед, шумо бояд ҳамеша онҳоро дар хотир доред ...

NS: Оё шумо дар ин ҷо ягон имконияти гибридиро мебинед? Биёед бигӯем, ки давлатдор як навъ подкаст аст, он барои якчанд одамон кор мекунад (бисёр озмоишгарон). Мо як ҷилд дорем, аммо ба шарофати системаи файлӣ, клонҳо маҳаллӣ мебошанд. Агар поддон афтад, аммо диск боқӣ монад, поддон баланд мешавад, маълумотро дар бораи ҳамаи клонҳо ҳисоб мекунад, ҳама чизро аз нав бардошта ва мегӯяд: "Инак клонҳои шумо дар ин портҳо кор мекунанд, бо онҳо кор карданро идома диҳед."

DS: Аз ҷиҳати техникӣ ин маънои онро дорад, ки дар дохили Кубернетес он як подделест, ки мо дар дохили он бисёр Postgres идора мекунем.

NS: Бале. Вай маҳдудият дорад: бигӯед, ки дар як вақт бо ӯ бештар аз 10 нафар кор мекунанд. Агар ба шумо 20 адад лозим бошад, мо як порчаи дуюмро ба кор меандозем. Мо онро пурра клон мекунем ва ҷилди дуюми пурраро гирифта, он ҳамон 10 клони "лоғар" хоҳад дошт. Оё шумо ин фурсатро намебинед?

DS: Мо бояд дар ин ҷо масъалаҳои амниятро илова кунем. Ин навъи созмон маънои онро дорад, ки ин подкаст дорои имтиёзҳои (имкониятҳои) баланд аст, зеро он метавонад дар системаи файлӣ амалиёти ғайристандартиро иҷро кунад... Аммо такрор мекунам: ман боварӣ дорам, ки дар муддати миёна онҳо нигоҳдорӣ дар Кубернетесро ислоҳ мекунанд ва дар абрҳо онҳо тамоми ҳикояро бо ҷилдҳо ислоҳ мекунанд - ҳама чиз "фақат кор мекунад". Ҳаҷм тағир дода мешавад, клонизатсия мешавад... Ҳаҷм вуҷуд дорад - мо мегӯем: "Дар асоси он як нав созед" ва пас аз якуним сония мо чизи лозимаро мегирем.

NS: Ман ба якуним сония барои терабайтҳои зиёд бовар намекунам. Дар бораи Ceph шумо худатон ин корро мекунед, аммо шумо дар бораи абрҳо гап мезанед. Ба абр равед, клони ҳаҷми бисёртерабайтии EBS-ро дар EC2 созед ва бубинед, ки иҷрои он чӣ гуна хоҳад буд. Ин чанд сонияро намегирад. Ман хеле шавқ дорам, ки онҳо кай ба ин дараҷа мерасанд. Ман мефаҳмам, ки шумо чӣ мегӯед, аммо ман хоҳиш мекунам, ки фарқ кунам.

DS: Хуб, аммо ман дар муддати миёна гуфтам, на кӯтоҳмуддат. Дар давоми якчанд сол.

Дар бораи оператори PostgreSQL аз Zalando

Дар мобайни ин вохӯрӣ Алексей Клюкин, таҳиягари собиқ аз Заландо низ ба он ҳамроҳ шуда, дар бораи таърихи оператори PostgreSQL сухан гуфт:

Ин хеле хуб аст, ки ба ин мавзӯъ дар маҷмӯъ дахл дорад: ҳам Postgres ва ҳам Кубернетес. Вақте ки мо онро дар Заландо дар 2017 оғоз кардем, ин мавзӯъе буд, ки ҳама мехостанд кор кунанд, аммо ҳеҷ кас ин корро накард. Ҳама аллакай Kubernetes доштанд, аммо вақте ки онҳо пурсиданд, ки бо пойгоҳи додаҳо чӣ кор кардан лозим аст, ҳатто одамон маъқуланд Келси Хайтауэр, ки К8сро мавъиза мекард, чунин гуфт:

"Ба хидматҳои идорашаванда биравед ва онҳоро истифода баред, пойгоҳи додаҳоро дар Kubernetes иҷро накунед. Дар акси ҳол, K8-ҳои шумо тасмим мегиранд, ки навсозӣ кунанд, ҳама гиреҳҳоро хомӯш кунанд ва маълумоти шумо ба дур ва дур парвоз мекунанд.

Мо тасмим гирифтем, ки операторе созем, ки бар хилофи ин маслиҳат, дар Кубернетес пойгоҳи додаҳои Postgres-ро оғоз кунад. Ва мо як сабаби хубе доштем - Патрони. Ин нокомии худкор барои PostgreSQL аст, ки дуруст анҷом дода мешавад, яъне. бо истифода аз etcd, consul ё ZooKeeper ҳамчун нигаҳдории маълумот дар бораи кластер. Чунин як анборе, ки ба ҳар касе, ки масалан, раҳбари кунунӣ чист, мепурсад, ҳамон як маълумотро медиҳад - сарфи назар аз он ки мо ҳама чизро тақсим кардаем - ба тавре ки мағзи тақсимшавӣ вуҷуд надорад. Илова бар ин, мо доштем Тасвири Docker барои ӯ.

Умуман, эҳтиёҷоти ширкат ба нокомии худкор пас аз гузаштан аз маркази додаҳои сахтафзори дохилӣ ба абр пайдо шуд. Абр ба ҳалли хусусии PaaS (Platform-as-a-Service) асос ёфтааст. Ин сарчашмаи кушода аст, аммо барои ба кор андохтани он кори зиёде лозим буд. Онро даъват карданд СУТПХО.

Дар аввал, Кубернетес вуҷуд надошт. Аниқтараш, вақте ки ҳалли худи мо ҷойгир карда шуд, К8ҳо аллакай вуҷуд доштанд, аммо он чунон хом буд, ки барои истеҳсол мувофиқ набуд. Ин, ба назари ман, 2015 ё 2016 буд. То соли 2017, Кубернетес кам ё камтар баркамол шуд - ба он ҷо муҳоҷират кардан лозим буд.

Ва мо аллакай як контейнери Docker доштем. PaaS мавҷуд буд, ки Docker-ро истифода мекард. Чаро K8-ро санҷед? Чаро оператори худро нанависед? Мурат Қобилов, ки аз Авито ба мо омада буд, инро ҳамчун лоиҳа бо ташаббуси худ - "бозӣ кардан" оғоз кард ва лоиҳа "баромад".

Аммо дар маҷмӯъ, ман мехостам дар бораи AWS сӯҳбат кунам. Чаро рамзи таърихии AWS алоқаманд буд ...

Вақте ки шумо дар Кубернетес ягон кореро иҷро мекунед, шумо бояд фаҳмед, ки K8s чунин кор дар пеш аст. Он мунтазам инкишоф меёбад, такмил меёбад ва гох-гох вайрон мешавад. Шумо бояд ҳама тағиротҳоро дар Кубернетес бодиққат нигоҳ доред, шумо бояд омода бошед, ки дар сурати рух додани чизе ба он ғарқ шавед ва фаҳмед, ки он чӣ гуна кор мекунад - шояд бештар аз он ки шумо мехоҳед. Ин, аслан, ба ҳама платформаҳое дахл дорад, ки шумо дар он пойгоҳи додаҳои худро идора мекунед...

Ҳамин тавр, вақте ки мо изҳорот дод, мо Postgres дар ҳаҷми беруна кор мекардем (дар ин ҳолат EBS, зеро мо дар AWS кор мекардем). Махзани маълумот калон шуд, дар баъзе мавридҳо андозаи онро тағир додан лозим омад: масалан, андозаи ибтидоии EBS 100 TB буд, базаи маълумот ба он калон шуд, ҳоло мо мехоҳем EBS 200 TB созем. Чӣ хел? Фарз мекунем, ки шумо метавонед дар як мисоли нав партов/барқароркуниро анҷом диҳед, аммо ин вақти зиёдро мегирад ва вақти бекориро дар бар мегирад.

Аз ин рӯ, ман мехостам тағир додани андозае дошта бошам, ки қисмати EBS-ро васеъ кунад ва сипас ба системаи файлӣ бигӯяд, ки фазои навро истифода барад. Ва мо ин корро кардем, аммо дар он вақт Кубернетес барои тағир додани андоза API надошт. Азбаски мо дар AWS кор мекардем, мо барои API-и он код навиштем.

Ҳеҷ кас шуморо аз ин кор барои платформаҳои дигар бозмедорад. Дар изҳорот ягон ишорае вуҷуд надорад, ки онро танҳо дар AWS иҷро кардан мумкин аст ва он дар ҳама чизи дигар кор намекунад. Умуман, ин як лоиҳаи кушодаасос аст: агар касе мехоҳад пайдоиши истифодаи API-и навро суръат бахшад, хуш омадед. Бихӯред GitHub, кашидани дархостҳо - дастаи Zalando мекӯшад, ки ба онҳо зуд ҷавоб диҳад ва операторро пешбарӣ кунад. То ҷое ки ман медонам, лоиҳа иштирок карданд дар Google Summer of Code ва баъзе дигар ташаббусҳои шабеҳ. Заландо дар он хеле фаъолона кор карда истодааст.

PS бонус!

Агар шумо ба мавзӯи PostgreSQL ва Kubernetes таваҷҷӯҳ дошта бошед, лутфан қайд кунед, ки сешанбеи навбатии Postgres ҳафтаи гузашта баргузор шуд, ки ман бо Николай сӯҳбат кардам. Александр Кукушкин аз Заландо. Видео аз он дастрас аст дар ин ҷо.

PPS

Инчунин дар блоги мо хонед:

Манбаъ: will.com

Илова Эзоҳ