Сабтҳо дар Кубернетес (ва на танҳо) имрӯз: интизориҳо ва воқеият

Сабтҳо дар Кубернетес (ва на танҳо) имрӯз: интизориҳо ва воқеият

Он соли 2019 аст ва мо то ҳол ҳалли стандартиро барои ҷамъоварии гузоришҳо дар Кубернетес надорем. Дар ин мақола мо мехоҳем бо истифода аз мисолҳо аз таҷрибаи воқеӣ дар бораи ҷустуҷӯҳо, мушкилоти дучоршуда ва роҳҳои ҳалли онҳо мубодила кунем.

Аммо, аввал, ман фармоиш медиҳам, ки муштариёни гуногун бо ҷамъоварии гузоришҳо чизҳои хеле гуногунро мефаҳманд:

  • касе мехоҳад гузоришҳои амниятӣ ва аудитиро бубинад;
  • касе - бақайдгирии мутамаркази тамоми инфрасохтор;
  • ва барои баъзеҳо, ҷамъоварӣ кардани танҳо гузоришҳои барномаҳо, ба истиснои, масалан, мувозинатҳо кифоя аст.

Дар зер буриши зер дар бораи он, ки мо "рӯйхатҳои хоҳишҳо"-и гуногунро чӣ гуна амалӣ кардем ва бо кадом мушкилот дучор шудем.

Назария: дар бораи асбобҳои бақайдгирӣ

Маълумот дар бораи ҷузъҳои системаи бақайдгирӣ

Тайёркунй рохи дуру дарозеро тай кардааст, ки дар натичаи он методологияи чамъоварй ва тахлили журналхо кор карда баромада шудааст, ки мо имруз аз он истифода мебарем. Ҳанӯз дар солҳои 1950-ум, Фортран як аналоги ҷараёнҳои стандартии вуруд/барориро ҷорӣ кард, ки ба барномасоз дар ислоҳи барномаи худ кӯмак кард. Инҳо аввалин гузоришҳои компютерӣ буданд, ки ҳаёти барномасозони он замонҳоро осон мекарданд. Имрӯз мо дар онҳо ҷузъи якуми системаи дарахтбуриро мебинем - сарчашма ё «истеҳсолкунандаи» гузоришҳо.

Информатика дар як чо намеистод: шабакахои хисоббарорй пайдо шуданд, аввалин кластерхо... Системахои мураккабе, ки аз якчанд компютер иборат буд, ба кор даромад. Акнун маъмурони система маҷбур шуданд, ки гузоришҳоро аз якчанд мошин ҷамъоварӣ кунанд ва дар ҳолатҳои махсус онҳо метавонанд паёмҳои ядрои ОС-ро илова кунанд, агар онҳо барои тафтиши нокомии система зарур бошанд. Барои тавсифи системаҳои мутамаркази ҷамъоварии гузоришҳо, дар аввали солҳои 2000-ум интишор карда шуд RFC 3164, ки remote_syslog-ро стандартӣ кардааст. Ин аст, ки як ҷузъи муҳими дигар пайдо шуд: коллектори журнал ва нигаҳдории онҳо.

Бо афзоиши ҳаҷми гузоришҳо ва васеъ ҷорӣ намудани технологияҳои веб, саволе ба миён омад, ки кадом гузоришҳо бояд ба корбарон қулай нишон дода шаванд. Асбобҳои оддии консол (awk/sed/grep) бо асбобҳои пешрафта иваз карда шуданд тамошобинонро сабт кунед - ҷузъи сеюм.

Аз сабаби зиёд шудани хачми чубу тахта боз як чизи дигар маълум шуд: чубу тахта лозим аст, вале на хамаи онхо. Ва логҳои гуногун сатҳи нигоҳдории гуногунро талаб мекунанд: баъзеҳо метавонанд дар як рӯз гум шаванд, дар ҳоле ки дигарон бояд барои 5 сол нигоҳ дошта шаванд. Ҳамин тавр, ҷузъе барои филтр ва масири ҷараёнҳои додаҳо ба системаи сабти ном илова карда шуд - биёед онро даъват кунем филтр кардан.

