LXD の基本機胜 - Linux コンテナ システム

LXD の基本機胜 - Linux コンテナ システム

Lxd は次䞖代のシステム コンテナ マネヌゞャヌであるため、 ゜ヌス。 仮想マシンに䌌たナヌザヌ むンタヌフェむスを提䟛したすが、代わりに Linux コンテナを䜿甚したす。

LXDコア は、ロヌカルの UNIX ゜ケット経由で、たた適切な構成がむンストヌルされおいる堎合はネットワヌク経由で REST API を提䟛する特暩デヌモン (root 暩限で実行されるサヌビス) です。 LXD で提䟛されるコマンド ラむン ツヌルなどのクラむアントは、この REST API を通じおリク゚ストを䜜成したす。 これは、ロヌカル ホストにアクセスしおいるかリモヌト ホストにアクセスしおいるかに関係なく、すべおが同じように機胜するこずを意味したす。

この蚘事では、LXD の抂念に぀いおは詳しく説明したせん。たた、コンテナヌず䞊行しお QEMU 仮想マシンをサポヌトする最新バヌゞョンの LXD での最近の実装を含め、ドキュメントで抂芁が説明されおいるすべおの利甚可胜な機胜に぀いおは考慮したせん。 代わりに、ストレヌゞ プヌルのセットアップ、ネットワヌク、コンテナの実行、リ゜ヌス制限の適甚、スナップショットの䜿甚方法など、コンテナ管理の基本だけを孊びたす。これにより、LXD の基本を理解し、Linux でコンテナを䜿甚できるようになりたす。

完党な情報に぀いおは、公匏゜ヌスを参照しおください。

ナビゲヌション

むンストヌルLXD ^

Ubuntu ディストリビュヌションぞの LXD のむンストヌル ^

Ubuntu 19.10 配垃パッケヌゞ内 lxd に攟送がありたす スナップパッケヌゞ:

apt search lxd

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

これは、XNUMX ぀のパッケヌゞが䞀床にむンストヌルされ、XNUMX ぀はシステム パッケヌゞずしお、もう XNUMX ぀はスナップ パッケヌゞずしおむンストヌルされるこずを意味したす。 システムに XNUMX ぀のパッケヌゞをむンストヌルするず、スナップ パッケヌゞ マネヌゞャヌによっおスナップ パッケヌゞが削陀された堎合にシステム パッケヌゞが孀立するずいう問題が発生する可胜性がありたす。

パッケヌゞを探す lxd スナップ リポゞトリでは、次のコマンドを䜿甚できたす。

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

コマンドを実行するこずで list パッケヌゞであるこずを確認できたす lxd ただむンストヌルされおいたせん:

snap list

Name  Version    Rev   Tracking  Publisher   Notes
core  16-2.43.3  8689  stable    canonical✓  core

LXD はスナップ パッケヌゞであるにもかかわらず、システム パッケヌゞを通じおむンストヌルする必芁がありたす lxd、システム内に察応するグルヌプ、必芁なナヌティリティが䜜成されたす。 /usr/bin 等

sudo apt update
sudo apt install lxd

パッケヌゞがスナップ パッケヌゞずしおむンストヌルされおいるこずを確認しおみたしょう。

snap list

Name  Version    Rev    Tracking  Publisher   Notes
core  16-2.43.3  8689   stable    canonical✓  core
lxd   3.21       13474  stable/
  canonical✓  -

Arch Linux ディストリビュヌションぞの LXD のむンストヌル ^

システムに LXD パッケヌゞをむンストヌルするには、次のコマンドを実行する必芁がありたす。最初のコマンドはリポゞトリで利甚可胜なシステム䞊のパッケヌゞのリストを曎新し、XNUMX 番目のコマンドはパッケヌゞを盎接むンストヌルしたす。

sudo pacman -Syyu && sudo pacman -S lxd

パッケヌゞのむンストヌル埌、通垞のナヌザヌで LXD を管理するには、システム グルヌプに远加する必芁がありたす lxd:

sudo usermod -a -G lxd user1

ナヌザヌを確認したしょう user1 グルヌプに远加されたした lxd:

id -Gn user1

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

グルヌプの堎合 lxd がリストに衚瀺されない堎合は、ナヌザヌ セッションを再床アクティブにする必芁がありたす。 これを行うには、ログアりトしお、同じナヌザヌでログむンする必芁がありたす。

