LXD - Линуксийн контейнер системийн үндсэн шинж чанарууд

LXD - Линуксийн контейнер системийн үндсэн шинж чанарууд

LXD нь дараагийн үеийн системийн контейнер менежер юм эх сурвалж. Энэ нь виртуал машинтай төстэй хэрэглэгчийн интерфэйсийг санал болгодог боловч оронд нь Линукс контейнер ашигладаг.

LXD цөм нь локал unix залгуураар, түүнчлэн тохирох тохиргоог суулгасан тохиолдолд сүлжээгээр дамжуулан REST API-г хангадаг давуу эрхтэй демон (үндсэн эрхээр ажилладаг үйлчилгээ). LXD-д өгөгдсөн тушаалын мөрийн хэрэгсэл гэх мэт үйлчлүүлэгчид энэ REST API-ээр дамжуулан хүсэлт гаргадаг. Энэ нь та локал хост эсвэл алсын хост руу хандаж байгаа эсэхээс үл хамааран бүх зүйл адилхан ажиллана гэсэн үг юм.

Энэ нийтлэлд бид LXD-ийн үзэл баримтлалын талаар дэлгэрэнгүй ярихгүй, бид баримт бичигт дурдсан бүх боломжуудыг авч үзэхгүй, тэр дундаа LXD-ийн хамгийн сүүлийн үеийн хувилбаруудад QEMU виртуал машинуудыг чингэлэгтэй зэрэгцүүлэн дэмжих талаар авч үзэхгүй. Үүний оронд бид чингэлэгийн менежментийн үндсэн зарчмуудыг сурах болно - хадгалах сан байгуулах, сүлжээ үүсгэх, контейнер ажиллуулах, нөөцийн хязгаарлалтыг хэрэгжүүлэх, агшин зуурын зургийг хэрхэн ашиглах, ингэснээр та LXD-ийн талаар үндсэн ойлголттой болох ба Линукс дээр контейнер ашиглах боломжтой болно.

Бүрэн мэдээллийг албан ёсны эх сурвалжаас авна уу:

Навигация

Суурилуулалт LXD ^

Ubuntu түгээлтүүд дээр LXD суулгаж байна ^

Ubuntu 19.10 түгээлтийн багцад lxd нэвтрүүлэг байна гэнэтийн багц:

apt search lxd

lxd/eoan 1:0.7 all
  Transitional package - lxd -> snap (lxd)

Энэ нь хоёр багцыг нэг дор суулгана гэсэн үг бөгөөд нэг нь системийн багц, нөгөөг нь гэнэтийн багц хэлбэрээр суулгана. Систем дээр хоёр багц суулгах нь багцын менежерээс snap багцыг устгасан тохиолдолд системийн багц өнчирч болзошгүй зарим асуудал үүсгэж болно.

Багц олох lxd snap repository дээр та дараах тушаалыг ашиглаж болно:

snap find lxd

Name             Version        Summary
lxd              3.21           System container manager and API
lxd-demo-server  0+git.6d54658  Online software demo sessions using LXD
nova             ocata          OpenStack Compute Service (nova)
nova-hypervisor  ocata          OpenStack Compute Service - KVM Hypervisor (nova)
distrobuilder    1.0            Image builder for LXC and LXD
fabrica          0.1            Build snaps by simply pointing a web form to...
satellite        0.1.2          Advanced scalable Open source intelligence platform

Командыг ажиллуулснаар list багц байгаа эсэхийг шалгаж болно lxd хараахан суулгаагүй байна:

snap list

Name  Version    Rev   Tracking  Publisher   Notes
core  16-2.43.3  8689  stable    canonical✓  core

LXD нь гэнэтийн багц боловч системийн багцаар дамжуулан суулгах ёстой lxd, энэ нь системд тохирох бүлгийг, шаардлагатай хэрэгслүүдийг бий болгоно /usr/bin гэх мэт.

sudo apt update
sudo apt install lxd

Багцыг гэнэтийн багц хэлбэрээр суулгасан эсэхийг шалгацгаая:

snap list

Name  Version    Rev    Tracking  Publisher   Notes
core  16-2.43.3  8689   stable    canonical✓  core
lxd   3.21       13474  stable/…  canonical✓  -

Arch Linux түгээлтүүд дээр LXD суулгаж байна ^

LXD багцыг систем дээр суулгахын тулд та дараах командуудыг ажиллуулах хэрэгтэй бөгөөд эхнийх нь репозиторт байгаа систем дээрх багцуудын жагсаалтыг шинэчлэх, хоёр дахь нь багцыг шууд суулгана.

sudo pacman -Syyu && sudo pacman -S lxd

Багцыг суулгасны дараа LXD-г энгийн хэрэглэгч удирдахын тулд үүнийг системийн бүлэгт нэмэх шаардлагатай lxd:

sudo usermod -a -G lxd user1

Хэрэглэгч гэдэгт итгэлтэй байцгаая user1 бүлэгт нэмсэн lxd:

id -Gn user1

user1 adm dialout cdrom floppy sudo audio dip video plugdev netdev lxd

Хэрэв бүлэг lxd жагсаалтад харагдахгүй байгаа бол та хэрэглэгчийн сессийг дахин идэвхжүүлэх хэрэгтэй. Үүнийг хийхийн тулд та нэг хэрэглэгчийн нэрээр гарч, нэвтрэх хэрэгтэй.

Идэвхжүүлнэ үү systemd системийг эхлүүлэх үед LXD үйлчилгээг ачаалж байна:

sudo systemctl enable lxd

Үйлчилгээг эхлүүлье:

sudo systemctl start lxd

Үйлчилгээний статусыг шалгаж байна:

sudo systemctl status lxd

Хадгалах LXD (Хадгалах) ^

Эхлэхийн өмнө бид LXD дахь хадгалалт хэрхэн логикоор зохион байгуулагдсаныг ойлгох хэрэгтэй.

Хадгалах (Хадгалалт) нь дараахаас бүрдэнэ нэг буюу түүнээс дээш Хадгалах сан ZFS, BTRFS, LVM эсвэл ердийн лавлах зэрэг дэмжигдсэн файлын системүүдийн аль нэгийг ашигладаг. Бүр Хадгалах сан эзлэхүүнд хуваагдана (Хадгалах хэмжээ) бусад зорилгоор зураг, контейнер эсвэл өгөгдөл агуулсан.

  • Зураг - Эдгээр нь Линукс цөмгүй тусгайлан угсарсан түгээлтүүд бөгөөд гадны эх сурвалжаас авах боломжтой
  • Контейнер - Эдгээр нь ашиглахад бэлэн зургуудаас байршуулсан түгээлтүүд юм
  • Хормын хувилбарууд - эдгээр нь таны буцах боломжтой савны төлөв байдлын агшин зуурын зургууд юм

LXD - Линуксийн контейнер системийн үндсэн шинж чанарууд

LXD дахь хадгалах санг удирдахын тулд тушаалыг ашиглана уу lxc storage түлхүүрийг зааж өгснөөр авах боломжтой гэрчилгээ - lxc storage --help

Дараах тушаал нь бүгдийн жагсаалтыг харуулна Хадгалах сан LXD санах ойд:

lxc storage list