Нигоҳдорӣ инчунин як ҷаҳиши бузург ба даст овард: аз файлҳои муқаррарӣ ба пойгоҳи додаҳои релятсионӣ ва сипас ба нигаҳдории ба ҳуҷҷат нигаронидашуда (масалан, Elasticsearch). Ҳамин тариқ, анбор аз коллектор ҷудо карда шуд.

Дар ниҳоят, худи мафҳуми журнал ба як навъ ҷараёни абстрактии рӯйдодҳо, ки мо мехоҳем барои таърих нигоҳ дорем, густариш ёфт. Дурусттар, дар сурати зарурати гузаронидани тафтишот ё тартиб додани хулосаи таҳлилӣ...

Дар натиҷа, дар як муддати нисбатан кӯтоҳ ҷамъоварии логҳо ба зерсистемаи муҳим табдил ёфт, ки онро ба таври ҳақиқӣ яке аз зербахшҳои Big Data номидан мумкин аст.

Сабтҳо дар Кубернетес (ва на танҳо) имрӯз: интизориҳо ва воқеият
Агар як вактхо чопи оддй барои «системаи кад-кабулкунй» кифоя бошад, холо вазъият хеле тагьир ёфтааст.

Кубернетҳо ва гузоришҳо

Вақте ки Кубернетес ба инфрасохтор омад, мушкилоти мавҷудаи ҷамъоварии гузоришҳо низ онро фаро нагирифт. Аз баъзе ҷиҳатҳо, он боз ҳам дардноктар шуд: идоракунии платформаи инфрасохторӣ на танҳо содда карда шуд, балки дар айни замон мураккаб буд. Бисёре аз хидматҳои кӯҳна ба микросервисҳо гузаштанд. Дар заминаи гузоришҳо, ин дар афзоиши шумораи манбаъҳои гузоришҳо, давраи махсуси ҳаёти онҳо ва зарурати пайгирии муносибатҳои ҳамаи ҷузъҳои система тавассути гузоришҳо инъикос меёбад...

Ба пеш нигоҳ карда, ман гуфта метавонам, ки ҳоло, мутаассифона, барои Кубернетес ягон варианти стандартикунонидашудаи бақайдгирӣ вуҷуд надорад, ки бо ҳама дигарон муқоиса карда шавад. Нақшаҳои маъмултарин дар ҷомеа инҳоянд:

  • касе стекро мекушояд ЭФК (Elasticsearch, Fluentd, Kibana);
  • касе кӯшиш мекунад, ки ба наздикӣ баровардашуда Локӣ ё истифода мебарад Оператори бақайдгирӣ;
  • нас (ва шояд на танҳо мо? ..) Ман аз рушди худам қаноатмандам - логистика...

Чун қоида, мо бастаҳои зеринро дар кластерҳои K8s истифода мебарем (барои ҳалли худидоракунӣ):

Аммо, ман дар бораи дастурҳо оид ба насб ва конфигуратсияи онҳо таваққуф намекунам. Ба ҷои ин, ман ба камбудиҳои онҳо ва хулосаҳои глобалии бештар дар бораи вазъи гузоришҳо диққат медиҳам.

Бо гузоришҳо дар K8s машқ кунед

Сабтҳо дар Кубернетес (ва на танҳо) имрӯз: интизориҳо ва воқеият

"Гузори ҳаррӯза", шумо чанд нафаред?..

Ҷамъоварии мутамаркази гузоришҳо аз инфрасохтори хеле калон захираҳои зиёдеро талаб мекунад, ки онҳо барои ҷамъоварӣ, нигоҳдорӣ ва коркарди гузоришҳо сарф мешаванд. Ҳангоми амалисозии лоиҳаҳои гуногун, мо бо талаботҳои гуногун ва мушкилоти амалиётӣ, ки аз онҳо бармеоянд, дучор омадем.

Биёед ClickHouse-ро санҷем

Биёед нигоҳдории мутамаркази лоиҳаро бо барномае бубинем, ки гузоришҳоро хеле фаъол тавлид мекунад: зиёда аз 5000 сатр дар як сония. Биёед бо гузоришҳои ӯ кор карда, онҳоро ба ClickHouse илова кунем.

