Cách xử lý container LXC thích hợp trên btrfs


11

Hãy nói rằng chúng tôi có một máy chủ được cài đặt lxc và một thùng chứa lxc được sử dụng làm cơ sở img /var/lib/lxc/ubuntu_base. Để đơn giản, hãy quên các thay đổi cấu hình sau khi sao chép cơ sở img.

một số người đề xuất sử dụng subvolume và ảnh chụp nhanh để tạo các thùng chứa mới, nhưng người ta có thể dễ dàng thực hiện cp --reflink với kết quả tương tự.

Vì vậy, cách propper (hoặc tốt hơn) để quản lý nhiều container là gì?

  • ảnh chụp nhanh

Cách này có vẻ tốt nhất, nhưng các lệnh như lxc-hủy sẽ không hoạt động vì nó sẽ không thể xóa thư mục.

btrfs subvolume snapshot /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • cp với phản xạ

Tôi không chắc chắn nếu có bất kỳ sự khác biệt hiệu suất giữa điều này hoặc ảnh chụp nhanh

cp --reflink=always /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • hoặc Có cách nào khác tốt hơn để làm điều này mà tôi không biết.

biên tập:

Một điều tôi đã thấy với tùy chọn phản xạ là, bạn không thể xóa vùng chứa cơ sở nếu những người khác đang chạy, bởi vì /proc/devđược gắn kết và không bao giờ thay đổi, vì tham chiếu luôn giống nhau. Nhưng việc tắt tất cả các thùng chứa coppied dường như có ích.


Tôi đã sử dụng tính năng chụp nhanh btrfs để tạo các thùng chứa mới - và nó hoạt động tốt (cung cấp khá nhanh, v.v.). Tuy nhiên, btrfs có bộ đệm trang per-subvolume - vì vậy mặc dù sử dụng snapshot là nhanh / không gian đĩa hiệu quả, nhưng cuối cùng bạn có thể có nhiều bản sao của cùng một bộ nhớ nhị phân.
David Goodwin

Câu trả lời:


2

Tôi đang dùng Ubuntu LTS 14 và chỉ chạy những thứ sau (lần đầu tiên thậm chí) và nó hoạt động như một cơ duyên:

lxc-stop -n ubuntu_base
lxc-clone -o ubuntu_base -n ubuntu_base_c1 -s
lxc-start -n ubuntu_base_c1 -d # make changes if needed
lxc-stop -n ubuntu_base_c1
lxc-snapshot -n ubuntu_base_c1

Sử dụng -s với lxc-clone sẽ chụp ảnh nhanh nếu cửa hàng sao lưu là btrfs (trong trường hợp của bạn).

Xác minh bản sao / ảnh chụp mới với

lxc-ls -f
btrfs subvolume list /var/lib/lxc

Mong rằng sẽ giúp!


1
Lưu ý rằng những ngày này bạn cần chỉ định btrfs là cửa hàng sao lưu khi bạn chạy lxc-tạo hoặc lxc-clone sẽ cung cấp cho bạn một lớp phủ thay thế.
Lester Cheung

Để chỉ tạo một thùng chứa "ánh sáng" mới, có vẻ như hai dòng đầu tiên là đủ (lxc-stop và lxc-clone), nhờ vào -stùy chọn và ba dòng cuối cùng (lxc_start, lxc_stop, lxc_snapshot) chỉ là một quá trình trợ giúp để quản lý diễn biến container trong tương lai. Nó có đúng không ?
lalebarde

3

nếu bạn sẽ sử dụng các subvolume btrfs cho lxc, bạn cần thêm tùy chọn user_subvol_rm_allowedtrong /etc/fstab. Ví dụ được trích xuất từ ​​một tệp fstab:

UUID=XXXXXXXXXXXXXXXXXXXXXX / btrfs subvol=@,user_subvol_rm_allowed,defaults 0 0

tùy chọn sẽ cho phép bạn có thể loại bỏ subvol mà không cần root, chỉ người dùng bình thường. Khả năng này được sử dụng bởi lxc khi các ảnh chụp nhanh đi vào subvolume btrfs


3

Đoán nó phụ thuộc vào hình ảnh cơ sở của bạn lớn như thế nào. Tôi có thể lxc - tạo một container mới và sử dụng Salt / Puppet, v.v. để cung cấp các container của tôi và chỉ lxc-clone cho các container tương đối lớn hơn (ví dụ: các container dev có nhiều công cụ được cài đặt và định cấu hình).

Lưu ý rằng lxc-clone sẽ sử dụng cùng một cửa hàng sao lưu như nguồn. Vì vậy, để sử dụng subvolume, bạn sẽ cần tạo các thùng chứa của mình với "-B btrfs". Ví dụ:

lxc-create -B btrfs -n mycontainer -t ubuntu

Sau đó sao chép nó với:

lxc-clone -s mycontainer mynewcontainer

Trong trường hợp bạn đang sử dụng zfs để lưu trữ các thùng chứa của mình, có một --zfsroottùy chọn bổ sung cho lxc-tạo để bạn có thể chọn một zpool khác với "tank" mặc định. Ví dụ:

lxc-create -B zfs --zfsroot=data/lxc

Chia sẻ và tận hưởng!


Tôi đang trên debian wheezy với BTRFS. Dường như tùy chọn -B btrfsđược sử dụng theo mặc định - Tôi giả sử vì debian của tôi được thiết lập với BTRFS. Trên thực tế, tôi đã tạo ra thùng chứa đầu tiên của mình (một tiếng khò khò 32 bit) mà không có tùy chọn này và một subvolume đã được tạo cho nó.
lalebarde

@lalebarde có lẽ là -B besthành động nhưng tốt để biết!
Lester Cheung
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.