Dùng LXC container để giới hạn tài nguyên tính toán (Phần 1)
LXC
3
computing
4
Linux
77
White

Bùi Hồng Hà viết ngày 06/08/2015

Giới thiệu

alt text

LXC (Linux Container) là môi trường ảo ở tầng hệ điều hành cho phép nhiều hệ thống Linux chạy trên cùng một máy vật lý Linux.

Linux Kernel, từ phiên bản 2.6.24 trở đi, cung cấp một tính năng gọi là cgroups cho phép giới hạn và xếp độ ưu tiên tài nguyên tính toán (CPU, memory, block I/O, network...) mà không cần phải chạy phần mềm máy ảo. Ngoài ra cgroups còn có tính năng cô lập hoá namespace, cô lập góc nhìn của ứng dụng về hệ điều hành. Điều này có nghĩa là process trees, networking, user ID, và mounted file system sẽ cô lập riêng cho container.

LXC dựa trên 2 tính năng cgroups trên để tạo ra một môi trường cô lập cho các ứng dụng. LXC không hẳ

Gần đây mình có thử dùng lxc trên môi trường production và thấy lxc có khá nhiều ưu điểm vì vậy mình viết bài này để tổng hợp lại kiến thức lxc cho bản thân và chia sẻ một phần kinh nghiệm cho các bạn đang sử dụng các giải pháp cô lập hoá khác (VMWare, OpenStack, docker...)

★ Về các giải pháp ảo hoá khác, mọi người có thể tham khảo link dưới đây
https://en.wikipedia.org/wiki/Operating-system-level_virtualization#IMPLEMENTATIONS

Cài đặt

Môi trường

  • OS: CentOS 6.6
  • Kernel: 2.6.32-504.16.2.el6.x86_64
  • LXC version: 1.0.7

Phiên bản mới nhất của lxc là lxc-1.1.2. Tuy vậy phiên bản này dùng các tính năng của cgroups của kernel phiên bản mới hơn vì vậy để dùng lxc phiên bản 1.1.x thì bạn phải dùng CentOS 7.x trở đi (với kernel 3.10). Do distro này vẫn còn khá mới, nên để chạy trên môi trường production và đảm bảo tính ổn định mà chọn CentOS 6.6 và LXC 1.0.7.

Bản thân website chính thức của lxc cũng khuyên người dùng sử dụng phiên bản 1.0.x vì phiên bản này được hỗ trợ dài hơi.

Quy trình cài đặt

Ta sẽ cài lxc bản 1.0.7 bằng cách tải source code về, build 1 rpm package và cài lxc qua rpm package.

Cài các package cần thiết

Đối với môi trường runtime (môi trường chạy lxc)

$ yum install libvirt libcgroup
$ service cgconfig start
$ service cgred start
$ chkconfig --level 345 cgconfig on
$ chkconfig --level 345 cgred on

docbook2X là package không có trong thư viện package của CentOS. Tuy vậy ta có thể tải package này từ trang của fedora: https://apps.fedoraproject.org/packages/docbook2X

Đối với môi trường build (build server). Build server có thể cùng với production server.

$ yum install graphviz  libcap-devel graphviz
$ rpm -ivh docbook2x-0.8.8-1.el6.rf.x86_64.rpm

Một điều cần chú ý khi tải docbook2X là phải tải đúng arch (x86_64) và version của OS (CentOS 6)

Build lxc rpm packages

Tải lxc từ trang chính thức. File tải là: lxc-1.0.7.tar.gz

$ mkdir rpmbuild
$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
$ wget https://linuxcontainers.org/downloads/lxc/lxc-1.1.2.tar.gz
$ cp lxc-1.1.2.tar.gz rpmbuild/SOURCES
$ tar xfz lxc-1.1.2.tar.gz
$ cp lxc-1.1.2/lxc.spec rpmbuild/SPECS
$ rpmbuild -ba rpmbuild/SPECS/lxc.spec
Cài lxc

Sau khi đã có lxc package (rpmbuild/RPMS/x86_64/lxc-1.0.7-1.el6.x86_64.rpm, lxc-libs-1.0.7-1.el6.x86_64.rpm) ta tiến hành cài đặt

$ rpm -ivh lxc-libs-1.0.7-1.el6.x86_64.rpm lxc-1.0.7-1.el6.x86_64.rpm

Các binary của lxc sẽ được install vào /usr/bin. Templates sẽ ở /usr/share/lxc/templates/

Các câu lệnh thao tác với container
  • lxc-create: tạo container
  • lxc-start: khởi động container
  • lxc-stop: dừng container
  • lxc-attach: chroot vào rootfs của container và thao tác trên rootfs này.
  • lxc-console: container như 1 linux machine và gắn console vào máy này.
  • lxc-info: thu thập trạng thái của container (tình trạng sử dụng tài nguyên)
  • lxc-cgroup: quản lý control group gắn với container
Tạo thử 1 container

Có rất nhiều template để tạo các hệ điều hành khác nhau ở /usr/share/lxc/templates/