Ҳамин ки ҳадди аксар вақти воқеӣ лозим аст, сервери 4-аслӣ бо ClickHouse аллакай дар зерсистемаи диск аз ҳад зиёд бор карда мешавад:

Сабтҳо дар Кубернетес (ва на танҳо) имрӯз: интизориҳо ва воқеият

Ин навъи боркунӣ аз он сабаб аст, ки мо кӯшиш мекунем, ки дар ClickHouse ҳарчи зудтар нависем. Ва базаи маълумот ба ин бо зиёд шудани сарбории диск вокуниш нишон медиҳад, ки метавонад боиси хатогиҳои зерин гардад:

DB::Exception: Too many parts (300). Merges are processing significantly slower than inserts

Пойнт аст, ки Ҷадвалҳои MergeTree дар ClickHouse (онҳо дорои маълумоти гузориш мебошанд) ҳангоми амалиёти навиштан душвориҳои худро доранд. Маълумоте, ки ба онҳо ворид карда мешавад, қисмати муваққатиро тавлид мекунад, ки баъдан бо ҷадвали асосӣ муттаҳид карда мешавад. Дар натиҷа, сабт дар диск хеле серталаб мешавад ва он инчунин ба маҳдудияте вобаста аст, ки мо дар бораи боло огоҳӣ гирифтем: дар 1 сония на бештар аз 300 зербахшҳоро муттаҳид кардан мумкин нест (воқеан, ин 300 замима аст. дар як сония).

Барои пешгирӣ аз ин рафтор, бояд ба ClickHouse нависед дар қисмҳои калон ва на бештар аз 1 маротиба дар 2 сония. Аммо, навиштан бо таркишҳои калон нишон медиҳад, ки мо бояд дар ClickHouse камтар нависем. Ин, дар навбати худ, метавонад боиси пур шудани буфер ва талафи гузоришҳо гардад. Ҳалли ин зиёд кардани буфери Fluentd аст, аммо пас аз он истеъмоли хотира низ афзоиш хоҳад ёфт.

эрод гирифтан: Ҷанбаи дигари мушкилоти ҳалли мо бо ClickHouse бо он алоқаманд буд, ки тақсимот дар парвандаи мо (loghouse) тавассути ҷадвалҳои берунии пайвастшуда амалӣ карда мешавад. Ҷадвалро якҷоя кунед. Ин ба он оварда мерасонад, ки ҳангоми интихоби фосилаҳои зиёди вақт, RAM аз ҳад зиёд талаб карда мешавад, зеро метатаблиц тавассути ҳама қисмҳо такрор мешавад - ҳатто онҳое, ки баръало маълумоти заруриро дар бар намегиранд. Аммо, ҳоло ин равишро метавон бехатар барои версияҳои ҷории ClickHouse кӯҳна эълон кард (c 18.16).

Дар натиҷа, маълум мешавад, ки на ҳар як лоиҳа захираҳои кофӣ барои ҷамъоварии гузоришҳо дар вақти воқеӣ дар ClickHouse дорад (аниқтараш, тақсимоти онҳо мувофиқат намекунад). Илова бар ин, шумо бояд истифода баред аккумулятор, ки мо дертар ба он бармегардем. Ҳодисаи дар боло тавсифшуда воқеӣ аст. Ва он вақт мо натавонистем як ҳалли боэътимод ва устувореро пешниҳод кунем, ки ба муштарӣ мувофиқ бошад ва ба мо имкон диҳад, ки гузоришҳоро бо таъхири камтарин ҷамъоварӣ кунем...

Дар бораи Elasticsearch чӣ гуфтан мумкин аст?

Elasticsearch маълум аст, ки сарбории вазнинро идора мекунад. Биёед онро дар ҳамон лоиҳа санҷем. Акнун сарборӣ чунин менамояд:

Сабтҳо дар Кубернетес (ва на танҳо) имрӯз: интизориҳо ва воқеият

