Fitur Inti LXD - Sistem Kontainer Linux

Fitur Inti LXD - Sistem Kontainer Linux

Lxd adalah manajer kontainer sistem generasi berikutnya, demikian katanya sumber. Ia menawarkan antarmuka pengguna yang mirip dengan mesin virtual, tetapi menggunakan container Linux sebagai gantinya.

inti LXD adalah daemon dengan hak istimewa (layanan yang berjalan dengan hak root) yang menyediakan REST API melalui soket unix lokal, serta melalui jaringan jika konfigurasi yang sesuai diinstal. Klien, seperti alat baris perintah yang disediakan dengan LXD, membuat permintaan melalui REST API ini. Artinya, apakah Anda mengakses host lokal atau host jarak jauh, semuanya berfungsi sama.

Dalam artikel ini kami tidak akan membahas secara rinci konsep LXD, kami tidak akan mempertimbangkan semua kemampuan yang tersedia yang diuraikan dalam dokumentasi, termasuk implementasi terbaru dalam versi terbaru dukungan LXD untuk mesin virtual QEMU secara paralel dengan container. Sebagai gantinya, kita hanya akan mempelajari dasar-dasar manajemen container - menyiapkan kumpulan penyimpanan, jaringan, menjalankan container, menerapkan batasan sumber daya, dan cara menggunakan snapshot sehingga Anda bisa mendapatkan pemahaman dasar tentang LXD dan menggunakan container di Linux.

Untuk informasi selengkapnya, silakan merujuk ke sumber resmi:

Navigasi

Instalasi LXD ^

Menginstal LXD pada distribusi Ubuntu ^

Dalam paket distribusi Ubuntu 19.10 lxd sedang siaran paket jepret:

apt search lxd

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

Artinya dua paket akan diinstal sekaligus, satu sebagai paket sistem dan yang lainnya sebagai paket snap. Menginstal dua paket pada suatu sistem dapat menimbulkan beberapa masalah di mana paket sistem mungkin menjadi yatim piatu jika paket snap dihapus oleh manajer paket snap.

Temukan paket lxd di repositori snap Anda dapat menggunakan perintah 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 perintah list Anda dapat memastikan bahwa paketnya lxd belum dipasang:

snap list

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

Meskipun LXD adalah paket snap, itu harus diinstal melalui paket sistem lxd, yang akan membuat grup terkait di sistem, utilitas yang diperlukan di /usr/bin dan lain-lain

sudo apt update
sudo apt install lxd

Mari pastikan bahwa paket tersebut diinstal sebagai paket snap:

snap list

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

Menginstal LXD pada distribusi Arch Linux ^

Untuk menginstal paket LXD pada sistem, Anda perlu menjalankan perintah berikut, yang pertama akan memperbarui daftar paket pada sistem yang tersedia di repositori, yang kedua akan langsung menginstal paket tersebut:

sudo pacman -Syyu && sudo pacman -S lxd

Setelah menginstal paket, untuk mengelola LXD oleh pengguna biasa, paket tersebut harus ditambahkan ke grup sistem lxd:

sudo usermod -a -G lxd user1

Mari kita pastikan pengguna user1 ditambahkan ke grup lxd:

id -Gn user1

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

Jika grup lxd tidak terlihat dalam daftar, maka Anda perlu mengaktifkan kembali sesi pengguna. Untuk melakukan ini, Anda harus keluar dan masuk dengan pengguna yang sama.

Aktifkan di systemd memuat layanan LXD saat startup sistem:

sudo systemctl enable lxd

Mari kita mulai layanannya:

sudo systemctl start lxd

Memeriksa status layanan:

sudo systemctl status lxd

Penyimpanan LXD (Penyimpanan) ^

Sebelum inisialisasi dimulai, kita perlu memahami bagaimana penyimpanan di LXD diatur secara logis.

Penyimpanan (Storage) terdiri dari dari satu atau lebih Kolam Penyimpanan yang menggunakan salah satu sistem file yang didukung seperti ZFS, BTRFS, LVM atau direktori biasa. Setiap Kolam Penyimpanan dibagi menjadi beberapa volume (Volume Penyimpanan) yang berisi gambar, wadah, atau data untuk tujuan lain.

  • Gambar - ini adalah distribusi yang dirakit khusus tanpa kernel Linux dan tersedia dari sumber eksternal
  • Wadah - ini adalah distribusi yang diterapkan dari gambar, siap digunakan
  • Jepretan - ini adalah cuplikan status container yang dapat Anda gunakan kembali

