Ciri asas LXD - sistem kontena Linux

Ciri asas LXD - sistem kontena Linux

LXD ialah pengurus kontena sistem generasi akan datang, demikian katanya sumber. Ia menawarkan antara muka pengguna yang serupa dengan mesin maya, tetapi sebaliknya menggunakan bekas Linux.

Teras LXD ialah daemon istimewa (perkhidmatan yang berjalan dengan hak akar) yang menyediakan API REST melalui soket unix tempatan, serta melalui rangkaian jika konfigurasi yang sesuai dipasang. Pelanggan, seperti alat baris arahan yang disediakan dengan LXD, membuat permintaan melalui REST API ini. Ini bermakna sama ada anda mengakses hos tempatan atau hos jauh, semuanya berfungsi sama.

Dalam artikel ini, kami tidak akan membincangkan secara terperinci tentang konsep LXD, kami tidak akan mempertimbangkan semua keupayaan tersedia yang digariskan dalam dokumentasi, termasuk pelaksanaan terkini dalam versi terkini sokongan LXD untuk mesin maya QEMU selari dengan bekas. Sebaliknya, kami akan mempelajari hanya asas pengurusan kontena - menyediakan kumpulan storan, rangkaian, menjalankan bekas, menggunakan had sumber dan cara menggunakan syot kilat supaya anda boleh mendapatkan pemahaman asas tentang LXD dan menggunakan bekas di Linux.

Untuk maklumat lengkap, sila rujuk sumber rasmi:

Navigasi

Pemasangan LXD ^

Memasang LXD pada pengedaran Ubuntu ^

Dalam pakej pengedaran Ubuntu 19.10 lxd mempunyai siaran di pakej snap:

apt search lxd

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

Ini bermakna dua pakej akan dipasang serentak, satu sebagai pakej sistem dan satu lagi sebagai pakej snap. Memasang dua pakej pada sistem mungkin menimbulkan beberapa masalah di mana pakej sistem mungkin menjadi yatim piatu jika pakej snap dialih keluar oleh pengurus pakej snap.

Cari pakej lxd dalam repositori snap anda boleh menggunakan arahan berikut:

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

Dengan menjalankan arahan list anda boleh memastikan bahawa pakej lxd belum dipasang:

snap list

Name  Version    Rev   Tracking  Publisher   Notes
core  16-2.43.3  8689  stable    canonicalβœ“  core

Walaupun fakta bahawa LXD adalah pakej snap, ia mesti dipasang melalui pakej sistem lxd, yang akan mewujudkan kumpulan yang sepadan dalam sistem, utiliti yang diperlukan dalam /usr/bin dan lain-lain

sudo apt update
sudo apt install lxd

Mari pastikan bahawa pakej dipasang sebagai pakej snap:

snap list

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

Memasang LXD pada pengedaran Arch Linux ^

Untuk memasang pakej LXD pada sistem, anda perlu menjalankan arahan berikut, yang pertama akan mengemas kini senarai pakej pada sistem yang tersedia dalam repositori, yang kedua akan memasang pakej secara langsung:

sudo pacman -Syyu && sudo pacman -S lxd

Selepas memasang pakej, untuk mengurus LXD oleh pengguna biasa, ia mesti ditambahkan pada kumpulan sistem lxd:

sudo usermod -a -G lxd user1

Mari pastikan pengguna user1 ditambah kepada kumpulan lxd:

id -Gn user1

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

Jika kumpulan lxd tidak kelihatan dalam senarai, maka anda perlu mengaktifkan sesi pengguna sekali lagi. Untuk melakukan ini, anda perlu log keluar dan log masuk di bawah pengguna yang sama.

Aktifkan dalam systemd memuatkan perkhidmatan LXD pada permulaan sistem:

sudo systemctl enable lxd

Mari mulakan perkhidmatan:

sudo systemctl start lxd

Menyemak status perkhidmatan:

sudo systemctl status lxd

Storan LXD (Storan) ^

Sebelum permulaan bermula, kita perlu memahami bagaimana storan dalam LXD disusun secara logik.

Penyimpanan (Pada Suhu Ambien) terdiri daripada daripada satu atau lebih Kolam Storan yang menggunakan salah satu sistem fail yang disokong seperti ZFS, BTRFS, LVM atau direktori biasa. Setiap Kolam Storan dibahagikan kepada jilid (Jumlah simpanan) yang mengandungi imej, bekas atau data untuk tujuan lain.

  • Imej - ini adalah pengedaran yang dipasang khas tanpa kernel Linux dan boleh didapati daripada sumber luaran
  • Kontena - ini adalah pengedaran yang digunakan daripada imej, sedia untuk digunakan
  • Syot kilat - ini ialah syot kilat keadaan bekas yang boleh anda kembalikan

Ciri asas LXD - sistem kontena Linux

Untuk mengurus storan dalam LXD, gunakan arahan lxc storage sijil yang anda boleh dapatkan dengan menyatakan kunci - lxc storage --help

Perintah berikut memaparkan senarai semua Kolam Storan dalam storan LXD:

lxc storage list

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

Untuk melihat senarai semua Jumlah simpanan dalam yang dipilih Kolam Storan berkhidmat kepada pasukan 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       |
+-----------+----------------------------------+-------------+---------+

Juga, jika untuk Kolam Storan Apabila mencipta, sistem fail BTRFS telah dipilih, kemudian dapatkan senarai Jumlah simpanan atau subvolume dalam tafsiran BTRFS, anda boleh menggunakan kit alat sistem fail ini:

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

Memulakan LXD ^

Sebelum mencipta dan menggunakan bekas, anda mesti melakukan pemulaan LXD am yang mencipta dan mengkonfigurasi rangkaian dan storan. Ini boleh dilakukan secara manual menggunakan arahan klien standard yang tersedia dalam senarai dengan memanggil arahan lxc --help atau menggunakan wizard permulaan lxd init menjawab beberapa soalan.

Memilih sistem fail untuk Kolam Storan ^

Semasa permulaan, LXD bertanya beberapa soalan, termasuk menentukan jenis sistem fail untuk lalai Kolam Storan. Secara lalai, sistem fail BTRFS dipilih untuknya. Ia adalah mustahil untuk menukar kepada FS lain selepas penciptaan. Untuk memilih FS adalah dicadangkan jadual perbandingan ciri:

Ciri
Direktori
Btrfs
LVM
ZFS
CEPH

Storan imej yang dioptimumkan
tidak
yes
yes
yes
yes

Penciptaan contoh yang dioptimumkan
tidak
yes
yes
yes
yes

Penciptaan syot kilat yang dioptimumkan
tidak
yes
yes
yes
yes

Pemindahan imej yang dioptimumkan
tidak
yes
tidak
yes
yes

Pemindahan contoh yang dioptimumkan
tidak
yes
tidak
yes
yes

Salin pada tulisan
tidak
yes
yes
yes
yes

Berasaskan blok
tidak
tidak
yes
tidak
yes

Pengklonan segera
tidak
yes
yes
yes
yes

Pemacu storan boleh digunakan di dalam bekas
yes
yes
tidak
tidak
tidak

Pulihkan daripada syot kilat lama (bukan terkini)
yes
yes
yes
tidak
yes

Kuota simpanan
ya(*)
yes
yes
yes
tidak

Memulakan rangkaian dan Kolam Storan menggunakan wizard ^

Perintah seterusnya yang akan kita lihat mencadangkan menyediakan komponen utama LXD dengan menjawab soalan mudah menggunakan wizard permulaan.

Jalankan arahan lxc init dan masukkan jawapan kepada soalan selepas titik bertindih seperti yang ditunjukkan dalam contoh di bawah atau ubahnya mengikut syarat anda:

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]: 

Mencipta Kolam Storan tambahan ^