Elasticsearch тавонист ҷараёни маълумотро ҳазм кунад, аммо навиштани чунин ҳаҷмҳо ба он CPU-ро хеле истифода мебарад. Инро ташкили кластер ҳал мекунад. Аз ҷиҳати техникӣ, ин мушкиле нест, аммо маълум мешавад, ки танҳо барои кор кардани системаи ҷамъоварии гузоришҳо мо аллакай тақрибан 8 ядроро истифода мебарем ва дар система як ҷузъи иловагии пурборшуда дорем...

Сатри поён: ин вариантро асоснок кардан мумкин аст, аммо танҳо агар лоиҳа калон бошад ва роҳбарияти он омода бошад, ки захираҳои назаррасро дар системаи мутамаркази бақайдгирӣ сарф кунад.

Пас саволи табии ба миён меояд:

Кадом гузоришҳо воқеан лозиманд?

Сабтҳо дар Кубернетес (ва на танҳо) имрӯз: интизориҳо ва воқеият Биёед кӯшиш кунем, ки худи равишро тағир диҳем: гузоришҳо бояд ҳамзамон иттилоотӣ бошанд ва на фаро гирифта шаванд ҳар як ҳодиса дар система.

Фарз мекунем, ки мо як мағозаи онлайни муваффақ дорем. Кадом сабтҳо муҳиманд? Ҷамъоварии ҳарчи бештари иттилоот, масалан, аз як дарвозаи пардохт, як идеяи олӣ аст. Аммо на ҳама гузоришҳо аз хидмати буридани тасвир дар каталоги маҳсулот барои мо муҳиманд: танҳо хатогиҳо ва мониторинги пешрафта кофӣ мебошанд (масалан, фоизи 500 хатогие, ки ин ҷузъ тавлид мекунад).

Бинобар ин мо ба хулосае омадем, ки кабудизоркунии марказонидашуда на хамеша асоснок аст. Бисёр вақт муштарӣ мехоҳад, ки ҳамаи гузоришҳоро дар як ҷо ҷамъ кунад, гарчанде ки дар асл, аз тамоми гузориш танҳо 5% шартии паёмҳое, ки барои тиҷорат муҳиманд, талаб карда мешаванд:

  • Баъзан он кифоя аст, ки ба танзим дароред, масалан, танҳо андозаи сабти контейнер ва коллектори хатогиҳо (масалан, Sentry).
  • Огоҳии хатогӣ ва як сабти калони маҳаллӣ барои тафтиши ҳодисаҳо кифоя аст.
  • Мо лоиҳаҳое доштем, ки танҳо бо санҷишҳои функсионалӣ ва системаҳои ҷамъоварии хатоҳо кор мекарданд. Ба таҳиякунанда гузоришҳо лозим набуд - онҳо ҳама чизро аз нишонаҳои хатогиҳо диданд.

Иллюстрация аз хаёт

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

Бо сенсори муайянкунии мушкилот - QRadar системаи мутамаркази ҷамъоварии гузоришҳо "дӯстӣ пайдо кардан" лозим буд. Ин система метавонад гузоришҳоро тавассути протоколи syslog қабул кунад ва онҳоро аз FTP барқарор кунад. Аммо, ҳамгироӣ кардани он бо плагини remote_syslog барои fluentd фавран имкон надошт (чунон ки маълум шуд, мо танҳо нестем). Мушкилот дар танзими QRadar аз ҷониби дастаи амниятии муштарӣ пайдо шуд.

Дар натиҷа, як қисми гузоришҳои муҳими тиҷоратӣ ба FTP QRadar бор карда шуд ва қисми дигар тавассути системаҳои дурдаст мустақиман аз гиреҳҳо равона карда шуд. Барои ин мо ҳатто навиштем диаграммаи оддӣ - шояд ин ба касе кӯмак кунад, ки чунин масъаларо ҳал кунад... Ба шарофати схемаи натиҷа, худи муштарӣ гузоришҳои муҳимро қабул ва таҳлил кард (бо истифода аз асбобҳои дӯстдоштаи худ) ва мо тавонистем, ки арзиши системаи дарахтбуриро кам кунем ва танҳо онро сарфа кунем. мохи гузашта.