+---------+-------------+--------+--------------------------------+---------+
|  NAME   | DESCRIPTION | DRIVER |             SOURCE             | USED BY |
+---------+-------------+--------+--------------------------------+---------+
| hddpool |             | btrfs  | /dev/loop1                     | 2       |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool |             | btrfs  | /var/lib/lxd/disks/ssdpool.img | 4       |
+---------+-------------+--------+--------------------------------+---------+

Бүх жагсаалтыг харахын тулд Хадгалах хэмжээ сонгосон хэсэгт Хадгалах сан багт үйлчилдэг lxc storage volume list:

lxc storage volume list hddpool

+-------+----------------------------------+-------------+---------+
| TYPE  |          NAME                    | DESCRIPTION | USED BY |
+-------+----------------------------------+-------------+---------+
| image | ebd565585223487526ddb3607f515... |             | 1       |
+-------+----------------------------------+-------------+---------+

lxc storage volume list ssdpool

+-----------+----------------------------------+-------------+---------+
|   TYPE    |            NAME                  | DESCRIPTION | USED BY |
+-----------+----------------------------------+-------------+---------+
| container | alp3                             |             | 1       |
+-----------+----------------------------------+-------------+---------+
| container | jupyter                          |             | 1       |
+-----------+----------------------------------+-------------+---------+
| image     | ebd565585223487526ddb3607f515... |             | 1       |
+-----------+----------------------------------+-------------+---------+

Мөн хэрэв төлөө бол Хадгалах сан Үүсгэхдээ BTRFS файлын системийг сонгосон бөгөөд дараа нь жагсаалтыг аваарай Хадгалах хэмжээ буюу дэд хэмжээ BTRFS-ийн тайлбарт та энэ файлын системийн хэрэгслийг ашиглаж болно:

sudo btrfs subvolume list -p /var/lib/lxd/storage-pools/hddpool

ID 257 gen 818 parent 5 top level 5 path images/ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3

sudo btrfs subvolume list -p /var/lib/lxd/storage-pools/ssdpool

ID 257 gen 1820 parent 5 top level 5 path images/ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
ID 260 gen 1819 parent 5 top level 5 path containers/jupyter
ID 263 gen 1820 parent 5 top level 5 path containers/alp3

LXD-г эхлүүлж байна ^

Контейнер үүсгэж ашиглахаасаа өмнө сүлжээ болон хадгалах санг үүсгэж, тохируулах ерөнхий LXD эхлүүлэх шаардлагатай. Үүнийг тушаалыг дуудаж жагсаалтад байгаа стандарт үйлчлүүлэгчийн командуудыг ашиглан гараар хийж болно lxc --help эсвэл эхлүүлэх шидтэнг ашиглан lxd init хэдэн асуултад хариулж байна.

Хадгалах санд зориулсан файлын системийг сонгох ^

Эхлүүлэх явцад LXD нь үндсэн файлын системийн төрлийг тодорхойлох зэрэг хэд хэдэн асуулт асуудаг Хадгалах сан. Анхдагч байдлаар, BTRFS файлын системийг сонгосон байна. Бүтээсний дараа өөр FS руу шилжих боломжгүй болно. FS сонгохыг зөвлөж байна онцлогийг харьцуулах хүснэгт:

онцлог
Лавлах
Btrfs
ХЧУР
ZFS
CEPH

Зургийн хадгалалтыг оновчтой болгосон
Үгүй
Тийм ээ
Тийм ээ
Тийм ээ
Тийм ээ

Оновчтой жишээ үүсгэх
Үгүй
Тийм ээ
Тийм ээ
Тийм ээ
Тийм ээ

Оновчтой агшин зуурын зураг үүсгэх
Үгүй
Тийм ээ
Тийм ээ
Тийм ээ
Тийм ээ

Зургийн дамжуулалтыг оновчтой болгосон
Үгүй
Тийм ээ
Үгүй
Тийм ээ
Тийм ээ

Оновчтой жишээ шилжүүлэг
Үгүй
Тийм ээ
Үгүй
Тийм ээ
Тийм ээ

бичих дээр хуулбарлах
Үгүй
Тийм ээ
Тийм ээ
Тийм ээ
Тийм ээ

Блок дээр суурилсан
Үгүй
Үгүй
Тийм ээ
Үгүй
Тийм ээ

Шуурхай клончлол
Үгүй
Тийм ээ
Тийм ээ
Тийм ээ
Тийм ээ

Хадгалах драйверийг саванд ашиглах боломжтой
Тийм ээ
Тийм ээ
Үгүй
Үгүй
Үгүй

Хуучин агшин зуурын зургуудаас сэргээх (хамгийн сүүлийн үеийн биш)
Тийм ээ
Тийм ээ
Тийм ээ
Үгүй
Тийм ээ

Хадгалах квот
тийм(*)
Тийм ээ
Тийм ээ
Тийм ээ
Үгүй

Шидтэний тусламжтайгаар сүлжээ болон хадгалах санг эхлүүлж байна ^

Бидний авч үзэх дараагийн тушаал нь эхлүүлэх шидтэнг ашиглан энгийн асуултуудад хариулах замаар LXD-ийн үндсэн бүрэлдэхүүн хэсгүүдийг тохируулахыг санал болгож байна.

Командыг ажиллуулах lxc init Дараах жишээнд үзүүлсэн шиг хоёр цэгийн дараа асуултуудын хариултыг оруулах эсвэл өөрийн нөхцөлийн дагуу өөрчил:

lxd init

Would you like to use LXD clustering? (yes/no) [default=no]: 
Do you want to configure a new storage pool? (yes/no) [default=yes]: 
Name of the new storage pool [default=default]: ssdpool         
Name of the storage backend to use (lvm, btrfs, dir) [default=btrfs]: 
Create a new BTRFS pool? (yes/no) [default=yes]: 
Would you like to use an existing block device? (yes/no) [default=no]: 
Size in GB of the new loop device (1GB minimum) [default=15GB]: 10GB
Would you like to connect to a MAAS server? (yes/no) [default=no]: 
Would you like to create a new local network bridge? (yes/no) [default=yes]: 
What should the new bridge be called? [default=lxdbr0]: 
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 10.0.5.1/24
Would you like LXD to NAT IPv4 traffic on your bridge? [default=yes]: 
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: none
Would you like LXD to be available over the network? (yes/no) [default=no]: 
Would you like stale cached images to be updated automatically? (yes/no) [default=yes] no
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: 

Нэмэлт хадгалах сан бий болгох ^

Өмнөх алхам дээр бид үүсгэсэн Хадгалах сан нэр өгсөн ssdpool бөгөөд файл нь миний систем дээр байрладаг /var/lib/lxd/disks/ssdpool.img. Энэ файлын системийн хаяг нь миний компьютер дээрх физик SSD дисктэй тохирч байна.