Pada langkah sebelumnya yang kami buat Kolam Storan yang diberi nama ssdpool dan fail yang terletak pada sistem saya di /var/lib/lxd/disks/ssdpool.img. Alamat sistem fail ini sepadan dengan pemacu SSD fizikal dalam PC saya.

Tindakan berikut, untuk meluaskan pemahaman tentang peranan yang dimainkan oleh Kolam Storan dalam repositori, kami akan membuat yang kedua Kolam Storan yang akan ditempatkan secara fizikal pada jenis cakera yang berbeza, HDD. Masalahnya ialah LXD tidak membenarkan anda mencipta Kolam Storan keluar dari alamat /var/lib/lxd/disks/ malah pautan simbolik tidak akan berfungsi, lihat respons pembangun. Kami boleh memintas had ini semasa pemulaan/pemformatan Kolam Storan dengan menentukan nilai sebagai peranti blok dan bukannya laluan ke fail gelung balik dengan menyatakan ini dalam kekunci source.

Jadi, sebelum mencipta Kolam Storan anda perlu menentukan fail loopback atau partition sedia ada pada sistem fail anda yang akan digunakan. Untuk melakukan ini, kami akan membuat dan menggunakan fail yang kami hadkan saiznya kepada 10GB:

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

Mari sambungkan fail gelung balik ke peranti gelung balik percuma:

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

/dev/loop1

Terima kasih kepada kunci --show melaksanakan arahan itu mengembalikan ke skrin nama peranti di mana fail gelung balik kami disambungkan. Jika perlu, kami boleh memaparkan senarai semua peranti sibuk jenis ini untuk memastikan tindakan kami adalah betul:

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

Daripada senarai anda boleh mendapati bahawa peranti mempunyai /dev/loop1 fail loopback disertakan /mnt/work/lxd/hddpool.img, dan dalam peranti /dev/loop0 fail loopback disertakan /var/lib/lxd/disks/ssdpool.img yang sepadan dengan lalai Kolam Storan.

Perintah berikut mencipta yang baharu Kolam Storan dalam LXD berdasarkan fail loopback yang baru kami sediakan. LXD akan memformat fail gelung balik /mnt/work/lxd/hddpool.img dalam peranti /dev/loop1 untuk sistem fail BTRFS:

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

Mari paparkan senarai semua Kolam Storan ke skrin:

lxc storage list

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

Meningkatkan Saiz Kolam Storan ^

Selepas penciptaan Kolam Storan, jika perlu, ia boleh diperluaskan. Untuk Kolam Storan berdasarkan sistem fail BTRFS, jalankan arahan berikut:

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

Penyisipan automatik fail gelung balik ke dalam slot peranti gelung balik ^

Kami mempunyai satu masalah kecil, apabila but semula sistem hos, fail /mnt/work/lxd/hddpool.img akan "terbang" keluar dari peranti /dev/loop1 dan perkhidmatan LXD akan ranap apabila memuatkan kerana ia tidak akan melihatnya dalam peranti ini. Untuk menyelesaikan masalah ini, anda perlu mencipta perkhidmatan sistem yang akan memasukkan fail ini ke dalam peranti /dev/loop1 apabila sistem hos but.

Jom buat unit jenis fail perkhidmatan Π² /etc/systemd/system/ untuk sistem permulaan 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

Aktifkan perkhidmatan:

sudo systemctl enable lxd-hddpool

Created symlink /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service β†’ /etc/systemd/system/lxd-hddpool.service.

Selepas memulakan semula sistem hos, kami menyemak status perkhidmatan:

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).

Daripada output kita boleh mengesahkan bahawa keadaan perkhidmatan adalah aktif, walaupun pada hakikatnya pelaksanaan skrip kami dari satu arahan telah selesai, pilihan itu membenarkan kami melakukan ini RemainAfterExit=true.

Keselamatan. Keistimewaan Kontena ^