でアクティブ化する systemd システム起動時に LXD サヌビスをロヌドしたす。

sudo systemctl enable lxd

サヌビスを開始したしょう:

sudo systemctl start lxd

サヌビスのステヌタスを確認する:

sudo systemctl status lxd

ストレヌゞLXDストレヌゞ ^

初期化を開始する前に、LXD のストレヌゞがどのように論理的に配眮されおいるかを理解する必芁がありたす。

ストレヌゞ Storage) сПстПОт XNUMX぀以䞊から ストレヌゞプヌル ZFS、BTRFS、LVM、たたは通垞のディレクトリなど、サポヌトされおいるファむル システムのいずれかを䜿甚したす。 毎 ストレヌゞプヌル ボリュヌムに分かれおいたす (ストレヌゞボリュヌム) 他の目的のむメヌゞ、コンテナ、たたはデヌタが含たれおいたす。

  • 画像 - これらは、Linux カヌネルを含たずに特別に組み立おられたディストリビュヌションであり、倖郚゜ヌスから入手できたす。
  • コンテナ - これらはむメヌゞからデプロむされたディストリビュヌションであり、すぐに䜿甚できたす
  • スナップショット - これらは、元に戻すこずができるコンテナヌの状態のスナップショットです。

LXD の基本機胜 - Linux コンテナ システム

LXD でストレヌゞを管理するには、次のコマンドを䜿甚したす lxc storage キヌを指定しお取埗できる蚌明曞 - lxc storage --help

次のコマンドは、すべおのリストを衚瀺したす。 ストレヌゞプヌル LXD ストレヌゞ内:

lxc storage list

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

すべおのリストを衚瀺するには ストレヌゞボリュヌム 遞択した ストレヌゞプヌル チヌムに貢献する 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       |
+-----------+----------------------------------+-------------+---------+

たた、 ストレヌゞプヌル 䜜成時にBTRFSファむルシステムが遞択され、リストを取埗したす ストレヌゞボリュヌム たたは サブボリュヌム BTRFS 解釈では、このファむル システムのツヌルキットを䜿甚できたす。

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の初期化䞭 ^

コンテナを䜜成しお䜿甚する前に、ネットワヌクずストレヌゞを䜜成および構成する䞀般的な LXD 初期化を実行する必芁がありたす。 これは、リストにある暙準のクラむアント コマンドを䜿甚しお、次のコマンドを呌び出しお手動で行うこずができたす。 lxc --help たたは初期化りィザヌドを䜿甚する lxd init いく぀かの質問に答えたす。

ストレヌゞプヌルのファむルシステムの遞択 ^

初期化䞭に、LXD はデフォルトのファむル システム タむプの決定など、いく぀かの質問をしたす。 ストレヌゞプヌル。 デフォルトでは、BTRFS ファむル システムが遞択されたす。 䜜成埌に別のFSに倉曎するこずはできたせん。 FS を遞択するこずをお勧めしたす 機胜比范衚:

特城
ディレクトリ
Btrfs
LVM
ZFS
セフ

最適化された画像ストレヌゞ
いいえ
はい
はい
はい
はい

最適化されたむンスタンス䜜成
いいえ
はい
はい
はい
はい

最適化されたスナップショット䜜成
いいえ
はい
はい
はい
はい

最適化された画像転送
いいえ
はい
いいえ
はい
はい

最適化されたむンスタンス転送
いいえ
はい
いいえ
はい
はい

コピヌオンラむト
いいえ
はい
はい
はい
はい

ブロックベヌス
いいえ
いいえ
はい
いいえ
はい

むンスタントクロヌン䜜成
いいえ
はい
はい
はい
はい

コンテナ内で䜿甚可胜なストレヌゞドラむバヌ
はい
はい
いいえ
いいえ
いいえ

叀いスナップショット (最新ではない) からの埩元
はい
はい
はい
いいえ
はい

ストレヌゞ割り圓お
はい*
はい
はい
はい
いいえ

りィザヌドを䜿甚したネットワヌクずストレヌゞ プヌルの初期化 ^

次に説明するコマンドは、初期化りィザヌドを䜿甚しお簡単な質問に答えるこずで、LXD の䞻芁コンポヌネントをセットアップするこずを提案したす。

コマンドを実行 lxc init 以䞋の䟋に瀺すように、コロンの埌に質問ぞの回答を入力するか、条件に応じお回答を倉曎したす。

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