Гүйцэтгэсэн үүргийн талаарх ойлголтыг өргөжүүлэхийн тулд дараах үйлдлүүд Хадгалах сан репозитор дээр бид хоёрдахь нэгийг үүсгэх болно Хадгалах сан Энэ нь өөр төрлийн диск, HDD дээр физик байрлалтай байх болно. Асуудал нь LXD нь танд үүсгэхийг зөвшөөрдөггүй явдал юм Хадгалах сан хаяггүй /var/lib/lxd/disks/ бэлгэдлийн холбоосууд ч ажиллахгүй, хөгжүүлэгчийн хариуг харна уу. Бид эхлүүлэх/форматлах үед энэ хязгаарлалтыг тойрч гарах боломжтой Хадгалах сан Түлхүүр дотор үүнийг зааж өгснөөр утгыг буцаах файлын замын оронд блок төхөөрөмж болгон зааж өгөх замаар source.

Тиймээс, бүтээхээсээ өмнө Хадгалах сан та өөрийн файлын систем дээр ашиглах буцах давталтын файл эсвэл одоо байгаа хуваалтыг тодорхойлох хэрэгтэй. Үүнийг хийхийн тулд бид 10 ГБ хэмжээтэй файл үүсгэж, ашиглах болно.

dd if=/dev/zero of=/mnt/work/lxd/hddpool.img bs=1MB count=10000

10000+0 records in
10000+0 records out
10000000000 bytes (10 GB, 9,3 GiB) copied, 38,4414 s, 260 MB/s

Дахин давталтын файлыг үнэгүй эргүүлэх төхөөрөмжтэй холбоно уу:

sudo losetup --find --show /mnt/work/lxd/hddpool.img

/dev/loop1

Түлхүүрт баярлалаа --show командыг гүйцэтгэх нь бидний давталтын файл холбогдсон төхөөрөмжийн нэрийг дэлгэц рүү буцаана. Шаардлагатай бол бид энэ төрлийн бүх завгүй төхөөрөмжүүдийн жагсаалтыг гаргаж, бидний үйлдэл зөв эсэхийг шалгах боломжтой.

losetup -l

NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                      DIO LOG-SEC
/dev/loop1         0      0         0  0 /mnt/work/lxd/hddpool.img        0     512
/dev/loop0         0      0         1  0 /var/lib/lxd/disks/ssdpool.img   0     512

Жагсаалтаас та төхөөрөмжид байгааг олж мэдэх боломжтой /dev/loop1 давталтын файлыг оруулсан болно /mnt/work/lxd/hddpool.img, мөн төхөөрөмжид /dev/loop0 давталтын файлыг оруулсан болно /var/lib/lxd/disks/ssdpool.img энэ нь анхдагчтай тохирч байна Хадгалах сан.

Дараах тушаал нь шинээр үүсгэнэ Хадгалах сан LXD-д бидний саяхан бэлтгэсэн буцаах файл дээр үндэслэсэн. LXD нь буцаах файлыг форматлах болно /mnt/work/lxd/hddpool.img төхөөрөмжид /dev/loop1 BTRFS файлын системийн хувьд:

lxc storage create hddpool btrfs size=10GB source=/dev/loop1

Бүгдийн жагсаалтыг харуулъя Хадгалах сан дэлгэцэнд гаргах:

lxc storage list

+---------+-------------+--------+--------------------------------+---------+
|  NAME   | DESCRIPTION | DRIVER |             SOURCE             | USED BY |
+---------+-------------+--------+--------------------------------+---------+
| hddpool |             | btrfs  | /dev/loop1                     | 0       |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool |             | btrfs  | /var/lib/lxd/disks/ssdpool.img | 0       |
+---------+-------------+--------+--------------------------------+---------+

Хадгалах сангийн хэмжээг нэмэгдүүлэх ^

Бүтээлийн дараа Хадгалах сан, шаардлагатай бол өргөтгөх боломжтой. Учир нь Хадгалах сан BTRFS файлын систем дээр үндэслэн дараах тушаалуудыг ажиллуулна уу.

sudo truncate -s +5G /mnt/work/lxd/hddpool.img
sudo losetup -c /dev/loop1
sudo btrfs filesystem resize max /var/lib/lxd/storage-pools/hddpool

Дахин давталтын файлыг буцаах төхөөрөмжийн үүрэнд автоматаар оруулах ^

Хост систем болох файлыг дахин ачаалахад бидэнд нэг жижиг асуудал тулгардаг /mnt/work/lxd/hddpool.img төхөөрөмжөөс "нисэх" болно /dev/loop1 мөн LXD үйлчилгээ энэ төхөөрөмжид харагдахгүй тул ачаалах үед гацах болно. Энэ асуудлыг шийдэхийн тулд та энэ файлыг төхөөрөмжид оруулах системийн үйлчилгээг бий болгох хэрэгтэй /dev/loop1 хост систем ачаалах үед.

бүтээцгээе Нэгж Файлын төрөл үйлчилгээ в /etc/systemd/system/ SystemD эхлүүлэх системийн хувьд:

cat << EOF | sudo tee -a /etc/systemd/system/lxd-hddpool.service
[Unit]
Description=Losetup LXD Storage Pool (hddpool)
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/sbin/losetup /dev/loop1 /mnt/work/lxd/hddpool.img
RemainAfterExit=true

[Install]
WantedBy=local-fs.target
EOF

Үйлчилгээг идэвхжүүлэх:

sudo systemctl enable lxd-hddpool

Created symlink /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service → /etc/systemd/system/lxd-hddpool.service.

Хост системийг дахин эхлүүлсний дараа бид үйлчилгээний статусыг шалгана.

systemctl status lxd-hddpool.service 

● lxd-hddpool.service - Losetup LXD Storage Pool (hddpool)
     Loaded: loaded (/etc/systemd/system/lxd-hddpool.service; enabled; vendor preset: disabled)
     Active: active (exited) since Wed 2020-04-08 03:43:53 MSK; 1min 37s ago
    Process: 711 ExecStart=/sbin/losetup /dev/loop1 /mnt/work/lxd/hddpool.img (code=exited, status=0/SUCCESS)
   Main PID: 711 (code=exited, status=0/SUCCESS)

апр 08 03:43:52 manjaro systemd[1]: Starting Losetup LXD Storage Pool (hddpool)...
апр 08 03:43:53 manjaro systemd[1]: Finished Losetup LXD Storage Pool (hddpool).

Гаралтаас бид үйлчилгээний төлөв байгаа эсэхийг шалгаж болно идэвхтэй, бидний скриптийг нэг тушаалаас гүйцэтгэж дууссан ч гэсэн сонголт нь бидэнд үүнийг хийх боломжийг олгосон. RemainAfterExit=true.

Аюулгүй байдал. Контейнерийн давуу эрх ^