Memandangkan semua proses kontena sebenarnya berjalan secara berasingan pada sistem hos menggunakan kernelnya, untuk terus melindungi akses proses kontena kepada sistem hos, LXD menawarkan keistimewaan proses, di mana:

  • Bekas-bekas Istimewa - ini adalah bekas di mana proses dengan UID dan GID sepadan dengan pemilik yang sama seperti pada sistem hos. Sebagai contoh, proses yang berjalan dalam bekas dengan UID 0 mempunyai semua hak akses yang sama seperti proses pada sistem hos dengan UID 0. Dengan kata lain, pengguna akar dalam bekas mempunyai semua hak bukan sahaja dalam bekas, tetapi juga pada sistem hos jika dia boleh pergi ke luar ruang nama terpencil bekas itu.

  • Bekas yang tidak bernasib baik - ini adalah bekas di mana proses kepunyaan pemilik UID dan GID dengan nombor dari 0 hingga 65535, tetapi untuk sistem hos pemilik bertopeng menggunakan bit SubUID dan SubGID yang ditambahkan, masing-masing. Sebagai contoh, pengguna dengan UID=0 dalam bekas akan dilihat pada sistem hos sebagai SubUID + UID. Ini melindungi sistem hos kerana jika mana-mana proses dalam bekas dapat melepaskan ruang nama terpencilnya, ia hanya boleh berkomunikasi dengan sistem hos sebagai proses dengan UID/GID yang sangat tinggi yang tidak diketahui.

Secara lalai, bekas yang baru dibuat mempunyai status yang tidak mendapat keistimewaan dan oleh itu kita mesti menentukan SubUID dan SubGID.

Mari kita buat dua fail konfigurasi di mana kita akan menetapkan topeng untuk SubUID dan SubGID, masing-masing:

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

Untuk menggunakan perubahan, perkhidmatan LXD mesti dimulakan semula:

sudo systemctl restart lxd

Mencipta suis rangkaian maya ^

Memandangkan kami sebelum ini memulakan rangkaian menggunakan wizard pemula lxd init dan mencipta peranti rangkaian lxdbr0, maka dalam bahagian ini kita hanya akan berkenalan dengan rangkaian dalam LXD dan cara membuat suis maya (jambatan) menggunakan arahan klien.

Rajah berikut menunjukkan cara suis (jambatan) menghubungkan hos dan bekas ke dalam rangkaian:

Ciri asas LXD - sistem kontena Linux

Bekas boleh berkomunikasi melalui rangkaian dengan bekas lain atau hos tempat bekas ini dihidangkan. Untuk melakukan ini, anda perlu memautkan kad rangkaian maya bekas dengan suis maya. Kami akan membuat suis terlebih dahulu dan antara muka rangkaian bekas akan dipautkan dalam bab seterusnya, selepas bekas itu sendiri dibuat.

Perintah berikut mencipta suis dengan subnet 10.0.5.0/24 dan alamat IPv4 10.0.5.1/24, dan juga termasuk ipv4.nat supaya bekas boleh mengakses Internet melalui hos menggunakan perkhidmatan NAT:

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

Menyemak senarai peranti rangkaian yang tersedia dalam LXD:

lxc network list

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

Anda juga boleh mengesahkan bahawa peranti rangkaian telah dibuat menggunakan alat standard pengedaran Linux - ip link atau 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

Profil Konfigurasi ^

Setiap bekas dalam LXD mempunyai konfigurasi sendiri dan boleh memanjangkannya dengan konfigurasi yang diisytiharkan secara global dipanggil profil konfigurasi. Menggunakan profil konfigurasi pada bekas mempunyai model lata, contoh berikut menunjukkan ini:

Ciri asas LXD - sistem kontena Linux