[root@vm01 ~]# ll /usr/share/lxc/templates/
total 336
-rwxr-xr-x 1 root root 10847 Jul 31 13:59 lxc-alpine
-rwxr-xr-x 1 root root 13533 Jul 31 13:59 lxc-altlinux
-rwxr-xr-x 1 root root 10253 Jul 31 13:59 lxc-archlinux
-rwxr-xr-x 1 root root  9897 Jul 31 13:59 lxc-busybox
-rwxr-xr-x 1 root root 28932 Jul 31 13:59 lxc-centos
-rwxr-xr-x 1 root root 10486 Jul 31 13:59 lxc-cirros
-rwxr-xr-x 1 root root 15629 Jul 31 13:59 lxc-debian
-rwxr-xr-x 1 root root 17427 Jul 31 13:59 lxc-download
-rwxr-xr-x 1 root root 47200 Jul 31 13:59 lxc-fedora
-rwxr-xr-x 1 root root 27812 Jul 31 13:59 lxc-gentoo
-rwxr-xr-x 1 root root 13961 Jul 31 13:59 lxc-openmandriva
-rwxr-xr-x 1 root root 13921 Jul 31 13:59 lxc-opensuse
-rwxr-xr-x 1 root root 35445 Jul 31 13:59 lxc-oracle
-rwxr-xr-x 1 root root 11868 Jul 31 13:59 lxc-plamo
-rwxr-xr-x 1 root root  6851 Jul 31 13:59 lxc-sshd
-rwxr-xr-x 1 root root 24284 Jul 31 13:59 lxc-ubuntu
-rwxr-xr-x 1 root root 12401 Jul 31 13:59 lxc-ubuntu-cloud

mình sẽ sử dụng template centos để tạo

$ [root@bbc-vm01 ~]# lxc-create -n test -t /usr/share/lxc/templates/lxc-centos
....
Storing root password in '/var/lib/lxc/test/tmp_root_pass'
Expiring password for user root.
passwd: Success

Container rootfs and config have been created.
Edit the config file to check/enable networking setup.

The temporary root password is stored in:

        '/var/lib/lxc/test/tmp_root_pass'


The root password is set up as expired and will require it to be changed
at first login, which you should do as soon as possible.  If you lose the
root password or wish to change it without starting the container, you
can change it from the host by running the following command (which will
also reset the expired flag):

        chroot /var/lib/lxc/test/rootfs passwd

Ta có thể đổi mã root bằng câu lệnh chroot như hướng dẫn.

Sau khi tạo container, dùng lxc-ls để kiểm tra các container. Dùng lxc-info để kiểm tra tình trạng container và dùng lxc-start để chạy container.

[root@vm01 ~]# lxc-ls
test
[root@vm01 ~]# lxc-info -n test
Name:           test
State:          STOPPED
[root@vm01 ~]#
[root@vm01 ~]#
[root@vm01 ~]# lxc-start -d -n test
[root@vm01 ~]#
[root@vm01 ~]# lxc-info -n test
Name:           test
State:          RUNNING
PID:            14014
CPU use:        0.35 seconds
BlkIO use:      0 bytes
Memory use:     3.58 MiB
Link:           veth8HP8H4
 TX bytes:      670 bytes
 RX bytes:      558 bytes
 Total bytes:   1.20 KiB

Ta có 1 container đang chạy! Ta có thể dùng lxc-console để connect vào container

$ lxc-console -n test

alt text

Sau khi đánh mật khẩu root như bạn cài đặt ban đầu, bạn có 1 môi trường linux, hoàn toàn cô lập với linux host đang chạy lxc.

alt text

Điểm lợi của lxc container

Một số điểm lợi mà mình nhìn thấy được

  • Container hoàn toàn cô lập. Cài đặt, nghịch, phá thoải mái mà không sợ ảnh hưởng đến môi trường khác.
  • Giới hạn được tài nguyên (sẽ giới thiệu ở phần sau)
  • Thao tác với container qua commandline rất dễ hiểu và nhanh chóng.
  • Container nhìn tài nguyên giống hệt như máy host (ví dụ như hình dưới đây máy mình có 12 cores và 64G bộ nhớ. Container hoàn toàn nhìn thấy các thông tin này). Overhead do container gây ra hầu như không đáng kể.

alt text

Kết thúc

Qua bài viết ngắn này, mình giới thiệu qua về công nghệ ảo hoá và cô lập môi trường là lxc (linux container) và hướng dẫn từng bước cách cài đặt, tạo và chạy containers.

Ở các bài viết sau mình sẽ cố gắng đi sâu và cụ thể hơn vào các chi tiết khiến lxc nổi trội: cách cài network, cách giới hạn tài nguyên sử dụng cgroups.

Tham khảo

https://en.wikipedia.org/wiki/LXC
https://linuxcontainers.org/lxc/downloads/
https://en.wikipedia.org/wiki/Operating-system-level_virtualization#IMPLEMENTATIONS
https://wiki.archlinux.org/index.php/Linux_Containers
https://access.redhat.com/articles/1353593

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Bùi Hồng Hà

59 bài viết.
262 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
74 8
Bài viết tổng hợp cơ chế hoạt động của https Chút ít về chữ ký điện tử Chữ ký điện tử là cơ chế bao gồm 3 thuật toán: Thuật toán chọn một khóa...
Bùi Hồng Hà viết gần 3 năm trước
74 8
White
43 7
Giới thiệu Gần đây thấy bản thân chém gió rất nhiều về MapReduce, Hadoop v.v nhưng chưa thấy có bài viết nào tổng hợp + giải thích cụ thể về MapRe...
Bùi Hồng Hà viết 2 năm trước
43 7
White
33 0
Giới thiệu Google là một công ty dẫn đầu về phần mềm xử lý Big Data. Hầu hết các phần mềm xử lý dữ liệu như Hadoop đều có nguồn gốc ý tưởng từ Goo...
Bùi Hồng Hà viết 2 năm trước
33 0
Bài viết liên quan
White
1 0
sudo du sh
t viết gần 2 năm trước
1 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
59 bài viết.
262 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!