Контейнерийн бүх процессууд нь үндсэн систем дээр цөмийг ашиглан тусгаарлагдсан байдлаар ажилладаг тул контейнерийн процессуудын хост системд хандах хандалтыг цаашид хамгаалахын тулд LXD нь процессын давуу эрхийг санал болгодог бөгөөд үүнд:

  • Давуу эрхтэй савнууд - эдгээр нь UID болон GID-тэй процессууд нь хост системтэй ижил эзэмшигчтэй тохирдог контейнер юм. Жишээлбэл, UID 0-тэй контейнерт ажиллаж байгаа процесс нь UID 0-тэй хост систем дээрх процесстой адил хандалтын эрхтэй. Өөрөөр хэлбэл, контейнерт байгаа root хэрэглэгч зөвхөн доторх бүх эрхийг эзэмшдэг. чингэлэг, гэхдээ хэрэв тэр чингэлэгийн тусгаарлагдсан нэрийн зайнаас гадуур явж чадвал хост систем дээр.

  • Давуу эрхгүй савнууд - эдгээр нь процессууд нь 0-ээс 65535 хүртэлх тооны UID ба GID эзэмшигчид хамаарах контейнерууд боловч хост системийн хувьд SubUID болон SubGID битүүдийг тус тус ашиглан эзэмшигч нь далдлагдсан байдаг. Жишээлбэл, контейнер доторх UID=0 хэрэглэгч нь хост систем дээр харагдах болно SubUID + UID. Энэ нь хост системийг хамгаалдаг, учир нь хэрэв контейнер доторх аливаа процесс нь тусгаарлагдсан нэрийн орон зайнаас зугтаж чадвал энэ нь үл мэдэгдэх, маш өндөр UID/GID-тэй процесс хэлбэрээр зөвхөн хост системтэй холбогдох боломжтой.

Анхдагч байдлаар, шинээр үүсгэсэн контейнерууд давуу эрхгүй статустай байдаг тул бид SubUID болон SubGID-г тодорхойлох ёстой.

SubUID болон SubGID-ийн маскыг тохируулах хоёр тохиргооны файл үүсгэцгээе:

sudo touch /etc{/subuid,/subgid}
sudo usermod --add-subuids 1000000-1065535 root 
sudo usermod --add-subgids 1000000-1065535 root

Өөрчлөлтүүдийг хэрэгжүүлэхийн тулд LXD үйлчилгээг дахин эхлүүлэх шаардлагатай:

sudo systemctl restart lxd

Виртуал сүлжээний шилжүүлэгч үүсгэж байна ^

Бид өмнө нь эхлүүлэх шидтэнг ашиглан сүлжээг эхлүүлсэн lxd init мөн сүлжээний төхөөрөмж үүсгэсэн lxdbr0, дараа нь энэ хэсэгт бид зүгээр л LXD дахь сүлжээний талаар болон клиент командыг ашиглан виртуал шилжүүлэгч (гүүр) хэрхэн үүсгэхтэй танилцах болно.

Дараах диаграмм нь шилжүүлэгч (гүүр) нь хост болон контейнеруудыг сүлжээнд хэрхэн холбож байгааг харуулж байна.

LXD - Линуксийн контейнер системийн үндсэн шинж чанарууд

Контейнерлер нь бусад контейнер эсвэл эдгээр контейнерт үйлчилдэг хосттой сүлжээгээр холбогдож болно. Үүнийг хийхийн тулд та контейнеруудын виртуал сүлжээний картуудыг виртуал шилжүүлэгчээр холбох хэрэгтэй. Бид эхлээд шилжүүлэгч үүсгэх бөгөөд контейнер өөрөө үүсгэгдсэний дараа дараагийн бүлгүүдэд контейнерийн сүлжээний интерфейсүүдийг холбох болно.

Дараах тушаал нь дэд сүлжээтэй шилжүүлэгчийг үүсгэдэг 10.0.5.0/24 болон IPv4 хаяг 10.0.5.1/24, мөн үүнд багтана ipv4.nat Ингэснээр контейнерууд NAT үйлчилгээг ашиглан хостоор дамжуулан интернетэд нэвтрэх боломжтой болно.

lxc network create lxdbr0 ipv4.address=10.0.5.1/24 ipv4.nat=true ipv6.address=none

LXD дээр байгаа сүлжээний төхөөрөмжүүдийн жагсаалтыг шалгаж байна:

lxc network list

+--------+----------+---------+-------------+---------+
|  NAME  |   TYPE   | MANAGED | DESCRIPTION | USED BY |
+--------+----------+---------+-------------+---------+
| eno1   | physical | NO      |             | 0       |
+--------+----------+---------+-------------+---------+
| lxdbr0 | bridge   | YES     |             | 0       |
+--------+----------+---------+-------------+---------+

Та мөн Линукс түгээлтийн стандарт хэрэгслийг ашиглан сүлжээний төхөөрөмж үүсгэсэн эсэхийг шалгаж болно. ip link буюу ip addr:

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether bc:ee:7b:5a:6b:44 brd ff:ff:ff:ff:ff:ff
    altname enp0s25
    inet6 fe80::9571:11f3:6e0c:c07b/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: lxdbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether c2:38:90:df:cb:59 brd ff:ff:ff:ff:ff:ff
    inet 10.0.5.1/24 scope global lxdbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::c038:90ff:fedf:cb59/64 scope link 
       valid_lft forever preferred_lft forever
5: veth3ddab174@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master lxdbr0 state UP group default qlen 1000
    link/ether ca:c3:5c:1d:22:26 brd ff:ff:ff:ff:ff:ff link-netnsid 0

Тохиргооны профайл ^

LXD дахь контейнер бүр өөрийн гэсэн тохиргоотой бөгөөд үүнийг дэлхий даяар зарласан тохиргоогоор өргөтгөх боломжтой. тохиргооны профайлууд. Контейнерт тохиргооны профайлыг ашиглах нь каскадын загвартай бөгөөд дараах жишээ үүнийг харуулж байна:

LXD - Линуксийн контейнер системийн үндсэн шинж чанарууд

Энэ жишээнд LXD системд гурван профайл үүсгэсэн: default, hddpool и hostfs. Бүх гурван профайлыг локал тохиргоотой (саарал хэсэг) саванд хэрэглэнэ. Профайл default төхөөрөмжтэй root параметртэй pool нь тэнцүү ssdpool, гэхдээ каскадын тохиргооны хэрэглээний загварын ачаар бид контейнерт профайл хэрэглэх боломжтой hddpool параметртэй pool профайлаас ижил параметрийг хүчингүй болгоно default ба сав нь төхөөрөмжийн тохиргоог хүлээн авах болно root параметртэй pool тэнцүү hddpool, болон профайл hostfs зүгээр л саванд шинэ төхөөрөмж нэмнэ.

Боломжтой тохиргооны профайлуудын жагсаалтыг харахын тулд дараах тушаалыг ашиглана уу.

lxc profile list

+---------+---------+
|  NAME   | USED BY |
+---------+---------+
| default | 1       |
+---------+---------+
| hddroot | 0       |
+---------+---------+
| ssdroot | 1       |
+---------+---------+

Түлхүүрийг нэмснээр профайлтай ажиллах боломжтой командуудын бүрэн жагсаалтыг авах боломжтой --help:

lxc profile --help

Description:
  Manage profiles

Usage:
  lxc profile [command]

Available Commands:
  add         Add profiles to instances
  assign      Assign sets of profiles to instances
  copy        Copy profiles
  create      Create profiles
  delete      Delete profiles
  device      Manage instance devices
  edit        Edit profile configurations as YAML
  get         Get values for profile configuration keys
  list        List profiles
  remove      Remove profiles from instances
  rename      Rename profiles
  set         Set profile configuration keys
  show        Show profile configurations
  unset       Unset profile configuration keys

Таны профайлыг засварлаж байна ^

