Hi ae, Hôm nay tôi lại quay lại với ae, với cái blog này :). Đây có thể là 1 hoặc 1 số bài (dĩ nhiên là nếu tôi có nhiều thứ hay ho để viết) xung quanh (Docker) container. Vẫn như thường lệ tôi sẽ không đi vào việc cài và dùng nó ntn vì cái này nhiều chỗ viết quá rồi, mục tiêu của tôi trong những bài viết này là insight Docker container tức là tìm hiểu các cơ chế/nguyên lý ẩn sâu bên trong/base lên công nghệ container nói chung và Docker nói riêng :). Hy vọng ae có hứng thú.

Theo trang chủ của dự án, họ ghi khá tóm tắt về những gì là base cho docker Nội dung người lớn. Click để hiển thị. Nhưng các bạn không cần đọc đâu, tôi kiếm được cái hình này dễ nhìn + dễ hiểu hơn này.

Intro insight

Dĩ nhiên tôi sẽ làm rõ từng phần một trong cái hình kia nếu đủ kiên nhẫn ae ạ :)

CGroup isolate - cơ chế isolate/limit tài nguyên trên linux,

Một trong những tính năng mà tôi thấy khá thú vị ở Docker container đó là khả năn isolate và limit tài nguyên sử dụng. Hãy thử tượng tưởng bạn có rất nhiều Container trên 1 máy vật lý, bỗng 1 ngày 1 trong số đó hoạt động không như ý muốn chiếm hết luôn tài nguyên toàn bộ làm hệ thống treo dịch vụ bị gián đoạn :’(. Để giải quyết việc này Docker cung cấp cho ta khả năng giới hạn các tài nguyên cho mỗi container, dùng hết container sẽ tự động restart hoặc shut off theo tùy chỉnh của ta. Cơ chế này hoặt động dựa trên tính năng CGroup trong kernel của linux - K0 rõ các ae đã từng nghe chưa?

Phải rồi CGroup chính là tính năng của kernel mà hôm nay tôi giới thiệu với ae.

0. Wikipedia

Theo wikipedia “cgroups (từ viết tắt của control groups) là một thuộc tính của kernel linux có khả năng giới hạn (limits), accounts for, cô lập (isolates) các tài nguyên sử dụng (CPU, memory, disk I/O, network, etc.) của một hoặc một nhóm process”.

Tính năng này nghe đâu được phát triển bởi một nhóm nhân viên từ google từ tận những năm 2006 (tức là cách đây 13 năm) trong dự án container :) được merge vào nhân linux 2.6. Điều này cho thấy rằng công nghệ container - cái mới nổi gần đây mà ae ta sử dụng thực ra đã được nghiên cứu và sử dụng ở Google từ rất lâu rồi và ae ta đi sau họ hàng thập kỷ. Khiếp không,

The hell

Vài use case mà ae có thể sử dụng CGroup (Cái này chưa check nha ae, thấy người ta nói vậy):

  • Resource limiting: Limit tài nguyên sử dụng
  • Prioritization: Đặt quyền ưu tiên cho từng nhóm. Dựa vào đặc quyền này mà tính toàn độ ưu tiên sử dụng khi tài nguyên xài k0 đủ cho toàn bộ.
  • Accounting: Tính toán lượng sử dụng của group.
  • Control: Nhóm process nằm trong một Cgroup có thể bị frezee, stop hoặc restart :) một phát.

1. Đặc tính của cgroup

Dưới đây tôi tóm tắt vài điểm chính nhất, ngắn gọn nhất của cgroup.

Cgroup list

  • CGgroup này có thể là một hoặc một tập process được wrapper lại và chịu một rule limit.

  • CGroup có tính thừa kế tức là các sub-group sẽ chịu sự quản lý của parent-group.

  • Ae có thể acess và quản lý cgroup bằng cả cách trực tiếp (làm thủ công quay tay - wei tei trên hệ thống) và gián tiếp - Có thẻ là lxc, libvirt (ae xài Ops nghe quen không :d) or Docker hoặc dùng thư viện để thao tác thông qua lib (libcgroup) dành cho các ae hardcore thích lập trình. CGroup thật là quá dễ dãi đi, không như tôi ae ạ.

2. Demo CGroup

Okey đã qua cái phần nhàm chán lý thuyết, giờ ae thử tự tay tạo cái cgroup xem coi nó mặt mũi ntn nào? để demo tôi dùng cả 2 cách trực tiếp và gián tiếp:

3. Insight Docker Container - CGroup

Nguồn tham khảo

Linkin.com

docker.com