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. 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, quản lý lưu trữ, v.v.

Lợi ích chính của LXD là mật độ container cao mà nó có thể hỗ trợ 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ợ 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 thiết lập Linode để hoạt động với LXD, cách LXD hoạt động trong thực tế và cách khắc phục các sự cố thường gặp.

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

Trước khi bạn bắt đầu

  1. Nếu bạn chưa thực hiện, hãy tạo một tài khoản Linode và Compute Instance. Xem hướng dẫn Bắt đầu với Linode và Tạo Compute Instance của chúng tôi .
  2. 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.

Gắn khối lượng lưu trữ

Khi thiết lập LXD, bạn có thể lưu trữ dữ liệu container trong một ổ đĩa ngoài (chẳng hạn như Block Storage Volume) hoặc trong một Đĩa được gắn vào Linode của bạn.

Khối lượng lưu trữ khối

  1. Làm theo hướng dẫn Xem, Tạo và Xóa Khối lưu trữ và tạo một khối lưu trữ có kích thước ít nhất là 20GB và đính kèm vào Linode của bạn. Ghi lại tên thiết bị và đường dẫn đến Khối lưu trữ.Quan trọngKhông định dạng ổ đĩa và không thêm nó vào /etc/fstab.Thêm một ổ đĩa cho bộ nhớ đĩa
  2. Chỉnh sửa Hồ sơ cấu hình của bạn và trong Cài đặt khởi động, hãy chọn GRUB 2 làm hạt nhân của bạn. Xem Chạy hạt nhân phân phối trên KVM Linode để biết thêm thông tin.
  3. Khởi động lại Linode của bạn từ Linode Manager.

Đĩa

  1. Trong Linode Manager, tìm phần Disks và nhấp vào Create a new disk .Tạo một đĩa LinodeGhi chúNếu đĩa phân phối Linode của bạn đã được phân bổ 100% dung lượng đĩa khả dụng, bạn sẽ cần phải thay đổi kích thước đĩa trước khi có thể tạo đĩa lưu trữ. Xem Thay đổi kích thước đĩa để biết thêm thông tin.
  2. Chỉnh sửa Hồ sơ cấu hình Linode của bạn. Trong Block Device Assignment , gán đĩa mới của bạn cho /dev/sdc. Ghi lại đường dẫn này, bạn sẽ cần đường dẫn này khi cấu hình LXD ở phần tiếp theo.Phân công thiết bị khối
  3. Trong Cài đặt khởi động, chọn GRUB 2 làm hạt nhân của bạn.
  4. Khởi động lại Linode của bạn từ Linode Manager.

Khởi tạo LXD

1.Cài đặt các gói lxdvà zfsutils-linux:

sudo apt install lxd zfsutils-linux

2.Thêm người dùng Unix của bạn vào lxdnhóm:

sudo usermod -a -G lxd username

3.Bắt đầu phiên SSH mới để thay đổi này có hiệu lực:

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 ngoại trừ Use existing block device? Đối với tùy chọn này, hãy chọn  rồi nhập đường dẫn đến ổ lưu trữ đã thêm ở phần trước.

Lệnh LXD

1.Liệt kê tất cả các container:

lxc list
Generating a client certificate. This may take a minute...
If this is your first time using LXD, you should also run: sudo lxd init
To start your first container, try: lxc launch ubuntu:16.04

+------+-------+------+------+------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+-------+------+------+------+-----------+

2.Liệt kê tất cả các hình ảnh container có sẵn:

lxc image list images:
+---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+
|              ALIAS              | FINGERPRINT  | PUBLIC |               DESCRIPTION                |  ARCH   |   SIZE   |          UPLOAD DATE          |
+---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+
| alpine/3.4 (3 more)             | 39a3bf44c9d8 | yes    | Alpine 3.4 amd64 (20180126_17:50)        | x86_64  | 2.04MB   | Jan 26, 2018 at 12:00am (UTC) |
+---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+
| alpine/3.4/armhf (1 more)       | 9fe7c201924c | yes    | Alpine 3.4 armhf (20170111_20:27)        | armv7l  | 1.58MB   | Jan 11, 2017 at 12:00am (UTC) |
+---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+
| alpine/3.4/i386 (1 more)        | d39f2f2ba547 | yes    | Alpine 3.4 i386 (20180126_17:50)         | i686    | 1.88MB   | Jan 26, 2018 at 12:00am (UTC) |
+---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+
| alpine/3.5 (3 more)             | 5533a5247551 | yes    | Alpine 3.5 amd64 (20180126_17:50)        | x86_64  | 1.70MB   | Jan 26, 2018 at 12:00am (UTC) |
+---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+
| alpine/3.5/i386 (1 more)        | 5e93d5f4cae1 | yes    | Alpine 3.5 i386 (20180126_17:50)         | i686    | 1.73MB   | Jan 26, 2018 at 12:00am (UTC) |
+---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+
| alpine/3.6 (3 more)             | 5010616d9a24 | yes    | Alpine 3.6 amd64 (20180126_17:50)        | x86_64  | 1.73MB   | Jan 26, 2018 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ó.

3.Khởi chạy một container mới có tên mycontainer:

lxc launch ubuntu:16.04 mycontainer
Creating mycontainer
Starting mycontainer

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

5.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 lxclệnh không phân tích bất kỳ tham số dòng lệnh nào nữa.

6.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 sudovà 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 sudocung cấp thông tin đăng nhập vào tài khoản hiện có ubuntu.

7.Xem nhật ký container:

lxc info mycontainer --show-log

8.Dừng container:

lxc stop mycontainer

9.Tháo hộp đựng:

lxc delete mycontainer

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 iptablescá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:16.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.Thêm iptablesquy tắc để hiển thị cổng 80. Khi ai đó kết nối với cổng 80 thông qua địa chỉ IP công khai, quy tắc này sẽ chuyển hướng họ đến cổng 80 của vùng chứa.Bạn sẽ cần phải thay thế your_public_ipvà your_container_ipbằng IP công khai và IP vùng chứa tương ứng trong lệnh này.

PORT=80 PUBLIC_IP=your_public_ip CONTAINER_IP=your_container_ip sudo -E bash -c 'iptables -t nat -I PREROUTING -i eth0 -p TCP -d $PUBLIC_IP --dport $PORT -j DNAT --to-destination $CONTAINER_IP:$PORT -m comment --comment "forward to the Apache2 container"'

5.Duy iptablestrì quy tắc khi khởi động lại bằng cách cài đặt iptables-persistent. Khi được nhắc lưu quy tắc IPv4 và IPv6, hãy nhấp vào  để lưu chúng.

sudo apt install iptables-persistent

6.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:Trang web của máy chủ Apache đang chạy trong một container

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 iptablesquy tắc duy nhất cho vùng chứa trang web sẽ đủ. Nếu bạn định sử dụng nhiều trang web, bạn sẽ cần cài đặt máy chủ web như NGINX và thiết lập proxy ngược trong vùng chứa. iptablesSau đó, quy tắc sẽ chuyển hướng đến vùng chứa này.

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.

Nguồn: https://www.linode.com/docs/guides/access-an-apache-web-server-inside-a-lxd-container/