远加のストレヌゞプヌルの䜜成 ^

前のステップで䜜成した ストレヌゞプヌル 名前が付けられたのは ssdpool そのファむルは私のシステム䞊の次の堎所にありたす。 /var/lib/lxd/disks/ssdpool.img。 このファむル システム アドレスは、PC の物理 SSD ドラむブに察応したす。

が果たす圹割に぀いおの理解を深めるため、次のような取り組みを行いたす。 ストレヌゞプヌル リポゞトリに XNUMX 番目のリポゞトリを䜜成したす ストレヌゞプヌル これは物理的には別の皮類のディスク (HDD) に配眮されたす。 問題は、LXD では䜜成できないこずです。 ストレヌゞプヌル 䜏所倖 /var/lib/lxd/disks/ シンボリックリンクも機胜したせん 開発者の応答を参照しおください。 初期化/フォヌマット䞭にこの制限を回避できたす。 ストレヌゞプヌル ルヌプバック ファむルぞのパスの代わりにブロック デバむスずしお倀を指定し、これをキヌに指定したす。 source.

ずいうこずで、䜜成する前に ストレヌゞプヌル ルヌプバック ファむル、たたはそれが䜿甚するファむル システム䞊の既存のパヌティションを定矩する必芁がありたす。 これを行うには、サむズを 10 GB に制限するファむルを䜜成しお䜿甚したす。

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

ルヌプバック ファむルを空きルヌプバック デバむスに接続したしょう。

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

/dev/loop1

鍵のおかげで --show コマンドを実行するず、ルヌプバック ファむルが接続されおいるデバむスの名前が画面に返されたす。 必芁に応じお、このタむプのビゞヌ状態のすべおのデバむスのリストを衚瀺しお、アクションが正しいこずを確認できたす。

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

リストから、デバむスに次の機胜があるこずがわかりたす。 /dev/loop1 ルヌプバックファむルが含たれおいたす /mnt/work/lxd/hddpool.img、そしおデバむス内で /dev/loop0 ルヌプバックファむルが含たれおいたす /var/lib/lxd/disks/ssdpool.img これはデフォルトに察応したす ストレヌゞプヌル.

次のコマンドは新しいコマンドを䜜成したす ストレヌゞプヌル 準備したばかりのルヌプバック ファむルに基づいお LXD で䜜成したす。 LXD はルヌプバック ファむルをフォヌマットしたす /mnt/work/lxd/hddpool.img デバむス内で /dev/loop1 BTRFS ファむル システムの堎合:

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

すべおのリストを衚瀺しおみたしょう ストレヌゞプヌル 画面ぞ:

lxc storage list

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

ストレヌゞプヌルのサむズを増やす ^

䜜成埌 ストレヌゞプヌル、必芁に応じお拡匵できたす。 のために ストレヌゞプヌル BTRFS ファむル システムに基づいお、次のコマンドを実行したす。

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

ルヌプバックファむルをルヌプバックデバむススロットに自動挿入 ^

小さな問題が XNUMX ぀ありたす。ホスト システムを再起動するず、ファむルが /mnt/work/lxd/hddpool.img デバむスから「飛び出す」 /dev/loop1 たた、このデバむスでは LXD サヌビスが認識されないため、ロヌド時に LXD サヌビスがクラッシュしたす。 この問題を解決するには、このファむルをデバむスに挿入するシステム サヌビスを䜜成する必芁がありたす。 /dev/loop1 ホスト システムの起動時。

䜜成したしょう 単䜍 ファむルの皮類 サヌビス в /etc/systemd/system/ 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

サヌビスをアクティブ化したす。

sudo systemctl enable lxd-hddpool

Created symlink /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service → /etc/systemd/system/lxd-hddpool.service.

ホスト システムを再起動した埌、サヌビスのステヌタスを確認したす。

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

出力から、サヌビスの状態が次であるこずを確認できたす。 アクティブXNUMX ぀のコマンドからのスクリプトの実行が完了したにもかかわらず、オプションによりこれを実行できるようになりたした。 RemainAfterExit=true.

安党性。 コンテナの暩限 ^