Fitur Inti LXD - Sistem Kontainer Linux

Untuk mengelola penyimpanan di LXD, gunakan perintah lxc storage sertifikat yang dapat Anda peroleh dengan menentukan kuncinya - lxc storage --help

Perintah berikut menampilkan daftar semuanya Kolam Penyimpanan dalam penyimpanan 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 daftar semuanya Volume Penyimpanan di yang dipilih Kolam Penyimpanan melayani tim 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 Penyimpanan Saat membuat, sistem file BTRFS dipilih, lalu dapatkan daftarnya Volume Penyimpanan ΠΈΠ»ΠΈ subvolume dalam interpretasi BTRFS, Anda dapat menggunakan toolkit sistem file 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

Menginisialisasi LXD ^

Sebelum membuat dan menggunakan kontainer, Anda harus melakukan inisialisasi LXD umum yang membuat dan mengonfigurasi jaringan dan penyimpanan. Ini dapat dilakukan secara manual menggunakan perintah klien standar yang tersedia dalam daftar dengan memanggil perintah tersebut lxc --help atau menggunakan wizard inisialisasi lxd init menjawab beberapa pertanyaan.

Memilih sistem file untuk Storage Pool ^

Selama inisialisasi, LXD mengajukan beberapa pertanyaan, termasuk menentukan jenis sistem file default Kolam Penyimpanan. Secara default, sistem file BTRFS dipilih untuk itu. Tidak mungkin untuk mengubah ke FS lain setelah pembuatan. Untuk memilih FS disarankan tabel perbandingan fitur:

Fitur
Direktori
Btrfs
LVM
ZFS
CEPH

Penyimpanan gambar yang dioptimalkan
tidak
iya nih
iya nih
iya nih
iya nih

Pembuatan instance yang dioptimalkan
tidak
iya nih
iya nih
iya nih
iya nih

Pembuatan snapshot yang dioptimalkan
tidak
iya nih
iya nih
iya nih
iya nih

Transfer gambar yang dioptimalkan
tidak
iya nih
tidak
iya nih
iya nih

Transfer instans yang dioptimalkan
tidak
iya nih
tidak
iya nih
iya nih

salin saat menulis
tidak
iya nih
iya nih
iya nih
iya nih

Berbasis blok
tidak
tidak
iya nih
tidak
iya nih

Kloning instan
tidak
iya nih
iya nih
iya nih
iya nih

Driver penyimpanan dapat digunakan di dalam wadah
iya nih
iya nih
tidak
tidak
tidak

Pulihkan dari snapshot lama (bukan yang terbaru)
iya nih
iya nih
iya nih
tidak
iya nih

Kuota penyimpanan
Ya(*)
iya nih
iya nih
iya nih
tidak

Menginisialisasi jaringan dan Storage Pool menggunakan wizard ^

Perintah selanjutnya yang akan kita lihat menyarankan pengaturan komponen utama LXD dengan menjawab pertanyaan sederhana menggunakan wizard inisialisasi.

Jalankan perintah lxc init dan masukkan jawaban pertanyaan setelah titik dua seperti pada contoh di bawah ini atau ubah sesuai kondisi 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]: 

Membuat Kumpulan Penyimpanan tambahan ^

Pada langkah sebelumnya kita buat Kolam Penyimpanan yang diberi nama itu ssdpool dan file yang terletak di sistem saya di /var/lib/lxd/disks/ssdpool.img. Alamat sistem file ini sesuai dengan drive SSD fisik di PC saya.

Tindakan berikut, untuk memperluas pemahaman tentang peran yang dimainkan oleh Kolam Penyimpanan di repositori, kita akan membuat yang kedua Kolam Penyimpanan yang secara fisik akan ditempatkan pada jenis disk yang berbeda, HDD. Masalahnya adalah LXD tidak mengizinkan Anda membuat Kolam Penyimpanan keluar dari alamat /var/lib/lxd/disks/ dan bahkan tautan simbolis pun tidak akan berfungsi, lihat tanggapan pengembang. Kita dapat melewati batasan ini selama inisialisasi/pemformatan Kolam Penyimpanan dengan menentukan nilai sebagai perangkat blok alih-alih jalur ke file loopback dengan menentukan ini di kunci source.