Dalam contoh ini, tiga profil telah dibuat dalam sistem LXD: default, hddpool ΠΈ hostfs. Ketiga-tiga profil digunakan pada bekas yang mempunyai konfigurasi setempat (kawasan kelabu). Profil default mempunyai peranti root yang mempunyai parameter pool sama dengan ssdpool, tetapi terima kasih kepada model aplikasi konfigurasi lata, kami boleh menggunakan profil pada bekas hddpool yang mempunyai parameter pool akan mengatasi parameter yang sama daripada profil default dan bekas akan menerima konfigurasi peranti root dengan parameter pool sama hddpool, dan profil hostfs hanya menambah peranti baharu pada bekas.

Untuk melihat senarai profil konfigurasi yang tersedia, gunakan arahan berikut:

lxc profile list

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

Senarai lengkap arahan yang tersedia untuk bekerja dengan profil boleh diperolehi dengan menambah kunci --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

Mengedit profil anda ^

Profil konfigurasi lalai default tidak mempunyai konfigurasi kad rangkaian untuk bekas dan semua bekas yang baru dibuat tidak mempunyai rangkaian, bagi mereka adalah perlu untuk mencipta peranti rangkaian tempatan (berdedikasi) dengan arahan yang berasingan, tetapi kita boleh mencipta peranti rangkaian global dalam konfigurasi profil yang akan dikongsi antara semua bekas menggunakan profil ini. Dengan cara ini, sejurus selepas arahan untuk mencipta bekas baharu, mereka akan mempunyai rangkaian dengan akses rangkaian. Pada masa yang sama, tiada sekatan; kami sentiasa boleh membuat peranti rangkaian tempatan kemudian jika perlu.

Perintah berikut akan menambah peranti pada profil konfigurasi eth0 jenis nic disambungkan ke rangkaian lxdbr0:

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

Adalah penting untuk ambil perhatian bahawa memandangkan kami sebenarnya menambahkan peranti pada profil konfigurasi, jika kami menetapkan alamat IP statik dalam peranti, maka semua bekas yang akan menggunakan profil ini akan berkongsi alamat IP yang sama. Jika terdapat keperluan untuk mencipta bekas dengan alamat IP statik yang diperuntukkan untuk bekas, maka anda harus membuat konfigurasi peranti rangkaian pada tahap kontena (konfigurasi setempat) dengan parameter alamat IP, dan bukan pada tahap profil.

Jom semak profil:

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: []

Dalam profil ini kita dapat melihat bahawa untuk semua bekas yang baru dibuat dua peranti akan dibuat:

  • eth0 - Jenis peranti nic disambungkan ke suis (jambatan rangkaian) lxdbr0
  • root - Jenis peranti disk yang menggunakan kolam simpanan ssdpool

Mencipta profil baharu ^

Untuk menggunakan yang dibuat sebelum ini Kolam Storan bekas, buat profil konfigurasi ssdroot di mana kami akan menambah peranti seperti disk dengan titik pelekap / (root) menggunakan yang dibuat sebelum ini Kolam Storan - ssdpool:

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

Begitu juga, kami mencipta peranti seperti disk, tetapi dalam kes ini menggunakan Kolam Storan - hddpool:

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

Menyemak profil konfigurasi:

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: []

Repositori imej ^

Bekas dicipta daripada imej yang merupakan pengedaran yang dipasang khas yang tidak mempunyai kernel Linux. Oleh itu, sebelum menjalankan bekas, ia mesti digunakan daripada imej ini. Sumber imej ialah repositori tempatan di mana imej dimuat turun dari repositori luaran.

Repositori imej jauh ^

Secara lalai, LXD dikonfigurasikan untuk menerima imej daripada tiga sumber jauh:

  • ubuntu: (untuk imej Ubuntu yang stabil)
  • ubuntu-daily: (untuk imej Ubuntu harian)
  • gambar: (untuk sekumpulan distro lain)

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    |
+-----------------+------------------------------------------+--------+--------+

Sebagai contoh, repositori ubuntu: mempunyai gambar berikut:

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  |
+----------------------------------------------+--------------+----------+------------+