すべおのコンテナ プロセスは実際にはカヌネルを䜿甚しおホスト システム䞊で分離しお実行されるため、ホスト システムぞのコンテナ プロセスのアクセスをさらに保護するために、LXD はプロセス暩限を提䟛したす。

  • 特暩コンテナ - これらは、UID ず GID を持぀プロセスがホスト システム䞊ず同じ所有者に察応するコンテナヌです。 たずえば、UID が 0 のコンテナ内で実行されおいるプロセスには、UID が 0 のホスト システム䞊のプロセスずすべお同じアクセス暩がありたす。぀たり、コンテナ内の root ナヌザヌは、コンテナ内のすべおの暩限を持っおいたす。コンテナヌだけでなく、コンテナヌの分離された名前空間の倖に出るこずができる堎合はホスト システム䞊でも同様です。

  • 特暩のないコンテナ - これらは、プロセスが 0  65535 の番号を持぀ UID ず GID の所有者に属するコンテナヌですが、ホスト システムの堎合、所有者はそれぞれ远加された SubUID ビットず SubGID ビットを䜿甚しおマスクされたす。 たずえば、コンテナ内の UID=0 を持぀ナヌザヌは、ホスト システム䞊では次のように衚瀺されたす。 SubUID + UID。 これにより、コンテナヌ内のプロセスが分離された名前空間から脱出できる堎合、未知の非垞に高い UID/GID を持぀プロセスずしおのみホスト システムず通信できるため、ホスト システムが保護されたす。

デフォルトでは、新しく䜜成されたコンテナヌは非特暩ステヌタスを持っおいるため、SubUID ず SubGID を定矩する必芁がありたす。

それぞれ SubUID ず SubGID のマスクを蚭定する XNUMX ぀の構成ファむルを䜜成したしょう。

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

倉曎を適甚するには、LXD サヌビスを再起動する必芁がありたす。

sudo systemctl restart lxd

仮想ネットワヌクスむッチの䜜成 ^

以前に初期化りィザヌドを䜿甚しおネットワヌクを初期化したため、 lxd init ネットワヌクデバむスを䜜成したした lxdbr0次に、このセクションでは、LXD のネットワヌクず、クラむアント コマンドを䜿甚しお仮想スむッチ (ブリッゞ) を䜜成する方法に぀いお簡単に説明したす。

次の図は、スむッチ (ブリッゞ) がホストずコンテナヌをネットワヌクに接続する方法を瀺しおいたす。

LXD の基本機胜 - Linux コンテナ システム

コンテナヌは、ネットワヌクを介しお他のコンテナヌたたはこれらのコンテナヌが提䟛されるホストず通信できたす。 これを行うには、コンテナの仮想ネットワヌク カヌドを仮想スむッチにリンクする必芁がありたす。 最初にスむッチを䜜成し、コンテナ自䜓が䜜成された埌、埌続の章でコンテナのネットワヌク むンタヌフェむスをリンクしたす。

次のコマンドは、サブネットを持぀スむッチを䜜成したす。 10.0.5.0/24 およびIPv4アドレス 10.0.5.1/24、たた、 ipv4.nat コンテナが NAT サヌビスを䜿甚しおホスト経由でむンタヌネットにアクセスできるようにしたす。

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

LXD で利甚可胜なネットワヌク デバむスのリストを確認したす。

lxc network list

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

Linux ディストリビュヌションの暙準ツヌルを䜿甚しおネットワヌク デバむスが䜜成されたこずを確認するこずもできたす。 ip link たたは ip addr:

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether bc:ee:7b:5a:6b:44 brd ff:ff:ff:ff:ff:ff
    altname enp0s25
    inet6 fe80::9571:11f3:6e0c:c07b/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: lxdbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether c2:38:90:df:cb:59 brd ff:ff:ff:ff:ff:ff
    inet 10.0.5.1/24 scope global lxdbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::c038:90ff:fedf:cb59/64 scope link 
       valid_lft forever preferred_lft forever
5: veth3ddab174@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master lxdbr0 state UP group default qlen 1000
    link/ether ca:c3:5c:1d:22:26 brd ff:ff:ff:ff:ff:ff link-netnsid 0

構成プロファむル ^

LXD の各コンテナヌには独自の構成があり、グロヌバルに宣蚀された構成を䜿甚しお拡匵できたす。 構成プロファむル。 コンテナヌぞの構成プロファむルの適甚にはカスケヌド モデルがあり、次の䟋はこれを瀺しおいたす。

LXD の基本機胜 - Linux コンテナ システム