Jadi, sebelum membuat Kolam Penyimpanan Anda perlu menentukan file loopback atau partisi yang ada di sistem file Anda yang akan digunakan. Untuk melakukan ini, kami akan membuat dan menggunakan file yang ukurannya akan kami batasi hingga 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 file loopback ke perangkat loopback gratis:

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

/dev/loop1

Berkat kuncinya --show menjalankan perintah akan mengembalikan ke layar nama perangkat yang terhubung dengan file loopback kita. Jika perlu, kami dapat menampilkan daftar semua perangkat sibuk jenis ini untuk memastikan tindakan kami benar:

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

Dari daftar Anda dapat mengetahui apa yang dimiliki perangkat tersebut /dev/loop1 file loopback disertakan /mnt/work/lxd/hddpool.img, dan di perangkat /dev/loop0 file loopback disertakan /var/lib/lxd/disks/ssdpool.img yang sesuai dengan default Kolam Penyimpanan.

Perintah berikut membuat yang baru Kolam Penyimpanan di LXD berdasarkan file loopback yang baru saja kita siapkan. LXD akan memformat file loopback /mnt/work/lxd/hddpool.img di perangkat /dev/loop1 untuk sistem file BTRFS:

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

Mari kita tampilkan daftar semuanya Kolam Penyimpanan untuk menyaring:

lxc storage list

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

Meningkatkan Ukuran Kolam Penyimpanan ^

Setelah penciptaan Kolam Penyimpanan, jika perlu, dapat diperluas. Untuk Kolam Penyimpanan berdasarkan sistem file BTRFS, jalankan perintah 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 otomatis file loopback ke dalam slot perangkat loopback ^

Kami memiliki satu masalah kecil, ketika me-reboot sistem host, file /mnt/work/lxd/hddpool.img akan "terbang" keluar dari perangkat /dev/loop1 dan layanan LXD akan macet saat memuat karena tidak melihatnya di perangkat ini. Untuk mengatasi masalah ini Anda perlu membuat layanan sistem yang akan memasukkan file ini ke dalam perangkat /dev/loop1 saat sistem host melakukan booting.

Mari berkreasi satuan jenis file layanan Π² /etc/systemd/system/ untuk sistem inisialisasi 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 layanan:

sudo systemctl enable lxd-hddpool

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

Setelah memulai ulang sistem host, kami memeriksa status layanan:

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

Dari output kita dapat memverifikasi bahwa status layanannya aktif, meskipun eksekusi skrip kami dari satu perintah telah selesai, opsi ini memungkinkan kami melakukan ini RemainAfterExit=true.

Keamanan. Hak Istimewa Kontainer ^

Karena semua proses container sebenarnya berjalan secara terisolasi pada sistem host menggunakan kernelnya, untuk lebih melindungi akses proses container ke sistem host, LXD menawarkan hak istimewa proses, di mana:

  • Kontainer Istimewa - ini adalah wadah di mana proses dengan UID dan GID berhubungan dengan pemilik yang sama seperti pada sistem host. Misalnya, suatu proses yang berjalan di container dengan UID 0 memiliki semua hak akses yang sama dengan proses di sistem host dengan UID 0. Dengan kata lain, pengguna root di container tersebut memiliki semua hak tidak hanya di wadahnya, tetapi juga pada sistem host jika dia bisa keluar dari namespace wadah yang terisolasi.

  • Kontainer yang tidak memiliki hak istimewa - ini adalah wadah di mana proses milik pemilik UID dan GID dengan nomor dari 0 hingga 65535, tetapi untuk sistem host, pemiliknya masing-masing ditutupi menggunakan bit SubUID dan SubGID yang ditambahkan. Misalnya, pengguna dengan UID=0 dalam sebuah container akan terlihat di sistem host sebagai SubUID + UID. Hal ini melindungi sistem host karena jika ada proses dalam container yang dapat keluar dari namespace terisolasinya, maka proses tersebut hanya dapat berkomunikasi dengan sistem host sebagai proses dengan UID/GID yang sangat tinggi dan tidak diketahui.

