Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
howto:sysadmin:lxd [2022/04/19 13:31] ryzhikov создано |
howto:sysadmin:lxd [2024/12/21 03:57] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== LXD ====== | ====== LXD ====== | ||
- | Информация о контейнере и список снапшотов: | + | <code bash> |
- | lxc info <containername> | + | # Информация о контейнере и список снапшотов: |
+ | lxc info <containername> | ||
- | Сделать снапшот контейнера: | + | # Сделать снапшот контейнера: |
- | lxc snapshot <containername> <snapshotname> | + | lxc snapshot <containername> <snapshotname> |
- | | + | |
+ | # Стартовать контейнер: | ||
+ | lxc start <containername> | ||
+ | </code> | ||
+ | |||
+ | ===== Монтирование директорий по NFS ===== | ||
+ | |||
+ | С этим сложности. В непривилегированных контейнерах не получится монтировать что-то по NFS. | ||
+ | |||
+ | Решение: примонтировать по NFS в на LXD-хосте, а затем подключить примонтированную директорию к контейнеру в качестве диска. | ||
+ | |||
+ | :!: В LXD обнаружился занятный баг: если подключенную диреткорию не удается примонтировать по NFS, то контейнер не сможет стартовать. Установка опции required диска в false не поможет. Чтобы контейнер смог стартовать, директория должна либо отсутствовать, либо быть примонтирована без ошибок. | ||
+ | |||
+ | Поэтому automount работать не будет, и вместо него нужно использовать autofs: | ||
+ | |||
+ | <file txt /etc/auto.nfsmounts> | ||
+ | daqserv1 -fstype=nfs4,soft,rsize=131072,wsize=32768 daqserv1:/data | ||
+ | </file> | ||
+ | |||
+ | <file yaml lxc profile edit bind-data-dirs> | ||
+ | devices: | ||
+ | daqserv1: | ||
+ | path: /daqserv1/ | ||
+ | required: "false" | ||
+ | source: /nfsmounts/daqserv1/ | ||
+ | type: disk | ||
+ | </file> | ||
+ | |||
+ | |||
+ | ===== Проблемы с Docker ===== | ||
+ | Docker перезаписывает правила фаервола (баг https://github.com/docker/for-linux/issues/103, который разработчики пока не починили). После перезагрузки новые правила фаервола заблокировали связь контейнеров LXD. | ||
+ | |||
+ | Решение — самостоятельно добавить правила фаервола, разрешающие общение контейнеров LXD: | ||
+ | sudo iptables -I DOCKER-USER -i lxdbr0 -j ACCEPT -m comment --comment "generated for LXD network lxdbr0" | ||
+ | sudo iptables -I DOCKER-USER -o lxdbr0 -j ACCEPT -m comment --comment "generated for LXD network lxdbr0" | ||
+ | |||
+ | |||
+ | Автоматическое добавление правил в хуке на ifup может не работать, поскольку чейны DOCKER могут еще не быть созданы к этому моменту. | ||
+ | |||
+ | Поэтому создаем свой сервис, который будет стартовать после docker и добавлять нужные правила: | ||
+ | |||
+ | <file sh /usr/local/bin/post-docker.sh> | ||
+ | |||
+ | #!/usr/bin/env bash | ||
+ | |||
+ | date > /var/log/post-docker-timestamp | ||
+ | iptables -I DOCKER-USER -i lxdbr0 -j ACCEPT -m comment --comment "generated for LXD network lxdbr0" | ||
+ | iptables -I DOCKER-USER -o lxdbr0 -j ACCEPT -m comment --comment "generated for LXD network lxdbr0" | ||
+ | </file> | ||
+ | |||
+ | <file ini /etc/systemd/system/postdocker.service> | ||
+ | |||
+ | [Unit] | ||
+ | Description=Post Docker | ||
+ | After=docker.service | ||
+ | BindsTo=docker.service | ||
+ | ReloadPropagatedFrom=docker.service | ||
+ | |||
+ | [Service] | ||
+ | Type=oneshot | ||
+ | ExecStart=/usr/local/bin/post-docker.sh | ||
+ | ExecReload=/usr/local/bin/post-docker.sh | ||
+ | RemainAfterExit=yes | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=multi-user.target | ||
+ | </file> | ||
+ | |||
+ | |||
+ | chmod +x /usr/local/bin/post-docker.sh | ||
+ | systemctl daemon-reload | ||
+ | systemctl enable postdocker.service | ||