Өгөгдмөл тохиргооны профайл default чингэлэгт зориулсан сүлжээний картын тохиргоо байхгүй бөгөөд шинээр үүсгэсэн бүх контейнерт сүлжээ байхгүй тул тэдгээрийн хувьд тусдаа команд бүхий дотоод (зориулалтын) сүлжээний төхөөрөмжийг үүсгэх шаардлагатай боловч бид тохиргоонд глобал сүлжээний төхөөрөмжийг үүсгэж болно. энэ профайлыг ашиглан бүх контейнеруудын хооронд хуваалцах профайл. Ингэснээр шинэ контейнер үүсгэх командын дараа шууд сүлжээнд хандах боломжтой сүлжээтэй болно. Үүний зэрэгцээ, ямар ч хязгаарлалт байхгүй, шаардлагатай бол бид үргэлж дотоод сүлжээний төхөөрөмж үүсгэж болно.

Дараах тушаал нь төхөөрөмжийг тохиргооны профайлд нэмнэ eth0 төрөл nic сүлжээнд холбогдсон lxdbr0:

lxc profile device add default eth0 nic network=lxdbr0 name=eth0

Бид уг төхөөрөмжийг тохиргооны профайлд нэмсэн тул хэрэв бид төхөөрөмжид статик IP хаяг зааж өгсөн бол энэ профайлыг ашиглах бүх контейнер ижил IP хаягийг хуваалцах болно гэдгийг анхаарах нь чухал юм. Хэрэв контейнерт зориулагдсан статик IP хаягтай контейнер үүсгэх шаардлагатай бол та сүлжээний төхөөрөмжийн тохиргоог профайлын түвшинд биш харин IP хаягийн параметртэй контейнерийн түвшинд (локал тохиргоо) үүсгэх хэрэгтэй.

Профайлыг шалгацгаая:

lxc profile show default

config: {}
description: Default LXD profile
devices:
  eth0:
    name: eth0
    network: lxdbr0
    type: nic
  root:
    path: /
    pool: ssdpool
    type: disk
name: default
used_by: []

Энэ профайлаас бид шинээр үүсгэсэн бүх контейнерийн хувьд хоёр төхөөрөмж бий болохыг харж болно:

  • eth0 - Төхөөрөмжийн төрөл nic шилжүүлэгчтэй холбогдсон (сүлжээний гүүр) lxdbr0
  • root - Төхөөрөмжийн төрөл disk хадгалах сан ашигладаг ssdpool

Шинэ профайл үүсгэх ^

Өмнө нь үүсгэсэн ашиглах Хадгалах сан контейнер, тохиргооны профайл үүсгэх ssdroot үүнтэй төстэй төхөөрөмжийг бид нэмэх болно disk холбох цэгтэй / (үндэс) өмнө нь үүсгэсэн ашиглан Хадгалах сан - ssdpool:

lxc profile create ssdroot
lxc profile device add ssdroot root disk path=/ pool=ssdpool

Үүний нэгэн адил бид ийм төхөөрөмжийг бүтээдэг disk, гэхдээ энэ тохиолдолд ашиглана Хадгалах сан - hddpool:

lxc profile create hddroot
lxc profile device add hddroot root disk path=/ pool=hddpool

Тохиргооны профайлыг шалгаж байна:

lxc profile show ssdroot

config: {}
description: ""
devices:
  root:
    path: /
    pool: ssdpool
    type: disk
name: ssdroot
used_by: []

lxc profile show hddroot

config: {}
description: ""
devices:
  root:
    path: /
    pool: hddpool
    type: disk
name: hddroot
used_by: []

Зургийн агуулах ^

Линукс цөмгүй тусгайлан угсарсан түгээлтийн зургуудаас контейнер бүтээгдсэн. Тиймээс, савыг ажиллуулахын өмнө үүнийг энэ зургаас байрлуулах ёстой. Зургийн эх сурвалж нь гадаад агуулахаас зургийг татаж авах орон нутгийн репозитор юм.

Алсын зургийн агуулахууд ^

Анхдагч байдлаар, LXD нь гурван алсын эх сурвалжаас зураг хүлээн авахаар тохируулагдсан:

  • ubuntu: (Тогтвортой Ubuntu зургийн хувьд)
  • ubuntu-өдөр бүр: (өдөр тутмын Ubuntu зургуудын хувьд)
  • зураг: (бусад олон түгээлтийн хувьд)

lxc remote list

+-----------------+------------------------------------------+--------+--------+
|      NAME       |                   URL                    | PUBLIC | STATIC |
+-----------------+------------------------------------------+--------+--------+
| images          | https://images.linuxcontainers.org       | YES    | NO     |
+-----------------+------------------------------------------+--------+--------+
| local (default) | unix://                                  | NO     | YES    |
+-----------------+------------------------------------------+--------+--------+
| ubuntu          | https://cloud-images.ubuntu.com/releases | YES    | YES    |
+-----------------+------------------------------------------+--------+--------+
| ubuntu-daily    | https://cloud-images.ubuntu.com/daily    | YES    | YES    |
+-----------------+------------------------------------------+--------+--------+

Жишээлбэл, хадгалах газар ubuntu: дараах зургууд байна:

lxc image -c dasut list ubuntu: | head -n 11

+----------------------------------------------+--------------+----------+------------+
|                   DESCRIPTION                | ARCHITECTURE |   SIZE   |   TYPE     |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150728)  | x86_64       | 153.72MB | CONTAINER  |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150819)  | x86_64       | 152.91MB | CONTAINER  |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150906)  | x86_64       | 154.69MB | CONTAINER  |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (release) (20150930)  | x86_64       | 153.86MB | CONTAINER  |
+----------------------------------------------+--------------+----------+------------+

Хязгаарлагдмал тооны баганыг харуулахын тулд бид сонголтыг ашигласан -c параметрүүдтэй dasut, мөн тушаалаар жагсаалтын уртыг хязгаарласан head.

Зургийн жагсаалтыг харуулахын тулд шүүлтүүр хийх боломжтой. Дараах тушаал нь боломжтой бүх түгээлтийн архитектуруудыг жагсаах болно AlpineLinux:

lxc image -c ldast list images:alpine/3.11

+------------------------------+--------------------------------------+--------------+
|            ALIAS             |             DESCRIPTION              | ARCHITECTURE |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11 (3 more)         | Alpine 3.11 amd64 (20200220_13:00)   | x86_64       |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/arm64 (1 more)   | Alpine 3.11 arm64 (20200220_13:00)   | aarch64      |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/armhf (1 more)   | Alpine 3.11 armhf (20200220_13:00)   | armv7l       |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/i386 (1 more)    | Alpine 3.11 i386 (20200220_13:01)    | i686         |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/ppc64el (1 more) | Alpine 3.11 ppc64el (20200220_13:00) | ppc64le      |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/s390x (1 more)   | Alpine 3.11 s390x (20200220_13:00)   | s390x        |
+------------------------------+--------------------------------------+--------------+

Орон нутгийн зургийн агуулах ^

Савыг ашиглаж эхлэхийн тулд та дэлхийн агуулахаас локал руу зураг нэмэх хэрэгтэй local:. Одоо локал репозитор хоосон байна, тушаал үүнийг шалгах болно lxc image list. Хэрэв арга list репозиторыг зааж өгөхгүй бол локал репозиторийг анхдагчаар ашиглах болно - local:

lxc image list local:

+-------+-------------+--------+-------------+--------------+------+------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE |
+-------+-------------+--------+-------------+--------------+------+------+

Хадгалах газарт байгаа зургуудыг дараах аргуудыг ашиглан удирддаг.

баг
Тайлбар

lxc зураг Өөр хаягийн
Зургийн бусад нэрийг удирдах

lxc зураг хуулбар
Серверүүдийн хооронд зураг хуулах

lxc зураг устгах
Зургийг устгах

lxc зураг засварлах
Зургийн шинж чанарыг засах

lxc зураг экспорт
Зургийг экспортлох, татаж авах

lxc зураг импорт
Зургийн дэлгүүрт зураг импортлох

lxc зураг мэдээлэл
Зургийн талаар хэрэгтэй мэдээллийг харуулах

lxc зураг жагсаалт
Зургийн жагсаалт

lxc зураг тэнхрэх
Зургийг сэргээх

lxc зураг шоу
Зургийн шинж чанарыг харуулах

Зургийг дэлхийн нэгээс локал репозитор руу хуулна уу images::

lxc image copy images:alpine/3.11/amd64 local: --alias=alpine3

Image copied successfully!

Орон нутгийн репозиторт байгаа бүх зургийн жагсаалтыг харуулъя local::

lxc image -c lfdatsu list local:

+---------+--------------+------------------------------------+--------------+
|  ALIAS  | FINGERPRINT  |            DESCRIPTION             | ARCHITECTURE |
+---------+--------------+------------------------------------+--------------+
| alpine3 | 73a3093d4a5c | Alpine 3.11 amd64 (20200220_13:00) | x86_64       |
+---------+--------------+------------------------------------+--------------+

LXD тохиргоо ^

Интерактив горимоос гадна LXD нь интерактив бус тохиргооны суулгалтын горимыг дэмждэг бөгөөд энэ нь тохиргоог YAML файл хэлбэрээр зааж өгсөн үед хийгддэг бөгөөд энэ нь гүйцэтгэлийг алгасаж бүх тохиргоог нэг дор суулгах боломжийг олгодог тусгай формат юм. Сүлжээний тохиргоо, тохиргооны профайл үүсгэх гэх мэт энэ нийтлэлд дээр дурдсан олон интерактив командуудаас. Бид энэ хэсгийг энд хамрахгүй, та өөрөө шалгаж болно. баримт бичигт.

Дараагийн интерактив тушаал lxc config Энэ нь тохиргоог тохируулах боломжийг танд олгоно. Жишээлбэл, локал репозитор руу татаж авсан зургуудыг дэлхийн хадгалах сангаас автоматаар шинэчлэхгүй байхын тулд бид дараах тушаалаар энэ үйлдлийг идэвхжүүлж болно.

lxc config set images.auto_update_cached=false

Контейнер үүсгэх, удирдах ^

Контейнер үүсгэхийн тулд командыг ашиглана уу lxc init ямар үнэт зүйлс дамждаг репозиторий:образ дараа нь чингэлэгт зориулж хүссэн ID. Хадгалах газрыг локал гэж зааж өгч болно local: Дэлхийн аль ч хүн ч мөн адил. Хэрэв хадгалах газрыг заагаагүй бол анхдагчаар локал репозиторийг зургийг хайхад ашигладаг. Хэрэв зургийг дэлхийн агуулахаас зааж өгсөн бол зургийг эхлээд дотоод репозитор руу татаж аваад дараа нь контейнер үүсгэхэд ашиглана.

Эхний контейнерийг үүсгэхийн тулд дараах тушаалыг ажиллуулцгаая.

lxc init alpine3 alp --storage=hddpool --profile=default --profile=hddroot

Энд бидний ашигладаг командын товчлууруудыг дарааллаар нь харцгаая.

  • alpine3 — Орон нутгийн хадгалах газарт өмнө нь байршуулсан зурагт өөр нэр (алиас) зааж өгсөн. Хэрэв энэ зурагт зориулж өөр нэр үүсгээгүй бол та үргэлж зургийг түүгээр нь дурдаж болно Хурууны хээ хүснэгтэд үзүүлсэн.
  • alp — Савны танигчийг тохируулна
  • --storage - Энэ түлхүүр нь аль нь болохыг заана Хадгалах сан сав бий болно
  • --profile — Эдгээр товчлуурууд нь өмнө нь үүсгэсэн тохиргооны профайлаас тохиргоог саванд хийнэ

Бид түгээлтийн init системийг эхлүүлж буй савыг ажиллуулж байна.

lxc start alp

Та мөн тушаалыг ашиглаж болно lxc launch Энэ нь танд багийг нэгтгэх боломжийг олгодог lxc init и lxc start нэг үйл ажиллагаанд.

Савны төлөв байдлыг шалгаж байна:

lxc list -c ns46tb
+------+---------+------------------+------+-----------+--------------+
| NAME |  STATE  |       IPV4       | IPV6 |   TYPE    | STORAGE POOL |
+------+---------+------------------+------+-----------+--------------+
| alp  | RUNNING | 10.0.5.46 (eth0) |      | CONTAINER | hddpool      |
+------+---------+------------------+------+-----------+--------------+

Контейнерийн тохиргоог шалгаж байна:

lxc config show alp

architecture: x86_64
config:
  image.architecture: amd64
  image.description: Alpine 3.11 amd64 (20200326_13:39)
  image.os: Alpine
  image.release: "3.11"
  image.serial: "20200326_13:39"
  image.type: squashfs
  volatile.base_image: ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
  volatile.eth0.host_name: vethb1fe71d8
  volatile.eth0.hwaddr: 00:16:3e:5f:73:3e
  volatile.idmap.base: "0"
  volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
  volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
  volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
  volatile.last_state.power: RUNNING
devices:
  root:
    path: /
    pool: hddpool
    type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""

хэсэгт profiles Бид энэ контейнер хоёр тохиргооны профайлыг ашиглаж байгаа эсэхийг шалгах боломжтой default и hddroot. хэсэгт devices Сүлжээний төхөөрөмжийг профайлын түвшинд үүсгэснээс хойш бид зөвхөн нэг төхөөрөмжийг илрүүлэх боломжтой default. Контейнер ашиглаж байгаа бүх төхөөрөмжийг харахын тулд та түлхүүр нэмэх хэрэгтэй --expanded:

lxc config show alp --expanded

architecture: x86_64
config:
  image.architecture: amd64
  image.description: Alpine 3.11 amd64 (20200326_13:39)
  image.os: Alpine
  image.release: "3.11"
  image.serial: "20200326_13:39"
  image.type: squashfs
  volatile.base_image: ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
  volatile.eth0.host_name: vethb1fe71d8
  volatile.eth0.hwaddr: 00:16:3e:5f:73:3e
  volatile.idmap.base: "0"
  volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
  volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
  volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
  volatile.last_state.power: RUNNING
devices:
  eth0:
    name: eth0
    network: lxdbr0
    type: nic
  root:
    path: /
    pool: hddpool
    type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""

Статик IP хаягийг тохируулах ^

