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:
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β -
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:
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
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
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.
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
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]:
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:
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:
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:
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.
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:
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:
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:
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:
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
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
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:
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.
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::
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:
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 |
+------+---------+------------------+------+-----------+--------------+
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:
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:
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:
Di LXD, Anda dapat mengelola sumber daya kontainer menggunakan serangkaian konfigurasi khusus. Daftar lengkap parameter konfigurasi kontainer dapat ditemukan dalam dokumentasi.
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
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 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.
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.