Розніца паміж віртуалізацыяй і кантэйнерызацыяй
У сучасных вылічэннях пастаянна расце патрэба ў хуткім, эфектыўным запуску праграм і лёгкай міграцыі паміж асяроддзямі (ноўтбукі распрацоўшчыкаў, офісныя серверы і воблака). Дзве тэхналогіі, якія часта ляжаць у аснове гэтых патрэб, - гэта віртуалізацыя і кантэйнерызацыя. Хоць абедзве тэхналогіі дазваляюць запускаць некалькі «асяроддзяў» на адной фізічнай машыне, іх праца, узровень ізаляцыі, спажыванне рэсурсаў і сцэнарыі выкарыстання істотна адрозніваюцца. У гэтым артыкуле падрабязна абмяркоўваюцца адрозненні паміж віртуалізацыяй і кантэйнерызацыяй, каб дапамагчы вам выбраць правільнае рашэнне.
1. Вызначэнне віртуалізацыі
Віртуалізацыя — гэта тэхналогія, якая дазваляе на адной фізічнай машыне адначасова запускаць некалькі віртуальных машын (ВМ). Кожная ВМ паводзіць сябе як паўнавартасны камп'ютар: яна мае ўласную аперацыйную сістэму, ядро, віртуальныя драйверы і выдзеленую прастору рэсурсаў (працэсар, аператыўную памяць, сховішча).
Віртуалізацыя звычайна выконваецца з дапамогай праграмнага забеспячэння, якое называецца гіпервізарам. Гіпервізар адказвае за размеркаванне апаратных рэсурсаў і кіраванне віртуальнымі машынамі. Прыкладамі папулярных гіпервізараў з'яўляюцца:
– VMware ESXi
– Microsoft Hyper-V
– KVM (віртуальная машына на аснове ядра)
– VirtualBox (агульны для лакальных патрэб)
Дзякуючы віртуалізацыі вы можаце запускаць Windows і Linux на адным фізічным серверы або запускаць некалькі розных дыстрыбутываў Linux для ізаляцыі і шматкарыстальніцкай эксплуатацыі.
2. Вызначэнне кантэйнерызацыі
Кантэйнерызацыя — гэта метад запуску праграм у ізаляваных адзінках, якія называюцца кантэйнерамі. Кантэйнеры «пакуюць» праграмы і іх залежнасці (бібліятэкі, асяроддзя выканання, канфігурацыі), каб яны маглі працаваць паслядоўна ў розных асяроддзях.
Ключавое адрозненне ад віртуальных машын заключаецца ў тым, што кантэйнеры не ўтрымліваюць поўную аперацыйную сістэму. Кантэйнеры выкарыстоўваюць адно ядро з аперацыйнай сістэмай хоста (або ядро віртуальнай машыны, калі кантэйнер працуе паверх віртуальнай машыны). Ізаляцыя дасягаецца з дапамогай такіх функцый ядра, як прасторы імёнаў і кантрольныя групы (у Linux), якія кіруюць падзелам працэсаў і абмежаваннямі рэсурсаў.
Найбольш вядомыя кантэйнерныя платформы:
– Докер
– кантэйнерны
– Подман
– Аркестроўка, як у Kubernetes
Кантэйнерызацыя звычайна выкарыстоўваецца для мікрасэрвісаў, хуткага разгортвання і сучасных сцэнарыяў DevOps.
3. Архітэктурныя адрозненні: віртуальная машына супраць кантэйнера
Віртуалізацыя (ВМ)
На віртуальнай машыне ў вас ёсць такія пласты:
1. Фізічнае абсталяванне
2. Гіпервізар
3. Віртуальная машына (кожная мае сваю ўласную АС + ядро)
4. Прымяненне
Паколькі кожная віртуальная машына мае поўную аперацыйную сістэму, віртуальныя машыны, як правіла, «цяжэйшыя», але іх ізаляцыя моцная, і яны гнуткія для запуску розных аперацыйных сістэм.
Кантэйнерызацыя (кантэйнер)
У кантэйнерах пласты звычайна наступныя:
1. Фізічнае абсталяванне
2. Аперацыйная сістэма (ядро)
3. Асяроддзе выканання кантэйнера (напрыклад, Docker)
4. Кантэйнер (прыкладанне + залежнасці)
Кантэйнеры лягчэйшыя, бо не дублююць аперацыйную сістэму. У выніку іх звычайна хутчэй ствараць, запускаць і разгортваць.
4. Розніца ў спажыванні рэсурсаў
Віртуальныя машыны спажываюць больш рэсурсаў, таму што:
– Кожная віртуальная машына патрабуе аператыўнай памяці для аперацыйнай сістэмы
– Накладныя выдаткі на гіпервізар і вобраз дыска аперацыйнай сістэмы
– Загрузка аперацыйнай сістэмы патрабуе часу і рэсурсаў
Кантэйнеры больш эканамічныя, таму што:
– Сумеснае выкарыстанне ядра хоста
– Памер выявы адносна невялікі (у параўнанні з выявай віртуальнай машыны АС)
– Хуткі старт/стоп (часта за секунды ці менш)
Калі ваша мэта — запускаць дзясяткі ці сотні невялікіх сэрвісаў, кантэйнеры звычайна больш эфектыўныя. Аднак, калі вам патрэбна поўная ізаляцыя або іншая аперацыйная сістэма, віртуальныя машыны больш актуальныя.
5. Розніца ў хуткасці загрузкі і разгортвання
Віртуальная машына падобная да запуску новага кампутара: яна патрабуе загрузкі аперацыйнай сістэмы, ініцыялізацыі службаў і гэтак далей. Час запуску віртуальнай машыны можа вагацца ад дзясяткаў секунд да хвілін.
Кантэйнеры больш падобныя на запуск ізаляваных працэсаў прыкладанняў. Многія кантэйнеры могуць запускацца за лічаныя секунды ці нават хутчэй, у залежнасці ад вобраза і ініцыялізацыі прыкладання.
З пункту гледжання CI/CD (бесперапынная інтэграцыя/бесперапыннае разгортванне), кантэйнеры часта выбіраюцца, таму што яны паскараюць канвеер зборкі-тэставання-разгортвання.
6. Узровень ізаляцыі і бяспекі
Ізаляцыя — адзін з найважнейшых фактараў.
VM
– Мацнейшая ізаляцыя, бо існуе асобная мяжа паміж АС і ядрамі.
– Калі віртуальная машына ўзламаная, уплыў, як правіла, абмяжоўваецца гэтай віртуальнай машынай (хаця рызыка ўзлому гіпервізара ўсё яшчэ існуе).
– Падыходзіць для шматкарыстальніцкіх асяроддзяў з нізкім узроўнем даверу (напрыклад, размяшчэнне розных кліентаў).
Кантэйнер
– Ізаляцыя «танчэйшая» з-за сумеснага выкарыстання ядра хоста.
– Калі ёсць уразлівасць у ядры або дрэнная канфігурацыя кантэйнера (напрыклад, кантэйнер працуе ад імя root, занадта высокія прывілеі), рызыка эскалацыі на хост можа павялічыцца.
– Бяспека кантэйнераў у значнай ступені залежыць ад узмацнення бяспекі: выкарыстанне кантэйнераў без доступу да root-праваў, абмежаванні магчымасцей, seccomp/apparmor/selinux, сканаванне малюнкаў і гэтак далей.
Аднак экасістэма бяспекі кантэйнераў хутка развіваецца, і многія буйныя арганізацыі бяспечна выкарыстоўваюць кантэйнеры з выкарыстаннем перадавых практык.
7. Партатыўнасць і экалагічная ўстойлівасць
Кантэйнеры вылучаюцца з пункту гледжання партатыўнасці прыкладанняў:
– Кантэйнерныя выявы ўтрымліваюць залежнасці прыкладанняў
– Гарантуе, што «тое, што працуе на маёй машыне», таксама працуе на серверах і ў воблаку
– Падыходзіць для каманд распрацоўшчыкаў, якім патрабуецца ўзгодненасць асяроддзя
Віртуальныя машыны таксама партатыўныя, але цяжэйшыя:
– Перанос віртуальнай машыны азначае перанос усёй аперацыйнай сістэмы
– Памер файла выявы можа быць вялікім
– Забеспячэнне, як правіла, адбываецца павольней
У сучаснай практыцы часта сустракаецца спалучэнне: віртуальныя машыны выкарыстоўваюцца ў якасці стабільных і бяспечных «вузлоў», а кантэйнеры працуюць паверх іх для гнуткасці прыкладанняў.
8. Рэальнае выкарыстанне: калі які выбраць?
Выкарыстоўвайце віртуалізацыю, калі:
1. Вам трэба адначасова запускаць розныя аперацыйныя сістэмы (напрыклад, Windows Server і Linux).
2. Вам патрэбна моцная ізаляцыя і межы паміж асяроддзямі.
3. Вы выкарыстоўваеце састарэлую маналітную праграму, якую цяжка кантэйнерызаваць.
4. Ваша інфраструктура ўжо заснавана на віртуальных машынах, і кіраванне віртуальнымі машынамі дастаткова развітае.
Выкарыстоўвайце кантэйнерызацыю, калі:
1. Вы ствараеце мікрасэрвіснае прыкладанне або сучасную архітэктуру.
2. Вам патрэбныя хуткае разгортванне і дынамічнае маштабаванне.
3. Вам патрэбна паслядоўнае асяроддзе для DevOps і CI/CD.
4. Вам патрэбна эфектыўнасць выкарыстання рэсурсаў для многіх невялікіх паслуг.
9. Адрозненні ў кіраванні і аркестроўцы
Кіраванне віртуальнымі машынамі ажыццяўляецца з дапамогай інструментаў віртуалізацыі, такіх як vCenter, OpenStack або Hyper-V Manager. Нягледзячы на тое, што яны могуць значна маштабавацца, забеспячэнне віртуальных машын часта больш патрабавальным і павольным.
Кантэйнеры звычайна кіруюцца ў маштабе з дапамогай аркестратараў, такіх як Kubernetes:
– Аўтаматычнае маштабаванне
– Самааднаўленне (кантэйнер перазапускаецца аўтаматычна)
– Унутранае балансаванне нагрузкі
– Паўторныя абнаўленні і адкаты
– Дэкларатыўны (з выкарыстаннем YAML-файлаў)
Гэта робіць кантэйнерызацыю ідэальным варыянтам для воблачнай экасістэмы.
10. Кесімпулан
Віртуалізацыя і кантэйнерызацыя важныя, але яны задавальняюць розныя патрэбы. Віртуалізацыя забяспечвае паўнавартаснае камп'ютэрнае асяроддзе з высокай ізаляцыяй і гнуткасцю для запуску розных аперацыйных сістэм, але яна больш рэсурсаёмістая і павольнейшая ў падрыхтоўцы. Кантэйнерызацыя ж прапануе больш лёгкі, хуткі і партатыўны спосаб запуску праграм, ідэальны для DevOps, мікрасэрвісаў і маштабных разгортванняў — з агаворкай, што патрабуюцца добрыя практыкі бяспекі і аркестрацыі.
У рэшце рэшт, найлепшым выбарам часта з'яўляецца не «віртуальныя машыны ці кантэйнеры», а хутчэй спалучэнне абодвух: віртуальныя машыны для асновы інфраструктуры і кантэйнеры для эфектыўнага запуску праграм. Разумеючы гэтыя фундаментальныя адрозненні, вы можаце распрацоўваць больш стабільныя, бяспечныя і маштабуемыя сістэмы, адаптаваныя да патрэб вашай арганізацыі.