Как да

Стартирайте Linux контейнери с LXC / LXD на CentOS 8

Стартирайте Linux контейнери с LXC / LXD на CentOS 8

„Не това, което казваме за нашите благословии, а как ги използваме, е истинската мярка за нашето благодарност.”
- З. T. Purkiser

Демистифициране на LXC

Проектът Linux Containers (LXC) е платформа за контейнери с отворен код, която предоставя набор от инструменти, шаблони, библиотеки и езикови обвързвания. Той предоставя контейнери, които включват цялостна Linux система, подобна на виртуална машина, със собствена файлова система, мрежи и множество приложения. LXC има прост интерфейс на командния ред, който подобрява потребителското изживяване при стартиране на контейнери (RedHat, 2020). Чрез мощен API и прости инструменти, той позволява на потребителите на Linux лесно да създават и управляват системни или приложни контейнери. Преди containerd, Docker беше построен върху LXC, но оттогава те се преместиха в containerd.

Характеристики на LXC

Текущият LXC използва следните функции на ядрото, за да съдържа процеси: Източник: LinuxContainers

Демистифициране на LXD

LXD е мениджър на системни контейнери от следващо поколение. Това е невероятен интерфейс, използван за управление на системни контейнери LXC и не бива да се тълкува погрешно като платформа или тип контейнер. Характеристиките на LXD включват моментни снимки и контрол на изображенията. Както се досещате, LXD увеличава възможностите на технологията LXC. Той предлага потребителско изживяване, подобно на виртуалните машини, но вместо това използва Linux контейнери.

Характеристики на LXD Източник: LinuxContainers

Някои от най-големите характеристики на LXD са:

Инсталиране на LXC / LXD на CentOS 8

Ако искате да изпробвате LXC / LXD на вашия сървър CentOS 8, за да стартирате някои приложения, следващите стъпки ще ви помогнат да подготвите платформата за използване по възможно най-бързия начин.

Стъпка 1: Актуализирайте и подгответе сървъра

Това е много важна стъпка, при която гарантираме, че нашата къща е добре обзаведена, като се уверим, че са инсталирани най-новите корекции и пакети. Процедури за изпълнение на следните команди за подготовка на вашия сървър.

sudo dnf актуализация -y && sudo dnf надстройка -y sudo dnf инсталиране -y vim curl nano 

Деактивирайте SELinux

Това е незадължителна стъпка, ако се справяте добре с управлението на контекста на SELinux. За да го направите разрешителен, изпълнете следните команди

sudo setenforce 0 sudo sed -i 's / ^ SELINUX =.* / SELINUX = разрешително / g '/ etc / selinux / config

Стъпка 2: Активирайте и конфигурирайте EPEL репо

Изпълнете следната команда, за да инсталирате и активирате EPEL репо на CentOS 8 и след това актуализирайте сървъра, за да получите най-новите пакети от Epel.

sudo yum install https: // dl.fedoraproject.org / pub / epel / epel-release-latest-8.ноарх.rpm sudo dnf актуализация

Стъпка 3: Инсталирайте snapd на CentOS 8

В тази настройка ще инсталираме пакета LXD на Snappy поради неговата простота и поддръжка, на които се радват пакетите Snap. Поради тази причина трябва да инсталираме snapd на нашия сървър, както следва:

sudo yum инсталирате snapd -y

След като бъде инсталиран, системният модул, който управлява основния бутон за комуникация, трябва да бъде активиран:

sudo systemctl enable --now snapd.гнездо

За да активирате класическата поддръжка на щракване, въведете следното, за да създадете символна връзка между / var / lib / snapd / snap и / щракване:

sudo ln -s / var / lib / snapd / snap / snap

Или излезте и се върнете отново, или рестартирайте системата, за да сте сигурни, че пътищата на snap се актуализират правилно. След като инсталираме щракване, нека продължим към следващата стъпка.

Стъпка 4: Добавяне на параметри на ядрото

Има някои важни опции на ядрото, които се изискват от LXD и ще активираме на сървъра. Конфигурирайте ги, като изпълните следните команди на вашия терминал като корен.

$ sudo su - # grubby --args = "потребителско_име.enable = 1 "--update-kernel =" $ (grubby --default-kernel) "# ​​grubby --args =" пространство от имена.unpriv_enable = 1 "--update-kernel =" $ (grubby --default-kernel) "# ​​echo" потребител.max_user_namespaces = 3883 "| sudo tee -a / etc / sysctl.г / 99-потребителски.конф

След като тези настройки са конфигурирани, се изисква сървърът да се рестартира, тъй като основните функции на ядрото са променени. Рестартирайте сървъра си.