Мисоли дигар комилан нишон медиҳад, ки чӣ кор кардан лозим нест. Яке аз мизоҷони мо барои коркард ҳар яке рӯйдодҳое, ки аз корбар меоянд, multiline сохта шудаанд истеҳсоли сохторнашуда маълумот дар журнал. Тавре ки шумо тахмин карда метавонед, чунин гузоришҳо ҳам барои хондан ва ҳам нигоҳ доштан бениҳоят нороҳат буданд.

Меъёрҳо барои сабтҳо

Чунин мисолҳо ба хулосае меоянд, ки ба ғайр аз интихоби системаи ҷамъоварии лог, шумо бояд инчунин ло-хахоро худашон тартиб медиханд! Дар ин ҷо чӣ гуна талабот вуҷуд дорад?

  • Гузоришҳо бояд дар формати барои мошин хондашаванда бошанд (масалан, JSON).
  • Гузоришҳо бояд зич бошанд ва қобилияти тағир додани дараҷаи сабткунӣ бо мақсади бартараф кардани мушкилоти эҳтимолӣ дошта бошанд. Ҳамзамон, дар муҳити истеҳсолӣ шумо бояд системаҳоро бо сатҳи сабти ном ба монанди Огоҳӣ ё хатогӣ.
  • Гузоришҳо бояд ба эътидол оварда шаванд, яъне дар объекти журнал, ҳама сатрҳо бояд як навъи майдон дошта бошанд.

Гузоришҳои сохторнашуда метавонад боиси мушкилот бо боркунии гузоришҳо ба анбор ва қатъи пурраи коркарди онҳо гардад. Ҳамчун мисол, ин ҷо як мисоли хатогии 400 аст, ки бисёриҳо дар гузоришҳои флюентӣ дучор омадаанд:

2019-10-29 13:10:43 +0000 [warn]: dump an error event: error_class=Fluent::Plugin::ElasticsearchErrorHandler::ElasticsearchError error="400 - Rejected by Elasticsearch"

Хатогӣ маънои онро дорад, ки шумо майдонеро мефиристед, ки навъи он ба индекс бо харитасозии омода ноустувор аст. Намунаи соддатарин майдонест дар сабти nginx бо тағирёбанда $upstream_status. Он метавонад рақам ё сатр дошта бошад. Барои намуна:

