GNU/Linux >> Znalost Linux >  >> Linux

Zákulisí s linuxovými kontejnery

Můžete mít kontejnery Linuxu bez Dockeru? Bez OpenShift? Bez Kubernetes?

Ano můžeš. Léta předtím, než Docker učinil kontejnery běžným pojmem (pokud žijete v datovém centru, tedy), projekt LXC vyvinul koncept provozování jakéhosi virtuálního operačního systému, který sdílí stejné jádro, ale obsahuje v rámci definovaných skupin procesů.

Docker stavěl na LXC a dnes existuje spousta platforem, které přímo i nepřímo využívají práci LXC. Většina těchto platforem dělá vytváření a údržbu kontejnerů vznešeně jednoduchými a pro velká nasazení má smysl používat takové specializované služby. Ne každý však spravuje velké nasazení nebo má přístup k velkým službám, aby se dozvěděl o kontejnerizaci. Dobrou zprávou je, že můžete vytvářet, používat a učit se kontejnery s ničím jiným než s PC s Linuxem a tímto článkem. Tento článek vám pomůže porozumět kontejnerům tím, že se podíváte na LXC, jak to funguje, proč to funguje a jak řešit problémy, když se něco pokazí.

Vyhnout se jednoduchosti

Linuxové kontejnery

  • Co jsou kontejnery systému Linux?
  • Úvod do terminologie kontejnerů
  • Stáhnout:Containers Primer
  • Operátoři Kubernetes:Automatizace platformy pro orchestraci kontejnerů
  • eKniha:Vzory Kubernetes pro navrhování cloudových nativních aplikací
  • Co je Kubernetes?

Pokud hledáte rychlého průvodce LXC, podívejte se na vynikající webovou stránku Linux Containers .

Instalace LXC

Pokud ještě není nainstalován, můžete LXC nainstalovat pomocí správce balíčků.

Na Fedoře nebo podobném zadejte:

$ sudo dnf install lxc lxc-templates lxc-doc 

V Debianu, Ubuntu a podobných systémech zadejte:

$ sudo apt install lxc 

Vytvoření síťového mostu

Většina kontejnerů předpokládá, že bude k dispozici síť, a většina kontejnerových nástrojů očekává, že uživatel bude moci vytvářet virtuální síťová zařízení. Nejzákladnější jednotkou vyžadovanou pro kontejnery je síťový most, který je víceméně softwarovým ekvivalentem síťového přepínače. Síťový přepínač je trochu jako chytrý Y-adaptér, který se používá k rozdělení konektoru pro sluchátka, takže dva lidé mohou slyšet totéž se samostatnými sluchátky, až na to, že místo zvukového signálu síťová data přemosťuje síťový přepínač.

Můžete si vytvořit svůj vlastní softwarový síťový most, takže váš hostitelský počítač a váš kontejner OS mohou odesílat a přijímat různá síťová data přes jediné síťové zařízení (buď váš ethernetový port nebo bezdrátovou kartu). Toto je důležitý koncept, který se často ztratí, jakmile přejdete z ručního generování kontejnerů, protože bez ohledu na velikost vašeho nasazení je vysoce nepravděpodobné, že budete mít vyhrazenou fyzickou síťovou kartu pro každý spuštěný kontejner. Je důležité pochopit, že kontejnery komunikují se zařízeními virtuální sítě, takže víte, kde začít s odstraňováním problémů, pokud kontejner ztratí připojení k síti.

Chcete-li na svém počítači vytvořit síťový most, musíte mít příslušná oprávnění. Pro tento článek použijte sudo příkaz pro práci s právy root. (Dokumenty LXC však poskytují konfiguraci, která uživatelům uděluje oprávnění to provést bez použití sudo .)

$ sudo ip link add br0 type bridge 

Ověřte, že bylo vytvořeno imaginární síťové rozhraní:

$ sudo ip addr show br0
7:br0: mtu 1500 qdisc
   noop state DOWN group default qlen 1000
   link/ether 26:fa:21:5f :cf:99 brd ff:ff:ff:ff:ff:ff

Od br0 je považováno za síťové rozhraní, vyžaduje vlastní IP adresu. Vyberte platnou místní IP adresu, která není v konfliktu s žádnou existující IP adresou ve vaší síti, a přiřaďte ji br0 zařízení:

$ sudo ip addr add 192.168.168.168 dev br0 

A nakonec se ujistěte, že br0 je v provozu:

$ sudo ip link set br0 up 

Nastavení konfigurace kontejneru

Konfigurační soubor pro kontejner LXC může být tak složitý, jak je potřeba k definování místa kontejneru ve vaší síti a hostitelském systému, ale pro tento příklad je konfigurace jednoduchá. Vytvořte soubor ve svém oblíbeném textovém editoru a definujte název kontejneru a požadovaná nastavení sítě:

lxc.utsname =opensourcedotcom
lxc.network.type =veth
lxc.network.flags =up
lxc.network.link =br0
lxc.network.hwaddr =4a:49:43:49:79:bd
lxc.network.ipv4 =192.168.168.1/24
lxc.network.ipv6 =2003:db8:1:0:214:1234:fe0b :3596

Uložte tento soubor do svého domovského adresáře jako mycontainer.conf .

lxc.utsname je libovolné. Svému kontejneru můžete říkat, jak chcete; je to název, který použijete při spouštění a zastavování.

Typ sítě je nastaven na veth , což je druh virtuálního ethernetového patch kabelu. Myšlenka je taková, že veth připojení jde z kontejneru do mostového zařízení, které je definováno lxc.network.link vlastnost, nastavte na br0 . IP adresa kontejneru je ve stejné síti jako přemosťovací zařízení, ale je jedinečná, aby se zabránilo kolizím.

S výjimkou veth typ sítě a nahoru příznak sítě, vymyslíte všechny hodnoty v konfiguračním souboru. Seznam vlastností je k dispozici na adrese man lxc.container.conf . (Pokud ve vašem systému chybí, vyhledejte ve správci balíčků samostatné balíčky dokumentace LXC.) V /usr/share/doc/lxc/examples je několik příkladů konfiguračních souborů , kterou byste si měli prohlédnout později.

Spuštění shellu kontejneru

V tuto chvíli jste ve dvou třetinách cesty k provozuschopnému kontejneru:máte síťovou infrastrukturu a nainstalovali jste imaginární síťové karty do imaginárního PC. Vše, co nyní potřebujete, je nainstalovat operační systém.

I v této fázi však můžete vidět LXC při práci spuštěním shellu v prostoru kontejneru.

$ sudo lxc-execute --name basic \
--rcfile ~/mycontainer.conf /bin/bash \
--logfile mycontainer.log
#

V tomto velmi holém kontejneru se podívejte na konfiguraci sítě. Mělo by vám to připadat známé, a přesto jedinečné.

# /usr/sbin/ip addr show
1:lo: mtu 65536 qdisc noqueue state [...]
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 rozsah hostitele lo
[...]
22:eth0@if23: [...] qlen 1000
link/ether 4a:49:43:49:79:bd brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.168.167/24 brd 192.168.168.255 rozsah globální eth0
   valid_lft navždy preferovaný_lft navždy
inet6 2003:db8:1:0:2414:063 globální rozsah />   valid_lft navždy preferovaný_lft navždy
[...]

Váš kontejner zná svou falešnou síťovou infrastrukturu a známé, ale jedinečné jádro.

# uname -av
Linux opensourcedotcom 4.18.13-100.fc27.x86_64 #1 SMP St 10. října 18:34:01 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Použijte konec příkaz k opuštění kontejneru:

# exit 

Instalace operačního systému kontejneru

