Jak włączyć automatyczną aktualizację kontenerów Podmana
Podman to platforma do konteneryzacji zgodna z OCI, która jest często używana zamiast Dockera. Jego wolny od demonów model i rozbudowany zestaw funkcji sprawiają, że jest dobrym kandydatem do użycia zarówno w rozwoju, jak i produkcji.
W tym artykule pokażemy, jak używać automatycznego systemu aktualizacji Podmana do ponownego uruchamiania kontenerów po opublikowaniu nowych obrazów. Podman można skonfigurować tak, aby okresowo sprawdzał dostępność aktualizacji, pobierał najnowszy obraz i regenerował kontenery, których dotyczy problem, przy użyciu ich bieżących ustawień.
Po co automatycznie aktualizować kontenery?
Pojemniki są często krótkotrwałe, ale nadal wymagają regularnej konserwacji. Krytyczna luka w obrazie może dać atakującym dostęp do Twojej aplikacji, która zostanie wykorzystana w ciągu kilku godzin od wykrycia.
Większość popularnych technologii kontenerów wymaga ręcznej aktualizacji kontenerów. Nakłada to na zespoły operacyjne obowiązek zapisywania się na ogłoszenia o wydaniu i tworzenia narzędzi, które wdrażają nowe zmiany.
Wbudowany system aktualizacji kontenerów Podmana rozwiązuje ten problem i zapewnia aktualność obciążeń. Kontenery można szybko aktualizować po wepchnięciu nowych wersji obrazu, zapewniając, że wdrożenia są na bieżąco z najnowszymi łatami i poprawkami błędów.
Włącz automatyczne aktualizacje
Automatyczne aktualizacje są włączane dla kontenera, ustawiając io.containers.autoupdate
etykietę podczas jego tworzenia.
$ podman run -d -p 8080:80 \
–name nginx-kontener\
–label io.containers.autoupdate=rejestr \
docker.io/library/nginx:latest
Etykieta może mieć dwie możliwe wartości:
registry
– Podczas sprawdzania aktualizacji, Podman sprawdzi w rejestrze obrazów, czy jest dostępna nowa wersja tagu używanego przez kontener. W takim przypadku obraz zostanie wyodrębniony, a kontener uruchomi się ponownie. Aktualizacje rejestru działają tylko wtedy, gdy korzystasz z pełnej ścieżki rejestru —docker.io/library/nginx:latest
link pokazany powyżej jest celowy, ponieważnginx:latest
jest zbyt niejasny.local
– Ta metoda aktualizacji uniemożliwia Podmanowi przeglądanie obrazów kontenerów, które już istnieją w systemie plików hosta. Kontener zostanie ponownie uruchomiony, jeśli lokalna wersja tagu obrazu jest inna niż wersja, w której działa kontener. Może to być przydatne podczas przebudowy obrazów podczas programowania.
Obecność etykiety sprawia, że ten przykładowy kontener NGINX kwalifikuje się do automatycznych aktualizacji. Jednak zanim aktualizacje będą mogły zostać faktycznie zastosowane, potrzeba więcej pracy.
Tworzenie usługi Systemd
Mechanizm aktualizacji Podmana wymaga, aby Twoje kontenery działały w usługach systemd. Ponieważ Podman jest pozbawiony demonów, brakuje mu centralnego kontrolera, który może uruchamiać i zatrzymywać Twoje kontenery. Owinięcie ich w usługę systemd zapewnia możliwości zarządzania cyklem życia i możliwość ponownego uruchomienia w odpowiedzi na określone zdarzenia.
Podman CLI zawiera polecenie, które tworzy definicję modułu systemd z kontenera:
$ podman generate systemd --name nginx-container > /etc/systemd/system/nginx-container.service
Powyższe polecenia tworzą nowy kontener NGINX z usługą systemd we właściwej lokalizacji.
Następnie przeładuj systemd, aby zarejestrować definicję usługi, a następnie włącz i uruchom usługę:
$ systemctl daemon-reload
$ systemctl enable nginx-container.service
$ systemctl start nginx-container.service
Twój kontener NGINX jest teraz usługą systemd, która uruchamia się automatycznie po uruchomieniu hosta. Możesz użyć systemctl
poleceń do uruchamiania i zatrzymywania kontenera zamiast CLI Podmana:
$ systemctl start nginx-container.service
$ systemctl stop nginx-container.service
Aby usunąć kontener w przyszłości, musisz zatrzymać, wyłączyć i usunąć plik modułu usługi. Następnie uruchom ponownie systemd, aby w pełni zastosować zmiany.
$ systemctl stop nginx-container.service
$ systemctl wyłącz nginx-container.service
$ rm /etc/systemd/system/nginx-container.service
$ systemctl daemon-reload
Wykonywanie aktualizacji
Teraz wszystko jest skonfigurowane do pomyślnej automatycznej aktualizacji kontenera NGINX. Możesz uruchomić sprawdzanie aktualizacji na żądanie za pomocą polecenia Podman auto-update
:
$ podman auto-update
Próbuję ściągnąć docker.io/library/nginx:latest…
Uzyskiwanie podpisów źródłowych obrazu
…
ZAKTUALIZOWANO ZASADY DOTYCZĄCE OBRAZÓW KONTENERÓW JEDNOSTKOWYCH
nginx-container.service 2de4ba96b09 docker.io/library/nginx:latest registry true
To aktualizuje kontenery w usługach systemd, które są dostępne dla użytkownika uruchamiającego polecenie. Być może będziesz musiał skorzystać sudo
z powyższego przykładu; jeśli tak, uruchom auto-update
polecenie również jako root:
$ sudo podman auto-update
W registry
tym przykładzie zastosowano strategię aktualizacji, więc Podman łączy się z rejestrem obrazów, sprawdza zmiany, a następnie pobiera nowy obraz, jeśli ma to zastosowanie. Dane wyjściowe polecenia pokazują, czy każdy kontener usług został uaktualniony.
Ponieważ kontenery są zarządzane przez systemd, Podman może określić, czy nowy kontener został pomyślnie uruchomiony. Podman automatycznie przywróci poprzednią wersję obrazu, jeśli zostanie wykryty błąd aktualizacji. Aby to działało niezawodnie, aplikacja wewnątrz kontenera musi powiadomić systemd o pomyślnym uruchomieniu. Można to zrobić, uruchamiając systemd-notify --ready
.
sprawdzanie aktualizacji
Czasami możesz chcieć sprawdzić, czy aktualizacje są dostępne dla Twojej floty kontenerów bez ich natychmiastowego stosowania. Użyj auto-update
polecenia --dry-run
flag, aby uzyskać listę usług, w których publikowany jest zaktualizowany obraz:
$ podman auto-update --dry-run
…
ZAKTUALIZOWANO ZASADY DOTYCZĄCE OBRAZÓW KONTENERÓW JEDNOSTKOWYCH
nginx-container.service 2de4ba96b09 docker.io/library/nginx:latest registry pending
Wyświetlane usługi pending
mają dostępną aktualizację.
Zastosuj aktualizacje zgodnie z harmonogramem
Pomyślnie skonfigurowaliśmy aktualizacje kontenerów na żądanie. Nie musisz ręcznie pobierać nowych obrazów ani ponownie uruchamiać kontenerów. Ostatnim krokiem jest skonfigurowanie harmonogramu, aby Podman okresowo stosował aktualizacje bez uruchamiania auto-update
polecenia.
Większość dystrybucji Podmana zawiera zegar systemowy do tego celu. Możesz aktywować minutnik za pomocą systemctl
:
$ systemctl enable podman-auto-update.timer
Zegar jest ustawiony tak, aby codziennie sprawdzać dostępność aktualizacji. Harmonogram można dostosować, otwierając plik timera za pomocą systemctl edit
i zmieniając wartość OnCalendar
pola :
$ systemctl edit podman-auto-update.timer
[Regulator czasowy]
OnCalendar=Fri *-*-* 18:00
Wyrażenie czasowe pokazane powyżej będzie uruchamiać sprawdzanie aktualizacji w każdy piątek o 18:00. Składnia jest opisana w podręczniku systemd .
Teraz, gdy licznik czasu jest włączony, możesz rozpocząć wdrażanie io.containers.autoupdate
kontenerów z etykietami. Będą one okresowo aktualizowane i uruchamiane ponownie, automatyzując procedury konserwacji.
Nie musisz używać timera systemowego Podmana do planowania aktualizacji. Możesz uruchomić podman auto-update
w swoim istniejącym zestawie narzędzi lub innym harmonogramie zadań, takim jak cron
.
Streszczenie
Automatyczne aktualizacje Podmana umożliwiają przenoszenie kontenerów do nowych wersji obrazu bez ręcznego ich ponownego uruchamiania lub używania zewnętrznych narzędzi. Może to pomóc w utrzymaniu floty kontenerów, ponieważ obrazy publikują poprawki błędów i poprawki zabezpieczeń.
Chociaż automatyczne aktualizacje są użytecznym narzędziem, nie należy ich używać bez należytej staranności. Zezwalanie na automatyczne aktualizacje może prowadzić do własnych problemów, jeśli uszkodzony obraz zostanie przypadkowo wydany. Kontenery, które same uruchamiają się ponownie, mogą również powodować przestoje lub przerwy w usługach zależnych.
Dlatego przed wdrożeniem tego rozwiązania należy ocenić przydatność własnej aplikacji. Jednym z pośrednich podejść jest auto-update --dry-run
okresowe uruchamianie i wysyłanie wyników do serwisu monitorującego. Informuje o dostępnych aktualizacjach bez narażania ich na zastosowanie bez zatwierdzenia.
Dodaj komentarz