Виртуализация и хост-ноды

Контейнеры LXC в Proxmox VE: шаблоны, создание контейнера, IP-адреса и лимиты ресурсов

7 шагов 14 мин чтения 21 просмотров 0
Содержание

Не каждой задаче нужна полноценная виртуальная машина. Контейнеры LXC в Proxmox VE работают на ядре хоста, запускаются за секунду-две и потребляют гораздо меньше RAM и диска, чем виртуальные машины KVM, поэтому идеально подходят для сайтов, баз данных, мониторинга, прокси и внутренних инструментов на выделенном сервере или хост-ноде. В статье: загрузка шаблонов контейнеров, создание контейнеров в веб-интерфейсе и через pct, назначение публичного или приватного IP, ограничение CPU, памяти, диска и полосы пропускания, запуск Docker внутри контейнера и резервное копирование.

В контейнерах LXC работает только Linux, и они используют общее ядро хоста: изнутри контейнера нельзя загружать свои модули ядра и менять большинство параметров ядра. Для Windows, собственных ядер и всего, что вы продаёте недоверенным клиентам, используйте виртуальную машину KVM.

Контейнер LXC или виртуальная машина KVM?

Контейнер LXCВиртуальная машина KVM
Операционные системыТолько LinuxLinux, Windows, BSD
Накладные расходыОчень низкие, запуск за секундыВыше, полная загрузка ОС
ИзоляцияОбщее ядроПолная изоляция
Тюнинг ядра и модулиОграниченыПолный контроль
Типичное применениеСобственные сервисы, много небольших сайтовVPS для клиентов, Windows, хосты Docker

Шаг 1: Загрузка шаблона контейнера

Шаблоны — это готовые корневые файловые системы Debian, Ubuntu, Rocky Linux, AlmaLinux, Alpine и других дистрибутивов. В веб-интерфейсе откройте local → CT Templates → Templates или воспользуйтесь командной строкой на хосте. Имена файлов шаблонов содержат номер версии, поэтому копируйте точное имя из списка.

pveam update
pveam available --section system | grep -E 'debian-12|ubuntu-24.04|rockylinux-9|alpine'
pveam download local debian-12-standard_12.7-1_amd64.tar.zst   # use the exact name from the list
pveam list local

Шаг 2: Создание контейнера

В веб-интерфейсе нажмите Create CT и пройдите мастер: имя хоста и пароль root (или SSH-ключ), шаблон, размер диска, ядра CPU, память и сеть. Оставьте отмеченным Unprivileged container: в таком контейнере root отображается на непривилегированного пользователя хоста, что гораздо безопаснее. Тот же контейнер из командной строки:

pct create 101 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \
  --hostname web01 \
  --unprivileged 1 \
  --cores 2 --memory 2048 --swap 512 \
  --rootfs local-lvm:20 \
  --net0 name=eth0,bridge=vmbr0,ip=203.0.113.11/24,gw=203.0.113.1 \
  --nameserver 1.1.1.1 \
  --ssh-public-keys /root/.ssh/authorized_keys \
  --features nesting=1 \
  --onboot 1

pct start 101
pct enter 101          # open a root shell inside the container
pct list

Шаг 3: Сеть: публичный IP или приватный NAT

Публичный IP: подключите контейнер к мосту, через который идёт ваша публичная сеть (обычно vmbr0), и назначьте ему один из дополнительных IP со шлюзом этой подсети — точно так же, как для ВМ (см. назначение публичного IP виртуальной машине в Proxmox). Если дополнительные IP маршрутизируются на определённый MAC-адрес, укажите его через hwaddr= в параметрах net0.

Приватный NAT: чтобы запустить много контейнеров за единственным IP хоста, подключите их к приватному мосту, например vmbr1, и пробросьте нужные порты, как описано в статье настройка NAT в Proxmox VE:

pct set 102 --net0 name=eth0,bridge=vmbr1,ip=10.10.10.12/24,gw=10.10.10.1
pct reboot 102

Шаг 4: Ограничение CPU, памяти, диска и полосы пропускания

Все лимиты можно менять на работающем контейнере; большинство из них применяются сразу.

# CPU: 2 visible cores, but at most 1.5 cores of total CPU time
pct set 101 --cores 2 --cpulimit 1.5

# Memory and swap (MB)
pct set 101 --memory 1024 --swap 256

# Grow the root disk by 10 GB (disks can grow online but not shrink)
pct resize 101 rootfs +10G

# Bandwidth: rate is in MB/s, so 12.5 is roughly 100 Mbps
pct set 101 --net0 name=eth0,bridge=vmbr0,ip=203.0.113.11/24,gw=203.0.113.1,rate=12.5

pct config 101

Шаг 5: Запуск Docker внутри контейнера

Docker работает в непривилегированном контейнере, если включена опция nesting. Некоторым образам также нужна функция keyctl.

pct set 101 --features nesting=1,keyctl=1
pct reboot 101
pct enter 101
# inside the container, install Docker as usual (see our Docker guide)

Для продакшн-хостов Docker, особенно с большим числом контейнеров или специальными драйверами хранилища, виртуальная машина KVM по-прежнему остаётся более предсказуемым вариантом.

Шаг 6: Резервное копирование, снапшоты и клонирование

# Snapshot before risky changes (requires LVM-thin, ZFS or Ceph storage)
pct snapshot 101 before-upgrade
pct rollback 101 before-upgrade

# Full backup with compression (see our Proxmox backup guide for schedules)
vzdump 101 --mode snapshot --storage local --compress zstd

# Clone a container you have prepared as a base
pct clone 101 105 --hostname web05 --full 1

О резервном копировании по расписанию и восстановлении читайте в статье резервные копии и снапшоты в Proxmox VE.

Частые вопросы

В контейнере нет доступа в интернет

Проверьте IP, префикс и шлюз в pct config, правильность моста и DNS в /etc/resolv.conf внутри контейнера. Изнутри выполните ping -c3 1.1.1.1, а затем ping -c3 google.com, чтобы отделить проблемы маршрутизации от проблем с DNS. Также убедитесь, что контейнер не блокируется файрволом Proxmox.

Можно ли потом превратить контейнер в виртуальную машину?

Напрямую нет. Создайте ВМ и перенесите данные или приложение, например с помощью rsync (см. наше руководство по переносу сервера).

Сколько контейнеров выдержит один сервер?

Это зависит от нагрузки, а не от Proxmox. Поскольку накладные расходы контейнеров невелики, сервер с 64 ГБ RAM спокойно вместит десятки небольших сайтов или сервисов. Следите на хосте за RAM, дисковым вводом-выводом и CPU steal и оставляйте запас на пиковые нагрузки.

Если проблема не решена, создайте тикет — техническая поддержка IMIDC работает 24/7. Укажите IP сервера, версию Proxmox VE, ID контейнера и его конфигурацию (pct config ID), а также полный текст ошибки, чтобы мы быстрее нашли причину.

Помог ли вам данный ответ?

Похожие руководства