{ "ip": "1.2.3.4", "http_user": "-", "request_id": "17ee8a579e833b5ab9843a0aca10b941", "time": "29/Oct/2019:16:18:57 +0300", "method": "GET", "uri": "/staffs/265.png", "protocol": "HTTP/1.1", "status": "200", "body_size": "906", "referrer": "https://example.com/staff", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36", "request_time": "0.001", "cache_status": "-", "upstream_response_time": "0.001, 0.007", "upstream_addr": "127.0.0.1:9000", "upstream_status": "200", "upstream_response_length": "906", "location": "staff"}
{ "ip": "1.2.3.4", "http_user": "-", "request_id": "47fe42807f2a7d8d5467511d7d553a1b", "time": "29/Oct/2019:16:18:57 +0300", "method": "GET", "uri": "/staff", "protocol": "HTTP/1.1", "status": "200", "body_size": "2984", "referrer": "-", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36", "request_time": "0.010", "cache_status": "-", "upstream_response_time": "0.001, 0.007", "upstream_addr": "10.100.0.10:9000, 10.100.0.11:9000", "upstream_status": "404, 200", "upstream_response_length": "0, 2984", "location": "staff"}

Гузоришҳо нишон медиҳанд, ки сервери 10.100.0.10 бо хатои 404 посух додааст ва дархост ба анбори мундариҷаи дигар фиристода шудааст. Дар натиҷа, арзиш дар гузоришҳо чунин шуд:

"upstream_response_time": "0.001, 0.007"

Ин ҳолат он қадар маъмул аст, ки ҳатто сазовори алоҳидагӣ аст истинодҳо дар ҳуҷҷатҳо.

Дар бораи эътимоднокӣ чӣ гуфтан мумкин аст?

Ҳолатҳое ҳастанд, ки ҳама гузоришҳо бидуни истисно муҳиманд. Ва бо ин, схемаҳои маъмулии ҷамъоварии гузоришҳо барои K8-ҳои дар боло пешниҳодшуда/баррасишуда мушкилот доранд.

Масалан, fluentd наметавонад аз контейнерҳои кӯтоҳмуддат гузоришҳоро ҷамъ кунад. Дар яке аз лоиҳаҳои мо, контейнери интиқоли пойгоҳи додаҳо камтар аз 4 сония зиндагӣ мекард ва сипас нест карда шуд - мувофиқи шарҳи мувофиқ:

"helm.sh/hook-delete-policy": hook-succeeded

Аз ин сабаб, сабти иҷрои муҳоҷират ба анбор дохил карда нашудааст. Дар ин маврид сиёсат кумак карда метавонад. before-hook-creation.

Мисоли дигар ин гардиши журнали Docker мебошад. Фарз мекунем, ки барномае ҳаст, ки ба гузоришҳо фаъолона менависад. Дар шароити муқаррарӣ, мо метавонем ҳамаи гузоришҳоро коркард кунем, аммо баробари пайдо шудани мушкилот - масалан, тавре ки дар боло бо формати нодуруст тавсиф шудааст - коркард қатъ мешавад ва Docker файлро давр мезанад. Натиҷа ин аст, ки гузоришҳои муҳими тиҷоратӣ метавонанд гум шаванд.

Ин аст, ки чаро ҷӯйҳои логро ҷудо кардан муҳим аст, ворид кардани фиристодани арзишмандтаринҳо бевосита ба барнома барои таъмини бехатарии онҳо. Гайр аз ин, сохтани баъзехо зиёдатй намебуд «аккумулятор»-и гузоришҳо, ки метавонад ҳангоми нигоҳ доштани паёмҳои муҳим аз дастрасии мухтасари нигаҳдорӣ наҷот ёбад.

Нихоят, мо набояд инро фаромуш кунем Муҳим аст, ки ҳама зерсистемаро дуруст назорат кунед. Дар акси ҳол, ба вазъияте дучор шудан осон аст, ки дар он доно дар ҳолате қарор дорад CrashLoopBackOff ва чизе намефиристад ва ин талафоти иттилооти муҳимро ваъда медиҳад.

натиҷаҳои

Дар ин мақола, мо ба ҳалли SaaS ба монанди Datadog нигоҳ намекунем. Бисёре аз мушкилоти дар ин ҷо тавсифшуда аллакай аз ҷониби ширкатҳои тиҷоратӣ, ки ба ҷамъоварии гузоришҳо тахассус доранд, бо ин ё он роҳ ҳал карда шудаанд, аммо на ҳама метавонанд SaaS-ро бо сабабҳои гуногун истифода баранд. (асосӣ арзиш ва мувофиқат бо 152-ФЗ мебошанд).

Ҷамъоварии журналҳои мутамарказ дар аввал як кори оддӣ ба назар мерасад, аммо ин тамоман нест. Дар хотир доштан муҳим аст, ки:

  • Танҳо ҷузъҳои муҳим бояд ба таври муфассал сабт карда шаванд, дар ҳоле ки мониторинг ва ҷамъоварии хатогиҳоро барои системаҳои дигар танзим кардан мумкин аст.
  • Сабтҳо дар истеҳсолот бояд ҳадди аққал нигоҳ дошта шаванд, то бори нолозимро илова накунанд.
  • Гузоришҳо бояд бо мошин хондашаванда, муқаррарӣ ва формати қатъӣ дошта бошанд.
  • Гузоришҳои воқеан муҳим бояд дар ҷараёни алоҳида фиристода шаванд, ки бояд аз онҳо ҷудо карда шаванд.
  • Зарур аст, ки аккумулятори чӯбро баррасӣ кунед, ки метавонад шуморо аз таркишҳои бори баланд наҷот диҳад ва сарбории анборро яксонтар кунад.

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

PS

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

Манбаъ: will.com

Илова Эзоҳ