ProHoster > Blog > yönetim > LXD - Linux konteyner sistemlerinin temel özellikleri
LXD - Linux konteyner sistemlerinin temel özellikleri
LXD yeni nesil sistem kapsayıcı yöneticisidir, yani diyor ki kaynak. Sanal makinelere benzer bir kullanıcı arayüzü sunar ancak bunun yerine Linux kapsayıcılarını kullanır.
LXD çekirdeği yerel bir unix soketi aracılığıyla ve ayrıca uygun yapılandırma kuruluysa ağ üzerinden REST API sağlayan ayrıcalıklı bir arka plan programıdır (kök haklarıyla çalışan bir hizmet). LXD ile sağlanan komut satırı aracı gibi istemciler, bu REST API aracılığıyla istekte bulunur. Bu, ister yerel bir ana bilgisayara, ister uzak bir ana bilgisayara erişiyor olun, her şeyin aynı şekilde çalıştığı anlamına gelir.
Bu makalede, LXD kavramları üzerinde ayrıntılı olarak durmayacağız, QEMU sanal makineleri için konteynerlere paralel olarak LXD desteğinin en son sürümlerindeki son uygulama da dahil olmak üzere, belgelerde belirtilen tüm mevcut yetenekleri dikkate almayacağız. Bunun yerine, konteyner yönetiminin yalnızca temellerini öğreneceğiz - depolama havuzları kurma, ağ oluşturma, konteyner çalıştırma, kaynak sınırlarını uygulama ve anlık görüntülerin nasıl kullanılacağı, böylece LXD hakkında temel bir anlayışa sahip olabilir ve konteynerleri Linux'ta kullanabilirsiniz.
Bu, biri sistem paketi, diğeri ek paket olarak iki paketin aynı anda kurulacağı anlamına gelir. Bir sisteme iki paket yüklemek, ek paketin ek paket yöneticisi tarafından kaldırılması durumunda sistem paketinin artık kalmasına neden olabilecek bazı sorunlar yaratabilir.
Paket bul lxd snap deposunda aşağıdaki komutu kullanabilirsiniz:
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
Komutu çalıştırarak list paketin olduğundan emin olabilirsiniz lxd henüz kurulmadı:
snap list
Name Version Rev Tracking Publisher Notes
core 16-2.43.3 8689 stable canonical✓ core
LXD bir ek paket olmasına rağmen sistem paketi aracılığıyla kurulması gerekir lxdSistemde ilgili grubu oluşturacak olan gerekli yardımcı programlar /usr/bin vb
sudo apt update
sudo apt install lxd
Paketin snap paketi olarak kurulduğundan emin olalım:
snap list
Name Version Rev Tracking Publisher Notes
core 16-2.43.3 8689 stable canonical✓ core
lxd 3.21 13474 stable/… canonical✓ -
LXD paketini sisteme kurmak için aşağıdaki komutları çalıştırmanız gerekir; ilki, sistemdeki depoda bulunan paketlerin listesini güncelleyecek, ikincisi ise paketi doğrudan yükleyecektir:
sudo pacman -Syyu && sudo pacman -S lxd
Paket kurulduktan sonra LXD'nin normal bir kullanıcı tarafından yönetilebilmesi için sistem grubuna eklenmesi gerekir. lxd:
sudo usermod -a -G lxd user1
Kullanıcının olduğundan emin olalım user1 gruba eklendi lxd:
id -Gn user1
user1 adm dialout cdrom floppy sudo audio dip video plugdev netdev lxd
eğer grup lxd listede görünmüyorsa kullanıcı oturumunu tekrar etkinleştirmeniz gerekir. Bunu yapmak için oturumu kapatıp aynı kullanıcı altında oturum açmanız gerekir.
Şu tarihte etkinleştir: systemd LXD hizmetini sistem başlangıcında yükleme:
Başlatma başlamadan önce LXD'deki depolamanın mantıksal olarak nasıl düzenlendiğini anlamamız gerekir.
Depolamak (Depolama) состоит bir veya daha fazlasından Depolama havuzu ZFS, BTRFS, LVM veya normal dizinler gibi desteklenen dosya sistemlerinden birini kullanan. Her Depolama havuzu hacimlere bölünür (Depolama Hacmi) başka amaçlara yönelik görseller, kapsayıcılar veya veriler içerenler.
görüntüler - bunlar Linux çekirdeği olmayan ve harici kaynaklardan temin edilebilen özel olarak bir araya getirilmiş dağıtımlardır
Konteynerler - bunlar kullanıma hazır görüntülerden dağıtılan dağıtımlardır
Anlık görüntüler - bunlar geri dönebileceğiniz konteynerlerin durumunun anlık görüntüleridir
LXD'de depolamayı yönetmek için şu komutu kullanın: lxc storage anahtarı belirterek alabileceğiniz bir sertifika - lxc storage --help
Aşağıdaki komut tümünün bir listesini görüntüler Depolama havuzu LXD depolamada:
lxc storage list
+---------+-------------+--------+--------------------------------+---------+
| NAME | DESCRIPTION | DRIVER | SOURCE | USED BY |
+---------+-------------+--------+--------------------------------+---------+
| hddpool | | btrfs | /dev/loop1 | 2 |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool | | btrfs | /var/lib/lxd/disks/ssdpool.img | 4 |
+---------+-------------+--------+--------------------------------+---------+
Tümünün listesini görüntülemek için Depolama Hacmi seçilende Depolama havuzu takıma hizmet ediyor 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 |
+-----------+----------------------------------+-------------+---------+
Ayrıca eğer Depolama havuzu Oluştururken BTRFS dosya sistemi seçildi, ardından bir liste alın Depolama Hacmi veya alt hacimlerini BTRFS yorumunda bu dosya sisteminin araç setini kullanabilirsiniz:
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
Kapsayıcılar oluşturup kullanmadan önce ağı ve depolamayı oluşturan ve yapılandıran genel bir LXD başlatma işlemi gerçekleştirmelisiniz. Bu, listede bulunan standart istemci komutları kullanılarak, komut çağrılarak manuel olarak yapılabilir. lxc --help veya başlatma sihirbazını kullanarak lxd init birkaç soruyu yanıtlıyorum.
Başlatma sırasında LXD, varsayılan dosya sistemi türünün belirlenmesi de dahil olmak üzere çeşitli sorular sorar. Depolama havuzu. Varsayılan olarak BTRFS dosya sistemi bunun için seçilmiştir. Oluşturulduktan sonra başka bir FS'ye geçmek imkansız olacak. Bir FS seçmek için tavsiye edilir özellik karşılaştırma tablosu:
Optimize edilmiş görüntü depolama
yok hayır
Evet
Evet
Evet
Evet
Optimize edilmiş örnek oluşturma
yok hayır
Evet
Evet
Evet
Evet
Optimize edilmiş anlık görüntü oluşturma
yok hayır
Evet
Evet
Evet
Evet
Optimize edilmiş görüntü aktarımı
yok hayır
Evet
yok hayır
Evet
Evet
Optimize edilmiş örnek aktarımı
yok hayır
Evet
yok hayır
Evet
Evet
kopyala üzerine yaz
yok hayır
Evet
Evet
Evet
Evet
Blok tabanlı
yok hayır
yok hayır
Evet
yok hayır
Evet
Anında klonlama
yok hayır
Evet
Evet
Evet
Evet
Bir konteynerin içinde kullanılabilen depolama sürücüsü
Evet
Evet
yok hayır
yok hayır
yok hayır
Eski anlık görüntülerden geri yükleme (en son değil)
Evet
Evet
Evet
yok hayır
Evet
Depolama kotaları
Evet(*)
Evet
Evet
Evet
yok hayır
Sihirbazı kullanarak ağı ve Depolama Havuzunu başlatma ^
Bakacağımız bir sonraki komut, başlatma sihirbazını kullanarak basit soruları yanıtlayarak LXD'nin ana bileşenlerini ayarlamanızı önerir.
Çalıştır komutu lxc init ve soruların cevaplarını iki nokta üst üste işaretinden sonra aşağıdaki örnekte gösterildiği gibi girin veya koşullarınıza göre değiştirin:
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]:
Önceki adımda oluşturduğumuz Depolama havuzu hangisine isim verildi ssdpool ve dosyası sistemimde şu adreste bulunuyor: /var/lib/lxd/disks/ssdpool.img. Bu dosya sistemi adresi bilgisayarımdaki fiziksel SSD sürücüsüne karşılık gelir.
tarafından oynanan rolün anlaşılmasını genişletmek için aşağıdaki eylemler Depolama havuzu depoda ikinci bir tane oluşturacağız Depolama havuzu fiziksel olarak farklı türde bir diskte, HDD'de yer alacaktır. Sorun şu ki, LXD oluşturmanıza izin vermiyor Depolama havuzu adres dışında /var/lib/lxd/disks/ ve sembolik bağlantılar bile çalışmaz, geliştiricinin yanıtına bakın. Başlatma/biçimlendirme sırasında bu sınırlamayı aşabiliriz Depolama havuzu değeri geri döngü dosyasının yolu yerine bir blok aygıtı olarak belirterek bunu anahtarda belirterek source.
Yani yaratmadan önce Depolama havuzu dosya sisteminizde kullanacağı bir geridöngü dosyasını veya mevcut bir bölümü tanımlamanız gerekir. Bunu yapmak için boyutunu 10 GB ile sınırlayacağımız bir dosya oluşturup kullanacağız:
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
Geridöngü dosyasını ücretsiz bir geridöngü cihazına bağlayalım:
Anahtar sayesinde --show komutun yürütülmesi, geridöngü dosyamızın bağlı olduğu cihazın adını ekrana döndürür. Gerekirse eylemlerimizin doğru olduğundan emin olmak için bu türdeki tüm meşgul cihazların bir listesini görüntüleyebiliriz:
Listeden cihazın sahip olduğunu bulabilirsiniz. /dev/loop1 geridöngü dosyası dahil /mnt/work/lxd/hddpool.imgve cihazda /dev/loop0 geridöngü dosyası dahil /var/lib/lxd/disks/ssdpool.img bu varsayılana karşılık gelir Depolama havuzu.
Aşağıdaki komut yeni bir tane oluşturur Depolama havuzu az önce hazırladığımız geridöngü dosyasına göre LXD'de. LXD geridöngü dosyasını biçimlendirecek /mnt/work/lxd/hddpool.img cihazda /dev/loop1 BTRFS dosya sistemi için:
Oluşturulduktan sonra Depolama havuzuGerekirse genişletilebilir. İçin Depolama havuzu BTRFS dosya sistemini temel alarak aşağıdaki komutları çalıştırın:
Geridöngü dosyasının geridöngü aygıtı yuvasına otomatik olarak eklenmesi ^
Ana sistemi yeniden başlatırken küçük bir sorunumuz var, dosya /mnt/work/lxd/hddpool.img cihazdan "uçacak" /dev/loop1 ve LXD hizmeti bu cihazda göremeyeceği için yükleme sırasında çökecektir. Bu sorunu çözmek için bu dosyayı cihaza ekleyecek bir sistem hizmeti oluşturmanız gerekir. /dev/loop1 ana bilgisayar sistemi önyüklendiğinde.
hadi yaratalım birim dosya tipi hizmet в /etc/systemd/system/ SystemD başlatma sistemi için:
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
Hizmeti etkinleştirin:
sudo systemctl enable lxd-hddpool
Created symlink /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service → /etc/systemd/system/lxd-hddpool.service.
Ana sistemi yeniden başlattıktan sonra hizmet durumunu kontrol ediyoruz:
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).
Çıktıdan hizmet durumunun şu şekilde olduğunu doğrulayabiliriz: aktifbetiğimizin tek komutla yürütülmesi tamamlanmış olmasına rağmen seçenek bunu yapmamıza izin verdi RemainAfterExit=true.
Konteyner işlemlerinin ana sisteme erişimini daha da korumak amacıyla, tüm konteyner işlemleri aslında kendi çekirdeğini kullanarak ana bilgisayar sisteminde yalıtılmış olarak çalıştığından, LXD aşağıdaki durumlarda işlem ayrıcalığı sunar:
Ayrıcalıklı Konteynerler - bunlar, UID ve GID'li işlemlerin ana sistemdeki ile aynı sahibine karşılık geldiği kaplardır. Örneğin, UID'si 0 olan bir kapta çalışan bir işlem, ana bilgisayar sistemindeki UID'si 0 olan bir işlemle aynı erişim haklarına sahiptir. Başka bir deyişle, kaptaki kök kullanıcı yalnızca konteynerin yalıtılmış ad alanının dışına çıkabiliyorsa aynı zamanda ana bilgisayar sisteminde de kullanılabilir.
Ayrıcalıksız konteynerler - bunlar, işlemlerin 0 ila 65535 arasında bir sayı ile UID ve GID sahibine ait olduğu kaplardır, ancak ana bilgisayar sistemi için, sahibi sırasıyla eklenen SubUID ve SubGID bitleri kullanılarak maskelenir. Örneğin, bir konteynerde UID=0 olan bir kullanıcı, ana sistem üzerinde şu şekilde görülecektir: SubUID + UID. Bu, ana bilgisayar sistemini korur çünkü kapsayıcıdaki herhangi bir işlem yalıtılmış ad alanından kaçabilirse, ana bilgisayar sistemiyle yalnızca bilinmeyen, çok yüksek bir UID/GID'ye sahip bir işlem olarak iletişim kurabilir.
Varsayılan olarak, yeni oluşturulan kapsayıcıların ayrıcalıklı olmayan bir durumu vardır ve bu nedenle bir SubUID ve SubGID tanımlamamız gerekir.
Sırasıyla SubUID ve SubGID için maskeyi ayarlayacağımız iki yapılandırma dosyası oluşturalım:
Ağı daha önce başlatma sihirbazını kullanarak başlattığımız için lxd init ve bir ağ cihazı oluşturdum lxdbr0, o zaman bu bölümde LXD'de ağ oluşturma ve istemci komutunu kullanarak sanal bir anahtarın (köprü) nasıl oluşturulacağı hakkında bilgi sahibi olacağız.
Aşağıdaki şemada bir anahtarın (köprü) ana bilgisayarı ve kapsayıcıları bir ağa nasıl bağladığı gösterilmektedir:
Konteynerler bir ağ üzerinden diğer konteynerlerle veya bu konteynerlerin hizmet verdiği ana bilgisayarla iletişim kurabilir. Bunu yapmak için konteynerlerin sanal ağ kartlarını sanal bir anahtarla bağlamanız gerekir. Önce bir anahtar oluşturacağız ve konteynerin kendisi oluşturulduktan sonra konteynerin ağ arayüzleri sonraki bölümlerde bağlanacak.
Aşağıdaki komut alt ağa sahip bir anahtar oluşturur 10.0.5.0/24 ve IPv4 adresi 10.0.5.1/24ve ayrıca şunları içerir: ipv4.nat böylece konteynerler NAT hizmetini kullanarak ana bilgisayar aracılığıyla İnternet'e erişebilir:
LXD'deki her konteynerin kendi konfigürasyonu vardır ve bunu, LXD adı verilen global olarak bildirilen konfigürasyonlarla genişletebilir. konfigürasyon profilleri. Konfigürasyon profillerinin bir konteynere uygulanmasının basamaklı bir modeli vardır; aşağıdaki örnek bunu göstermektedir:
Bu örnekte LXD sisteminde üç profil oluşturulmuştur: default, hddpool и hostfs. Üç profilin tümü, yerel yapılandırmaya (gri alan) sahip bir kapsayıcıya uygulanır. Profil default bir cihazı var root bir parametresi olan pool olduğunu ssdpoolancak kaskad konfigürasyon uygulama modeli sayesinde konteynere profil uygulayabiliyoruz hddpool bir parametresi olan pool profildeki aynı parametreyi geçersiz kılacak default ve konteyner cihaz konfigürasyonunu alacak root parametreli pool eşit hddpoolve profil hostfs basitçe konteynere yeni bir cihaz ekler.
Kullanılabilir yapılandırma profillerinin listesini görmek için aşağıdaki komutu kullanın:
lxc profile list
+---------+---------+
| NAME | USED BY |
+---------+---------+
| default | 1 |
+---------+---------+
| hddroot | 0 |
+---------+---------+
| ssdroot | 1 |
+---------+---------+
Bir profille çalışmak için mevcut komutların tam listesi, anahtar eklenerek elde edilebilir. --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
Varsayılan konfigürasyon profili default konteyner için bir ağ kartı konfigürasyonu yok ve yeni oluşturulan konteynerlerin hepsinin bir ağı yok, onlar için ayrı bir komutla yerel (özel) ağ cihazları oluşturmak gerekiyor, ancak konfigürasyonda global bir ağ cihazı oluşturabiliriz Bu profili kullanan tüm kapsayıcılar arasında paylaşılacak profil. Bu sayede yeni bir konteyner oluşturma komutunun hemen ardından ağ erişimi olan bir ağa sahip olacaklar. Aynı zamanda herhangi bir kısıtlama yoktur, gerekirse daha sonra her zaman yerel ağ cihazı oluşturabiliriz.
Aşağıdaki komut cihazı konfigürasyon profiline ekleyecektir eth0 tip nic ağa bağlı lxdbr0:
lxc profile device add default eth0 nic network=lxdbr0 name=eth0
Cihazı aslında konfigürasyon profiline eklediğimiz için, cihazda statik bir IP adresi belirtirsek bu profili kullanacak tüm konteynerlerin aynı IP adresini paylaşacağını unutmamak önemlidir. Konteyner için ayrılmış statik IP adresine sahip bir konteyner oluşturmaya ihtiyaç duyulursa, profil düzeyinde değil, IP adresi parametresi ile konteyner seviyesinde (yerel konfigürasyon) bir ağ cihazı konfigürasyonu oluşturmalısınız.
Profili kontrol edelim:
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: []
Bu profilde yeni oluşturulan tüm konteynerler için iki cihazın oluşturulacağını görebiliriz:
eth0 - Cihaz tipi nic bir anahtara bağlı (ağ köprüsü) lxdbr0
root - Cihaz tipi disk bir depolama havuzu kullanan ssdpool
Daha önce oluşturulanı kullanmak için Depolama havuzu kapsayıcılar, bir yapılandırma profili oluşturun ssdroot içine şöyle bir cihaz ekleyeceğimiz disk montaj noktası ile / (kök) önceden oluşturulmuş olanı kullanarak Depolama havuzu - ssdpool:
Kapsayıcılar, Linux çekirdeği olmayan, özel olarak birleştirilmiş dağıtımlardan oluşan görüntülerden oluşturulur. Bu nedenle, konteyneri çalıştırmadan önce bu görüntüden dağıtılması gerekir. Görüntülerin kaynağı, görüntülerin harici depolardan indirildiği yerel bir depodur.
Kabı kullanmaya başlamak için genel depodan yerel depoya bir resim eklemeniz gerekir. local:. Artık yerel depo boş, komut bundan emin olacak lxc image list. Eğer yöntem list bir depo belirtmeyin, bu durumda varsayılan olarak yerel depo kullanılacaktır - local:
lxc image list local:
+-------+-------------+--------+-------------+--------------+------+------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE |
+-------+-------------+--------+-------------+--------------+------+------+
Depodaki görseller aşağıdaki yöntemler kullanılarak yönetilir:
Ekip
Açıklama
lxc resmi takma ad
Resim takma adlarını yönet
lxc resmi kopya
Görüntüleri sunucular arasında kopyalama
lxc resmi silmek
Görüntüleri silme
lxc resmi düzenleme
Resim özelliklerini düzenle
lxc resmi ihracat
Görüntüleri dışa aktarın ve indirin
lxc resmi ithalat
Görselleri görsel deposuna aktarın
lxc resmi bilgi
Resimlerle ilgili yararlı bilgileri göster
lxc resmi liste
Resimleri listele
lxc resmi yenileme
Resimleri yenile
lxc resmi şov
Resim özelliklerini göster
Görüntüyü global depodan yerel depoya kopyalayın images::
Etkileşimli moda ek olarak, LXD ayrıca etkileşimli olmayan bir yapılandırma kurulum modunu da destekler; bu, yapılandırmanın, yürütmeyi atlayarak tüm yapılandırmayı bir kerede yüklemenize olanak tanıyan özel bir format olan YAML dosyası biçiminde belirtildiği zamandır. ağ yapılandırması, yapılandırma profillerinin oluşturulması vb. dahil olmak üzere bu makalede yukarıda tartışılan birçok etkileşimli komuttan bazıları. Bu alanı burada ele almayacağız, kendiniz kontrol edebilirsiniz. belgelerde.
Sonraki etkileşimli komut lxc config bakacağımız şey yapılandırmayı ayarlamanıza olanak tanır. Örneğin yerel depoya indirilen görsellerin global depolardan otomatik olarak güncellenmemesini sağlamak için bu davranışı aşağıdaki komutla etkinleştirebiliriz:
Bir kapsayıcı oluşturmak için şu komutu kullanın: lxc init hangi değerlere aktarılır репозиторий:образ ve ardından kapsayıcı için istenen kimlik. Depo yerel olarak belirtilebilir local: herhangi bir küresel durum da öyle. Depo belirtilmezse, görseli aramak için varsayılan olarak yerel depo kullanılır. Görüntü global depodan belirtilirse, görüntü ilk olarak yerel depoya indirilecek ve daha sonra kapsayıcıyı oluşturmak için kullanılacaktır.
İlk konteynerimizi oluşturmak için aşağıdaki komutu çalıştıralım:
lxc init alpine3 alp --storage=hddpool --profile=default --profile=hddroot
Burada kullandığımız komut tuşlarına sırasıyla bakalım:
alpine3 — Daha önce yerel depoya yüklenen görüntü için bir takma ad (takma ad) belirtilir. Bu görsel için takma ad oluşturulmamışsa, görsele her zaman onun adı ile başvurabilirsiniz. Parmak izi bu tabloda görüntülenir.
alp — Kabın tanımlayıcısını ayarlar
--storage — Bu tuş hangi Depolama havuzu bir konteyner oluşturulacak
--profile — Bu anahtarlar, önceden oluşturulmuş yapılandırma profillerinden yapılandırmayı kapsayıcıya kademeli olarak uygular
Dağıtımın başlatma sistemini başlatmaya başlayan kabı başlatıyoruz:
lxc start alp
komutunu da kullanabilirsiniz. lxc launch ekipleri birleştirmenize olanak tanır lxc init и lxc start tek bir operasyonda.
Konteynerin durumunun kontrol edilmesi:
lxc list -c ns46tb
+------+---------+------------------+------+-----------+--------------+
| NAME | STATE | IPV4 | IPV6 | TYPE | STORAGE POOL |
+------+---------+------------------+------+-----------+--------------+
| alp | RUNNING | 10.0.5.46 (eth0) | | CONTAINER | hddpool |
+------+---------+------------------+------+-----------+--------------+
Bölümde profiles bu konteynerin iki konfigürasyon profili kullandığından emin olabiliriz – default и hddroot. Kısımda devices ağ cihazı profil düzeyinde oluşturulduğundan yalnızca bir cihazı tespit edebiliyoruz default. Konteyner tarafından kullanılan tüm cihazları görmek için bir anahtar eklemeniz gerekir --expanded:
Bir ağ cihazı için IP adresi ayarlamaya çalışırsak eth0 takım lxc config device set alp konteyner yapılandırmasına yönelikse, cihazın mevcut olmadığını bildiren bir hata alacağız çünkü cihaz eth0 konteyner tarafından kullanılan profile ait default:
lxc config device set alp eth0 ipv4.address 10.0.5.5
Error: The device doesn't exist
Elbette bunun için statik bir IP adresi ayarlayabiliriz. eth0 profildeki cihazlar için geçerlidir ancak bu profili kullanacak tüm kapsayıcılar için aynı olacaktır. Bu nedenle konteynere ayrılmış bir cihaz ekleyelim:
lxc config device add alp eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5
Daha sonra kabı yeniden başlatmanız gerekir:
lxc restart alp
Şimdi konteyner konfigürasyonuna bakarsak seçeneği kullanmamıza gerek yok --expanded ağ cihazını görmek için eth0, onu konteyner düzeyinde oluşturduğumuz ve profilden aynı cihaz üzerinden basamaklandırıldığı için default:
Ağ bağlantılarını atlayarak komutları doğrudan bir kapta yürütmek için şu komutu kullanın: lxc exec sistem kabuğunu başlatmadan kaptaki komutları yürüten. Değişkenler, dosya yeniden yönlendirmeleri (boru) vb. gibi kabuk kalıplarını kullanarak bir kabukta bir komut yürütmeniz gerekiyorsa, kabuğu açıkça başlatmanız ve komutu bir anahtar olarak iletmeniz gerekir, örneğin:
lxc exec alp -- /bin/sh -c "echo $HOME"
Komut özel bir kaçış karakteri kullandı özel karakter için $ böylece değişken $HOME ana makinede yorumlanmadı, yalnızca kabın içinde yorumlandı.
Etkileşimli kabuk modunu başlatmak ve ardından kısayol tuşunu çalıştırarak oturumu sonlandırmak da mümkündür. CTRL+D:
LXD'de konteyner kaynaklarını özel bir konfigürasyon seti kullanarak yönetebilirsiniz. Konteyner yapılandırma parametrelerinin tam listesini burada bulabilirsiniz belgelerde.
Bu tür kısıtlamalara ek olarak limits.read, limits.write konteyner tarafından tüketilen disk alanı miktarını da sınırlayabiliriz (yalnızca ZFS veya BTRFS ile çalışır):
lxc config device set alp root size=2GB
Kurulumdan sonra parametrede devices.root.size Ayarlanan sınırı doğrulayabiliriz:
lxc config show alp
...
devices:
root:
path: /
pool: hddpool
size: 2GB
type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""
Kullanılan disk kotalarını görüntülemek için komuttan alabiliriz. 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
Konteynerin kök cihazı için 2GB'a kadar bir sınır belirlemiş olmamıza rağmen, aşağıdaki gibi sistem yardımcı programları df bu kısıtlamayı görmeyeceksiniz. Bunu yapmak için küçük bir test yapacağız ve nasıl çalıştığını öğreneceğiz.
Aynı kapta 2 yeni özdeş kap oluşturalım Depolama havuzu (hdd havuzu):
lxc exec alp1 -- ls -lh
total 1000M
-rw-r--r-- 1 root root 1000.0M Mar 27 10:16 file.img
İkinci konteynere bakarsak, aynı konumda bir dosyanın varlığını kontrol edersek, konteynerler kendi başlarına oluşturulduğundan beklenen bu dosya orada olmayacaktır. Depolama Hacmi aynısı Depolama havuzu:
lxc exec alp2 -- ls -lh
total 0
Ama ürettiği değerleri karşılaştıralım df birinde ve diğerinde:
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% /
...
Cihaz /dev/loop1 kök bölüm olarak monte edildi Depolama havuzu bu kaplar bunu kullanıyor, böylece hacmini ikisi arasında paylaşıyorlar.
LXD, anlık görüntüler oluşturma ve bunlardan konteyner durumunu geri yükleme yeteneğine sahiptir.
Anlık görüntü oluşturmak için aşağıdaki komutu çalıştırın:
lxc snapshot alp snapshot1
Takım lxc snapshot anahtar mevcut değil listbu nedenle, anlık görüntülerin listesini görüntülemek için kapsayıcı hakkında genel bilgileri görüntüleyen komutu kullanmanız gerekir:
lxc info alp
...
...
Snapshots:
snapshot1 (taken at 2020/04/08 18:18 UTC) (stateless)
Komutu kullanarak bir kabı anlık görüntüden geri yükleyebilirsiniz. lxc restore geri yüklemenin gerçekleştirileceği kapsayıcıyı ve anlık görüntü takma adını belirterek:
lxc restore alp snapshot1
Bir anlık görüntüyü silmek için aşağıdaki komut kullanılır. Lütfen komut sözdiziminin diğerlerine benzemediğini unutmayın; burada kapsayıcı adından sonra bir eğik çizgi belirtmeniz gerekir. Eğik çizgi atlanırsa, anlık görüntüyü silme komutu, bir kabı silme komutu olarak yorumlanır!
lxc delete alp/snapshot1
Yukarıdaki örnekte durum bilgisi olmayan anlık görüntülere baktık. LXD'nin başka bir tür anlık görüntüsü vardır - durum bilgisi olan, kaptaki tüm işlemlerin mevcut durumunu kaydeder. Durum bilgisi olan anlık görüntülerle ilişkili bir dizi ilginç ve kullanışlı özellik vardır.