cgroups ve namespaces arasındaki fark


85

Son zamanlarda docker öğrenmeye başladım ve görünen o ki, ağır işlerin çoğu linux çekirdeği tarafından ad alanları ve cgruplar kullanılarak yapılıyor.

Kafa karıştırıcı bulduğum birkaç şey:

  1. Bir ad alanı ile bir cgroup arasındaki fark nedir? Ele aldıkları farklı kullanım durumları nelerdir?

  2. Docker, popülerlik kazanmak için bunlara ne uyguladı?

  3. Bu özelliklerin iç özelliklerini ve nasıl uygulandıklarını bilmek istiyorum.


Yanıtlar:


108

Bu iki kavram için uygun bağlantılar PR 14307'de düzeltilmiştir :

Kaputun altında Docker, aşağıdaki bileşenler üzerine inşa edilmiştir:

Cgroups ve namespacesLinux çekirdeğinin yetenekleri

İle:

  • cgroup : Kontrol Grupları, görev kümelerini ve bunların gelecekteki tüm alt öğelerini özel davranışa sahip hiyerarşik gruplar halinde toplamak / bölümlemek için bir mekanizma sağlar.
  • ad alanı : global bir sistem kaynağını, ad alanı içindeki süreçlere kendi yalıtılmış örneklerine sahip oldukları gibi gösteren bir soyutlamayla sarar.

Kısacası:

  • Gruplar = ne kadar kullanabileceğinizi sınırlar;
  • ad alanları = görebildiğinizi sınırlar (ve dolayısıyla kullanın)

"Adresinde daha fazlasını görün : Ad, cgroups & Bazı Dosya Sistemi Magic bir kapsayıcı Anatomisi tarafından" Jérôme Petazzoni .

Cgroups, kaynak ölçümü ve sınırlandırmayı içerir:

  • hafıza
  • İşlemci
  • blok G / Ç

Ad alanları, süreçlere kendi sistem görünümlerini sağlar

Birden çok ad alanı:

  • pid
  • mnt
  • uts
  • ipc
  • Kullanıcı: userns bu edilir docker 1.10 deneysel mezun
    (başına cini Örneğin Normal bir kullanıcı kap kökünün yeniden eşleme devam etmektedir: PR 12648 : olmasını görmek tasarım )

Teşekkürler. Bir chrootad alanına mı dayanıyor? Can chrootkimi ad ile değiştirilebilir?
Tim

1
Hayır, chroot bir ad alanına dayalı değildir: sonraki sayfaya bakın . Üç yıldan fazla bir süre sonra, yeni Docker'ın (19.03, hala beta sürümünde) köksüz olarak çalıştırılabileceğini unutmayın : github.com/moby/moby/blob/… . Ve ana bilgisayar ad alanındaki kaynakları açığa çıkarabilir: github.com/moby/moby/pull/38913
VonC

Can chrootkimi ad ile değiştirilebilir?
Tim

1
@Tim Yerel değil. Belki ile pivot_root? ( unix.stackexchange.com/a/456777/7490 ) Ayrıca bkz. github.com/vincentbernat/jchroot
VonC



2

Gruplar (kontrol grupları) kaynak yönetimi yapar.
Kapsayıcılara ne kadar ana makine kaynağı verileceğini belirler.

örneğin: - docker-compose yaml dosyasında aşağıdaki gibi hizmetler oluşturmak için kaynakları tanımlarız:

kaynaklar:
  limitler:
    cpus: "0.1" (100 milyon)
    bellek: 50M

Burada, bu örnekte cgruplardan bu kaynakları belirli bir konteynere tahsis etmelerini açıkça istiyoruz.


Ad alanları : süreç izolasyonu, kapsayıcıların tam izolasyonu, ayrı dosya sistemi sağlar.


6 tür ad alanı vardır:
1. ns bağla - dosya sistemi için.
2. UTS (Benzersiz zaman paylaşımı)
ns - çalışan kapsayıcıların farklı ana bilgisayar adlarını kontrol eder 3. IPC ns - süreçler arası iletişim
4. Ağ
ns - farklı kapsayıcılara farklı ip tahsisi ile ilgilenir 5. PID ns - işlem kimliği izolasyonu
6. kullanıcı ns- farklı kullanıcı adı (uid)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.