Хэрэв бид сүлжээний төхөөрөмжийн IP хаягийг тохируулахыг оролдвол eth0 баг lxc config device set alp савны тохиргоонд зориулагдсан бол бид төхөөрөмж байхгүй тул төхөөрөмж байхгүй гэсэн алдааг хүлээн авах болно. eth0 савыг ашиглаж байгаа нь профайлд хамаарна default:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: The device doesn't exist

Бид мэдээж статик IP хаягийг тохируулж болно eth0 Профайл дээрх төхөөрөмжүүд, гэхдээ энэ профайлыг ашиглах бүх контейнерт ижил байх болно. Тиймээс саванд зориулсан төхөөрөмжийг нэмж оруулъя:

lxc config device add alp eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5

Дараа нь та савыг дахин эхлүүлэх хэрэгтэй:

lxc restart alp

Хэрэв бид одоо контейнерийн тохиргоог харвал бид сонголтыг ашиглах шаардлагагүй болно --expanded сүлжээний төхөөрөмжийг харах eth0, учир нь бид үүнийг контейнерийн түвшинд үүсгэсэн бөгөөд энэ нь профайлаас ижил төхөөрөмж дээр дамжсан default:

lxc config show alp

architecture: x86_64
config:
  image.architecture: amd64
  image.description: Alpine 3.11 amd64 (20200326_13:39)
  image.os: Alpine
  image.release: "3.11"
  image.serial: "20200326_13:39"
  image.type: squashfs
  volatile.base_image: ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
  volatile.eth0.host_name: veth2a1dc59d
  volatile.eth0.hwaddr: 00:16:3e:0e:e2:71
  volatile.idmap.base: "0"
  volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
  volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
  volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
  volatile.last_state.power: RUNNING
devices:
  eth0:
    ipv4.address: 10.0.5.5
    name: eth0
    nictype: bridged
    parent: lxdbr0
    type: nic
  root:
    path: /
    pool: hddpool
    type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""

Савыг зайлуулах ^

Савыг арилгахын тулд командыг ашиглана уу lxc delete, гэхдээ савыг зайлуулахын өмнө командыг ашиглан зогсоох ёстой lxc stop:

lxc stop alp

lxc list

+------+---------+-------------------+------+-----------+-----------+
| NAME |  STATE  |       IPV4        | IPV6 |   TYPE    | SNAPSHOTS |
+------+---------+-------------------+------+-----------+-----------+
| alp  | STOPPED | 10.0.5.10 (eth0)  |      | CONTAINER | 0         |
+------+---------+-------------------+------+-----------+-----------+

Бид савны төлөв байдлыг баталгаажуулсны дараа ХУДАЛДАА, үүнийг арилгах боломжтой Хадгалах сан:

lxc delete alp

Контейнерт нэвтрэх ^

Сүлжээний холболтыг алгасаж шууд контейнерт тушаалуудыг гүйцэтгэхийн тулд командыг ашиглана уу lxc exec системийн бүрхүүлийг эхлүүлэхгүйгээр саванд командуудыг гүйцэтгэдэг. Хэрэв та хувьсагч, файлын чиглүүлэлт (хоолой) гэх мэт бүрхүүлийн хэв маягийг ашиглан бүрхүүлд тушаалыг гүйцэтгэх шаардлагатай бол бүрхүүлийг тодорхой ажиллуулж, тушаалыг түлхүүр болгон дамжуулах хэрэгтэй, жишээлбэл:

lxc exec alp -- /bin/sh -c "echo $HOME"

Тушаал нь тусгай зугтах тэмдэгт ашигласан тусгай дүрийн хувьд $ ингэснээр хувьсагч $HOME хост машин дээр орчуулагдаагүй, харин зөвхөн чингэлэг дотор орчуулагдсан.

Мөн интерактив бүрхүүлийн горимыг эхлүүлж, дараа нь халуун товчлуурыг ажиллуулж сессийг дуусгах боломжтой CTRL+D:

lxc exec alp -- /bin/sh

Контейнерийн нөөцийн менежмент ^

LXD-д та тусгай багц тохиргоог ашиглан контейнерийн нөөцийг удирдах боломжтой. Савны тохиргооны параметрүүдийн бүрэн жагсаалтыг олж болно баримт бичигт.

RAM нөөцийн хязгаарлалт ^

Үзүүлэлт limits.memory нь контейнерт байгаа RAM-ийн хэмжээг хязгаарладаг. Утга нь тоо ба нэг юм боломжтой дагаварууд.

Контейнерын RAM-ийн хязгаарыг 256 MB болгож тохируулъя:

lxc config set alp limits.memory 256MB

Мөн санах ойг хязгаарлах бусад параметрүүд байдаг:

  • limits.memory.enforce
  • limits.memory.hugepages
  • limits.memory.swap
  • limits.memory.swap.priority

баг lxc config show Тохируулсан нөөцийн хязгаарыг багтаасан савны тохиргоог бүхэлд нь харуулах боломжийг танд олгоно:

lxc config show alp

architecture: x86_64
config:
  image.architecture: amd64
  image.description: Alpine 3.11 amd64 (20200220_13:00)
  image.os: Alpine
  image.release: "3.11"
  image.serial: "20200220_13:00"
  image.type: squashfs
  limits.memory: 256MB
  volatile.base_image: 73a3093d4a5ce0148fd84b95369b3fbecd19a537ddfd2e2d20caa2eef0e8fd60
  volatile.eth0.host_name: veth75b6df07
  volatile.eth0.hwaddr: 00:16:3e:a1:e7:46
  volatile.idmap.base: "0"
  volatile.idmap.current: '[]'
  volatile.idmap.next: '[]'
  volatile.last_state.idmap: '[]'
  volatile.last_state.power: RUNNING
devices: {}
ephemeral: false
profiles:
- default
stateful: false
description: ""

CPU-ийн нөөцийн хязгаар ^

CPU-ийн нөөцийг хязгаарлах хэд хэдэн арга байдаг. хязгаарлалтын төрлүүд:

  • limit.cpu - нэг буюу хэд хэдэн CPU цөмтэй савыг холбодог
  • limits.cpu.allowance - Хугацаа хэтэрсэн үед CFS хуваарийн квотыг эсвэл хувь нь хэтэрсэн үед CPU-ийн нөөцийг хуваалцах бүх нийтийн механизмыг удирддаг.
  • limits.cpu.priority - процессорын багцыг хуваалцаж буй олон тохиолдлуудад процессорын ижил хувь хэмжээгээр хуваарилагдсан тохиолдолд хуваарийн тэргүүлэх чиглэл.

lxc config set alp limits.cpu.allowance 40%

lxc config show alp

architecture: x86_64
config:
  image.architecture: amd64
  image.description: Alpine 3.11 amd64 (20200220_13:00)
  image.os: Alpine
  image.release: "3.11"
  image.serial: "20200220_13:00"
  image.type: squashfs
  limits.cpu.allowance: 40%
  limits.memory: 256MB
  volatile.base_image: 73a3093d4a5ce0148fd84b95369b3fbecd19a537ddfd2e2d20caa2eef0e8fd60
  volatile.eth0.host_name: veth75b6df07
  volatile.eth0.hwaddr: 00:16:3e:a1:e7:46
  volatile.idmap.base: "0"
  volatile.idmap.current: '[]'
  volatile.idmap.next: '[]'
  volatile.last_state.idmap: '[]'
  volatile.last_state.power: RUNNING
