0Pricing
DevOps Bootcamp · Lekcja

Kontenery init i kolejność uruchamiania

Dowiedz się, jak kontenery init wykonują zadania przygotowawcze przed uruchomieniem głównych kontenerów aplikacji oraz jak wymuszają kolejność wewnątrz Poda.

Kontenery init i kolejność uruchamiania to bezpłatna lekcja DevOps Bootcamp na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej DevOps Bootcamp, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.

Czym są kontenery inicjalizacyjne?

Kontener inicjalizacyjny to specjalny kontener, który wykonuje się do końca przed uruchomieniem głównych kontenerów aplikacji w Podzie. Pod może zawierać jeden lub więcej takich kontenerów.

Doskonale nadają się do jednorazowych zadań konfiguracyjnych: oczekiwania na zależność, skopiowania konfiguracji lub przeprowadzenia migracji bazy danych.

Czym różnią się od kontenerów aplikacji

Kontenery inicjalizacyjne zawsze wykonują się do końca i muszą zakończyć się powodzeniem, zanim uruchomi się następny. Kontenery aplikacji natomiast działają bez przerwy.

  • Kontenery inicjalizacyjne uruchamiają się sekwencyjnie, po jednym
  • Kontenery aplikacji uruchamiają się równolegle
  • Jeśli kontener inicjalizacyjny zakończy się niepowodzeniem, Pod uruchamia go ponownie (zgodnie z restartPolicy)

Podstawowa specyfikacja kontenera inicjalizacyjnego

Kontenery inicjalizacyjne znajdują się w polu spec.initContainers, które jest na tym samym poziomie co spec.containers.

apiVersion: v1
kind: Pod
metadata:
  name: app-with-init
spec:
  initContainers:
  - name: wait-for-db
    image: busybox:1.36
    command: ['sh', '-c', 'echo waiting; sleep 5']
  containers:
  - name: app
    image: nginx:1.27

Dlaczego kolejność ma znaczenie

Kubernetes gwarantuje następującą kolejność: każdy kontener inicjalizacyjny musi pomyślnie zakończyć działanie, zanim główne kontenery w ogóle rozpoczną pracę.

Pozwala to deklaratywnie określać zależności zamiast umieszczać pętle ponawiania prób w obrazie aplikacji.

Oczekiwanie na usługę

Częsty wzorzec polega na wstrzymaniu uruchamiania do czasu, aż zależny obiekt Service odpowie.

initContainers:
- name: wait-for-api
  image: busybox:1.36
  command:
  - sh
  - -c
  - 'until nslookup api-service; do echo waiting; sleep 2; done'

Wiele kontenerów inicjalizacyjnych

Można połączyć kilka kontenerów inicjalizacyjnych. Uruchamiają się w kolejności podanej na liście, a każdy z nich musi w pełni zakończyć działanie, zanim rozpocznie się następny.

initContainers:
- name: step-1-fetch-config
  image: busybox:1.36
  command: ['sh', '-c', 'echo fetching config']
- name: step-2-migrate
  image: busybox:1.36
  command: ['sh', '-c', 'echo running migration']

Udostępnianie danych za pomocą emptyDir

Kontenery inicjalizacyjne często przygotowują pliki dla kontenera aplikacji, korzystając ze współdzielonego woluminu emptyDir.

volumes:
- name: shared
  emptyDir: {}
initContainers:
- name: setup
  image: busybox:1.36
  command: ['sh', '-c', 'echo hello > /work/index.html']
  volumeMounts:
  - name: shared
    mountPath: /work

Sprawdzanie stanu inicjalizacji

Podczas działania kontenerów inicjalizacyjnych Pod wyświetla status taki jak Init:0/2. Należy użyć kubectl, aby śledzić postęp.

kubectl get pod app-with-init
kubectl logs app-with-init -c wait-for-db
kubectl describe pod app-with-init

Zasady użycia zasobów

Ponieważ kontenery inicjalizacyjne działają sekwencyjnie, Kubernetes podczas planowania używa najwyższego żądania lub limitu zasobów spośród nich (a nie ich sumy), a następnie porównuje tę wartość z wymaganiami kontenerów aplikacji.

Typowe zastosowania

  • Oczekiwanie na dostępność bazy danych lub zewnętrznego API
  • Uruchamianie migracji schematu przed startem aplikacji
  • Generowanie lub pobieranie plików konfiguracyjnych
  • Ustawianie uprawnień do plików w zamontowanym woluminie
  • Rejestrowanie Poda w rejestrze usług

Zachowanie w przypadku błędu

Jeśli kontener inicjalizacyjny zakończy się niepowodzeniem, a zasada restartPolicy Poda ma wartość Always lub OnFailure, Kubernetes będzie ponawiać jego uruchamianie aż do skutku. Główne kontenery nie zostaną uruchomione do tego czasu.

Szybki test

Należy sprawdzić zrozumienie kolejności uruchamiania kontenerów inicjalizacyjnych.

Podsumowanie

Dowiedział się Pan, że kontenery inicjalizacyjne uruchamiają się sekwencyjnie i wykonują do końca, zanim wystartują kontenery aplikacji. Wymuszają kolejność uruchamiania, przygotowują współdzielone dane za pomocą woluminów i obsługują jednorazową konfigurację, taką jak migracje lub sprawdzanie zależności.

Następnie można połączyć kontenery inicjalizacyjne z kontenerami sidecar, aby uzyskać bardziej rozbudowane wzorce uruchamiania Podów.

Często zadawane pytania

Czy lekcja „Kontenery init i kolejność uruchamiania” jest bezpłatna?

Tak — pełny tekst „Kontenery init i kolejność uruchamiania” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu DevOps Bootcamp, przejdź na CoddyKit PRO. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.

Co nauczysz się w „Kontenery init i kolejność uruchamiania”?

Dowiedz się, jak kontenery init wykonują zadania przygotowawcze przed uruchomieniem głównych kontenerów aplikacji oraz jak wymuszają kolejność wewnątrz Poda. Ćwiczysz DevOps Bootcamp z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć DevOps Bootcamp?

Nie wymagamy żadnego doświadczenia. DevOps Bootcamp w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Kontenery init i kolejność uruchamiania”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji DevOps Bootcamp?

Tak. Każda lekcja DevOps Bootcamp zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Pody: najmniejsza jednostka
  2. Cykl życia i stany Poda
  3. Pody wielokontenerowe (sidecary)
  4. Kontenery init i kolejność uruchamiania
← Powrót do DevOps Bootcamp