sự khác biệt giữa nhóm và không gian tên


83

Gần đây tôi đã bắt đầu học docker và có vẻ như hầu hết các công việc nặng nhọc được thực hiện bởi nhân linux, sử dụng không gian tên và nhóm cgroup.

Một số điều tôi thấy khó hiểu là:

  1. Sự khác biệt giữa không gian tên và cgroup là gì? Các trường hợp sử dụng khác nhau mà họ giải quyết là gì?

  2. Docker đã thực hiện điều gì trên đầu trang này để trở nên phổ biến?

  3. Tôi muốn biết nội dung của các tính năng này và cách chúng được triển khai.


Câu trả lời:


104

Các liên kết thích hợp cho hai khái niệm đó đã được cố định trong PR 14307 :

Dưới mui xe, Docker được xây dựng dựa trên các thành phần sau:

Các nhómnamespaceskhả năng của nhân Linux

Với:

  • cgroup : Control Groups cung cấp một cơ chế để tổng hợp / phân chia các nhóm nhiệm vụ và tất cả những đứa con trong tương lai của chúng, thành các nhóm phân cấp có hành vi chuyên biệt.
  • không gian tên : bao bọc tài nguyên hệ thống toàn cục trong một phần trừu tượng làm cho nó xuất hiện với các tiến trình trong không gian tên mà chúng có phiên bản riêng biệt của tài nguyên chung.

Nói ngắn gọn:

  • Cgroups = giới hạn số lượng bạn có thể sử dụng;
  • namespaces = giới hạn những gì bạn có thể thấy (và do đó sử dụng)

Xem thêm tại " Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic " của Jérôme Petazzoni .

Nhóm liên quan đến việc đo lường và giới hạn tài nguyên:

  • ký ức
  • CPU
  • khối I / O
  • mạng lưới

Không gian tên cung cấp các quy trình với cái nhìn riêng của chúng về hệ thống

Nhiều không gian tên:

  • pid
  • mạng lưới
  • mnt
  • uts
  • ipc
  • user: user mà nó sắp hoàn thành thử nghiệm trong docker 1.10
    (đang tiến hành ánh xạ lại từng phiên bản daemon của gốc vùng chứa cho người dùng không có đặc quyền: PR 12648 : xem thiết kế của nó )

Cảm ơn. Được chrootdựa trên một số namespace? Có thể chrootđược thay thế bằng một số không gian tên?
Tim

1
Không, chroot không dựa trên không gian tên: hãy xem itnext.io/… . Hơn ba năm sau, hãy nhớ rằng Docker mới (19.03, vẫn đang trong giai đoạn thử nghiệm) có thể chạy dưới dạng rootless: github.com/moby/moby/blob/… . Và có thể hiển thị tài nguyên trên không gian tên máy chủ: github.com/moby/moby/pull/38913
VonC

Có thể chrootđược thay thế bằng một số không gian tên?
Tim

1
@Tim Không phải tự nhiên. Có thể với pivot_root? ( unix.stackexchange.com/a/456777/7490 ) Xem thêm github.com/vincentbernat/jchroot
VonC


5

cgroups giới hạn tài nguyên mà một quy trình hoặc tập hợp các quy trình có thể sử dụng các tài nguyên này có thể là CPU, Bộ nhớ, Mạng I / O hoặc quyền truy cập vào hệ thống tệp trong khi không gian tên hạn chế khả năng hiển thị của nhóm quy trình đối với phần còn lại của hệ thống.

truy cập để biết thêm chi tiết Cách các nhóm nhân Linux và không gian tên đã tạo nên các vùng chứa hiện đại


2

Cgroups (nhóm kiểm soát) thực hiện quản lý tài nguyên.
Nó xác định bao nhiêu tài nguyên máy chủ sẽ được cấp cho vùng chứa.

ví dụ: - chúng tôi xác định các tài nguyên trong tệp docker-soạn yaml để tạo các dịch vụ như:

tài nguyên:
  Hạn mức:
    cpus: "0,1" (100 millicore)
    bộ nhớ: 50 triệu

Ở đây, trong ví dụ này, chúng tôi yêu cầu các nhóm phân bổ một cách rõ ràng các tài nguyên này cho vùng chứa cụ thể.


Không gian tên : cung cấp cách ly quy trình, cách ly hoàn toàn vùng chứa, hệ thống tệp riêng biệt.


Có 6 loại không gian tên:
1. mount ns - dành cho hệ thống tệp.
2. UTS (Chia sẻ thời gian duy nhất) ns- kiểm tra các tên máy chủ khác nhau của các vùng chứa đang chạy
3. IPC ns - giao tiếp giữa các quá trình
4. Mạng ns- quản lý cấp phát ip khác nhau cho các vùng chứa khác nhau
5. PID ns - cách ly id quy trình
6. người dùng ns- tên người dùng khác nhau (uid)

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.