Jak włączyć automatyczną aktualizację kontenerów Podmana

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.autoupdateetykietę 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:latestlink pokazany powyżej jest celowy, ponieważ nginx:latestjest 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ć systemctlpoleceń 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ć sudoz powyższego przykładu; jeśli tak, uruchom auto-updatepolecenie również jako root:

$ sudo podman auto-update

W registrytym 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-updatepolecenia --dry-runflag, 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 pendingmają 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-updatepolecenia.

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 editi zmieniając wartość OnCalendarpola :

$ 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.autoupdatekonteneró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-updatew 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-runokresowe 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

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *