Како се користе Линук контејнери са ЛКСЦ и ЛКСД

У добра стара времена инсталирање оперативног система значило је спајање свих хардверских компоненти, пуштање новог рачунара са инсталационим диском у периферном уређају и лабав поступак инсталације учини своје. Укупно протекло време могло би трајати између сати и недеља.

Ових дана могу да кажем себи „не бих имао ништа против да то тестирам на серверу који покреће одређену верзију ЦентОС-а“ и - у зависности од броја променљивих и под претпоставком да је оригинална слика већ преузета - могу да имам потпуно функционисање виртуелни систем спреман у року од 30 секунди. Ваши тачни резултати могу се разликовати, али не толико.

Можете видети како све ово функционише на мом новом курсу Плуралсигхт "Оптимизација система Линук" - на којем је заснован овај чланак.

Шта је покретало све ове промене? Виртуелизација. И, посебно, виртуелизација контејнера.

Виртуелизовани ОС је систем датотека који садржи све софтверске библиотеке, бинарне датотеке и датотеке конфигурације које су вам потребне за покретање традиционалне машине. Само што се овај одређени систем датотека не чува у роот или партицији за покретање које би рачунар читао док се укључује, већ у неком другом делу волумена меморије.

А „напајање“ вашег виртуелног рачунара догађа се када неки софтвер паметно заварава датотеке мислећи да их сами покрећу на свом хардверу, када заиста деле простор и ресурсе са оперативним системом хоста и, можда, неким другим виртуелни рачунари.

Уопштено говорећи, постоје две врсте софтверских система који се користе за администрацију виртуелизације сервера: хипервизор и контејнер.

Хипервизори пружају слој апстракције који омогућава гостујућим ВМ-овима да створе изоловано окружење са приступом системском хардверу који емулира голи метални сервер. То значи да се ВМ хипервизора могу градити из било ког оперативног система компатибилног са основним хардвером. Али то такође значи да ће потрошити више простора и више меморије и рачунарских ресурса.

Виртуелизација контејнера

С друге стране, контејнери деле ОС језгро рачунара домаћина и постоје у пажљиво обезбеђеним и изолованим просторима којима управљају системски алати попут цгроупс. Будући да деле језгро, меморија и системски ресурси које контејнери троше могу бити заиста минимални, а да се апсолутно ништа не троши. И, као што ћете видети, брзине које ћете покренути у апликацијама контејнера одузимаће дах.

Много пажње у вези са контејнерима током последњих неколико година било је усмерено на Доцкер и, у новије време, Гоогле-ов алат за оркестрацију контејнера, Кубернетес. У ствари, Кубернетес је врло погодан за архитектуре микро-услуга на нивоу предузећа.

Али постоји старија и, вероватно, зрелија примена модела контејнера која нигде није отишла. Линук Цонтаинер Пројецт, ЛКСЦ, и његов новији сет алата, ЛКСД, имају снаге за које би многи тврдили да их чине бољим кандидатом за неке случајеве употребе од Кубернетеса. ЛКСЦ се посебно истиче у изградњи лаких и брзих окружења у песку за тестирање и развој апликација.

У овом чланку ћу вам показати како да инсталирате ЛКСД, како да припремите и покренете једноставни контејнер који покреће ултра мали Алпине Линук, а затим како да отворим сесију љуске у вашем новом контејнеру. Такође ћу објаснити како пронаћи и покренути више верзија других дистрибуција.

Једна ствар коју вам могу одмах рећи је да кад год предајем ЛКСЦ, студенти са запрепашћењем реагују колико моћна и ефикасна може бити употреба контејнера.

Када завршимо са свим овим, моћи ћете да покренете машине за практично тестирање шта год да учите или радите у року од неколико секунди. Када експеримент прође лоше, можете одмах искључити и уклонити контејнер и направити други који ће га заменити. Једноставно више нема изговора да се не научи.

Изградња ЛКСД контејнера

Покренућемо ЛКСЦ да ради на новој инсталацији Убунту 18.04 машине. У овој демонстрацији ћемо инсталирати и покренути ЛКСД окружење, а затим ћемо користити ЛКСД верзију интерфејса ЛКСЦ командне линије за преузимање и покретање Алпине Линук контејнера. Потврдићемо да је све функционисало, а затим ћемо мало погледати око себе да видимо како је насељена средина.

Користићу снап менаџер пакета за инсталирање ЛКСД-а јер је то сада званична препорука. И не само за ЛКСД, имајте на уму: све врсте апликација прелазе на алтернативне менаџере попут снап или АппИммаге и Флатпак. Још увек волим своју способност за Дебиан, али не можете се борити против целог света.

$ sudo snap install lxd 

ЛКСД - који је, опет, ажурирани скуп алата дизајниран за управљање ЛКСЦ АПИ-јем - долази у пакету који укључује све редовне зависности ЛКСЦ-а. Једна команда за инсталирање и готови смо.

Важно је иницијализовати ЛКСЦ окружење помоћу наредбе лкд инит. Могли бисте сами да подесите ствари, али је већа вероватноћа да ћете све овако исправити. Инит процес ће вам поставити гомилу питања и, бар за сада, подразумевани одговори ће све функционисати.