この䟋では、LXD システムに XNUMX ぀のプロファむルが䜜成されおいたす。 default, hddpool О hostfs。 XNUMX ぀のプロファむルはすべお、ロヌカル構成 (灰色の領域) を持぀コンテナヌに適甚されたす。 プロフィヌル default デバむスを持っおいたす root パラメヌタがあるもの pool 等しい ssdpoolただし、カスケヌド構成アプリケヌション モデルのおかげで、プロファむルをコンテナに適甚できたす。 hddpool パラメヌタがあるもの pool プロファむルの同じパラメヌタをオヌバヌラむドしたす default コンテナはデバむス構成を受け取りたす root パラメヌタ付き pool 等しい hddpoolずプロフィヌル hostfs 新しいデバむスをコンテナに远加するだけです。

䜿甚可胜な構成プロファむルのリストを衚瀺するには、次のコマンドを䜿甚したす。

lxc profile list

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

プロファむルを操䜜するために䜿甚できるコマンドの完党なリストは、キヌを远加するこずで取埗できたす。 --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

プロフィヌルを線集する ^

デフォルトの構成プロファむル default コンテナにはネットワヌク カヌド構成がなく、新しく䜜成されたコンテナにはネットワヌクがありたせん。そのため、別のコマンドでロヌカル (専甚) ネットワヌク デバむスを䜜成する必芁がありたすが、構成でグロヌバル ネットワヌク デバむスを䜜成できたす。このプロファむルを䜿甚するすべおのコンテナ間で共有されるプロファむル。 こうするこずで、新しいコンテナを䜜成するコマンドの盎埌に、ネットワヌクにアクセスできるネットワヌクが確立されたす。 同時に、制限はなく、必芁に応じおい぀でもロヌカル ネットワヌク デバむスを䜜成できたす。

次のコマンドは、デバむスを構成プロファむルに远加したす。 eth0 тОпа nic ネットワヌクに接続されおいる lxdbr0:

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

実際にデバむスを構成プロファむルに远加したため、デバむスに静的 IP アドレスを指定した堎合、このプロファむルを䜿甚するすべおのコンテナが同じ IP アドレスを共有するこずに泚意するこずが重芁です。 コンテナに静的 IP アドレスが割り圓おられたコンテナを䜜成する必芁がある堎合は、プロファむル レベルではなく、IP アドレス パラメヌタを䜿甚しおコンテナ レベル (ロヌカル構成) でネットワヌク デバむス構成を䜜成する必芁がありたす。

プロフィヌルを確認しおみたしょう:

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

このプロファむルでは、新しく䜜成されたすべおのコンテナヌに察しお XNUMX ぀のデバむスが䜜成されるこずがわかりたす。

  • eth0 - デバむスタむプ nic スむッチネットワヌクブリッゞに接続 lxdbr0
  • root - デバむスタむプ disk ストレヌゞプヌルを䜿甚する ssdpool

新しいプロファむルの䜜成 ^

以前に䜜成したものを䜿甚するには ストレヌゞプヌル コンテナ、構成プロファむルを䜜成する ssdroot ここで次のようなデバむスを远加したす disk マりントポむントあり / (root) 以前に䜜成したものを䜿甚 ストレヌゞプヌル - ssdpool:

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

同様に、次のようなデバむスを䜜成したす disk、ただし、この堎合は次を䜿甚したす ストレヌゞプヌル - hddpool:

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

構成プロファむルの確認:

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

画像リポゞトリ ^

コンテナヌは、Linux カヌネルを持たない特別に組み立おられたディストリビュヌションであるむメヌゞから䜜成されたす。 したがっお、コンテナヌを実行する前に、このむメヌゞからコンテナヌをデプロむする必芁がありたす。 むメヌゞの゜ヌスはロヌカル リポゞトリで、むメヌゞは倖郚リポゞトリからダりンロヌドされたす。

リモヌトむメヌゞリポゞトリ ^

デフォルトでは、LXD は XNUMX ぀のリモヌト ゜ヌスから画像を受信するように構成されおいたす。

  • Ubuntu (安定した Ubuntu むメヌゞの堎合)
  • ubuntu-daily: (毎日の Ubuntu むメヌゞの堎合)
  • 画像 (他の倚くのディストリビュヌションの堎合)

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

たずえば、リポゞトリ ubuntu: には次のようなむメヌゞがありたす。

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

限られた数の列を衚瀺するには、オプションを䜿甚したした -c パラメヌタ付き dasut、たた、コマンドを䜿甚しおリストの長さを制限したした head.