devices: {}
ephemeral: false
profiles:
- default
stateful: false
description: ""

Дискний зайны хязгаарлалт ^

Ийм хязгаарлалтаас гадна limits.read, limits.write Бид мөн контейнерийн зарцуулсан дискний зайг хязгаарлаж болно (зөвхөн ZFS эсвэл BTRFS дээр ажилладаг):

lxc config device set alp root size=2GB

Суулгасны дараа параметрт devices.root.size Бид тогтоосон хязгаарыг шалгаж болно:

lxc config show alp
...
devices:
  root:
    path: /
    pool: hddpool
    size: 2GB
    type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""

Ашигласан дискний квотыг харахын тулд бид тушаалаас авч болно lxc info:

lxc info alp
...
Resources:
  Processes: 5
  Disk usage:
    root: 1.05GB
  CPU usage:
    CPU usage (in seconds): 1
  Memory usage:
    Memory (current): 5.46MB
  Network usage:
    eth0:
      Bytes received: 802B
      Bytes sent: 1.59kB
      Packets received: 4
      Packets sent: 14
    lo:
      Bytes received: 0B
      Bytes sent: 0B
      Packets received: 0
      Packets sent: 0

Бид чингэлэгийн үндсэн төхөөрөмжид 2 ГБ хүртэл хязгаарлалт тавьсан хэдий ч системийн хэрэгслүүд, тухайлбал df энэ хязгаарлалтыг харахгүй. Үүнийг хийхийн тулд бид жижиг туршилт хийж, хэрхэн ажилладагийг олж мэдэх болно.

Үүнтэй ижил 2 шинэ сав үүсгэцгээе Хадгалах сан (hddpool):

lxc init alpine3 alp1 --storage=hddpool --profile=default --profile=hddroot
lxc init alpine3 alp2 --storage=hddpool --profile=default --profile=hddroot

lxc list
+------+---------+------------------+------+-----------+-----------+
| NAME |  STATE  |       IPV4       | IPV6 |   TYPE    | SNAPSHOTS |
+------+---------+------------------+------+-----------+-----------+
| alp1 | RUNNING | 10.0.5.46 (eth0) |      | CONTAINER | 0         |
+------+---------+------------------+------+-----------+-----------+
| alp2 | RUNNING | 10.0.5.30 (eth0) |      | CONTAINER | 0         |
+------+---------+------------------+------+-----------+-----------+

Контейнерүүдийн аль нэгэнд 1ГБ файл үүсгэцгээе:

lxc exec alp1 -- dd if=/dev/urandom of=file.img bs=1M count=1000

Файл үүсгэгдсэн эсэхийг шалгацгаая:

lxc exec alp1 -- ls -lh
total 1000M  
-rw-r--r--    1 root     root     1000.0M Mar 27 10:16 file.img

Хэрэв бид хоёр дахь контейнерийг хайж байгаа бол ижил байршилд файл байгаа эсэхийг шалгавал энэ файл тэнд байхгүй болно, учир нь чингэлэгүүд нь өөрөө бүтээгдсэн байдаг. Хадгалах хэмжээ ижилхэн Хадгалах сан:

lxc exec alp2 -- ls -lh
total 0

Гэхдээ түүний гаргаж буй үнэ цэнийг харьцуулж үзье df нэг болон нөгөө саванд:

lxc exec alp1 -- df -hT
Filesystem           Type            Size      Used Available Use% Mounted on
/dev/loop1           btrfs           9.3G   1016.4M      7.8G  11% /
...

lxc exec alp2 -- df -hT
Filesystem           Type            Size      Used Available Use% Mounted on
/dev/loop1           btrfs           9.3G   1016.4M      7.8G  11% /
...

Төхөөрөмж /dev/loop1 root хуваалттай адил суурилуулсан Хадгалах сан Эдгээр савнууд ашигладаг тул эзлэхүүнээ хоёрын хооронд хуваалцдаг.

Нөөцийн хэрэглээний статистик ^

Та дараах тушаалыг ашиглан контейнерийн нөөцийн хэрэглээний статистикийг харж болно.

lxc info alp

Name: alp
Location: none
Remote: unix://
Architecture: x86_64
Created: 2020/04/08 18:05 UTC
Status: Running
Type: container
Profiles: default, hddroot
Pid: 19219
Ips:
  eth0: inet    10.0.5.5        veth2a1dc59d
  eth0: inet6   fe80::216:3eff:fe0e:e271        veth2a1dc59d
  lo:   inet    127.0.0.1
  lo:   inet6   ::1
Resources:
  Processes: 5
  Disk usage:
    root: 495.62kB
  CPU usage:
    CPU usage (in seconds): 1
  Memory usage:
    Memory (current): 4.79MB
  Network usage:
    eth0:
      Bytes received: 730B
      Bytes sent: 1.59kB
      Packets received: 3
      Packets sent: 14
    lo:
      Bytes received: 0B
      Bytes sent: 0B
      Packets received: 0
      Packets sent: 0

Хормын хувилбаруудтай ажиллах ^

LXD нь агшин зуурын зураг үүсгэх, тэдгээрээс контейнерийн төлөвийг сэргээх чадвартай.

Хормын хувилбар үүсгэхийн тулд дараах тушаалыг ажиллуулна уу.

lxc snapshot alp snapshot1

Баг lxc snapshot түлхүүр байхгүй listТиймээс агшин зуурын жагсаалтыг харахын тулд контейнерийн талаархи ерөнхий мэдээллийг харуулах командыг ашиглах хэрэгтэй:

lxc info alp
...
...
Snapshots:
  snapshot1 (taken at 2020/04/08 18:18 UTC) (stateless)

Та командыг ашиглан агшин зуурын агшин зуурын савыг сэргээж болно lxc restore Сэргээлт хийгдэх сав болон хормын хувилбарыг зааж өгөх:

lxc restore alp snapshot1

Дараах тушаалыг агшин зуурын зургийг устгахад ашигладаг. Командын синтакс нь бусадтай ижил төстэй биш гэдгийг анхаарна уу, энд та контейнерийн нэрний дараа налуу зураасыг зааж өгөх хэрэгтэй. Хэрэв ташуу зураасыг орхигдуулсан бол агшин зуурын зургийг устгах командыг контейнер устгах тушаал гэж тайлбарлана!

lxc delete alp/snapshot1

Дээрх жишээн дээр бид харьяалалгүй хормын хувилбаруудыг авч үзсэн. LXD нь өөр төрлийн агшин зуурын агшинтай - төлөвтэй бөгөөд энэ нь чингэлэг дэх бүх процессын одоогийн төлөвийг хадгалдаг. Төлөв агшин зуурын зурагтай холбоотой хэд хэдэн сонирхолтой, хэрэгцээтэй функцууд байдаг.

Өөр юу гэж? ^

  • Python хөгжүүлэгчдэд зориулсан модулийг ашиглах боломжтой PyLXD LXD-д API өгдөг

ШИНЭЧЛЭЛТ 10.04.2020/15/00 XNUMX:XNUMX: Навигац нэмсэн

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх