‫Aktualizacje usług. Prawdopodobnie przez cały czas zakładałeś, że jest jakiś sposób na zaktualizowanie twoich
‫usług, mimo że jeszcze tego nie robiliśmy.
‫Porozmawiajmy o tym, ponieważ aktualizacje mają wiele rzeczy dzieje się pod kołdrą. Funkcjonalność aktualizacji Swarm koncentruje się wokół ruchomego
‫wzorca aktualizacji dla twoich replik. Co oznacza, że jeśli masz usługę z
‫więcej niż jedną repliką, i mam nadzieję, że to zrobisz, domyślnie będzie się
‫je przesuwać, pojedynczo, aktualizując każdy kontener, zastępując go nowymi ustawieniami, w których umieszczasz
‫aktualizację dowództwo.
‫Wiele osób powie, że orkiestry zapobiegają przestojom w aktualizacjach, ale nie zamierzam mówić, że
‫to zapobiega przestojom.
‫Powiem, że ogranicza to przestoje. Ponieważ zapobieganie przestojom w każdym systemie jest zadaniem testowania.
‫Naprawdę musisz zacząć sprawdzać, jak wykonujesz swoje aktualizacje i określasz, czy ma to wpływ na moich użytkowników?
‫Czy aktualizacja bazy danych wpływa na moją aplikację internetową? Prawdopodobnie tak.
‫Każda aplikacja, dla której masz usługę, będzie aktualizować i wpływać na inne rzeczy wokół
‫niej inaczej.
‫To nie jest praca orkiestratora.
‫Orkiestrator nie może stwierdzić, że jest to protokół bazy danych, a ten jest prostym protokołem
‫aplikacji REST.
‫Więc będą to inne, skomplikowane rzeczy, z którymi trzeba się uporać.
‫W przypadku aktualizacji usług, jeśli jest to tylko interfejs API REST lub interfejs sieciowy, który nie robi niczego
‫wymyślnego jak gniazda sieciowe lub długie pollingi, jeśli jest to coś bardzo prostego lub statyczna strona internetowa,
‫prawdopodobnie będziesz mieć łatwą aktualizację i to nie będzie problem.
‫Ale inne usługi, takie jak bazy danych lub trwałe pamięci lub coś, co wymaga stałego połączenia ...
‫te zawsze będą wyzwaniem bez względu na to, co próbujesz zaktualizować.
‫Więc wcześnie przetestuj i często testuj.
‫Tak jak powiedziałem wcześniej, zdecydowanie zastąpi to pojemniki w większości aktualizacji. Dopóki nie aktualizujesz etykiety
‫lub innych metadanych z usługą, przetworzy
‫się ona i zmieni każdy kontener na zupełnie nowy.
‫Po prostu bądź na to przygotowany. Ma wiele opcji. W rzeczywistości, ostatnio
‫policzyłem, było co najmniej 77 opcji polecenia aktualizacji. Ale prawie wszystko, co chcesz zrobić,
‫można poprawić.
‫Wiele opcji w poleceniu update faktycznie tworzy opcje, które mają po prostu
‫-rm i -add na końcu. Ponieważ jeśli jest to opcja, która może być użyta
‫dla wielu wartości, powiedzmy port do opublikowania lub zmienna środowiskowa, te, których możesz użyć wielu z nich.
‫Dobrze?
‫Musisz więc móc powiedzieć komendzie aktualizacji, które dodajesz i które usuwasz.
‫Zobaczymy je za chwilę.
‫Obejmuje to również opcje przywracania i kontroli stanu.
‫Powinieneś przyjrzeć się opcjom dla tych osób i sprawdzić, czy ich wartości domyślne nie są idealne dla twojej aplikacji i
‫przetestować inne ustawienia, aby sprawdzić, czy to sprawia, że aktualizacja jest łatwiejsza dla Ciebie i Twojego systemu.
‫Zobaczysz również, że mamy tu opcje skalowania i wycofywania, które teraz są ich własnymi poleceniami.
‫Dawniej były to opcje, które musielibyśmy określić za pomocą opcji -rollback lub --scale, ale tak wiele osób
‫używa ich tak często, że Docker robi teraz z nich ludzi w pierwszej klasie w
‫linii poleceń.
‫Mogą dodawać więcej z nich w przyszłości.
‫Wreszcie, zanim dojdziemy do kilku przykładów, jeśli robisz stosy, stos do tego samego stosu jest
‫aktualizacją.
‫W rzeczywistości nie ma osobnej opcji aktualizacji stosu.
‫Po prostu wykonujesz instalację stosu z tym samym plikiem, który został poddany edycji.
‫Wtedy będzie działać z poleceniami serwisowymi i sieciami oraz z każdą inną rzeczą, którą robi. Będzie z nimi współpracować, aby
‫upewnić się, że wszelkie zmiany są konieczne, że zostaną zastosowane.
‫Spójrzmy na kilka szybkich przykładów, a następnie dojdziemy do linii poleceń.
‫Ten jest prawdopodobnie najczęstszym przykładem, z którego będziesz korzystać, czyli zmienić obraz
‫usługi.
‫Za każdym razem, gdy aktualizujesz swoją aplikację i tworzysz nowy obraz, będziesz musiał
‫wykonać polecenie aktualizacji usługi, wraz z nazwą obrazu, a następnie nazwą usługi.
‫Więc w tym przypadku, może mam swoją aplikację ze znacznikiem 1. 2. 0.
‫I w tym przypadku stosuję teraz 1. 2. 1 obraz, a usługa
‫określi, ach tak, to jest inny obraz niż mam
‫uruchomiony w mojej usłudze, a my przejdziemy i zaktualizujemy je. W tym kolejnym przykładzie pokazujemy, jak można wykonać wiele operacji naraz
‫w jednym poleceniu aktualizacji.
‫Możesz dodać zmienną środowiskową za pomocą env-add, a następnie możesz usunąć port za pomocą opcji
‫publikowania -rm.
‫Możemy również dodawać i usuwać zmienne środowiskowe oraz publikować porty w tej
‫samej komendzie aktualizacji, ile chcemy. Na tym ostatnim pokazano, w jaki sposób możemy używać tych
‫nowych poleceń skalowania i wycofywania w wielu usługach w tym samym czasie. Jedną z zalet używania ich
‫w poleceniu aktualizacji jest możliwość zastosowania do wielu usług.
‫W tym przypadku zamierzam zmienić liczbę replik sieci i usług API w
‫tym samym czasie.
‫Tak jak powiedziałem przed chwilą, w aktualizacjach Swarm, nie masz innego polecenia wdrażania.
‫Jest to po prostu ten sam stos stosu dockerów, z edytowanym plikiem, a jego zadaniem jest praca
‫z wszystkimi pozostałymi częściami interfejsu API w celu ustalenia, czy
‫są potrzebne jakieś zmiany, a następnie wypakowania ich za pomocą aktualizacji usługi.
‫W porządku. Zacznijmy od utworzenia usługi, abyśmy mogli manipulować nią za pomocą niektórych poleceń aktualizacji.
‫Usługa docker tworzy -p 8088 80 name web, a użyjemy Nginx, a my określimy wersję, która
‫zawsze powinna być w produkcji.
‫To miło, że teraz, w rzeczywistości, w ostatniej połowie 2017 roku, opcja odłączenia z naszą usługą tworzy i aktualizuje polecenia,
‫możemy zobaczyć, że dzieje się to synchronicznie w czasie rzeczywistym.
‫To będzie dobre dla komend aktualizacji, aby zobaczyć, jak aktualizacje są faktycznie uruchamiane za pośrednictwem wiersza poleceń.
‫W porządku. Teraz, jeśli wykonamy usługę dokowania ls, widzimy, że nasza
‫usługa jest uruchomiona i że ma 1 z 1 replik, więc dobrze jest jechać.
‫Skalujmy teraz naszą usługę, abyśmy mogli mieć więcej replik do pracy. Skala usługi dockera Web
‫= 5. I właśnie zobaczyłeś, że jeden z nich już działa,
‫a pozostałe 4 musiały wystartować. Minęło bardzo szybko na moim bo już
‫miałem pobrany obraz, ale twój może zająć kilka minut, gdy są w stanie oczekiwania, jak pobieranie obrazów
‫na innych węzłach.
‫W porządku.
‫Zróbmy aktualizację kroczącą, zmieniając obraz tego Nginx.
‫Zobaczysz tutaj, że wybrałem starszy obraz.
‫Teraz Docker nie dba o to, czym właściwie jest obraz.
‫To może być zupełnie inna
‫aplikacja dla wszystkich, których to obchodzi. Po prostu wie, że w tej usłudze zmienię go na inny obraz.
‫Pamiętaj, domyślnie, będzie tu przechodził jeden po drugim.
‫Najpierw go usuniesz, utworzysz nowy, a kiedy ten będzie
‫zdrowy, zacznie się w następnym. W następnym przykładzie zmienimy opublikowany
‫port.
‫Ale nie możesz zmienić portu.
‫Trzeba je dodawać i usuwać w tym samym czasie.
‫Tak więc w tym przypadku, ponieważ najpierw opublikowaliśmy go w 8088, musimy wykonać aktualizację usługi
‫dokowania publikując rm 8088. Nie muszę określać wartości. Po prostu muszę określić klucz. Następnie
‫opublikujemy nowy, 9090. Następnie wartość, która w tym przypadku wynosi 80. Zobaczysz, że wykona
‫ten sam proces aktualizacji, jak wcześniej.
‫Ostatni przykład, o którym chcę porozmawiać, jest rodzajem napiwku. Ponieważ często będziesz mieć problem z czymś,
‫co nazywa się równoważeniem. Lub jeśli zmienisz liczbę węzłów lub jeśli zmienisz wiele rzeczy, jeśli masz dużo kontenerów
‫w swoim roju, może się okazać, że nie są one naprawdę wyrównane. Masz być może
‫kilka węzłów, które są dość lekkie na temat liczby
‫kontenerów i innych, które mają dużo. Jeśli zmieni się wiele rzeczy, Swarm nie będzie się przemieszczał, aby
‫zachować równowagę pod względem liczby używanych zasobów.
‫Ale, co możesz zrobić, to możesz wymusić aktualizację usługi nawet bez zmiany czegokolwiek w tej usłudze.
‫Następnie wznowi zadania, aw takim przypadku wybierze najmniej używane węzły, co jest formą równoważenia.
‫Wiele razy w mniejszym roju, kiedy przenoszę coś dużego, lub dodam kilka węzłów, nagle mam kilka pustych
‫serwerów, nic nie robiąc i potrzebuję pracować nad nimi.
‫Zrobię więc jedną lub dwie z moich usług, a ja wykonam aktualizację usługi
‫dokowania - force, w tym przypadku przejdzie ona i całkowicie zastąpi zadania.
‫Oczywiście użyje domyślnego harmonogramu wyszukiwania węzłów o najmniejszej liczbie kontenerów i
‫najmniejszej ilości używanych zasobów.
‫To rodzaj sztuczki, która pozwala ominąć nierówną pracę na twoich węzłach.
‫Pamiętaj, aby posprzątać, usuwając usługę, którą stworzyliśmy w tym wykładzie.