Secara default, container yang baru dibuat memiliki status tidak memiliki hak istimewa dan oleh karena itu kita harus mendefinisikan SubUID dan SubGID.

Mari kita buat dua file konfigurasi di mana kita akan mengatur mask 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 menerapkan perubahan, layanan LXD harus dimulai ulang:

sudo systemctl restart lxd

Membuat saklar jaringan virtual ^

Karena sebelumnya kita menginisialisasi jaringan menggunakan wizard inisialisasi lxd init dan membuat perangkat jaringan lxdbr0, selanjutnya pada bagian ini kita secara sederhana akan mengenal networking di LXD dan cara membuat virtual switch (bridge) menggunakan perintah client.

Diagram berikut menunjukkan bagaimana switch (jembatan) menghubungkan host dan container ke dalam jaringan:

Fitur Inti LXD - Sistem Kontainer Linux

Kontainer dapat berkomunikasi melalui jaringan dengan kontainer lain atau host tempat kontainer tersebut dilayani. Untuk melakukan ini, Anda perlu menghubungkan kartu jaringan virtual wadah dengan saklar virtual. Kita akan membuat switch terlebih dahulu, dan antarmuka jaringan container akan ditautkan di bab berikutnya, setelah container itu sendiri dibuat.

Perintah berikut membuat saklar dengan subnet 10.0.5.0/24 dan alamat IPv4 10.0.5.1/24, dan juga termasuk ipv4.nat agar container dapat mengakses Internet melalui host menggunakan layanan NAT:

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

Memeriksa daftar perangkat jaringan yang tersedia di LXD:

lxc network list

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

Anda juga dapat memverifikasi bahwa perangkat jaringan telah dibuat menggunakan alat standar distribusi Linux - 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

Profil Konfigurasi ^

Setiap kontainer di LXD memiliki konfigurasinya sendiri dan dapat diperluas dengan konfigurasi yang dinyatakan secara global yang disebut profil konfigurasi. Menerapkan profil konfigurasi ke kontainer memiliki model kaskade, contoh berikut menunjukkan hal ini:

Fitur Inti LXD - Sistem Kontainer Linux

Dalam contoh ini, tiga profil telah dibuat di sistem LXD: default, hddpool ΠΈ hostfs. Ketiga profil tersebut diterapkan pada container yang memiliki konfigurasi lokal (area abu-abu). Profil default memiliki perangkat root yang memiliki parameter pool sama dengan ssdpool, namun berkat model aplikasi konfigurasi kaskade, kita dapat menerapkan profil ke container hddpool yang memiliki parameter pool akan mengganti parameter yang sama dari profil default dan wadah akan menerima konfigurasi perangkat root dengan parameter pool sama hddpool, dan profil hostfs cukup tambahkan perangkat baru ke wadah.

Untuk melihat daftar profil konfigurasi yang tersedia, gunakan perintah berikut:

lxc profile list

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

Daftar lengkap perintah yang tersedia untuk bekerja dengan profil dapat diperoleh dengan menambahkan 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 default default tidak memiliki konfigurasi kartu jaringan untuk container dan semua container yang baru dibuat tidak memiliki jaringan, untuk itu perlu membuat perangkat jaringan lokal (khusus) dengan perintah terpisah, tetapi kita dapat membuat perangkat jaringan global dalam konfigurasi profil yang akan dibagikan ke semua penampung yang menggunakan profil ini. Dengan cara ini, segera setelah perintah untuk membuat container baru, mereka akan memiliki jaringan dengan akses jaringan. Pada saat yang sama, tidak ada batasan; kami selalu dapat membuat perangkat jaringan lokal nanti jika diperlukan.

Perintah berikut akan menambahkan perangkat ke profil konfigurasi eth0 tipe nic terhubung ke jaringan lxdbr0:

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

Penting untuk dicatat bahwa karena kami sebenarnya menambahkan perangkat ke profil konfigurasi, jika kami menentukan alamat IP statis di perangkat, maka semua kontainer yang akan menggunakan profil ini akan berbagi alamat IP yang sama. Jika ada kebutuhan untuk membuat container dengan alamat IP statis yang dialokasikan untuk container tersebut, maka Anda harus membuat konfigurasi perangkat jaringan di tingkat container (konfigurasi lokal) dengan parameter alamat IP, dan bukan di tingkat profil.