Untuk memaparkan bilangan lajur yang terhad, kami menggunakan pilihan -c dengan parameter dasut, dan juga mengehadkan panjang senarai dengan arahan head.

Penapisan tersedia untuk memaparkan senarai imej. Perintah berikut akan menyenaraikan semua seni bina pengedaran yang tersedia 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        |
+------------------------------+--------------------------------------+--------------+

Repositori imej tempatan ^

Untuk mula menggunakan bekas, anda perlu menambah imej daripada repositori global kepada yang tempatan local:. Sekarang repositori tempatan kosong, arahan akan memastikan ini lxc image list. Jika kaedah list jangan nyatakan repositori, maka repositori tempatan akan digunakan secara lalai - local:

lxc image list local:

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

Imej dalam repositori diurus menggunakan kaedah berikut:

Pasukan
ОписаниС

imej lxc alias
Urus alias imej

imej lxc salinan
Salin imej antara pelayan

imej lxc memadam
Padamkan gambar

imej lxc mengedit
Edit sifat imej

imej lxc mengeksport
Eksport dan muat turun imej

imej lxc mengimport
Import imej ke dalam stor imej

imej lxc maklumat
Tunjukkan maklumat berguna tentang imej

imej lxc senarai
Senaraikan imej

imej lxc refresh
Muat semula imej

imej lxc Menunjukkan
Tunjukkan sifat imej

Salin imej ke repositori tempatan daripada yang global images::

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

Image copied successfully!

Mari paparkan senarai semua imej yang tersedia pada masa ini dalam repositori tempatan local::

lxc image -c lfdatsu list local:

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

Konfigurasi LXD ^

Sebagai tambahan kepada mod interaktif, LXD juga menyokong mod pemasangan konfigurasi bukan interaktif, ini adalah apabila konfigurasi ditentukan dalam bentuk fail YAML, format khas yang membolehkan anda memasang keseluruhan konfigurasi sekaligus, memintas pelaksanaan daripada banyak arahan interaktif yang dibincangkan di atas dalam artikel ini, termasuk konfigurasi rangkaian, penciptaan profil konfigurasi, dsb. Kami tidak akan meliputi kawasan ini di sini, anda boleh menyemaknya sendiri. dalam dokumentasi.

Perintah interaktif seterusnya lxc config yang akan kami lihat membolehkan anda menetapkan konfigurasi. Contohnya, untuk memastikan imej yang dimuat turun ke repositori tempatan tidak dikemas kini secara automatik daripada repositori global, kami boleh mendayakan tingkah laku ini dengan arahan berikut:

lxc config set images.auto_update_cached=false

Mencipta dan mengurus bekas ^

Untuk membuat bekas gunakan arahan lxc init kepada mana nilai diluluskan Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ:ΠΎΠ±Ρ€Π°Π· dan kemudian ID yang diingini untuk bekas. Repositori boleh ditentukan sebagai tempatan local: begitu juga dengan mana-mana yang global. Jika repositori tidak ditentukan, maka secara lalai repositori tempatan digunakan untuk mencari imej. Jika imej ditentukan daripada repositori global, maka imej itu akan dimuat turun terlebih dahulu ke repositori tempatan dan kemudian digunakan untuk mencipta bekas.

Mari jalankan arahan berikut untuk mencipta bekas pertama kami:

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

Mari lihat kekunci arahan yang kami gunakan di sini mengikut urutan:

  • alpine3 β€” Alias ​​(alias) ditentukan untuk imej yang sebelum ini dimuat naik ke repositori tempatan. Jika alias tidak dicipta untuk imej ini, maka anda sentiasa boleh merujuk imej itu mengikut imejnya cap jari yang dipaparkan dalam jadual.
  • alp β€” Tetapkan pengecam untuk bekas
  • --storage β€” Kekunci ini menunjukkan di mana Kolam Storan satu bekas akan dibuat
  • --profile β€” Lata kekunci ini menggunakan konfigurasi daripada profil konfigurasi yang dibuat sebelum ini kepada bekas

