Журнал LinuxFormat - перейти на главную

LXF134:DrBrown2

Материал из Linuxformat
Перейти к: навигация, поиск

Кон­тейнер­ные тех­но­ло­гии

В Linux та­ких мно­же­ство – раз­бе­рем­ся с их ти­па­ми.

LXF134 49 1.jpg Кон­тей­не­ры ха­рак­те­ри­зу­ют­ся ре­сур­са­ми, ко­то­рые они вир­туа­ли­зи­ру­ют и раз­де­ля­ют.

При ка­ж­дом за­пуске про­грам­мы в Linux она раз­де­ля­ет неко­то­рые ре­сур­сы с дру­ги­ми при­ло­жения­ми и вир­туа­ли­зи­ру­ет (или изо­ли­ру­ет) осталь­ные. Ка­кие ре­сур­сы раз­де­ля­ют­ся, а ка­кие изо­ли­ру­ют­ся, за­ви­сит от ис­поль­зуе­мой тех­но­ло­гии. Вот неболь­шой об­зор.

  • Про­цес­сы Про­цес­сы – низ­ший уро­вень кон­тейнери­за­ции, и вы да­же, на­вер­ное, вор­чи­те на ме­ня за то, что я отнес их к этой ка­те­го­рии. Но про­цесс – и в са­мом де­ле кон­тейнер, в ко­то­ром вы­пол­ня­ет­ся про­грам­ма. Сре­ди про­че­го он изо­ли­ру­ет про­стран­ство па­мя­ти про­грам­мы (у ка­ж­до­го про­цес­са есть ил­лю­зия, что все ад­рес­ное про­стран­ство при­над­ле­жит ему) и на­бо­ры фай­ло­вых де­ск­рип­то­ров про­грам­мы (на­при­мер, ка­ж­дый про­цесс зна­ет, ку­да под­клю­чен его стан­дарт­ный по­ток вы­во­да). Эта тех­но­ло­гия кон­тейнери­за­ции фун­да­мен­таль­на для Linux и Unix и су­ще­ству­ет с неза­па­мят­ных вре­мен.
  • Chroot Идея здесь в том, что­бы ог­раничить про­грам­му оп­ре­де­лен­ной ча­стью фай­ло­во­го де­ре­ва («тюрь­мой» или «пе­сочницей»). Ме­ханизм осно­ван на систем­ном вы­зо­ве chroot (из­менить ко­рень), ко­то­рый из­ме­ня­ет пред­став­ление про­цес­са о том, где на­хо­дит­ся корневой ка­та­лог (/). На­при­мер, ес­ли про­цесс де­ла­ет chroot в ка­та­лог /var/run/foobar и за­тем об­ра­ща­ет­ся к фай­лу /etc/fstab, на са­мом де­ле он бу­дет об­ра­щать­ся к фай­лу /var/run/foobar/etc/fstab.

    Для пра­виль­но напи­сан­ной про­грам­мы это ме­ра безо­пас­но­сти – про­грам­ма не смо­жет по­лу­чить доступ ни к ка­ким фай­лам вне «тюрь­мы». Часто с при­менением этой тех­но­ло­гии ра­бо­та­ют де­мо­ны – на ум при­хо­дит DNS-сер­вер Bind. Но дан­ный ме­ханизм нель­зя на­звать силь­ным, да он никогда и не пре­тен­до­вал на это. Ес­ли де­мон вы­пол­ня­ет­ся под поль­зо­ва­те­лем root, и у него есть уяз­ви­мость (к при­ме­ру, ошиб­ка при пе­ре­полнении бу­фе­ра), су­ще­ству­ет несколь­ко хо­ро­шо до­ку­мен­ти­ро­ван­ных спо­со­бов вы­рвать­ся из тюрь­мы. Ме­ханизм chroot на са­мом де­ле пред­на­зна­чал­ся для то­го, что­бы пре­доста­вить про­грам­ме соб­ствен­ное ви­дение фай­ло­вой систе­мы, а раз­ра­бот­чи­кам – «пе­сочницу» для тести­ро­вания но­вых про­грамм, а не для то­го, что­бы сдер­жи­вать про­грам­мы с уяз­ви­мо­стя­ми.

    При соз­дании «тюрь­мы» для про­грам­мы ну­жен оп­ре­де­лен­ный под­ход. Нель­зя про­сто бро­сить узника в ка­ме­ру без еды и во­ды и ждать, что он вы­жи­вет. В «тюрь­ме» долж­ны быть фай­лы, необ­хо­ди­мые для ра­бо­ты про­грам­мы, фай­лы дан­ных, фай­лы на­строй­ки; на­вер­ное, ко­пии неко­то­рых фай­лов из /etc и /dev, и т. д.

  • Кон­тейнеры Кон­тейнеры в Linux – са­мая но­вая, са­мая гиб­кая и (на дан­ный мо­мент) са­мая страш­ная тех­но­ло­гия кон­тейнери­за­ции. Кон­тейнеры очень гиб­ки: они по­зво­ля­ют управ­лять тем, ка­кие ре­сур­сы нуж­но изо­ли­ро­вать, а ка­кие – раз­де­лить. Кон­тейнеры вир­туа­ли­зи­ру­ют (изо­ли­ру­ют) как минимум иден­ти­фи­ка­то­ры про­цес­сов, ме­ханиз­мы IPC «System V» и точ­ки мон­ти­ро­вания (ко­то­рые яв­ля­ют­ся пред­став­ления­ми кон­тейнера о фай­ло­вой систе­ме). Кро­ме это­го, за­дав со­от­вет­ствую­щую кон­фи­гу­ра­цию кон­тейнера, мож­но изо­ли­ро­вать дру­гие ре­сур­сы, та­кие как имя хоста (кон­тейнера мо­жет иметь дру­гое имя хоста по сравнению с основ­ной систе­мой) и се­те­вые ин­тер­фей­сы (на­при­мер, у кон­тейнера мо­гут быть свои вир­ту­аль­ные се­те­вые ин­тер­фей­сы, ка­ж­дый со сво­им MAC-ад­ре­сом). Кон­тейнеры мо­гут раз­де­лять с основ­ной систе­мой неко­то­рые части фай­ло­вой систе­мы и иметь соб­ствен­ное пред­став­ление дру­гих.

    Мож­но соз­дать кон­тейнер для за­пуска от­дель­ной про­грам­мы или систе­мы це­ли­ком. Как ни стран­но, второе про­ще – мень­ше ра­бо­ты по вы­бо­ру и на­строй­ке раз­де­ляе­мых ре­сур­сов – систе­мы.

    Тех­но­ло­гия кон­тейнеров опи­ра­ет­ся на воз­мож­но­сти, поя­вив­шие­ся толь­ко в са­мых по­следних яд­рах – для пол­ной функ­цио­наль­но­сти нуж­на вер­сия 2.6.29 или боль­ше. И тех­но­ло­гия в це­лом на дан­ный мо­мент вы­гля­дит сы­ро­ва­то. Есть несколь­ко ути­лит для управ­ления кон­тейнера­ми, но ниче­го (на­сколь­ко я смог най­ти) – для ав­то­ма­ти­за­ции соз­дания и на­строй­ки кон­тейнеров. На­при­мер, в Virt-manager нет масте­ра соз­дания но­вых вир­ту­аль­ных ма­шин. Ду­маю, это во­прос вре­мени. Ес­ли вы не мо­же­те ждать и го­то­вы при­нять на се­бя боль на­строй­ки кон­тейнера вруч­ную, взгляните на ру­ко­во­дство Бод­хи За­зе­на [Bodhi Zazen] по ад­ре­су http://blog.bodhizazen.net/linux/lxc-configure-ubuntu-lucid-containers.

  • Вир­ту­аль­ные ма­ши­ны Вир­ту­аль­ные ма­ши­ны – пре­дель­ная тех­но­ло­гия кон­тейнери­за­ции, конеч­но, не счи­тая, фи­зи­че­ских ком­пь­ю­те­ров, на ко­то­рых мож­но за­пускать нуж­ные про­грам­мы. Внут­ри вир­ту­аль­ной ма­ши­ны у вас по­яв­ля­ет­ся ил­лю­зия, что у вас есть це­лый ком­пь­ю­тер. У вир­ту­аль­ных ма­шин есть соб­ствен­ное яд­ро ОС; на них мож­но (и так часто де­ла­ют) за­пускать раз­ные ОС.

    Род­ные тех­но­ло­гии Linux здесь – это KVM и Xen; доступ­ны и неко­то­рые про­прие­тар­ные про­дук­ты, та­кие как VirtualBox от Sun и VMware. Те­ма вир­туа­ли­за­ции и вир­ту­аль­ных ма­шин бы­ла до­воль­но под­роб­но раскры­та в по­следних но­ме­рах жур­на­ла вклю­чая LXF132, и здесь я не бу­ду уг­луб­лять­ся в нее.

