Поиск по сайту:

Установите LXC (контейнеры Linux) в RHEL, Rocky и AlmaLinux.


LXD описывается как менеджер контейнеров и виртуальных машин нового поколения, который предлагает захватывающие возможности для систем Linux, работающих внутри контейнеров или в качестве виртуальных машин.

Он предоставляет образы для огромного количества дистрибутивов Linux с поддержкой широкого выбора серверных хранилищ и типов сетей. Он также предоставляет возможность установки изображений на отдельный ПК/ноутбук и даже в облачный экземпляр.

LXD позволяет управлять контейнерами и виртуальными машинами тремя способами. Вы можете использовать клиент lxc или инструмент командной строки, REST API или даже сторонние интеграции.

Возможности LXD

Примечательные функции LXD включают в себя:

  • LXD основан на образах для широкого выбора дистрибутивов Linux.
  • Он построен с учетом безопасности как главного приоритета.
  • Он предоставляет REST API и инструмент командной строки lxc для взаимодействия с контейнерами.
  • Он обеспечивает поддержку широкого спектра серверных частей хранения, томов хранения и пулов хранения.
  • Управление сетью осуществляется посредством создания мостовых сетей и межхостовых туннелей.
  • Расширенный контроль над ресурсами, такими как ЦП, ОЗУ, использование диска, блочный ввод-вывод и ресурсы ядра.
  • Гибкость и масштабируемость. Вы можете развернуть контейнеры на своем ПК и настроить кластер, который может объединять тысячи контейнеров на различных узлах.

Что такое LXC?

Не путать с клиентским инструментом командной строки lxc, предоставляемым LXD, LXC (Linux Container) популярная технология виртуализации на уровне ОС, которая использует мощный API и другие инструменты, позволяющие пользователям беспрепятственно создавать контейнеры и виртуальные машины и управлять ими на одном хосте. Он включает в себя шаблоны, язык инструментов и привязки библиотек.

Возможности LXC

LXC использует следующие функции ядра для управления процессами:

  • Пространства имен ядра: pid, mount, uts network и user.
  • CGroups (контрольные группы).
  • Chroots — использование Pivot_root.
  • Политика Seccomp.
  • Профили SELinux и Apparmor.

Linuxcontainers.org — это головной проект, лежащий в основе LXD и LXC. Его цель — предложить дистрибутив и платформу, независимую от поставщиков, для контейнерных технологий Linux.

Закончив с этим введением, мы теперь продемонстрируем, как создавать контейнеры LXC и управлять ими в дистрибутивах Linux на базе RHEL, таких как CentOS, Rocky Linux,< и AlmaLinux.

Требования

Рабочая операционная система Linux с минимальной установкой:

  • Установка RHEL Linux
  • Установка CentOS Linux
  • Установка Рокки Линукс
  • Установка АлмаЛинукс

Шаг 1. Установите для SELinux разрешительный режим.

Сразу же мы начнем с настройки SELinux и установки для него разрешающего режима. Но прежде чем мы это сделаем, давайте обновим системные пакеты следующим образом:

sudo dnf update

Чтобы установить для SELinux разрешающий режим, выполните команду:

sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config

Чтобы это вступило в силу, перезагрузите сервер.

sudo reboot

И подтвердите статус SELinux.

getenforce

Шаг 2. Установите репозиторий EPEL

EPEL — это репозиторий Проекта Fedora, который предоставляет набор высококачественных пакетов для RedHat Enterprise Linux и других дистрибутивов на основе RHEL.

sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
OR
sudo yum install epel-release

Шаг 3. Добавьте параметры ядра

Прежде чем мы установим LXD, необходимы некоторые дополнительные параметры. Поэтому переключитесь на пользователя root:

su -

И добавьте параметры следующим образом.

grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
grubby --args="namespace.unpriv_enable=1" --update-kernel="$(grubby --default-kernel)"
echo "user.max_user_namespaces=3883" | sudo tee -a /etc/sysctl.d/99-userns.conf

Как только параметры будут установлены, продолжайте и включите Snap.

Шаг 4. Установите и включите Snap

Самый простой способ установить LXD на RHEL 8 — установить его как пакет snap. Но сначала давайте установим snap следующим образом.

sudo dnf install snapd

При этом будет установлен демон или служба napd вместе с другими зависимостями Python, как показано.

Установив Snap, продолжите работу и включите основной коммуникационный сокет snap.

sudo systemctl enable --now snapd.socket

Кроме того, включите классическую поддержку, создав символическую ссылку с /var/lib/snapd/snap на /snap.

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

Чтобы обновить пути привязки, перезагрузите систему.

sudo reboot

Шаг 5. Установите диспетчер контейнеризации LXD

Существует два способа установки LXD из привязки. Вы можете установить последнюю версию LXD, как показано.

sudo snap install —-classic lxd

Альтернативно вы можете установить последнюю стабильную версию LTS следующим образом:

sudo snap install lxd --channel=4.0/stable

Чтобы иметь возможность выполнять команды lxc без переключения на пользователя sudo, добавьте текущего вошедшего в систему пользователя в группу lxd.

sudo usermod -aG lxd $USER

Убедитесь, что пользователь добавлен в группу lxd, перечислив все группы, к которым он принадлежит.

groups tecmint

Затем выполните команду newgrp следующим образом.

newgrp lxd

Команда изменяет текущий идентификатор группы во время сеанса входа в систему. Он устанавливает текущий идентификатор группы для именованной группы, то есть lxd.

Шаг 6: Инициализация среды LXD

Прежде чем мы начнем создавать контейнеры LXD и управлять ими, нам необходимо инициализировать среду LXD, выполнив команду.

lxc init

Далее следует ряд подсказок, которые позволят вам настроить среду. Значения по умолчанию будут работать нормально, но вы можете указать свои собственные предпочтения.

Мы создали пул носителей под названием tec-pool с опцией lvm в качестве серверной части.

Чтобы проверить только что настроенную среду LXD, вы можете использовать ряд команд. Например, чтобы отобразить профиль LXD по умолчанию, выполните:

lxc profile show default

Чтобы отобразить сетевые адаптеры и адреса IPv4 и IPv6, выполните:

lxc network list

Вы можете еще больше сузить его и отобразить более подробную информацию об интерфейсе lxdbr0 следующим образом.

lxc network show lxdbr0

Вы также можете проверить пул носителей.

lxc storage list

Вы также можете получить подробную информацию о пуле хранения данных.

lxc storage show tec-pool

Чтобы просмотреть список запущенных контейнеров lxc, выполните команду:

lxc list

На данный момент у нас еще нет работающих контейнеров. Таким образом, вы получите пустую таблицу только с метками столбцов.

Шаг 7. Листинг готовых образов контейнеров LXC

Как и Docker, платформа LXC предоставляет репозиторий готовых образов, из которых можно создавать контейнеры. Чтобы просмотреть все готовые образы для всех операционных систем, включая виртуальные машины, выполните команду:

lxc image list images: 

При этом заполняется огромный список образов контейнеров и виртуальных машин для всех операционных систем. Чтобы сузить список до конкретного дистрибутива Linux, используйте синтаксис:

lxc image list images: grep -i os-type

Например, чтобы найти доступные изображения для Rocky Linux, выполните команду:

lxc image list images: grep -i rocky

Если вы ищете образы Debian, выполните команду:

lxc image list images: grep -i debian

Шаг 8. Запуск контейнеров LXC

Чтобы запустить контейнеры lxc, используйте синтаксис:

lxc launch images:{distro}/{version}/{arch} {container-name-here}

Здесь мы запустим 2 контейнера: tec-container1 из Debian 10 и tec-container2 из Rocky Linux 8. .

lxc launch images:debian/10/amd64 tec-container1
lxc launch images:rockylinux/8/amd64 tec-container2 

Чтобы просмотреть контейнеры lxc, выполните команду:

lxc list

В выводе отображается множество информации о контейнерах. Сюда входят имена контейнеров, состояние (работает или остановлено), адреса IPv4 и IPv6, тип (контейнер или виртуальная машина) и количество снимков.

