Prohoster > Blog > quản lý > Tính năng cơ bản của LXD - Hệ thống container Linux
Tính năng cơ bản của LXD - Hệ thống container Linux
Lxd là trình quản lý vùng chứa hệ thống thế hệ tiếp theo, vì vậy nó nói nguồn. Nó cung cấp giao diện người dùng tương tự như máy ảo, nhưng thay vào đó sử dụng các bộ chứa Linux.
lõi LXD là một daemon đặc quyền (một dịch vụ chạy với quyền root) cung cấp API REST thông qua ổ cắm unix cục bộ, cũng như qua mạng nếu cài đặt cấu hình phù hợp. Các máy khách, chẳng hạn như công cụ dòng lệnh được cung cấp cùng với LXD, thực hiện các yêu cầu thông qua API REST này. Điều này có nghĩa là cho dù bạn đang truy cập máy chủ cục bộ hay máy chủ từ xa thì mọi thứ đều hoạt động như nhau.
Trong bài viết này, chúng tôi sẽ không đi sâu vào chi tiết các khái niệm về LXD, chúng tôi sẽ không xem xét tất cả các khả năng có sẵn được nêu trong tài liệu, bao gồm cả việc triển khai gần đây trong các phiên bản LXD mới nhất để hỗ trợ cho máy ảo QEMU song song với các thùng chứa. Thay vào đó, chúng ta sẽ chỉ tìm hiểu những kiến thức cơ bản về quản lý vùng chứa - thiết lập nhóm lưu trữ, kết nối mạng, chạy vùng chứa, áp dụng giới hạn tài nguyên và cách sử dụng ảnh chụp nhanh để bạn có thể hiểu cơ bản về LXD và sử dụng vùng chứa trên Linux.
Để biết thông tin đầy đủ, vui lòng tham khảo nguồn chính thức:
Điều này có nghĩa là hai gói sẽ được cài đặt cùng một lúc, một gói là gói hệ thống và gói kia là gói snap. Việc cài đặt hai gói trên một hệ thống có thể tạo ra một số vấn đề trong đó gói hệ thống có thể trở thành mồ côi nếu gói snap bị người quản lý gói snap xóa.
Tìm gói lxd trong kho lưu trữ snap, bạn có thể sử dụng lệnh sau:
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
Bằng cách chạy lệnh list bạn có thể chắc chắn rằng gói hàng lxd chưa được cài đặt:
snap list
Name Version Rev Tracking Publisher Notes
core 16-2.43.3 8689 stable canonical✓ core
Mặc dù LXD là gói snap nhưng nó phải được cài đặt thông qua gói hệ thống lxd, sẽ tạo nhóm tương ứng trong hệ thống, các tiện ích cần thiết trong /usr/bin vv
sudo apt update
sudo apt install lxd
Hãy đảm bảo rằng gói được cài đặt dưới dạng gói snap:
snap list
Name Version Rev Tracking Publisher Notes
core 16-2.43.3 8689 stable canonical✓ core
lxd 3.21 13474 stable/… canonical✓ -
Để cài đặt gói LXD trên hệ thống, bạn cần chạy các lệnh sau, lệnh đầu tiên sẽ cập nhật danh sách các gói trên hệ thống có sẵn trong kho, lệnh thứ hai sẽ cài đặt trực tiếp gói:
sudo pacman -Syyu && sudo pacman -S lxd
Sau khi cài đặt gói, để quản lý LXD bởi người dùng thông thường, gói đó phải được thêm vào nhóm hệ thống lxd:
sudo usermod -a -G lxd user1
Hãy đảm bảo rằng người dùng user1 đã thêm vào nhóm lxd:
id -Gn user1
user1 adm dialout cdrom floppy sudo audio dip video plugdev netdev lxd
Nếu nhóm lxd không hiển thị trong danh sách thì bạn cần kích hoạt lại phiên người dùng. Để thực hiện việc này, bạn cần đăng xuất và đăng nhập dưới cùng một người dùng.
Kích hoạt trong systemd tải dịch vụ LXD khi khởi động hệ thống:
Trước khi bắt đầu khởi tạo, chúng ta cần hiểu cách sắp xếp bộ nhớ trong LXD một cách hợp lý.
Kho (Kho) bao gồm từ một hoặc nhiều Bể chứa sử dụng một trong các hệ thống tệp được hỗ trợ như ZFS, BTRFS, LVM hoặc các thư mục thông thường. Mọi Bể chứa được chia thành các tập (Khối lượng lưu trữ) có chứa hình ảnh, vùng chứa hoặc dữ liệu cho các mục đích khác.
Hình ảnh - đây là những bản phân phối được lắp ráp đặc biệt không có nhân Linux và có sẵn từ các nguồn bên ngoài
Container - đây là những bản phân phối được triển khai từ hình ảnh, sẵn sàng để sử dụng
Ảnh chụp nhanh - đây là ảnh chụp nhanh về trạng thái của vùng chứa mà bạn có thể quay lại
Để quản lý lưu trữ trong LXD, hãy sử dụng lệnh lxc storage chứng chỉ mà bạn có thể lấy bằng cách chỉ định khóa - lxc storage --help
Lệnh sau hiển thị danh sách tất cả Bể chứa trong bộ lưu trữ LXD:
lxc storage list
+---------+-------------+--------+--------------------------------+---------+
| NAME | DESCRIPTION | DRIVER | SOURCE | USED BY |
+---------+-------------+--------+--------------------------------+---------+
| hddpool | | btrfs | /dev/loop1 | 2 |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool | | btrfs | /var/lib/lxd/disks/ssdpool.img | 4 |
+---------+-------------+--------+--------------------------------+---------+
Để xem danh sách tất cả Khối lượng lưu trữ trong phần đã chọn Bể chứa phục vụ đội 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 |
+-----------+----------------------------------+-------------+---------+
Ngoài ra, nếu vì Bể chứa Khi tạo thì hệ thống file BTRFS đã được chọn, sau đó lấy danh sách Khối lượng lưu trữ hoặc subvolume trong phần diễn giải BTRFS, bạn có thể sử dụng bộ công cụ của hệ thống tệp này:
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
Trước khi tạo và sử dụng vùng chứa, bạn phải thực hiện khởi tạo LXD chung để tạo và định cấu hình mạng cũng như bộ lưu trữ. Điều này có thể được thực hiện thủ công bằng cách sử dụng các lệnh máy khách tiêu chuẩn có sẵn trong danh sách bằng cách gọi lệnh lxc --help hoặc sử dụng trình hướng dẫn khởi tạo lxd init trả lời một số câu hỏi.
Trong quá trình khởi tạo, LXD hỏi một số câu hỏi, bao gồm việc xác định loại hệ thống tệp cho cài đặt mặc định. Bể chứa. Theo mặc định, hệ thống tệp BTRFS được chọn cho nó. Sẽ không thể thay đổi sang FS khác sau khi tạo. Để chọn một FS, chúng tôi khuyên bạn nên chọn bảng so sánh đặc điểm:
Đặc tính
thư mục
Btrfs
LVM
ZFS
CEPH
Lưu trữ hình ảnh được tối ưu hóa
Không
Vâng
Vâng
Vâng
Vâng
Tạo phiên bản được tối ưu hóa
Không
Vâng
Vâng
Vâng
Vâng
Tạo ảnh chụp nhanh được tối ưu hóa
Không
Vâng
Vâng
Vâng
Vâng
Truyền hình ảnh được tối ưu hóa
Không
Vâng
Không
Vâng
Vâng
Chuyển phiên bản được tối ưu hóa
Không
Vâng
Không
Vâng
Vâng
sao chép trên viết
Không
Vâng
Vâng
Vâng
Vâng
Dựa trên khối
Không
Không
Vâng
Không
Vâng
Nhân bản ngay lập tức
Không
Vâng
Vâng
Vâng
Vâng
Trình điều khiển lưu trữ có thể sử dụng được bên trong một container
Vâng
Vâng
Không
Không
Không
Khôi phục từ ảnh chụp nhanh cũ hơn (không phải mới nhất)
Vâng
Vâng
Vâng
Không
Vâng
Hạn ngạch lưu trữ
Đúng(*)
Vâng
Vâng
Vâng
Không
Khởi tạo mạng và nhóm lưu trữ bằng trình hướng dẫn ^
Lệnh tiếp theo chúng ta sẽ xem xét đề xuất thiết lập các thành phần chính của LXD bằng cách trả lời các câu hỏi đơn giản bằng trình hướng dẫn khởi tạo.
Chạy lệnh lxc init và nhập câu trả lời cho các câu hỏi sau dấu hai chấm như trong ví dụ bên dưới hoặc thay đổi theo điều kiện của bạn:
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]:
Ở bước trước chúng ta đã tạo Bể chứa cái tên đã được đặt ssdpool và tập tin đó nằm trên hệ thống của tôi tại /var/lib/lxd/disks/ssdpool.img. Địa chỉ hệ thống tệp này tương ứng với ổ SSD vật lý trong PC của tôi.
Các hành động sau đây nhằm mở rộng sự hiểu biết về vai trò của Bể chứa trong kho lưu trữ, chúng tôi sẽ tạo cái thứ hai Bể chứa sẽ được đặt trên một loại đĩa khác, HDD. Vấn đề là LXD không cho phép bạn tạo Bể chứa ngoài địa chỉ /var/lib/lxd/disks/ và thậm chí cả các liên kết tượng trưng cũng không hoạt động, xem phản hồi của nhà phát triển. Chúng ta có thể bỏ qua giới hạn này trong quá trình khởi tạo/định dạng Bể chứa bằng cách chỉ định giá trị là thiết bị khối thay vì đường dẫn đến tệp loopback bằng cách chỉ định giá trị này trong khóa source.
Vì vậy, trước khi tạo Bể chứa bạn cần xác định tệp loopback hoặc phân vùng hiện có trên hệ thống tệp mà nó sẽ sử dụng. Để thực hiện việc này, chúng tôi sẽ tạo và sử dụng một tệp mà chúng tôi sẽ giới hạn kích thước ở mức 10GB:
dd if=/dev/zero of=/mnt/work/lxd/hddpool.img bs=1MB count=10000
10000+0 records in
10000+0 records out
10000000000 bytes (10 GB, 9,3 GiB) copied, 38,4414 s, 260 MB/s
Hãy kết nối tệp loopback với thiết bị loopback miễn phí:
Nhờ có chìa khóa --show việc thực thi lệnh sẽ trả về màn hình tên của thiết bị mà tệp loopback của chúng tôi được kết nối. Nếu cần, chúng tôi có thể hiển thị danh sách tất cả các thiết bị bận thuộc loại này để đảm bảo rằng hành động của chúng tôi là chính xác:
Từ danh sách bạn có thể thấy rằng thiết bị có /dev/loop1 bao gồm tập tin loopback /mnt/work/lxd/hddpool.img, và trong thiết bị /dev/loop0 bao gồm tập tin loopback /var/lib/lxd/disks/ssdpool.img tương ứng với mặc định Bể chứa.
Lệnh sau tạo một lệnh mới Bể chứa trong LXD dựa trên tệp loopback mà chúng tôi vừa chuẩn bị. LXD sẽ định dạng tệp loopback /mnt/work/lxd/hddpool.img trong thiết bị /dev/loop1 đối với hệ thống tệp BTRFS:
Tự động chèn tệp loopback vào khe cắm thiết bị loopback ^
Chúng tôi có một vấn đề nhỏ, khi khởi động lại hệ thống máy chủ, tập tin /mnt/work/lxd/hddpool.img sẽ "bay" ra khỏi thiết bị /dev/loop1 và dịch vụ LXD sẽ gặp sự cố khi tải vì nó sẽ không nhìn thấy nó trong thiết bị này. Để giải quyết vấn đề này bạn cần tạo một dịch vụ hệ thống sẽ chèn file này vào thiết bị /dev/loop1 khi hệ thống máy chủ khởi động.
Hãy tạo ra đơn vị loại tệp dịch vụ в /etc/systemd/system/ đối với hệ thống khởi tạo 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
Kích hoạt dịch vụ:
sudo systemctl enable lxd-hddpool
Created symlink /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service → /etc/systemd/system/lxd-hddpool.service.
Sau khi khởi động lại hệ thống máy chủ, chúng tôi kiểm tra trạng thái dịch vụ:
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).
Từ đầu ra, chúng tôi có thể xác minh rằng trạng thái dịch vụ là hoạt động, mặc dù thực tế là việc thực thi tập lệnh của chúng tôi từ một lệnh đã hoàn tất, tùy chọn cho phép chúng tôi thực hiện điều này RemainAfterExit=true.
Vì tất cả các quy trình vùng chứa thực sự chạy độc lập trên hệ thống máy chủ bằng cách sử dụng kernel của nó, để bảo vệ hơn nữa quyền truy cập của các quy trình vùng chứa vào hệ thống máy chủ, LXD cung cấp đặc quyền quy trình, trong đó:
Container đặc quyền - đây là các vùng chứa trong đó các tiến trình có UID và GID tương ứng với cùng một chủ sở hữu như trên hệ thống máy chủ. Ví dụ: một quy trình đang chạy trong vùng chứa có UID bằng 0 có tất cả các quyền truy cập giống như một quy trình trên hệ thống máy chủ có UID bằng 0. Nói cách khác, người dùng root trong vùng chứa có tất cả các quyền không chỉ trong vùng chứa mà còn trên hệ thống máy chủ nếu anh ta có thể đi ra ngoài không gian tên biệt lập của vùng chứa.
Vùng chứa không có đặc quyền - đây là những vùng chứa trong đó các tiến trình thuộc về chủ sở hữu của UID và GID có số từ 0 đến 65535, nhưng đối với hệ thống máy chủ, chủ sở hữu được che dấu bằng cách sử dụng các bit SubUID và SubGID được thêm vào tương ứng. Ví dụ: người dùng có UID=0 trong vùng chứa sẽ được nhìn thấy trên hệ thống máy chủ dưới dạng SubUID + UID. Điều này bảo vệ hệ thống máy chủ vì nếu bất kỳ quy trình nào trong vùng chứa có thể thoát khỏi vùng tên bị cô lập, thì nó chỉ có thể giao tiếp với hệ thống máy chủ dưới dạng một quy trình có UID/GID rất cao, không xác định.
Theo mặc định, các vùng chứa mới được tạo có trạng thái không có đặc quyền và do đó chúng ta phải xác định SubUID và SubGID.
Hãy tạo hai tệp cấu hình trong đó chúng ta sẽ đặt mặt nạ cho SubUID và SubGID tương ứng:
Vì trước đây chúng tôi đã khởi tạo mạng bằng trình hướng dẫn khởi tạo lxd init và tạo ra một thiết bị mạng lxdbr0, thì trong phần này chúng ta sẽ chỉ làm quen với việc kết nối mạng trong LXD và cách tạo một switch (cầu nối) ảo bằng lệnh client.
Sơ đồ sau đây minh họa cách một bộ chuyển mạch (cầu nối) kết nối máy chủ và vùng chứa vào mạng:
Các vùng chứa có thể giao tiếp qua mạng với các vùng chứa khác hoặc máy chủ lưu trữ các vùng chứa này. Để thực hiện việc này, bạn cần liên kết các card mạng ảo của vùng chứa với một bộ chuyển mạch ảo. Trước tiên, chúng ta sẽ tạo một công tắc và các giao diện mạng của vùng chứa sẽ được liên kết trong các chương tiếp theo, sau khi vùng chứa đã được tạo.
Lệnh sau tạo một switch có mạng con 10.0.5.0/24 và địa chỉ IPv4 10.0.5.1/24, và cũng bao gồm ipv4.nat để các container có thể truy cập Internet thông qua máy chủ bằng dịch vụ NAT:
Mỗi vùng chứa trong LXD có cấu hình riêng và có thể mở rộng nó với các cấu hình được khai báo toàn cầu được gọi là hồ sơ cấu hình. Việc áp dụng cấu hình cấu hình cho vùng chứa có mô hình xếp tầng, ví dụ sau đây minh họa điều này:
Trong ví dụ này, ba cấu hình đã được tạo trong hệ thống LXD: default, hddpool и hostfs. Tất cả ba cấu hình đều được áp dụng cho vùng chứa có cấu hình cục bộ (vùng màu xám). Hồ sơ default có một thiết bị root trong đó có một tham số pool là ssdpool, nhưng nhờ mô hình ứng dụng cấu hình xếp tầng, chúng ta có thể áp dụng cấu hình cho vùng chứa hddpool trong đó có một tham số pool sẽ ghi đè tham số tương tự từ hồ sơ default và container sẽ nhận được cấu hình thiết bị root với tham số pool như nhau hddpool, và hồ sơ hostfs chỉ cần thêm một thiết bị mới vào vùng chứa.
Để xem danh sách các cấu hình cấu hình có sẵn, hãy sử dụng lệnh sau:
lxc profile list
+---------+---------+
| NAME | USED BY |
+---------+---------+
| default | 1 |
+---------+---------+
| hddroot | 0 |
+---------+---------+
| ssdroot | 1 |
+---------+---------+
Có thể lấy danh sách đầy đủ các lệnh có sẵn để làm việc với một cấu hình bằng cách thêm khóa --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
Hồ sơ cấu hình mặc định default không có cấu hình card mạng cho container và tất cả các container mới tạo đều không có mạng, đối với chúng cần tạo các thiết bị mạng cục bộ (chuyên dụng) bằng một lệnh riêng, nhưng chúng ta có thể tạo một thiết bị mạng toàn cầu trong cấu hình profile sẽ được chia sẻ giữa tất cả các vùng chứa sử dụng hồ sơ này. Bằng cách này, ngay sau lệnh tạo vùng chứa mới, họ sẽ có một mạng có quyền truy cập mạng. Đồng thời, không có hạn chế, chúng ta luôn có thể tạo thiết bị mạng cục bộ sau này nếu cần.
Lệnh sau sẽ thêm thiết bị vào hồ sơ cấu hình eth0 loại nic được kết nối với mạng lxdbr0:
lxc profile device add default eth0 nic network=lxdbr0 name=eth0
Điều quan trọng cần lưu ý là vì chúng tôi thực sự đã thêm thiết bị vào hồ sơ cấu hình nên nếu chúng tôi chỉ định một địa chỉ IP tĩnh trong thiết bị thì tất cả các vùng chứa sẽ sử dụng hồ sơ này sẽ chia sẻ cùng một địa chỉ IP. Nếu có nhu cầu tạo vùng chứa có địa chỉ IP tĩnh được phân bổ cho vùng chứa thì bạn nên tạo cấu hình thiết bị mạng ở cấp vùng chứa (cấu hình cục bộ) với tham số địa chỉ IP chứ không phải ở cấp hồ sơ.
Hãy kiểm tra hồ sơ:
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: []
Trong hồ sơ này, chúng ta có thể thấy rằng đối với tất cả các vùng chứa mới được tạo, hai thiết bị sẽ được tạo:
eth0 - Loại thiết bị nic được kết nối với một switch (cầu nối mạng) lxdbr0
root - Loại thiết bị disk sử dụng một kho lưu trữ ssdpool
Để sử dụng đã tạo trước đó Bể chứa vùng chứa, tạo hồ sơ cấu hình ssdroot trong đó chúng tôi sẽ thêm một thiết bị như disk với điểm gắn kết / (root) bằng cách sử dụng đã tạo trước đó Bể chứa - ssdpool:
Các vùng chứa được tạo từ các hình ảnh là các bản phân phối được lắp ráp đặc biệt không có nhân Linux. Do đó, trước khi chạy container, nó phải được triển khai từ image này. Nguồn hình ảnh là kho lưu trữ cục bộ nơi hình ảnh được tải xuống từ kho lưu trữ bên ngoài.
Để hiển thị số lượng cột giới hạn, chúng tôi đã sử dụng tùy chọn -c với các thông số dasut, đồng thời cũng giới hạn độ dài của danh sách bằng lệnh head.
Tính năng lọc có sẵn để hiển thị danh sách hình ảnh. Lệnh sau sẽ liệt kê tất cả các kiến trúc phân phối có sẵn AlpineLinux:
Để bắt đầu sử dụng vùng chứa, bạn cần thêm hình ảnh từ kho lưu trữ chung vào kho lưu trữ cục bộ local:. Bây giờ kho lưu trữ cục bộ trống, lệnh sẽ đảm bảo điều này lxc image list. Nếu phương pháp list không chỉ định kho lưu trữ thì kho lưu trữ cục bộ sẽ được sử dụng theo mặc định - local:
lxc image list local:
+-------+-------------+--------+-------------+--------------+------+------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE |
+-------+-------------+--------+-------------+--------------+------+------+
Hình ảnh trong kho được quản lý bằng các phương pháp sau:
Đội
Описание
hình ảnh lxc bí danh
Quản lý bí danh hình ảnh
hình ảnh lxc bản sao
Sao chép hình ảnh giữa các máy chủ
hình ảnh lxc xóa
Xóa hình ảnh
hình ảnh lxc chỉnh sửa
Chỉnh sửa thuộc tính hình ảnh
hình ảnh lxc xuất khẩu
Xuất và tải xuống hình ảnh
hình ảnh lxc nhập khẩu
Nhập hình ảnh vào kho hình ảnh
hình ảnh lxc Thông tin
Hiển thị thông tin hữu ích về hình ảnh
hình ảnh lxc
Liệt kê hình ảnh
hình ảnh lxc làm mới
Làm mới hình ảnh
hình ảnh lxc hiển thị
Hiển thị thuộc tính hình ảnh
Sao chép hình ảnh vào kho lưu trữ cục bộ từ kho lưu trữ chung images::
Ngoài chế độ tương tác, LXD còn hỗ trợ chế độ cài đặt cấu hình không tương tác, đây là khi cấu hình được chỉ định dưới dạng tệp YAML, một định dạng đặc biệt cho phép bạn cài đặt toàn bộ cấu hình cùng một lúc, bỏ qua việc thực thi của nhiều lệnh tương tác đã được thảo luận ở trên trong bài viết này, bao gồm cấu hình mạng, tạo hồ sơ cấu hình, v.v. Chúng tôi sẽ không đề cập đến lĩnh vực này ở đây, bạn có thể tự mình kiểm tra. trong tài liệu.
Lệnh tương tác tiếp theo lxc config mà chúng tôi sẽ xem xét cho phép bạn thiết lập cấu hình. Ví dụ: để đảm bảo rằng hình ảnh đã tải xuống kho lưu trữ cục bộ không được cập nhật tự động từ kho lưu trữ chung, chúng tôi có thể kích hoạt hành vi này bằng lệnh sau:
Để tạo vùng chứa sử dụng lệnh lxc init những giá trị nào được chuyển đến репозиторий:образ và sau đó là ID mong muốn cho vùng chứa. Kho lưu trữ có thể được chỉ định là cục bộ local: bất kỳ cái toàn cầu nào cũng vậy. Nếu kho lưu trữ không được chỉ định thì theo mặc định, kho lưu trữ cục bộ sẽ được sử dụng để tìm kiếm hình ảnh. Nếu hình ảnh được chỉ định từ kho lưu trữ chung thì trước tiên hình ảnh sẽ được tải xuống kho lưu trữ cục bộ và sau đó được sử dụng để tạo vùng chứa.
Hãy chạy lệnh sau để tạo vùng chứa đầu tiên:
lxc init alpine3 alp --storage=hddpool --profile=default --profile=hddroot
Hãy xem các phím lệnh mà chúng tôi sử dụng ở đây theo thứ tự:
alpine3 — Bí danh (bí danh) được chỉ định cho hình ảnh đã được tải lên kho lưu trữ cục bộ trước đó. Nếu bí danh không được tạo cho hình ảnh này thì bạn luôn có thể tham khảo hình ảnh đó bằng vân tay được hiển thị trong bảng.
alp - Đặt mã định danh cho vùng chứa
--storage - Phím này cho biết trong đó Bể chứa một thùng chứa sẽ được tạo
--profile — Các tầng khóa này áp dụng cấu hình từ các cấu hình cấu hình đã tạo trước đó cho vùng chứa
Chúng tôi khởi chạy container, bắt đầu khởi chạy hệ thống init của bản phân phối:
lxc start alp
Bạn cũng có thể sử dụng lệnh lxc launch cho phép bạn kết hợp các đội lxc init и lxc start trong một thao tác.
Kiểm tra trạng thái của container:
lxc list -c ns46tb
+------+---------+------------------+------+-----------+--------------+
| NAME | STATE | IPV4 | IPV6 | TYPE | STORAGE POOL |
+------+---------+------------------+------+-----------+--------------+
| alp | RUNNING | 10.0.5.46 (eth0) | | CONTAINER | hddpool |
+------+---------+------------------+------+-----------+--------------+
Trong phần profiles chúng ta có thể đảm bảo rằng vùng chứa này sử dụng hai cấu hình cấu hình - default и hddroot. Trong phần devices chúng tôi chỉ có thể phát hiện một thiết bị vì thiết bị mạng đã được tạo ở cấp hồ sơ default. Để xem tất cả các thiết bị được vùng chứa sử dụng, bạn cần thêm khóa --expanded:
Nếu chúng tôi cố gắng đặt địa chỉ IP cho thiết bị mạng eth0 đội lxc config device set alp dành cho cấu hình vùng chứa thì chúng tôi sẽ nhận được lỗi báo cáo rằng thiết bị không tồn tại do thiết bị eth0 được container sử dụng thuộc về hồ sơ default:
lxc config device set alp eth0 ipv4.address 10.0.5.5
Error: The device doesn't exist
Tất nhiên chúng ta có thể đặt địa chỉ IP tĩnh cho eth0 thiết bị trong hồ sơ, nhưng nó sẽ giống nhau đối với tất cả các vùng chứa sẽ sử dụng hồ sơ này. Vì vậy, hãy thêm một thiết bị dành riêng cho container:
lxc config device add alp eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5
Sau đó, bạn cần khởi động lại container:
lxc restart alp
Nếu bây giờ chúng ta xem cấu hình vùng chứa, chúng ta không cần sử dụng tùy chọn --expanded để xem thiết bị mạng eth0, vì chúng tôi đã tạo nó ở cấp vùng chứa và nó được xếp tầng trên cùng một thiết bị từ cấu hình default:
Để thực thi trực tiếp các lệnh trong vùng chứa, bỏ qua các kết nối mạng, hãy sử dụng lệnh lxc exec thực thi các lệnh trong vùng chứa mà không khởi chạy shell hệ thống. Nếu bạn cần thực thi một lệnh trong shell bằng cách sử dụng các mẫu shell như biến, chuyển hướng tệp (ống), v.v., thì bạn cần khởi chạy shell một cách rõ ràng và truyền lệnh dưới dạng khóa, ví dụ:
lxc exec alp -- /bin/sh -c "echo $HOME"
Lệnh sử dụng ký tự thoát đặc biệt cho nhân vật đặc biệt $ do đó biến $HOME không được diễn giải trên máy chủ mà chỉ được diễn giải bên trong vùng chứa.
Cũng có thể bắt đầu chế độ shell tương tác và sau đó kết thúc phiên bằng cách thực thi phím nóng CTRL+D:
Trong LXD, bạn có thể quản lý tài nguyên vùng chứa bằng cách sử dụng một bộ cấu hình đặc biệt. Có thể tìm thấy danh sách đầy đủ các tham số cấu hình vùng chứa trong tài liệu.
Ngoài những hạn chế như limits.read, limits.write chúng tôi cũng có thể giới hạn dung lượng ổ đĩa mà vùng chứa tiêu thụ (chỉ hoạt động với ZFS hoặc BTRFS):
lxc config device set alp root size=2GB
Sau khi cài đặt, trong tham số devices.root.size Chúng tôi có thể xác minh giới hạn đã đặt:
lxc config show alp
...
devices:
root:
path: /
pool: hddpool
size: 2GB
type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""
Để xem hạn ngạch đĩa đã sử dụng, chúng ta có thể nhận được từ lệnh 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
Mặc dù thực tế là chúng tôi đã đặt giới hạn cho thiết bị gốc của vùng chứa là 2GB, nhưng các tiện ích hệ thống như df sẽ không thấy hạn chế này. Để làm điều này, chúng tôi sẽ tiến hành một thử nghiệm nhỏ và tìm hiểu cách thức hoạt động của nó.
Hãy tạo 2 container mới giống hệt nhau trong cùng một Bể chứa (hddpool):
lxc exec alp1 -- ls -lh
total 1000M
-rw-r--r-- 1 root root 1000.0M Mar 27 10:16 file.img
Nếu chúng ta nhìn vào vùng chứa thứ hai, kiểm tra sự tồn tại của một tệp ở cùng một vị trí, thì tệp này sẽ không ở đó, điều này như mong đợi, vì các vùng chứa được tạo riêng Khối lượng lưu trữ trong cùng một Bể chứa:
lxc exec alp2 -- ls -lh
total 0
Nhưng hãy so sánh những giá trị nó tạo ra df trên một và container khác:
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% /
...
Thiết bị /dev/loop1 được gắn làm phân vùng gốc là Bể chứa mà những thùng chứa này sử dụng, vì vậy chúng chia sẻ dung lượng của nó giữa hai thùng chứa.
LXD có khả năng tạo ảnh chụp nhanh và khôi phục trạng thái vùng chứa từ chúng.
Để tạo ảnh chụp nhanh, hãy chạy lệnh sau:
lxc snapshot alp snapshot1
Đội lxc snapshot không có chìa khóa list, do đó, để xem danh sách các ảnh chụp nhanh, bạn cần sử dụng lệnh hiển thị thông tin chung về vùng chứa:
lxc info alp
...
...
Snapshots:
snapshot1 (taken at 2020/04/08 18:18 UTC) (stateless)
Bạn có thể khôi phục vùng chứa từ ảnh chụp nhanh bằng lệnh lxc restore chỉ định vùng chứa sẽ thực hiện khôi phục và bí danh ảnh chụp nhanh:
lxc restore alp snapshot1
Lệnh sau được sử dụng để xóa ảnh chụp nhanh. Xin lưu ý rằng cú pháp lệnh không giống với tất cả các cú pháp khác; ở đây bạn cần chỉ định dấu gạch chéo lên sau tên vùng chứa. Nếu dấu gạch chéo bị bỏ qua thì lệnh xóa ảnh chụp nhanh được hiểu là lệnh xóa vùng chứa!
lxc delete alp/snapshot1
Trong ví dụ trên, chúng ta đã xem xét cái gọi là ảnh chụp nhanh không trạng thái. LXD có một loại ảnh chụp nhanh khác - trạng thái, giúp lưu trạng thái hiện tại của tất cả các quy trình trong vùng chứa. Có một số tính năng thú vị và hữu ích liên quan đến ảnh chụp nhanh có trạng thái.