Вло­жен­ные кон­тей­не­ры

Тех­но­ло­гии кон­тей­не­ри­за­ции мо­гут вкла­ды­вать­ся друг в дру­га, что по­зво­ля­ет соз­да­вать кон­тей­не­ры внут­ри кон­тей­не­ров. Все при­ло­же­ния вы­пол­ня­ют­ся внут­ри про­цес­сов. Про­цес­сы мож­но за­пус­кать в «тюрь­мах» chroot или в кон­тей­не­рах. Уж не знаю, за­чем за­пус­кать «тюрь­му» chroot внут­ри кон­тей­не­ра, по­то­му что кон­тей­не­ры сде­ла­ют все то же са­мое, что и «тюрь­ма» сhroot. И, ко­неч­но, кон­тей­не­ры мож­но соз­да­вать на вир­ту­аль­ных ма­ши­нах. Ко­неч­но, все эти кон­тей­не­ры в ко­неч­ном сче­те со­пер­ни­ча­ют друг с дру­гом за фи­зи­че­ские ре­сур­сы ком­пь­ю­те­ра – па­мять, цик­лы про­цес­со­ра, ши­ри­ну по­ло­сы про­пус­ка­ния се­ти и дис­ко­вое про­стран­ст­во.

Персональные инструменты
купить
подписаться
Яндекс.Метрика