Чтобы просмотреть только запущенные контейнеры, выполните команду:

lxc list | grep -i running

Аналогично для остановленных контейнеров выполните:

lxc list | grep -i stopped

Вы можете запросить информацию и показатели контейнера, такие как запущенные процессы, использование ЦП и памяти, а также пропускную способность, используя команду:

lxc info tec-container1 

Шаг 9. Получите доступ оболочки к контейнеру LXC

Вы можете получить доступ bash к контейнеру, используя синтаксис:

lxc exec container-name  name-of-the-shell

Чтобы получить доступ к оболочке tec-container1, мы выполним команду:

lxc exec tec-container1 bash

Получив доступ к оболочке, вы можете начать взаимодействовать с контейнером как пользователь root, выполняя общие команды оболочки, включая обновление системы, как показано:

apt update

Для выхода из контейнера выполните команду:

exit

Альтернативно вы можете выполнять команды непосредственно в контейнере без доступа к оболочке, используя следующий формат:

lxc exec container-name command

Например, вы можете запустить следующие команды, которые обновят списки пакетов, проверят версию ОС, работающую в контейнере Debian, и проверят дату.

lxc exec tec-container1 apt update
lxc exec tec-container1 cat /etc/debian_version
lxc exec tec-container1 date

Шаг 10. Извлеките/отправьте файл(ы) в контейнер LXC

Другая операция, которую вы можете выполнить, — это передача файлов в контейнер и из контейнера. Чтобы продемонстрировать это, мы создадим новый каталог в контейнере LXD и перейдем в него.

mkdir data && cd data

Далее мы создадим образец файла и добавим некоторые данные. Для этого мы создадим образец файла с помощью редактора vim.

vim file1.txt

Далее мы напечатаем образец текста и сохраним файл.

Hello World, Welcome to LXD containers.

Чтобы перетащить файл из контейнера в локальную хост-систему, мы будем использовать синтаксис:

lxc file pull {container-name}/{path/to/file} {/path/to/local/dest}

В этом случае команда будет такой:

lxc file pull tec-container2/root/data/file1.txt /home/tecmint

Чтобы отправить или скопировать файл из локального каталога в контейнер, используйте синтаксис:

lxc file push {/path/to/file} {container-nane} /path/to/dest/dir/

В этом случае у нас есть образец файла в домашнем каталоге с именем file2.txt, который копируется по пути /root/data/ в tec-container2<. контейнер.

lxc file push /home/tecmint/file2.txt tec-container2/root/data/

Чтобы подтвердить существование файла в контейнере, запустим:

lxc exec tec-container2 ls /root/data

Шаг 11. Остановите/запустите/перезапустите и удалите контейнеры LXC.

С помощью утилиты командной строки lxc вы можете выполнять задачи управления контейнерами, такие как остановка, запуск, перезапуск и удаление контейнеров.

Чтобы остановить контейнер lxc, используйте синтаксис:

lxc stop container-name

Например, чтобы остановить tec-container1, мы выполним команду:

lxc stop tec-container1

Чтобы запустить контейнер lxc, используйте синтаксис:

lxc start container-name

Например, чтобы запустить tec-container1, мы выполним:

lxc start tec-container1

Чтобы перезапустить оба контейнера lxc, мы выполним команду:

lxc restart tec-container1
lxc restart tec-container2

Чтобы удалить контейнер lxc, необходимо сначала остановить контейнер, а затем удалить его. Например, для удаления выполним команды:

lxc stop tec-container1
lxc delete tec-container1

Альтернативно вы можете объединить эти две команды, как показано.

lxc stop tec-container1 && lxc delete tec-container1

Шаг 12. Получите справку по параметрам командной строки LXC

Чтобы получить справку по другим параметрам команды, предоставляемым LXC, просто запустите команду:

lxc --help
OR
lxc command --help e.g
lxc file --help

Заключение

Это было глубокое погружение в контейнеры LXD и способы их создания и управления ими с помощью утилиты командной строки lxc. Мы надеемся, что это руководство оказалось для вас полезным.