sudo рестартиране

Стъпка 5: Инсталирайте lxd snap на CentOS 8

И накрая, след като сървърът ви е архивиран, е време да изтеглите пакета от интереси, LXD, инсталиран от Snap store. Колкото и просто да е направено Snap, просто трябва да изпълним командата по-долу и нашият LXD ще бъде инсталиран.

$ sudo snap install --classic lxd

Стъпка 6: Стартиране на тестов LXD контейнер

Досега вече сме инсталирали LXC / LXD, но все още нямаме контейнери, които да съдържат приложенията, които се интересуваме от внедряването. Следователно, преди да можем да стартираме някои контейнери, нека добавим нашия потребителски акаунт към групата lxd, за да управлява LXD контейнери без ограничения за разрешение.

sudo usermod -aG lxd  newgrp lxd

Забележка: The newgrp команда се използва за промяна на текущия идентификатор на група по време на сесия за вход. Ако е даден флагът по избор - средата на потребителя ще бъде реинициализирана, сякаш потребителят е влязъл в системата, в противен случай текущата среда, включително текущата работна директория, остава непроменена. newgrp променя текущия идентификатор на реалната група на посочената група.

След това ни позволява да конфигурираме LXD среда или „инициализиране”, Като изпълните следната команда. Ще ви преведе през няколко въпроса. Моля, отговорете им в съответствие с нуждите на вашата среда. Използвах стойности по подразбиране за празните.

$ lxd init Искате ли да използвате LXD клъстериране? (да / не) [по подразбиране = не]: Искате ли да конфигурирате нов пул за съхранение? (да / не) [по подразбиране = да]: Име на новия пул за съхранение [по подразбиране = по подразбиране]: Име на бекенда за съхранение, който да се използва (btrfs, dir, lvm, ceph) [по подразбиране = btrfs]: лв Създайте нов LVM пул? (да / не) [по подразбиране = да]: Бихте ли искали да използвате съществуващо устройство с празен блок (напр.ж. диск или дял)? (да / не) [по подразбиране = не]: Размер в GB на новото контурно устройство (минимум 1 GB) [по подразбиране = 9 GB]: 5GB Искате ли да се свържете с MAAS сървър? (да / не) [по подразбиране = не]: Бихте ли искали да създадете нов мост на локална мрежа? (да / не) [по подразбиране = да]: Как трябва да се нарича новият мост? [по подразбиране = lxdbr0]: Какъв IPv4 адрес трябва да се използва? (Нотация на CIDR подмрежа, „автоматично“ или „няма“) [по подразбиране = автоматично]: Какъв IPv6 адрес трябва да се използва? (Нотация на CIDR подмрежа, „автоматично“ или „няма“) [по подразбиране = автоматично]: Бихте ли искали LXD да бъде достъпен в мрежата? (да / не) [по подразбиране = не]: Бихте ли искали остарелите кеширани изображения да се актуализират автоматично? (да / не) [по подразбиране = да] Искате ли да бъде отпечатан предварително зададен YAML "lxd init"? (да / не) [по подразбиране = не]:

Горната команда ще създаде мост lxdbr0. Ще добавим този мостов интерфейс към доверената зона, така че връзките да преминават. С други думи, ще разрешим целия входящ трафик през lxdbr0. Изпълнете командите под защитната стена

sudo firewall-cmd --add-interface = lxdbr0 --zone = trusted - trajno sudo firewall-cmd --reload

Създаване на контейнери

След като lxd бъде инициализиран и вашият потребител получи разрешения за стартиране и управление на контейнери чрез lxc команда, нека създадем контейнер. Следният синтаксис може да се използва като ръководство:

lxc стартиране на изображения: [дистрибуция] / [версия] / [архитектура] [името на вашия контейнер]

Сега сме достатъчно просветлени и без допълнителни думи, нека създадем тест CentOS 8 и Ubuntu 20.04 контейнери чрез изпълнение на следните команди:

$ lxc стартиране на изображения: centos / 8 / amd64 cent8 Създаване на cent8 Извличане на изображение: Разопаковайте: 100% (4.22GB / s) Стартиране на cent8

Стартирайте Ubuntu контейнер, като стартирате:

$ lxc стартира ubuntu: 20.04 ubuntu20 Създаване на ubuntu20 Стартиране на ubuntu20

След като бъдат стартирани, можете лесно да изброите вашите контейнери по следния начин:

$ lxc списък + ------- + --------- + --------------------- + ------ ----------------------------------------- + -------- --- + ----------- + | ИМЕ | ДЪРЖАВА | IPV4 | IPV6 | ТИП | СНИМКИ | + ------- + --------- + --------------------- + --------- -------------------------------------- + ----------- + ----------- + | cent8 | БЕГАЩ | 10.80.35.177 (ет0) | fd42: b3a2: efa8: 5aa5: 216: 3eff: fe1d: 38c3 (eth0) | КОНТЕЙНЪР | 0 | +-------+---------+---------------------+-----------------------------------------------+-----------+-----------+

Можете също Спиране, стартиране, рестартиране, изтриване, както и да проверите повече информация за вашия контейнер, както по-долу къде е името на контейнера, както е показано в командата lxc list.

lxc старт  lxc стоп  lxc рестартиране  lxc изтриване 

Например

lxc спиране на ubuntu20 lxc изтриване на ubuntu20

Имайте предвид, че трябва да спрете работещ контейнер, преди да можете да го изтриете.

Получете информация за контейнер, като използвате опцията за команди info

$ lxc информационен контейнер ## Например $ lxc info cent8

Примерна брилянтна продукция:

Име: cent8 Местоположение: няма Отдалечено: unix: // Архитектура: x86_64 Създадено: 2020/11/07 11:25 UTC Статус: Изпълняващ се тип: Профили на контейнера: по подразбиране Pid: 2724 Ips: eth0: inet 10.80.35.177 veth975e84ff eth0: inet6 fd42: b3a2: efa8: 5aa5: 216: 3eff: fe1d: 38c3 veth975e84ff eth0: inet6 fe80 :: 216: 3eff: fe1d: 38c3 veth975e84ff lo: inet 127.0.0.1 lo: inet6 :: 1 Ресурси: Процеси: 13 Използване на диска: root: 737.98MB използване на процесора: използване на процесора (за секунди): 1 използване на паметта: памет (текуща): 93.32MB памет (пикова): 98.56MB Използване на мрежата: eth0: Получени байтове: 3.57kB Изпратени байта: 2.22kB Получени пакети: 30 Изпратени пакети: 22 lo: Получени байтове: 0B Изпратени байтове: 0B Получени пакети: 0 Изпратени пакети: 0

Стъпка 7: Изпълнете ad hoc команди в контейнери:

Точно както начина, по който можетеизпълн”В контейнер на Docker, можете също да изпълнявате команди вътре в lxd контейнери. Синтаксисът е такъв.

$ lxc exec  

Примери за изпълнение на команди са както следва:

$ lxc exec cent8 - yum -y актуализация CentOS-8 - AppStream 538 kB / s | 5.8 MB 00:11 CentOS-8 - База 619 kB / s | 2.2 MB 00:03 CentOS-8 - Екстри 8.1 kB / s | 8.1 kB 00:01 Разрешени зависимости. Нищо за правене. Пълна! 

Нека инсталираме Apache в контейнера

$ lxc exec cent8 - yum -y install httpd Последна проверка на изтичане на метаданните: преди 0:00:41 в събота, 7 ноември 12:56:38 2020. Решени са зависимости. ==================================================== ==================================================== ================================== Архитектура на пакета Версия Хранилище Размер =========== ====================================================== ====================================================== ======================= Инсталиране: httpd x86_64 2.4.37-21.module_el8.2.0 + 494 + 1df74eae AppStream 1.7 M Инсталиране на зависимости: apr x86_64 1.6.3-9.el8 AppStream 125 k apr-util x86_64 1.6.1-6.el8 AppStream 105 k

След инсталацията можем да влезем в контейнера, да създадем примерна страница, да стартираме уеб сървъра и да проверим състоянието му

$ lxc exec cent8 - / bin / bash ## Вече сме в контейнера [[имейл защитен] ~] # systemctl старт httpd [[имейл защитен] ~] # systemctl статус httpd ● httpd.услуга - Зареденият HTTP сървър на Apache: зареден (/ usr / lib / systemd / system / httpd.обслужване; хора с увреждания; предварително зададен от доставчика: деактивиран) Активен: активен (работи) от сб. 2020-11-07 12:58:09 UTC; Преди 5s Документи: мъж: httpd.услуга (8) Основен PID: 175 (httpd) Състояние: „Стартирано, слушане на: порт 80“ Задачи: 213 (ограничение: 11069) Памет: 27.6M CGroup: / система.парче / httpd.услуга ├─175 / usr / sbin / httpd -DFOREGROUND ├─176 / usr / sbin / httpd -DFOREGROUND ├─177 / usr / sbin / httpd -DFOREGROUND ├─178 / usr / sbin / httpd -DFOREGROUND └─179 / usr / sbin / httpd -DFOREGROUND

Създайте примерна страница в контейнера, която да се обслужва от Apache за демонстрация

[[имейл защитен] ~] # vi / var / www / html / index.html     Лъжица-нож     

Относно SELinux


SELinux ви дава възможност да ограничите привилегиите, свързани с изпълнението на процеси, и да намалите щетите, които биха могли да възникнат от експлоатацията на уязвимости на системата и приложенията. Поради тази причина се препоръчва SELinux да се поддържа в режим на налагане, освен ако нямате основателна причина да го деактивирате.

Режими


Другият наличен режим за стартиране на SELinux в активирано състояние е Permissive. В този режим политиката на SELinux не се налага и достъпът не се отказва, но се регистрират откази за действия, които биха били отказани, ако се изпълняват в режим на налагане.

След това рестартирайте Apache вътре в контейнера и излезте.

[[имейл защитен] ~] # systemctl рестартирайте httpd

Стъпка 8: Достъп до външни приложения във вътрешността на контейнери

Е, сега, след като сте разположили приложението си върху даден контейнер (например команда Apache отгоре), как точно вашата целева аудитория ще има достъп до това, което хоствате отвън? Можете да използвате правила на защитната стена или по-елегантно, можете да разположите обратен прокси за насочване на трафика към вашите приложения.

Използване на обратен прокси сървър като Nginx

Инсталирайте уеб сървъра Nginx на вашата хост система CentOS 8:

sudo yum -y инсталирай vim nginx

Настройте Nginx HTTP прокси за услугата

Създайте нов конфигурационен файл.

sudo nano / etc / nginx / conf.г / ап1.конф

Променете този конфигурационен фрагмент, за да отговаря на вашата настройка. Имайте предвид, че Nginx ще слуша на порт 9090 и след това ще пренасочи трафика към контейнера, на който Apache работи на порт 80.

## App1 Upstreams upstream app1 сървър 10.80.35.177: 80; ## Забележете IP адреса на контейнера тук.  сървър слуша 9090; server_name app1.computingforgeeks.com; access_log / var / log / nginx / app1_access.дневник; error_log / var / log / nginx / app1_error.дневник; # Настройки на прокси proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; proxy_set_header X-Forwarded-Host $ host; proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $ схема; proxy_set_header X-Real-IP $ remote_addr; # Искане за местоположение на корен домейн / proxy_redirect off; proxy_pass http: // app1;  # Gzip gzip_types text / css text / less text / обикновен текст / xml application / xml application / json application / javascript; gzip на; 

За външен (публичен) достъп на вашето приложение е необходим валиден DNS запис.

Проверете синтаксиса на вашата конфигурация:

$ sudo nginx -t nginx: конфигурационният файл / etc / nginx / nginx.conf синтаксисът е добре nginx: конфигурационен файл / etc / nginx / nginx.conf тестът е успешен

Ако настройките върнат положителна обратна връзка, рестартирайте услугата nginx.

sudo systemctl рестартирайте nginx

Позволете порт 9090 на защитната стена

sudo firewall-cmd - permanent --add-port = 9090 / tcp sudo firewall-cmd --reload

Вече сме готови за достъп до нашето приложение. Отворете любимия си браузър и го насочете към FQDN или IP адреса и порта на Nginx прокси, току-що приключихме с конфигурирането. http: //: 9090. Трябва да видите страница като по-долу.

Заключение

Най-накрая успяхме да инсталираме, управляваме и администрираме lxd / lxc контейнери, заедно с хостинг на просто приложение в един от тях. Надяваме се, че ръководството беше толкова информативно, колкото очаквахте, и всичко работи добре за вас. Да ви видим в блога е достатъчно, за да върнем благодарността си за посещението и за лудата подкрепа. Проверете по-долу за други красиви ръководства.

Как да разположим LXD на CentOS 7 с Snap

Стартирайте Docker Containers, използвайки Podman и Libpod

Как да стартирам Docker / Podman контейнери като Systemd услуга

С iOS 12, местоположението на вашия iPhone може да се споделя автоматично с 911
Представете си, че шофирате, но не сте сигурни къде точно се намирате и страдате от някакъв спешен случай. Обаждате се на 911, но не можете да кажете ...
Facebook изброява аксесоари за оръжия в списък със забранени реклами за непълнолетни
Изглежда, че продължаваме да чуваме все повече и повече за всички начини, по които Facebook е онеправдал своите потребители. Може да е малко плашещо. ...
Роботът SmokeBot може да се използва за борба с пожари, когато пожарникарите не могат
Ако никога не сте участвали в пожар в сграда, нито по време, нито след неговото потушаване, може да се мъчите да видите дълбочината на ситуацията. Но ...