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.

Tam bilgi için lütfen resmi kaynağa bakın:

Navigasyon

Kurulum LXD ^

LXD'yi Ubuntu dağıtımlarına yükleme ^

Ubuntu 19.10 dağıtım paketinde lxd üzerinde bir yayın var ek paket:

apt search lxd

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

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'yi Arch Linux dağıtımlarına yükleme ^

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:

sudo systemctl enable lxd

Hizmeti başlatalım:

sudo systemctl start lxd

Servis durumunun kontrol edilmesi:

sudo systemctl status lxd

Depolama LXD (Depolama) ^

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 - Linux konteyner sistemlerinin temel özellikleri

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

LXD'nin başlatılması ^

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.

Depolama Havuzu için dosya sistemi seçme ^

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:

Özellikler(Hazırlık aşamasında)
rehber
Btrfs
LVM
ZFS
CEPH

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

Ek Depolama Havuzu Oluşturma ^

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

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

/dev/loop1

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:

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

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:

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

Tüm bunların listesini görüntüleyelim Depolama havuzu ekrana:

lxc storage list

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

Depolama Havuzu Boyutunu Artırma ^

Oluşturulduktan sonra Depolama havuzuGerekirse genişletilebilir. İçin Depolama havuzu BTRFS dosya sistemini temel alarak aşağıdaki komutları çalıştırın:

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

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.

Emniyet. Konteyner Ayrıcalıkları ^

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:

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

Değişikliklerin uygulanması için LXD hizmetinin yeniden başlatılması gerekir:

sudo systemctl restart lxd

Sanal ağ anahtarı oluşturma ^

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:

LXD - Linux konteyner sistemlerinin temel özellikleri

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:

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

LXD'de bulunan ağ cihazlarının listesini kontrol etme:

lxc network list

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

Ayrıca Linux dağıtımının standart aracını kullanarak bir ağ cihazının oluşturulduğunu da doğrulayabilirsiniz - ip link veya 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

Yapılandırma Profili ^

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:

LXD - Linux konteyner sistemlerinin temel özellikleri

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

Profilinizi düzenleme ^

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

Yeni profiller oluşturma ^

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:

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

Benzer şekilde şöyle bir cihaz yaratıyoruz disk, ancak bu durumda kullanarak Depolama havuzu - hddpool:

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

Yapılandırma profillerinin kontrol edilmesi:

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

Resim deposu ^

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.

Uzak görüntü depoları ^

Varsayılan olarak LXD, görüntüleri üç uzak kaynaktan alacak şekilde yapılandırılmıştır:

  • ubuntu: (kararlı Ubuntu görüntüleri için)
  • ubuntu-günlük: (günlük Ubuntu görselleri için)
  • resimler: (bir sürü başka dağıtım için)

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

Örneğin, depo ubuntu: aşağıdaki görsellere sahiptir:

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

Sınırlı sayıda sütunu görüntülemek için bu seçeneği kullandık -c parametrelerle dasutve ayrıca listenin uzunluğunu komutla sınırlandırdık. head.

Görüntülerin bir listesini görüntülemek için filtreleme mevcuttur. Aşağıdaki komut mevcut tüm dağıtım mimarilerini listeleyecektir AlpineLinux:

lxc image -c ldast list images:alpine/3.11

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

Yerel resim deposu ^

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

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

Image copied successfully!

Yerel depoda mevcut olan tüm görsellerin bir listesini görüntüleyelim local::

lxc image -c lfdatsu list local:

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

LXD Yapılandırması ^

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:

lxc config set images.auto_update_cached=false

Kapsayıcı oluşturma ve yönetme ^

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

Konteyner konfigürasyonunun kontrol edilmesi:

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

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:

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

Statik bir IP adresi ayarlama ^

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:

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

Bir konteynerin çıkarılması ^

Bir kapsayıcıyı kaldırmak için şu komutu kullanın: lxc delete, ancak kabı çıkarmadan önce komut kullanılarak durdurulması gerekir. lxc stop:

lxc stop alp

lxc list

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

Konteynerin durumunun şu şekilde olduğunu doğruladıktan sonra DURDURULDU, buradan kaldırılabilir Depolama havuzu:

lxc delete alp

Konteyner erişimi ^

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:

lxc exec alp -- /bin/sh

Konteyner kaynak yönetimi ^

LXD'de konteyner kaynaklarını özel bir konfigürasyon seti kullanarak yönetebilirsiniz. Konteyner yapılandırma parametrelerinin tam listesini burada bulabilirsiniz belgelerde.

RAM kaynak sınırlaması ^

Parametre limits.memory kapsayıcının kullanabileceği RAM miktarını sınırlar. Değer bir sayıdır ve aşağıdakilerden biridir mevcut son ekler.

Container'ın RAM sınırını 256 MB olarak ayarlayalım:

lxc config set alp limits.memory 256MB

Ayrıca belleği sınırlamak için başka parametreler de vardır:

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

Ekip lxc config show ayarlanmış olan uygulanan kaynak sınırı da dahil olmak üzere kapsayıcı yapılandırmasının tamamını görüntülemenize olanak tanır:

lxc config show alp

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

CPU kaynak sınırı ^

CPU kaynaklarını sınırlamanın birkaç yolu vardır. kısıtlama türleri:

  • limit.cpu - bir konteyneri bir veya daha fazla CPU çekirdeğine bağlar
  • limits.cpu.allowance - zaman sınırı aşıldığında CFS zamanlayıcı kotalarını veya yüzde aşıldığında evrensel CPU kaynak paylaşım mekanizmasını yönetir
  • limits.cpu.priority - bir işlemci kümesini paylaşan birden fazla örneğe aynı işlemci yüzdesi atandığında zamanlayıcı önceliği

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

Disk alanı sınırlaması ^

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

Kaplardan birinde 1 GB'lık bir dosya oluşturalım:

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

Dosyanın oluşturulduğundan emin olalım:

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.

Kaynak tüketimi istatistikleri ^

Aşağıdaki komutu kullanarak bir kapsayıcının kaynak tüketimi istatistiklerini görüntüleyebilirsiniz:

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

Anlık görüntülerle çalışma ^

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.

Başka ne ^

  • Python geliştiricileri için bir modül mevcuttur PyLXD LXD'ye bir API sağlayan

GÜNCELLEME 10.04.2020/15/00 XNUMX:XNUMX: Gezinme eklendi

Kaynak: habr.com

Yorum ekle