Kami melancarkan bekas, yang mula melancarkan sistem init pengedaran:

lxc start alp

Anda juga boleh menggunakan arahan lxc launch yang membolehkan anda menggabungkan pasukan lxc init ΠΈ lxc start dalam satu operasi.

Memeriksa keadaan bekas:

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

Menyemak konfigurasi bekas:

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: ""

Dalam bahagian profiles kita boleh memastikan bahawa bekas ini menggunakan dua profil konfigurasi βˆ’ default ΠΈ hddroot. Dalam bahagian devices kami hanya dapat mengesan satu peranti kerana peranti rangkaian telah dibuat pada peringkat profil default. Untuk melihat semua peranti yang digunakan oleh bekas, anda perlu menambah kunci --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: ""

Menetapkan alamat IP statik ^

Jika kita cuba menetapkan alamat IP untuk peranti rangkaian eth0 pasukan lxc config device set alp bertujuan untuk konfigurasi bekas, maka kami akan menerima ralat yang akan melaporkan bahawa peranti itu tidak wujud kerana peranti itu eth0 yang digunakan oleh bekas adalah kepunyaan profil default:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: The device doesn't exist

Kita sudah tentu boleh menetapkan alamat IP statik untuk eth0 peranti dalam profil, tetapi ia akan menjadi sama untuk semua bekas yang akan menggunakan profil ini. Oleh itu, mari tambah peranti khusus untuk bekas:

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

Kemudian anda perlu memulakan semula bekas:

lxc restart alp

Jika kita melihat konfigurasi kontena sekarang, kita tidak perlu menggunakan pilihan tersebut --expanded untuk melihat peranti rangkaian eth0, kerana kami menciptanya pada tahap bekas dan ia melata pada peranti yang sama daripada profil 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: ""

Mengeluarkan bekas ^

Untuk mengalih keluar bekas, gunakan arahan lxc delete, tetapi sebelum mengalih keluar bekas, ia mesti dihentikan menggunakan arahan lxc stop:

lxc stop alp

lxc list

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

Selepas kami telah mengesahkan bahawa keadaan bekas telah menjadi STOPPED, ia boleh dialih keluar daripada Kolam Storan:

lxc delete alp

Akses kontena ^

Untuk melaksanakan arahan dalam bekas secara langsung, memintas sambungan rangkaian, gunakan arahan lxc exec yang melaksanakan arahan dalam bekas tanpa melancarkan shell sistem. Jika anda perlu melaksanakan perintah dalam shell menggunakan corak shell seperti pembolehubah, ubah hala fail (paip), dll., maka anda perlu melancarkan shell secara eksplisit dan lulus arahan sebagai kunci, contohnya:

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

Perintah itu menggunakan watak melarikan diri khas untuk watak istimewa $ supaya pembolehubah $HOME tidak ditafsirkan pada mesin hos, tetapi hanya ditafsirkan di dalam bekas.

Ia juga mungkin untuk memulakan mod shell interaktif, dan kemudian menamatkan sesi dengan melaksanakan hotkey CTRL+D:

lxc exec alp -- /bin/sh

Pengurusan sumber kontena ^

Dalam LXD, anda boleh mengurus sumber kontena menggunakan set konfigurasi khas. Senarai lengkap parameter konfigurasi kontena boleh didapati dalam dokumentasi.

Had sumber RAM ^

Parameter limits.memory mengehadkan jumlah RAM yang tersedia untuk bekas. Nilainya ialah nombor dan satu daripada akhiran yang tersedia.

Mari tetapkan had RAM bekas kepada 256 MB:

lxc config set alp limits.memory 256MB

Juga, terdapat parameter lain untuk mengehadkan ingatan:

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

Pasukan lxc config show membolehkan anda memaparkan keseluruhan konfigurasi bekas, termasuk had sumber yang digunakan yang telah ditetapkan:

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: ""

Had sumber CPU ^