画像をフィルタリングしお䞀芧衚瀺できたす。 次のコマンドは、利甚可胜なすべおのディストリビュヌション アヌキテクチャを䞀芧衚瀺したす。 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        |
+------------------------------+--------------------------------------+--------------+

ロヌカルむメヌゞリポゞトリ ^

コンテナの䜿甚を開始するには、グロヌバル リポゞトリからロヌカル リポゞトリにむメヌゞを远加する必芁がありたす local:。 これでロヌカル リポゞトリは空になり、コマンドによっおこれが確認されたす。 lxc image list。 方法の堎合 list リポゞトリを指定しない堎合、デフォルトでロヌカル リポゞトリが䜿甚されたす。 local:

lxc image list local:

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

リポゞトリ内のむメヌゞは、次の方法を䜿甚しお管理されたす。

チヌム
説明

lxc画像 alias
むメヌゞの゚むリアスを管理する

lxc画像 copy
サヌバヌ間で画像をコピヌする

lxc画像 削陀
画像を削陀する

lxc画像 edit
画像のプロパティを線集する

lxc画像 export
画像の゚クスポヌトずダりンロヌド

lxc画像 import
むメヌゞをむメヌゞ ストアにむンポヌトする

lxc画像 info
画像に関する圹立぀情報を衚瀺する

lxc画像 リスト
画像䞀芧

lxc画像 リフレッシュ
画像を曎新する

lxc画像 衚瀺する
画像のプロパティを衚瀺

むメヌゞをグロヌバル リポゞトリからロヌカル リポゞトリにコピヌしたす images::

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

Image copied successfully!

ロヌカル リポゞトリで珟圚利甚可胜なすべおのむメヌゞのリストを衚瀺しおみたしょう local::

lxc image -c lfdatsu list local:

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

LXD 構成 ^

察話型モヌドに加えお、LXD は非察話型構成むンストヌル モヌドもサポヌトしおいたす。これは、構成が YAML ファむルの圢匏で指定される堎合であり、実行をバむパスしお構成党䜓を䞀床にむンストヌルできる特別な圢匏です。ネットワヌク構成、構成プロファむルの䜜成など、この蚘事で䞊で説明した倚くの察話型コマンドのうちの XNUMX ぀です。 この領域に぀いおはここでは説明したせんので、ご自身で確認しおください。 ドキュメントの䞭で.

次の察話型コマンド lxc config これにより、構成を蚭定できるようになりたす。 たずえば、ロヌカル リポゞトリにダりンロヌドされたむメヌゞがグロヌバル リポゞトリから自動的に曎新されないようにするには、次のコマンドを䜿甚しおこの動䜜を有効にしたす。

lxc config set images.auto_update_cached=false

コンテナの䜜成ず管理 ^

コンテナを䜜成するには、次のコマンドを䜿甚したす lxc init 倀が枡される先 репПзОтПрОй:Пбраз 次に、コンテナヌに必芁な ID を入力したす。 リポゞトリはロヌカルずしお指定できたす local: グロヌバルなものも同様です。 リポゞトリが指定されおいない堎合、デフォルトではロヌカル リポゞトリがむメヌゞの怜玢に䜿甚されたす。 むメヌゞがグロヌバル リポゞトリから指定されおいる堎合、むメヌゞはたずロヌカル リポゞトリにダりンロヌドされ、次にコンテナの䜜成に䜿甚されたす。

次のコマンドを実行しお、最初のコンテナを䜜成したしょう。

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

ここで䜿甚するコマンド キヌを順番に芋おみたしょう。

  • alpine3 — ロヌカル リポゞトリに以前にアップロヌドされたむメヌゞに察しお別名 (゚むリアス) が指定されおいたす。 このむメヌゞの゚むリアスが䜜成されおいない堎合は、い぀でもそのむメヌゞを参照できたす。 指王 それが衚に衚瀺されたす。
  • alp — コンテナの識別子を蚭定したす
  • --storage — このキヌは、どの領域にあるかを瀺したす。 ストレヌゞプヌル コンテナが䜜成されたす
  • --profile — これらのキヌは、以前に䜜成された構成プロファむルからコンテナヌに構成をカスケヌド適甚したす。

コンテナを起動するず、ディストリビュヌションの init システムの起動が始たりたす。

lxc start alp

コマンドを䜿甚するこずもできたす lxc launch チヌムを組み合わせるこずができたす lxc init О lxc start XNUMX回の操䜜で。

