LXC / LXD |
#234 |
Úvod do práce s kontejnery pomocí LXC / LXD – psáno pro Ubuntu 20.04.
Základní instalace
sudo lxd init
Would you like to use LXD clustering? (yes/no) [default=no]: no
Do you want to configure a new storage pool? (yes/no) [default=yes]: yes
Name of the new storage pool [default=default]: default
Name of the storage backend to use (btrfs, dir, lvm, zfs, ceph) [default=zfs]: zfs
Create a new BTRFS pool? (yes/no) [default=yes]: yes
Would you like to use an existing empty block device (e.g. a disk or partition)? (yes/no) [default=no]: no
Size in GB of the new loop device (1GB minimum) [default=23GB]: 20GB
Would you like to connect to a MAAS server? (yes/no) [default=no]: no
Would you like to create a new local network bridge? (yes/no) [default=yes]: yes
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: none
Would you like the LXD server to be available over the network? (yes/no) [default=no]: no
Would you like stale cached images to be updated automatically? (yes/no) [default=yes] yes
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: no
Velikost loop device je vhodné dát spíš větší – vyhnete se tak zpočátku operacím, které umožňují přidělit větší místo pro diskový prostor dostupný jednotlivým kontejnerům.
Síť
macvlan – IP adresy přiděluje DHCP server v lokální síti
Tento síťový profil funguje tak, že síťové rozhraní v kontejneru dostává IP adresy z DHCP serveru lokální síťě.
Nejprve zjistíme id síťové karty:
ip route show default 0.0.0.0/0
Zobrazí se něco jako
default via 10.xxx.xxx.xxx dev eno0 proto dhcp src 10.xxx.xxx.yyy metric 100
ID sítové karty je v tomto případě eno0
.
Teď přidáme nový profil a nastavíme ho (s naším ID síťové karty
v parametru parent
):
lxc profile create macvlan
lxc profile device add macvlan eth0 nic nictype=macvlan parent=eno0
Nový kontejner vytvoříme s uvedením profilu macvlan
:
lxc launch ubuntu:20.04 NAZEV --profile default --profile macvlan
macvlan – veřejné (fixní) IP adresy
Předpokladem je, že fyzická síťová karta má nastavenou fixní IP adresu ve stejném adresním rozsahu, jako budou budoucí IP adresy kontejnerů.
Nejprve zjistíme id síťové karty:
ip route show default 0.0.0.0/0
Zobrazí se něco jako
default via xxx.xxx.xxx.xxx dev eno0 proto static
ID sítové karty je v tomto případě eno0
.
Teď přidáme nový profil a nastavíme ho (s naším ID síťové karty
v parametru parent
):
lxc profile create macvlan
lxc profile device add macvlan eth0 nic nictype=macvlan parent=eno0
Nový kontejner vytvoříme s uvedením profilu macvlan
:
lxc launch ubuntu:20.04 NAZEV --profile default --profile macvlan
Přihlasíme se do kontejneru:
lxc shell NAZEV
Vytvoříme nový soubor:
touch cat /etc/netplan/50-static-public-ip.yaml
A vyplníme jej následujícím obsahem s konkrétními síťovými údaji:
nano cat /etc/netplan/50-static-public-ip.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
dhcp6: no
addresses:
- xxx.xxx.xxx.yyy/24
gateway4: xxx.xxx.xxx.1
nameservers:
addresses:
- 88.86.116.45
- 8.8.8.8
Po aplikování tohoto nastavení by již kontejner měl být na síti:
netplan --debug apply
Zdroj: https://blog.simos.info/…-containers/
Vytvoření nového storage na volném fyzickém disku
lxc storage create disk1 zfs source=/dev/sdb
Vytvoření nového kontejneru s výběrem storage
lxc launch IMAGE NAZEV --profile default --profile macvlan --storage=disk1
Parametrem image
říkáme, jaký linux chceme nainstalovat:
Distribuce | Image |
---|---|
Ubuntu | Názvy obrazů jsou ve tvaru ubuntu:<version> , tj. např.
ubuntu:20.04 , ubuntu:18.04 apod. |
Debian | Názvy obrazů jsou ve tvaru images:debian/<code-name> ,
tj. např. images:debian/buster ,
images:debian/stretch atd. |
Alpine | Názvy obrazů jsou ve tvaru images:alpine/<version> , tj.
např. images:alpine/3.13 ; existuje také
images:alpine/edge pro instalaci vývojové verze. |
Dostupné obrazy lze vypsat příkazem
lxc image list images: [distribuce] [architektura]
, tj. např.
lxc image list images: fedora amd64
. Parametry distibuce a
architektura jsou nepovinné – ale výsledný seznam je dlouhý.
Příkazová řádka
Shell
Dovnitř kontejneru se dostaneme příkazem
lxc shell NAZEV
Práce probíhá pod uživatelem root.
SSH
Pro přístup přes ssh musíme nejdříve vytvořit uživatele a nastavit mu veřejný klíč:
adduser UZIVATEL
adduser UZIVATEL sudo
su UZIVATEL
cd /home/UZIVATEL
mkdir .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
Veřejný klíč si uložíme do clipboardu a textovým editorem ho přidáme
do souboru .ssh/authorized_keys
. Poté se již můžeme přihlásit
přes ssh.
Základní příkazy pro ovládání
Seznam kontejnerů
lxc list
Spuštění kontejneru
lxc start NAZEV
Zastavení kontejneru
lxc stop NAZEV
Výmaz kontejneru
lxc delete NAZEV
Před výmazem musíme kontejner zastavit příkazem lxc stop
.
Lze také použít varinatu lxc delete NAZEV --force
.
Práce se soubory
Kopírování souboru do kontejneru
lxc file push NAZEV-SOUBORU KONTEJNER/home/user/cesta/k/souboru/
POZOR: cílová cesta musí končit
lomítkem /
.
Pokročilé
Přepnutí na privilegovaný kontejner
Tohle nedělejte, pokud nevíte co děláte!
lxc stop KONTEJNER
lxc config set KONTEJNER security.privileged true
lxc start KONTEJNER