Vytváření plně kontejnerizovaného prostředí je mnohem složitější než kroky vytváření sítí a konfigurace, takže si můžete vypůjčit šablonu kontejneru od LXC. Pokud žádné šablony nemáte, vyhledejte ve svém softwarovém úložišti samostatný balíček šablon LXC.

Výchozí šablony LXC jsou dostupné v /usr/share/lxc/templates .

$ ls -m /usr/share/lxc/templates/
lxc-alpine, lxc-altlinux, lxc-archlinux, lxc-busybox, lxc-centos, lxc-cirros, lxc-debian, lxc- stáhnout, lxc-fedora, lxc-gentoo, lxc-openmandriva, lxc-opensuse, lxc-oracle, lxc-plamo, lxc-slackware, lxc-sparclinux, lxc-sshd, lxc-ubuntu, lxc-loud>

Vyberte si své oblíbené a poté vytvořte nádobu. Tento příklad používá Slackware.

$ sudo lxc-create --name slackware --template slackware 

Sledování provádění šablony je téměř stejně vzdělávací jako vytváření šablony od začátku; je velmi podrobný a můžete vidět, že lxc-create nastaví "kořen" kontejneru na /var/lib/lxc/slackware/rootfs a do tohoto adresáře se stahuje a instaluje několik balíčků.

Čtení souborů šablon vám poskytne ještě lepší představu o tom, co je zahrnuto:LXC nastaví minimální strom zařízení, společné soubory pro souběžný tisk, tabulku systémů souborů (fstab), init soubory a tak dále. Zabraňuje také spuštění některých služeb, které v kontejneru nedávají smysl (například udev pro detekci hardwaru). Protože šablony pokrývají široké spektrum typických linuxových konfigurací, pokud máte v úmyslu navrhnout vlastní, je moudré založit svou práci na šabloně, která se nejvíce blíží tomu, co chcete nastavit; jinak se určitě dopustíte chyb nebo opomenutí (když nic jiného), na které projekt LXC již narazil a započítal je.

Jakmile nainstalujete minimální prostředí operačního systému, můžete spustit kontejner.

$ sudo lxc-start --name slackware \
--rcfile ~/mycontainer.conf

Spustili jste kontejner, ale nepřipojili jste se k němu. (Na rozdíl od předchozího základního příkladu tentokrát nespouštíte pouze shell, ale kontejnerový operační systém.) Připojte se k němu podle názvu.

$ sudo lxc-attach --name slackware
#

Zkontrolujte, zda IP adresa vašeho prostředí odpovídá adrese v konfiguračním souboru.

# /usr/sbin/ip addr ZOBRAZIT | grep eth
34:eth0@if35: mtu 1500 [...] 1000
link/ether 4a:49:43:49:79:bd brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.168.167/24 brd 192.168.168.255 rozsah globální eth0

Vyjděte z kontejneru a vypněte jej.

# exit
$ sudo lxc-stop slackware

Spouštění skutečných kontejnerů pomocí LXC

V reálném životě LXC usnadňuje vytváření a provozování bezpečných a zabezpečených kontejnerů. Kontejnery ušly od představení LXC v roce 2008 dlouhou cestu, takže využijte odborných znalostí jeho vývojářů ve svůj prospěch.

Zatímco instrukce LXC na linuxcontainers.org celý proces zjednodušují, tato prohlídka manuálu by vám měla pomoci pochopit, co se děje v zákulisí.


Linux
  1. Začněte s NetworkManagerem v systému Linux

  2. Plánování úloh pomocí linuxového příkazu cron

  3. Naplánujte si úlohu pomocí příkazu Linux at

  1. Analyzujte linuxové jádro pomocí ftrace

  2. Počítejte v linuxovém shellu s GNU bc

  3. Spravujte síťová připojení z příkazového řádku Linuxu pomocí nmcli

  1. Začínáme s linuxovými firewally

  2. Mají distribuce Linuxu stále význam s kontejnery?

  3. Myšlenky na sledování změn souborů s Linuxem přes síť