コンテナの状態を確認する:

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

コンテナ構成の確認:

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

セクションで profiles このコンテナがXNUMX぀の構成プロファむルを䜿甚しおいるこずを確認できたす- default О hddroot。 セクション内 devices ネットワヌクデバむスはプロファむルレベルで䜜成されおいるため、怜出できるデバむスは XNUMX ぀だけです default。 コンテナで䜿甚されおいるすべおのデバむスを衚瀺するには、キヌを远加する必芁がありたす --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: ""

静的IPアドレスの蚭定 ^

ネットワヌクデバむスにIPアドレスを蚭定しようずするず eth0 チヌム lxc config device set alp コンテナ構成を察象ずしおいる堎合、デバむスが存圚しないこずを報告する゚ラヌが衚瀺されたす。 eth0 プロファむルに属するコンテナによっお䜿甚される default:

lxc config device set alp eth0 ipv4.address 10.0.5.5

Error: The device doesn't exist

もちろん、静的 IP アドレスを蚭定するこずもできたす。 eth0 ただし、このプロファむルを䜿甚するすべおのコンテナで同じになりたす。 したがっお、コンテナ専甚のデバむスを远加したしょう。

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

次に、コンテナを再起動する必芁がありたす。

lxc restart alp

今コンテナの構成を芋るず、オプションを䜿甚する必芁はありたせん。 --expanded ネットワヌクデバむスを確認するには eth0コンテナレベルで䜜成し、プロファむルから同じデバむスにカスケヌドしたためです。 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: ""

コンテナの削陀 ^

コンテナを削陀するには、次のコマンドを䜿甚したす lxc deleteただし、コンテナを削陀する前に、次のコマンドを䜿甚しおコンテナを停止する必芁がありたす。 lxc stop:

lxc stop alp

lxc list

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

コンテナの状態が以䞋になっおいるこずを確認した埌、 停止から削陀できたす。 ストレヌゞプヌル:

lxc delete alp

コンテナぞのアクセス ^

ネットワヌク接続をバむパスしおコンテナ内でコマンドを盎接実行するには、次のコマンドを䜿甚したす。 lxc exec これにより、システム シェルを起動せずにコンテナ内でコマンドが実行されたす。 倉数、ファむル リダむレクト (パむプ) などのシェル パタヌンを䜿甚しおシェルでコマンドを実行する必芁がある堎合は、シェルを明瀺的に起動し、コマンドをキヌずしお枡す必芁がありたす。次に䟋を瀺したす。

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

コマンドで特殊な゚スケヌプ文字が䜿甚されたした 特殊な文字の堎合 $ 倉数が $HOME ホスト マシン䞊では解釈されず、コンテナ内でのみ解釈されたした。

むンタラクティブ シェル モヌドを開始し、ホットキヌを実行しおセッションを終了するこずもできたす。 CTRL+D:

lxc exec alp -- /bin/sh

コンテナリ゜ヌス管理 ^

LXD では、特別な構成セットを䜿甚しおコンテナヌ リ゜ヌスを管理できたす。 コンテナ構成パラメヌタの完党なリストはこちらからご芧いただけたす。 ドキュメントの䞭で.

RAMリ゜ヌスの制限 ^

パラメヌタヌ limits.memory コンテナヌで䜿甚できる RAM の量を制限したす。 倀は数倀であり、次のいずれかです。 利甚可胜なサフィックス.

コンテナヌの RAM 制限を 256 MB に蚭定したしょう。

lxc config set alp limits.memory 256MB

たた、メモリを制限するための他のパラメヌタもありたす。

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

チヌム lxc config show 蚭定されおいる適甚されたリ゜ヌス制限を含む、コンテナヌ構成党䜓を衚瀺できたす。

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リ゜ヌス制限 ^

CPU リ゜ヌスを制限するには、いく぀かの方法がありたす。 制限の皮類:

  • limit.cpu - コンテナを XNUMX ぀以䞊の CPU コアにバむンドしたす
  • limits.cpu.allowance - 制限時間が経過した堎合は CFS スケゞュヌラ クォヌタを管理し、パヌセンテヌゞを経過した堎合はナニバヌサル CPU リ゜ヌス共有メカニズムを管理したす。
  • limits.cpu.priority - 䞀連のプロセッサを共有する耇数のむンスタンスに同じ割合のプロセッサが割り圓おられおいる堎合のスケゞュヌラの優先順䜍

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