Terdapat beberapa cara untuk mengehadkan sumber CPU. jenis sekatan:

  • limit.cpu - mengikat bekas kepada satu atau lebih teras CPU
  • limits.cpu.allowance - mengurus sama ada kuota penjadual CFS apabila had masa telah berlalu, atau mekanisme perkongsian sumber CPU universal apabila peratusan telah berlalu
  • limits.cpu.priority - keutamaan penjadual apabila berbilang kejadian berkongsi set pemproses diberikan peratusan pemproses yang sama

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: ""

Had ruang cakera ^

Selain sekatan seperti itu limits.read, limits.write kami juga boleh mengehadkan jumlah ruang cakera yang digunakan oleh bekas (hanya berfungsi dengan ZFS atau BTRFS):

lxc config device set alp root size=2GB

Selepas pemasangan, dalam parameter devices.root.size Kami boleh mengesahkan had yang ditetapkan:

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

Untuk melihat kuota cakera yang digunakan kita boleh dapatkan daripada arahan 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

Walaupun fakta bahawa kami telah menetapkan had untuk peranti akar kontena kepada 2GB, utiliti sistem seperti df tidak akan melihat sekatan ini. Untuk melakukan ini, kami akan menjalankan ujian kecil dan mengetahui cara ia berfungsi.

Mari buat 2 bekas serupa baharu dalam bekas yang sama Kolam Storan (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         |
+------+---------+------------------+------+-----------+-----------+

Mari buat fail 1GB dalam salah satu bekas:

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

Mari pastikan fail dibuat:

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

Jika kita melihat dalam bekas kedua, semak kewujudan fail di lokasi yang sama, maka fail ini tidak akan berada di sana, yang dijangka, kerana bekas dibuat dalam mereka sendiri Jumlah simpanan dalam yang sama Kolam Storan:

lxc exec alp2 -- ls -lh
total 0

Tetapi mari kita bandingkan nilai yang dihasilkannya df pada satu dan bekas yang lain:

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% /
...

peranti /dev/loop1 dipasang sebagai partition root Kolam Storan yang digunakan oleh bekas ini, jadi mereka berkongsi volumnya antara dua.

Statistik penggunaan sumber ^

Anda boleh melihat statistik penggunaan sumber untuk bekas menggunakan arahan:

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

Bekerja dengan syot kilat ^

LXD mempunyai keupayaan untuk mencipta syot kilat dan memulihkan keadaan bekas daripadanya.

Untuk membuat syot kilat, jalankan arahan berikut:

lxc snapshot alp snapshot1

Pasukan lxc snapshot tiada kunci tersedia list, oleh itu, untuk melihat senarai syot kilat anda perlu menggunakan arahan yang memaparkan maklumat umum tentang bekas:

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

Anda boleh memulihkan bekas daripada syot kilat menggunakan arahan lxc restore menyatakan bekas yang mana pemulihan akan dilakukan dan alias syot kilat:

lxc restore alp snapshot1

Perintah berikut digunakan untuk memadam syot kilat. Sila ambil perhatian bahawa sintaks arahan tidak serupa dengan semua yang lain; di sini anda perlu menentukan garis miring ke hadapan selepas nama bekas. Jika garis miring ditinggalkan, maka perintah untuk memadamkan syot kilat ditafsirkan sebagai perintah untuk memadam bekas!

lxc delete alp/snapshot1

Dalam contoh di atas, kami melihat apa yang dipanggil syot kilat tanpa kewarganegaraan. LXD mempunyai satu lagi jenis syot kilat - stateful, yang menyimpan keadaan semasa semua proses dalam bekas. Terdapat beberapa ciri menarik dan berguna yang dikaitkan dengan syot kilat stateful.

Apa lagi? ^

  • Modul tersedia untuk pembangun Python PyLXD yang menyediakan API kepada LXD

KEMASKINI 10.04.2020/15/00 XNUMX:XNUMX: Menambahkan navigasi

Sumber: www.habr.com

Tambah komen