2016-09-01 49 views
5

Jestem nowy w trybie roota w trybie dokowania (a konkretnie mówię o trybie roju w oknie dokowanym v1.12 i nie mam tu na myśli starszego niezintegrowanego "roota w doku)".Wdrażanie usług trybu roota w Dockerze w wielu domenach awarii

ja próbując ocenić jego przydatność do budowy dużych, rozproszonych kontenerowy platformę dla nowego projektu oprogramowania (mam porównanie do podobnych technologii, takich jak mezosfery, kubernetes wsp).

Moje zrozumienie starszego niezintegrowanego roota w doku (nie w trybie roota) polega na tym, że można kierować węzły do ​​wdrożenia w wielu domenach awarii za pomocą filtrów. Czy istnieje odpowiednik w trybie Docker Swarm?

Na przykład w środowisku testowym mam 6 maszyn wirtualnych - wszystkie działające okna dokowane.

zacznę się VM 1 i 2 i nazywają to moja porażka domena1
zacznę się VM 3 i 4 i nazywają to moja porażka domena2
zacznę się VM 5 i 6 i nazywają to moja porażka domena3

Wszystkie domeny niepowodzeń składają się z jednego menedżera roju i jednego pracownika roju. W efekcie mam 2 węzły na domenę, która może obsługiwać kontenery usług.

Powiem dockerowi, aby utworzył nową usługę, i uruchom 3 kontenery na podstawie obrazu zawierającego prostą usługę WWW. Docker to robi i obraca 3 kontenery, a moja usługa działa; Mogę uzyskać dostęp do mojej zrównoważonej usługi internetowej bez żadnych problemów. Hurra!

Chciałbym jednak konkretnie powiedzieć dockerowi, aby rozpowszechniał moje 3 kontenery w domenie 1, domena 2 i domena 3.

Jak mogę to zrobić? (również - czy zamieszczam na właściwej stronie - czy powinno to być na jednej z innych witryn wymiany stosów?)

Odpowiedz

3

Możesz nadal używać etykiet silników, tak jak wcześniej. Lub z nowym rojem możesz zdefiniować etykiety węzłów na węzłach roju. Następnie, w nowym roocie w oknie dokowanym, zdefiniujesz ograniczenie w usłudze i utworzysz 3 oddzielne usługi, z których każda będzie musiała być uruchomiona w jednej z Twoich domen.

W przypadku etykiet węzłów należy użyć docker node update --label-add az=1 vm1, który doda etykietę az1 do węzła vm1. Powtórz ten proces dla innych AZ (strefa dostępności jest terminem, którego używam) i maszyn wirtualnych.

Teraz podczas planowania swojej pracy, należy dodać ograniczenie jak

docker service create --constraint node.labels.az==1 \ 
    --name AppAZ1 yourimage 

na etykiecie węzła lub na etykiecie silnika:

docker service create --constraint engine.labels.az==1 \ 
    --name AppAZ1 yourimage 

powtarzając to dla każdego z AZ.

Niestety, nie mogę wymyślić sposobu na wymuszenie rozprzestrzeniania się każdego z automatów AZ, gdy użyjesz czegoś podobnego do --replicas 3, które obejmuje przełączanie awaryjne do drugiego węzła w każdym klastrze vm. Jeśli jednak wybierzesz pojedynczą maszynę wirtualną na klastrze dla każdego zadania, możesz oznaczyć każdą z nich moją tą samą etykietą (np. --label-add vm=a, a następnie wykonać , aby uruchomić jedną usługę na każdym z Twoich węzłów A.