ディスク容量の制限 ^

などの制限に加えお、 limits.read, limits.write コンテナによっお消費されるディスク容量を制限するこずもできたす (ZFS たたは BTRFS でのみ機胜したす)。

lxc config device set alp root size=2GB

むンストヌル埌のパラメヌタで devices.root.size 蚭定された制限を確認できたす。

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

䜿甚されおいるディスク クォヌタを衚瀺するには、次のコマンドから取埗できたす。 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

コンテナのルヌト デバむスの制限を 2GB に蚭定しおいるにもかかわらず、次のようなシステム ナヌティリティ df この制限は衚瀺されたせん。 これを行うために、小さなテストを実斜し、それがどのように機胜するかを確認したす。

同じコンテナ内に 2 ぀の新しい同䞀のコンテナを䜜成したしょう ストレヌゞプヌル (hddプヌル):

lxc init alpine3 alp1 --storage=hddpool --profile=default --profile=hddroot
lxc init alpine3 alp2 --storage=hddpool --profile=default --profile=hddroot

lxc list
+------+---------+------------------+------+-----------+-----------+
| NAME |  STATE  |       IPV4       | IPV6 |   TYPE    | SNAPSHOTS |
+------+---------+------------------+------+-----------+-----------+
| alp1 | RUNNING | 10.0.5.46 (eth0) |      | CONTAINER | 0         |
+------+---------+------------------+------+-----------+-----------+
| alp2 | RUNNING | 10.0.5.30 (eth0) |      | CONTAINER | 0         |
+------+---------+------------------+------+-----------+-----------+

いずれかのコンテナに 1 GB のファむルを䜜成したしょう。

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

ファむルが䜜成されたこずを確認しおみたしょう。

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

XNUMX 番目のコンテナヌを調べお、同じ堎所にファむルが存圚するかどうかを確認するず、コンテナヌは独自のコンテナヌで䜜成されるため、このファむルは存圚したせん。これは予想されるこずです。 ストレヌゞボリュヌム 同じように ストレヌゞプヌル:

lxc exec alp2 -- ls -lh
total 0

しかし、それが生成する倀を比范しおみたしょう df 䞀方のコンテナずもう䞀方のコンテナでは次のようになりたす。

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

デバむス /dev/loop1 ルヌトパヌティションずしおマりントされたす ストレヌゞプヌル これらのコンテナはこれを䜿甚するため、XNUMX ぀のコンテナ間でそのボリュヌムを共有したす。

リ゜ヌス消費統蚈 ^

次のコマンドを䜿甚しお、コンテナのリ゜ヌス消費統蚈を衚瀺できたす。

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

スナップショットの操䜜 ^

LXD には、スナップショットを䜜成し、そこからコンテナヌの状態を埩元する機胜がありたす。

スナップショットを䜜成するには、次のコマンドを実行したす。

lxc snapshot alp snapshot1

チヌム lxc snapshot 利甚可胜な鍵がありたせん listしたがっお、スナップショットのリストを衚瀺するには、コンテナヌに関する䞀般情報を衚瀺するコマンドを䜿甚する必芁がありたす。

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

次のコマンドを䜿甚しお、スナップショットからコンテナを埩元できたす。 lxc restore 埩元を実行するコンテナずスナップショットの゚むリアスを指定したす。

lxc restore alp snapshot1

スナップショットを削陀するには、次のコマンドを䜿甚したす。 コマンド構文は他のコマンド構文ず䌌おいないこずに泚意しおください。ここでは、コンテナ名の埌にスラッシュを指定する必芁がありたす。 スラッシュを省略するず、スナップショットを削陀するコマンドはコンテナを削陀するコマンドずしお解釈されたす。

lxc delete alp/snapshot1

䞊の䟋では、いわゆるステヌトレス スナップショットを調べたした。 LXD には別のタむプのスナップショット (ステヌトフル) があり、コンテナ内のすべおのプロセスの珟圚の状態を保存したす。 ステヌトフル スナップショットに関連する興味深い䟿利な機胜が倚数ありたす。

他に䜕がありたすか ^

  • Python 開発者向けのモゞュヌルが利甚可胜です PyLXD LXD に API を提䟛したす

UPDATE 10.04.2020/15/00 XNUMX:XNUMX: ナビゲヌションを远加

出所 habr.com

コメントを远加したす