Mari kita periksa profilnya:

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 bahwa untuk semua container yang baru dibuat, dua perangkat akan dibuat:

  • eth0 - Tipe perangkat nic terhubung ke saklar (jembatan jaringan) lxdbr0
  • root - Tipe perangkat disk yang menggunakan kolam penyimpanan ssdpool

Membuat profil baru ^

Untuk menggunakan yang dibuat sebelumnya Kolam Penyimpanan kontainer, buat profil konfigurasi ssdroot di mana kami akan menambahkan perangkat seperti disk dengan titik pemasangan / (root) menggunakan yang telah dibuat sebelumnya Kolam Penyimpanan - ssdpool:

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

Demikian pula, kami membuat perangkat seperti disk, tetapi dalam hal ini menggunakan Kolam Penyimpanan - hddpool:

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

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

Penyimpanan gambar ^

Kontainer dibuat dari image yang merupakan distribusi rakitan khusus yang tidak memiliki kernel Linux. Oleh karena itu, sebelum menjalankan container, container harus di-deploy dari image ini. Sumber gambar adalah repositori lokal tempat gambar diunduh dari repositori eksternal.

Repositori gambar jarak jauh ^

Secara default, LXD dikonfigurasi untuk menerima gambar dari tiga sumber jarak jauh:

  • ubuntu: (untuk image Ubuntu yang stabil)
  • ubuntu-harian: (untuk gambar Ubuntu harian)
  • gambar-gambar: (untuk banyak 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    |
+-----------------+------------------------------------------+--------+--------+

Misalnya saja repositori ubuntu: memiliki 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 menampilkan sejumlah kolom terbatas kami menggunakan opsi -c dengan parameter dasut, dan juga membatasi panjang daftar dengan perintah head.

Pemfilteran tersedia untuk menampilkan daftar gambar. Perintah berikut akan mencantumkan semua arsitektur distribusi yang tersedia AlpenLinux:

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 gambar lokal ^

Untuk mulai menggunakan container, Anda perlu menambahkan image dari repositori global ke repositori lokal local:. Sekarang repositori lokal kosong, perintah akan memastikan hal ini lxc image list. Jika metodenya list jangan tentukan repositori, maka repositori lokal akan digunakan secara default - local:

lxc image list local:

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

Gambar di repositori dikelola menggunakan metode berikut:

Tim
ОписаниС

gambar lxc alias
Kelola alias gambar

gambar lxc salinan
Salin gambar antar server

gambar lxc hapus
Hapus gambar

gambar lxc mengedit
Edit properti gambar

gambar lxc ekspor
Ekspor dan unduh gambar

gambar lxc mengimpor
Impor gambar ke penyimpanan gambar

gambar lxc Info
Tampilkan informasi berguna tentang gambar

gambar lxc daftar
Daftar gambar

gambar lxc menyegarkan
Segarkan gambar

gambar lxc Menunjukkan
Tampilkan properti gambar

Salin gambar ke repositori lokal dari repositori global images::

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

Image copied successfully!

Mari kita tampilkan daftar semua gambar yang saat ini tersedia di repositori lokal local::

lxc image -c lfdatsu list local:

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

Konfigurasi LXD ^

Selain mode interaktif, LXD juga mendukung mode instalasi konfigurasi non-interaktif, yaitu ketika konfigurasi ditentukan dalam bentuk file YAML, format khusus yang memungkinkan Anda menginstal seluruh konfigurasi sekaligus, melewati eksekusi dari banyak perintah interaktif yang dibahas di atas dalam artikel ini, termasuk konfigurasi jaringan, pembuatan profil konfigurasi, dll. Kami tidak akan membahas area ini di sini, Anda dapat memeriksanya sendiri. dalam dokumentasi.

Perintah interaktif berikutnya lxc config yang akan kita lihat memungkinkan Anda untuk mengatur konfigurasi. Misalnya, untuk memastikan bahwa gambar yang diunduh ke repositori lokal tidak diperbarui secara otomatis dari repositori global, kita dapat mengaktifkan perilaku ini dengan perintah berikut:

lxc config set images.auto_update_cached=false

Membuat dan mengelola wadah ^

Untuk membuat wadah gunakan perintah lxc init ke mana nilai-nilai diteruskan Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ:ΠΎΠ±Ρ€Π°Π· dan kemudian ID yang diinginkan untuk wadah tersebut. Repositori dapat ditentukan sebagai lokal local: begitu pula yang global. Jika repositori tidak ditentukan, maka secara default repositori lokal digunakan untuk mencari image. Jika image ditentukan dari repositori global, maka image tersebut akan diunduh terlebih dahulu ke repositori lokal dan kemudian digunakan untuk membuat container.

Mari jalankan perintah berikut untuk membuat container pertama kita:

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

Mari kita lihat tombol perintah yang kita gunakan di sini secara berurutan:

  • alpine3 β€” Alias ​​(alias) ditentukan untuk gambar yang sebelumnya diunggah ke repositori lokal. Jika alias tidak dibuat untuk gambar ini, Anda selalu dapat merujuk ke gambar tersebut dengan menggunakan nama tersebut Sidik jari yang ditampilkan dalam tabel.
  • alp β€” Menetapkan pengidentifikasi untuk kontainer
  • --storage β€” Kunci ini menunjukkan di mana Kolam Penyimpanan sebuah wadah akan dibuat
  • --profile β€” Kaskade kunci ini menerapkan konfigurasi dari profil konfigurasi yang dibuat sebelumnya ke kontainer

Kami meluncurkan wadah, yang mulai meluncurkan sistem distribusi init:

lxc start alp

Anda juga dapat menggunakan perintah lxc launch yang memungkinkan Anda menggabungkan tim lxc init ΠΈ lxc start dalam satu operasi.

Memeriksa keadaan wadah:

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

Memeriksa konfigurasi kontainer:

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

Di bagian profiles kami dapat memastikan bahwa penampung ini menggunakan dua profil konfigurasi - default ΠΈ hddroot. Di bagian devices kami hanya dapat mendeteksi satu perangkat karena perangkat jaringan dibuat di tingkat profil default. Untuk melihat semua perangkat yang digunakan oleh container, Anda perlu menambahkan 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 statis ^

Jika kami mencoba mengatur alamat IP untuk perangkat jaringan eth0 tim lxc config device set alp ditujukan untuk konfigurasi container, maka kita akan menerima error yang akan melaporkan bahwa perangkat tidak ada karena perangkat tersebut eth0 yang digunakan oleh wadah milik profil default:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: The device doesn't exist

Tentu saja kita dapat menetapkan alamat IP statis eth0 perangkat di profil, namun akan sama untuk semua penampung yang akan menggunakan profil ini. Oleh karena itu, mari tambahkan perangkat yang didedikasikan untuk wadah:

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

Maka Anda perlu memulai ulang wadah:

lxc restart alp

Jika kita melihat konfigurasi container sekarang, kita tidak perlu menggunakan opsi tersebut --expanded untuk melihat perangkat jaringan eth0, karena kami membuatnya di tingkat penampung dan mengalir ke perangkat yang sama dari 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: ""

Menghapus wadah ^

Untuk menghapus wadah, gunakan perintah lxc delete, tetapi sebelum menghapus wadah, wadah tersebut harus dihentikan menggunakan perintah lxc stop:

lxc stop alp

lxc list

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

Setelah kami memverifikasi bahwa keadaan wadahnya sudah jadi DIHENTIKAN, itu dapat dihapus dari Kolam Penyimpanan:

lxc delete alp

Akses kontainer ^

Untuk menjalankan perintah dalam kontainer secara langsung, melewati koneksi jaringan, gunakan perintah lxc exec yang menjalankan perintah dalam wadah tanpa meluncurkan shell sistem. Jika Anda perlu menjalankan perintah di shell menggunakan pola shell seperti variabel, pengalihan file (pipa), dll., maka Anda perlu meluncurkan shell secara eksplisit dan meneruskan perintah sebagai kunci, misalnya:

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

Perintah tersebut menggunakan karakter escape khusus untuk karakter khusus $ sehingga variabelnya $HOME tidak diinterpretasikan di mesin host, tetapi hanya diinterpretasikan di dalam container.

Dimungkinkan juga untuk memulai mode shell interaktif, dan kemudian mengakhiri sesi dengan menjalankan hotkey CTRL+D:

lxc exec alp -- /bin/sh

Manajemen sumber daya kontainer ^

Di LXD, Anda dapat mengelola sumber daya kontainer menggunakan serangkaian konfigurasi khusus. Daftar lengkap parameter konfigurasi kontainer dapat ditemukan dalam dokumentasi.

Keterbatasan sumber daya RAM ^

Parameter limits.memory membatasi jumlah RAM yang tersedia untuk wadah. Nilainya adalah angka dan salah satu dari sufiks yang tersedia.

Mari kita atur batas RAM container menjadi 256 MB:

lxc config set alp limits.memory 256MB

Selain itu, ada parameter lain untuk membatasi memori:

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

Tim lxc config show memungkinkan Anda menampilkan seluruh konfigurasi penampung, termasuk batas sumber daya yang diterapkan 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: ""

Batas sumber daya CPU ^

Ada beberapa cara untuk membatasi sumber daya CPU. jenis pembatasan:

  • limit.cpu - mengikat wadah ke satu atau lebih inti CPU
  • limits.cpu.allowance - mengelola kuota penjadwal CFS ketika batas waktu telah berlalu, atau mekanisme pembagian sumber daya CPU universal ketika persentase telah berlalu
  • limits.cpu.priority - Prioritas penjadwal ketika beberapa instance yang berbagi satu set prosesor diberi persentase prosesor 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: ""

Batasan ruang disk ^

Selain pembatasan tersebut limits.read, limits.write kami juga dapat membatasi jumlah ruang disk yang digunakan oleh container (hanya berfungsi dengan ZFS atau BTRFS):

lxc config device set alp root size=2GB

Setelah instalasi, di parameter devices.root.size Kami dapat memverifikasi batas 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 disk yang terpakai bisa kita dapatkan dari perintah 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

Terlepas dari kenyataan bahwa kami telah menetapkan batas untuk perangkat root wadah menjadi 2GB, utilitas sistem seperti df tidak akan melihat batasan ini. Untuk melakukan ini, kami akan melakukan tes kecil dan mencari tahu cara kerjanya.

Mari kita buat 2 wadah baru yang identik di wadah yang sama Kolam Penyimpanan (kolam hdd):

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 file 1GB di salah satu wadah:

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

Mari pastikan file telah dibuat:

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

Jika kita mencari di container kedua, periksa keberadaan file di lokasi yang sama, maka file ini tidak akan ada, seperti yang diharapkan, karena container dibuat di containernya sendiri. Volume Penyimpanan pada bagian yang sama Kolam Penyimpanan:

lxc exec alp2 -- ls -lh
total 0

Namun mari kita bandingkan nilai yang dihasilkannya df pada satu dan wadah lainnya:

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

Perangkat /dev/loop1 dipasang sebagaimana partisi root Kolam Penyimpanan yang digunakan wadah-wadah ini, sehingga volumenya dibagi menjadi dua.

Statistik konsumsi sumber daya ^

Anda dapat melihat statistik konsumsi sumber daya untuk sebuah kontainer menggunakan perintah:

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 snapshot ^

LXD memiliki kemampuan untuk membuat snapshot dan memulihkan status container darinya.

Untuk membuat snapshot, jalankan perintah berikut:

lxc snapshot alp snapshot1

Tim lxc snapshot tidak ada kunci yang tersedia list, oleh karena itu, untuk melihat daftar snapshot, Anda perlu menggunakan perintah yang menampilkan informasi umum tentang container:

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

Anda dapat memulihkan kontainer dari snapshot menggunakan perintah lxc restore menentukan kontainer tempat pemulihan akan dilakukan dan alias snapshot:

lxc restore alp snapshot1

Perintah berikut digunakan untuk menghapus snapshot. Harap dicatat bahwa sintaks perintah tidak sama dengan yang lain; di sini Anda perlu menentukan garis miring setelah nama wadah. Jika garis miring dihilangkan, maka perintah untuk menghapus snapshot diartikan sebagai perintah untuk menghapus container!

lxc delete alp/snapshot1

Pada contoh di atas, kita melihat apa yang disebut dengan snapshot stateless. LXD memiliki jenis snapshot lain - stateful, yang menyimpan status saat ini dari semua proses dalam container. Ada sejumlah fitur menarik dan berguna yang terkait dengan snapshot stateful.

Apa lagi? ^

  • Sebuah modul tersedia untuk pengembang Python PyLXD yang menyediakan API ke LXD

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

Sumber: www.habr.com

Tambah komentar