$ sudo lxd init 

Када то завршимо, спремни смо да направимо ваш први контејнер. Коју год Линук дистрибуцију и верзију желели, мораћемо да пронађемо и преузмемо слику. ЛКСЦ пројекат одржава спремиште великог броја слика на имагес.линукцонтаинерс.орг. Можете видети да обично постоји више верзија сваког дистро-а, што вам омогућава да направите контејнере који ће радити са скоро било којим софтвером који на њега можете бацити.

Користићу најновију верзију Алпине Линука јер је заиста мала. Слободно користите било коју слику која вам се свиђа - укључујући велике дечаке попут Убунту-а и ЦентоОС-а. Алпине ће се, наравно, преузети врло брзо.

Али пре него што то учинимо, требало би да вам кажем како да схватите синтаксу наредбеног ретка неопходну за добијање ваше слике.

Као што можете видети на овом снимку екрана са веб странице ЛКСД, са саме странице можете добити три информације које ће вам требати: назив дистроа - Алпине, у овом случају - број издања - 3.10 - и архитектура . Тражимо амд64.

Сада смо спремни да покренемо преузимање покретањем launchнаредбе:

$ sudo lxc launch images:alpine/3.10/amd64 demo 

Приметите како је синтакса „лкц“ иако је ово технички ЛКСД интерфејс. „имагес“ говори ЛКСЦ-у да наша слика живи у јавном репо-у који смо раније видели. Наша три бита података - име дистроа, број издања и архитектура, уносе се одвојено косим цртама. Користићу „демо“ као назив свог контејнера. То би требало бити све што нам треба.

Колико је мали Алпине можете видети по томе колико се брзо преузима. Моја интернет веза није тако брза и нисам играо ниједну игрицу са снимком. Да бих потврдио да је функционисало, покренућу „лкц лс“ да бих набројао све тренутно инсталиране контејнере. Постоји само један. А његов тренутни статус је „покренут“.

sudo lxc ls +------+---------+----------------------+------------+-----------+ | NAME | STATE | IPV4 | TYPE | SNAPSHOTS | +------+---------+----------------------+------------+-----------+ | demo | RUNNING | 10.125.45.119 (eth0) | PERSISTENT | 0 | +------+---------+----------------------+------------+-----------+ 

Можете отворити роот сесију која није пријављена у контејнеру помоћу команде „лкц екец“. Само наведите име контејнера, а затим реците ЛКСЦ-у да желите да покренете љуску помоћу тумача сх (можда бисте више волели /bin/bashда радите са Убунту или ЦентОС контејнером - ваш позив у сваком случају). Као што ћете и сами моћи да видите да ли пратите код куће, имамо уобичајени Линук командни одзив и све што је Линук-и сада могуће.

$ sudo lxc exec demo sh ~ # 

You could also run a single command without opening a full shell by typing the command instead of this sh.

$ sudo lxc exec demo ls / bin etc lib mnt proc run srv tmp var dev home media opt root sbin sys usr 

You can bail out of the shell any time you like using exit and return to your host. Here, besides listing running containers, I can also list any storage pools. The default pool that was created during initialization is there, and we can see where the disk image is stored. /var/lib/lxd is, by default, where all LXC resources are kept.

$ sudo lxc storage ls +---------+-------------+--------+--------------------------------+---------+ | NAME | DESCRIPTION | DRIVER | SOURCE | USED BY | +---------+-------------+--------+--------------------------------+---------+ | default | | btrfs | /var/lib/lxd/disks/default.img | 3 | +---------+-------------+--------+--------------------------------+---------+ 

I can similarly list all my networks. There happen to be a few network bridges on this system (I've been playing around a bit, as you can see). There's also the physical enp0s3 bridge used by the host Ubuntu server. Although between you and me, that one's not physical either, as this is actually a VM running in Oracle's Virtual Box.

$ lxc network ls +---------+----------+---------+-------------+---------+ | NAME | TYPE | MANAGED | DESCRIPTION | USED BY | +---------+----------+---------+-------------+---------+ | enp0s3 | physical | NO | | 1 | +---------+----------+---------+-------------+---------+ | lxdbr0 | bridge | YES | | 1 | +---------+----------+---------+-------------+---------+ | mynet | bridge | YES | | 0 | +---------+----------+---------+-------------+---------+ | testbr0 | bridge | YES | | 1 | +---------+----------+---------+-------------+---------+ 

If we needed to, we could easily add a new virtual interface to our container using the "lxc network attach" command. Here, I'll specify the physical network and then the name of our container.

$ lxc network attach enp0s3 demo 

With that done, you could open a new shell in the container to see what's changed. There should now be an eth1 interface listed. You may need to reboot for all the changes to take full effect. By doing that you can also marvel at just how fast this thing can reboot itself - for all intents and purposes, it'll happen faster than you can type your exec command to open a new shell.

Enjoy your new environment!

This article is based on content in my Pluralsight course, "Linux System Optimization." There's much more administration goodness in the form of books, courses, and articles available at bootstrap-it.com.