LXD là gì?
LXD (phát âm là “Lex-Dee”) là trình quản lý vùng chứa hệ thống được xây dựng trên LXC (Linux Containers) hiện đang được Canonical hỗ trợ. Mục tiêu của LXD là cung cấp trải nghiệm tương tự như máy ảo nhưng thông qua container hóa thay vì ảo hóa phần cứng. So với Docker để phân phối ứng dụng, LXD cung cấp chức năng hệ điều hành gần như đầy đủ với các tính năng bổ sung như ảnh chụp nhanh, di chuyển trực tiếp và quản lý lưu trữ.
Lợi ích chính của LXD là hỗ trợ các container mật độ cao và hiệu suất mà nó mang lại so với máy ảo. Một máy tính có RAM 2GB có thể hỗ trợ đầy đủ nửa tá container. Ngoài ra, LXD chính thức hỗ trợ các hình ảnh container của các bản phân phối Linux chính . Chúng ta có thể chọn bản phân phối Linux và phiên bản để chạy trong container.
Hướng dẫn này trình bày cách cài đặt và thiết lập LXD 3 trên Linode và cách thiết lập máy chủ web Apache trong vùng chứa.
Ghi chú: Để đơn giản, thuật ngữ container được sử dụng trong toàn bộ hướng dẫn này để mô tả các container của hệ thống LXD.
Trước khi bạn bắt đầu
- Hoàn tất hướng dẫn Tạo phiên bản tính toán . Chọn Linode có ít nhất 2GB bộ nhớ RAM, chẳng hạn như Linode 2GB. Chỉ định bản phân phối Ubuntu 19.04. Bạn có thể chỉ định một bản phân phối Linux khác, miễn là có hỗ trợ cho các gói snap (snapd) ; xem Thông tin thêm để biết thêm chi tiết.
- Làm theo hướng dẫn Thiết lập và Bảo mật Phiên bản Compute của chúng tôi để cập nhật hệ thống của bạn. Bạn cũng có thể muốn đặt múi giờ, cấu hình tên máy chủ, tạo tài khoản người dùng giới hạn và tăng cường quyền truy cập SSH.
Cấu hình Hỗ trợ Gói Snap
LXD có sẵn dưới dạng gói Debian trong các phiên bản hỗ trợ dài hạn (LTS) của Ubuntu, chẳng hạn như Ubuntu 18.04 LTS. Đối với các phiên bản Ubuntu và các bản phân phối khác, LXD có sẵn dưới dạng gói snap. Các gói snap là các gói chung vì có một tệp gói duy nhất hoạt động trên bất kỳ bản phân phối Linux nào được hỗ trợ. Xem phần Thông tin thêm để biết thêm chi tiết về gói snap là gì, các bản phân phối Linux nào được hỗ trợ và cách thiết lập gói này.
1.Xác minh rằng snap support được cài đặt đúng. Lệnh sau đây cho thấy không có gói snap nào được cài đặt hoặc một số đã được cài đặt.
snap list
No snaps are installed yet. Try 'snap install hello-world'.
2.Xem chi tiết về gói snap LXD lxd
. Đầu ra bên dưới cho thấy rằng, hiện tại, phiên bản LXD mới nhất nằm 3.12
trong kênh mặc định stable
. Kênh này thường xuyên được cập nhật với các tính năng mới. Ngoài ra còn có các kênh khác như kênh 3.0/stable
có phiên bản LXD LTS (được hỗ trợ cùng với Ubuntu 18.04, cho đến năm 2023) và 2.0/stable
kênh (được hỗ trợ cùng với Ubuntu 16.04, cho đến năm 2021). Chúng tôi sẽ sử dụng phiên bản LXD mới nhất từ kênh mặc định stable
.
snap info lxd
name: lxd
summary: System container manager and API
publisher: Canonical✓
contact: https://github.com/lxc/lxd/issues
license: Apache-2.0
description: |
**LXD is a system container manager**
With LXD you can run hundreds of containers of a variety of Linux
distributions, apply resource limits, pass in directories, USB devices
or GPUs and setup any network and storage you want.
LXD containers are lightweight, secure by default and a great
alternative to running Linux virtual machines.
**Run any Linux distribution you want**
Pre-made images are available for Ubuntu, Alpine Linux, ArchLinux,
CentOS, Debian, Fedora, Gentoo, openSUSE and more.
A full list of available images can be [found
here](https://images.linuxcontainers.org)
Can't find the distribution you want? It's easy to make your own images
too, either using our `distrobuilder` tool or by assembling your own image
tarball by hand.
**Containers at scale**
LXD is network aware and all interactions go through a simple REST API,
making it possible to remotely interact with containers on remote
systems, copying and moving them as you wish.
Want to go big? LXD also has built-in clustering support,
letting you turn dozens of servers into one big LXD server.
**Configuration options**
Supported options for the LXD snap (`snap set lxd KEY=VALUE`):
- criu.enable: Enable experimental live-migration support [default=false]
- daemon.debug: Increases logging to debug level [default=false]
- daemon.group: Group of users that can interact with LXD [default=lxd]
- ceph.builtin: Use snap-specific ceph configuration [default=false]
- openvswitch.builtin: Run a snap-specific OVS daemon [default=false]
[Documentation](https://lxd.readthedocs.io)
snap-id: J60k4JY0HppjwOjW8dZdYc8obXKxujRu
channels:
stable: 3.12 2019-04-16 (10601) 56MB -
candidate: 3.12 2019-04-26 (10655) 56MB -
beta: ↑
edge: git-570aaa1 2019-04-27 (10674) 56MB -
3.0/stable: 3.0.3 2018-11-26 (9663) 53MB -
3.0/candidate: 3.0.3 2019-01-19 (9942) 53MB -
3.0/beta: ↑
3.0/edge: git-eaa62ce 2019-02-19 (10212) 53MB -
2.0/stable: 2.0.11 2018-07-30 (8023) 28MB -
2.0/candidate: 2.0.11 2018-07-27 (8023) 28MB -
2.0/beta: ↑
2.0/edge: git-c7c4cc8 2018-10-19 (9257) 26MB -
3.Cài đặt lxd
gói snap. Chạy lệnh sau để cài đặt gói snap cho LXD.
sudo snap install lxd
lxd 3.12 from Canonical✓ installed
Bạn có thể xác minh rằng gói snap đã được cài đặt bằng cách chạy snap list
lại. core
Gói snap là điều kiện tiên quyết cho bất kỳ hệ thống nào có hỗ trợ gói snap. Khi bạn cài đặt gói snap đầu tiên, core
nó sẽ được cài đặt và chia sẻ giữa tất cả các gói snap khác sẽ được cài đặt trong tương lai.
snap list
Name Version Rev Tracking Publisher Notes
core 16-2.38 6673 stable canonical✓ core
lxd 3.12 10601 stable canonical✓ -
Khởi tạo LXD
1.Thêm người dùng Unix không phải root vào lxd
nhóm:
sudo usermod -a -G lxd username
1.Ghi chúBằng cách thêm tài khoản người dùng Unix không phải root vào lxd
nhóm, bạn có thể chạy bất kỳ lxc
lệnh nào mà không cần thêm sudo
. Nếu không có phần bổ sung này, bạn sẽ cần phải thêm sudo
vào mỗi lxc
lệnh.
2.Bắt đầu phiên SSH mới để thay đổi trước đó có hiệu lực. Ví dụ: đăng xuất và đăng nhập lại.
3.Kiểm tra dung lượng đĩa trống khả dụng:
df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/sda 49G 2.0G 45G 5% /
Trong trường hợp này có 45GB dung lượng đĩa trống. LXD yêu cầu ít nhất 15GB dung lượng cho nhu cầu lưu trữ của container. Chúng tôi sẽ phân bổ 15GB dung lượng cho LXD, để lại 30GB dung lượng trống cho nhu cầu của máy chủ.
4.Chạy lxd init
để khởi tạo LXD:
sudo lxd init
Bạn sẽ được nhắc nhiều lần trong quá trình khởi tạo. Chọn mặc định cho tất cả các tùy chọn.
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]:
Name of the storage backend to use (btrfs, ceph, dir, lvm, zfs) [default=zfs]:
Create a new ZFS 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]:
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]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
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]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
Máy chủ web Apache với LXD
Phần này sẽ tạo một container, cài đặt máy chủ web Apache và thêm iptables
các quy tắc phù hợp để đưa ra phiên bản sau 80.
1.Khởi chạy một container mới:
lxc launch ubuntu:18.04 web
2.Cập nhật danh sách gói trong container.
lxc exec web -- apt update
3.Cài đặt Apache trong vùng chứa LXD.
lxc exec web -- apt install apache2
4.Lấy một vỏ trong thùng chứa LXD.
lxc exec web -- sudo --user ubuntu --login
5.Chỉnh sửa trang web mặc định cho Apache để tham chiếu đến việc nó chạy bên trong vùng chứa LXD.
sudo nano /var/www/html/index.html
Đổi dòng It works!
(dòng số 224) thành It works inside a LXD container!
. Sau đó, lưu và thoát.
6.Thoát trở lại máy chủ. Chúng tôi đã thực hiện tất cả các thay đổi cần thiết cho vùng chứa.
exit
7.Thêm thiết bị proxy LXD để chuyển hướng kết nối từ internet đến cổng 80 (HTTP) trên máy chủ đến cổng 80 tại vùng chứa này.
sudo lxc config device add web myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80
Ghi chú: Trong các phiên bản LXD gần đây, bạn cần chỉ định địa chỉ IP (chẳng hạn như 127.0.0.1 ) thay vì tên máy chủ (chẳng hạn như localhost ). Nếu vùng chứa của bạn đã có thiết bị proxy sử dụng tên máy chủ, bạn có thể chỉnh sửa cấu hình vùng chứa để thay thế bằng địa chỉ IP bằng cách chạy lxc config edit web
.
8.Từ máy tính cục bộ của bạn, hãy điều hướng đến địa chỉ IP công khai của Linode trong trình duyệt web. Bạn sẽ thấy trang Apache mặc định:
Các lệnh LXD phổ biến
Liệt kê tất cả các container:
lxc list
To start your first container, try: lxc launch ubuntu:18.04
+------+-------+------+------+------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+-------+------+------+------+-----------+
Liệt kê tất cả các kho lưu trữ hình ảnh container có sẵn:
lxc remote list
+-----------------+------------------------------------------+---------------+-------------+--------+--------+
| NAME | URL | PROTOCOL | AUTH TYPE | PUBLIC | STATIC |
+-----------------+------------------------------------------+---------------+-------------+--------+--------+
| images | https://images.linuxcontainers.org | simplestreams | none | YES | NO |
+-----------------+------------------------------------------+---------------+-------------+--------+--------+
| local (default) | unix:// | lxd | file access | NO | YES |
+-----------------+------------------------------------------+---------------+-------------+--------+--------+
| ubuntu | https://cloud-images.ubuntu.com/releases | simplestreams | none | YES | YES |
+-----------------+------------------------------------------+---------------+-------------+--------+--------+
| ubuntu-daily | https://cloud-images.ubuntu.com/daily | simplestreams | none | YES | YES |
+-----------------+------------------------------------------+---------------+-------------+--------+--------+
Kho lưu trữ ubuntu
có các hình ảnh chứa của các phiên bản Ubuntu. Kho images
lưu trữ có các hình ảnh chứa của nhiều bản phân phối Linux khác nhau. Có ubuntu-daily
các hình ảnh chứa hàng ngày để sử dụng cho mục đích thử nghiệm. local
Kho lưu trữ là máy chủ LXD mà chúng tôi vừa cài đặt. Nó không công khai và có thể được sử dụng để lưu trữ các hình ảnh chứa của riêng bạn.
Liệt kê tất cả các hình ảnh container có sẵn từ kho lưu trữ:
lxc image list ubuntu:
+------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE |
+------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+
| b (11 more) | 5b72cf46f628 | yes | ubuntu 18.04 LTS amd64 (release) (20190424) | x86_64 | 180.37MB | Apr 24, 2019 at 12:00am (UTC) |
+------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+
| c (5 more) | 4716703f04fc | yes | ubuntu 18.10 amd64 (release) (20190402) | x86_64 | 313.29MB | Apr 2, 2019 at 12:00am (UTC) |
+------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+
| d (5 more) | faef94acf5f9 | yes | ubuntu 19.04 amd64 (release) (20190417) | x86_64 | 322.56MB | Apr 17, 2019 at 12:00am (UTC) |
+------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+
.....................................................................
Ghi chú: Hai cột đầu tiên cho bí danh và dấu vân tay cung cấp một mã định danh có thể được sử dụng để chỉ định hình ảnh chứa khi khởi chạy nó.
Đoạn mã đầu ra hiển thị các hình ảnh container Ubuntu phiên bản 18.04 LTS, 18.10 và 19.04. Khi tạo một container, chúng ta chỉ có thể chỉ định bí danh ngắn. Ví dụ, ubuntu:b
có nghĩa là kho lưu trữ là ubuntu
và hình ảnh container có bí danh ngắn b
(đối với bionic , tên mã của Ubuntu 18.04 LTS).
Tìm hiểu thêm thông tin về hình ảnh container:
lxc image info ubuntu:b
Fingerprint: 5b72cf46f628b3d60f5d99af48633539b2916993c80fc5a2323d7d841f66afbe
Size: 180.37MB
Architecture: x86_64
Public: yes
Timestamps:
Created: 2019/04/24 00:00 UTC
Uploaded: 2019/04/24 00:00 UTC
Expires: 2023/04/26 00:00 UTC
Last used: never
Properties:
release: bionic
version: 18.04
architecture: amd64
label: release
serial: 20190424
description: ubuntu 18.04 LTS amd64 (release) (20190424)
os: ubuntu
Aliases:
- 18.04
- 18.04/amd64
- b
- b/amd64
- bionic
- bionic/amd64
- default
- default/amd64
- lts
- lts/amd64
- ubuntu
- amd64
Cached: no
Auto update: disabled
Đầu ra hiển thị chi tiết của hình ảnh container bao gồm tất cả các bí danh có sẵn. Đối với Ubuntu 18.04 LTS, chúng ta có thể chỉ định b
(đối với bionic
, tên mã của Ubuntu 18.04 LTS) hoặc bất kỳ bí danh nào khác.
Khởi chạy một container mới có tên mycontainer
:
lxc launch ubuntu:18.04 mycontainer
Creating mycontainer
Starting mycontainer
Kiểm tra danh sách container để đảm bảo container mới đang chạy:
lxc list
+-------------+---------+-----------------------+---------------------------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------------+---------+-----------------------+---------------------------+------------+-----------+
| mycontainer | RUNNING | 10.142.148.244 (eth0) | fde5:5d27:...:1371 (eth0) | PERSISTENT | 0 |
+-------------+---------+-----------------------+---------------------------+------------+-----------
Thực hiện các lệnh cơ bản trong mycontainer
:
lxc exec mycontainer -- apt update
lxc exec mycontainer -- apt upgrade
Ghi chú: Các ký tự này --
hướng dẫn lxc
lệnh không phân tích bất kỳ tham số dòng lệnh nào nữa.
Mở phiên shell trong mycontainer
:
lxc exec mycontainer -- sudo --login --user ubuntu
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
ubuntu@mycontainer:~$
Ghi chú: Theo mặc định, ảnh container Ubuntu có tài khoản không phải root với tên người dùng ubuntu
. Tài khoản này có thể sử dụng sudo
và không yêu cầu mật khẩu để thực hiện các tác vụ quản trị.Lệnh này sudo
cung cấp thông tin đăng nhập vào tài khoản hiện có ubuntu
.
Xem nhật ký container:
lxc info mycontainer --show-log
Dừng container:
lxc stop mycontainer
Tháo hộp đựng:
lxc delete mycontainer
Ghi chú: Cần phải dừng một container trước khi có thể xóa nó.
Xử lý sự cố
Lỗi “unix.socket: connect: kết nối bị từ chối”
Khi bạn chạy bất kỳ lxc
lệnh nào, bạn sẽ nhận được lỗi sau:
lxc list
Error: Get http://unix.socket/1.0: dial unix /var/snap/lxd/common/lxd/unix.socket: connect: connection refused
Điều này xảy ra khi dịch vụ LXD hiện không chạy. Theo mặc định, dịch vụ LXD sẽ chạy ngay khi được cấu hình thành công. Xem Khởi tạo LXD để cấu hình LXD.
Lỗi “unix.socket: connect: permission denied”
Khi bạn chạy bất kỳ lxc
lệnh nào, bạn sẽ nhận được lỗi sau:
lxc lis
Error: Get http://unix.socket/1.0: dial unix /var/snap/lxd/common/lxd/unix.socket: connect: permission denied
Điều này xảy ra khi tài khoản người dùng bị giới hạn của bạn không phải là thành viên của lxd
nhóm hoặc bạn không đăng xuất và đăng nhập lại để tư cách thành viên nhóm mới lxd
được cập nhật.
Nếu tài khoản người dùng của bạn là ubuntu
, lệnh sau sẽ hiển thị liệu bạn có phải là thành viên của lxd
nhóm hay không:
groups ubuntu
ubuntu : ubuntu sudo lxd
Trong ví dụ này, chúng ta là thành viên của lxd
nhóm và chúng ta chỉ cần đăng xuất và đăng nhập lại. Nếu bạn không phải là thành viên của nhóm lxd
, hãy xem Khởi tạo LXD để biết cách biến tài khoản giới hạn của bạn thành thành viên của lxd
nhóm.
Các bước tiếp theo
Nếu bạn định sử dụng một trang web duy nhất, thì một thiết bị proxy duy nhất đến vùng chứa trang web sẽ đủ. Nếu bạn định sử dụng nhiều trang web, bạn có thể cài đặt máy chủ ảo bên trong vùng chứa trang web. Nếu thay vào đó, bạn muốn thiết lập nhiều trang web trên vùng chứa riêng của chúng, thì bạn sẽ cần thiết lập proxy ngược trong một vùng chứa. Trong trường hợp đó, thiết bị proxy sẽ chuyển hướng đến vùng chứa proxy ngược để chuyển hướng kết nối đến các vùng chứa trang web riêng lẻ.
Thông tin thêm
Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.
- Gói snap là gì
- Cài đặt snapd
- Giới thiệu LXD
- Chuỗi bài đăng trên blog về LXD 2.0
- Cộng đồng hỗ trợ LXD
- Hãy thử LXD trực tuyến
- Cài đặt Proxy ngược NGINX
Nguồn: https://www.linode.com/docs/guides/beginners-guide-to-lxd/