Konfigurowanie sond gotowości

W przypadku konteneryzowanych aplikacji obsługujących ruch warto sprawdzić, czy kontener jest gotowy do obsługi żądań przychodzących. Usługa Azure Container Instances obsługuje sondy gotowości w celu uwzględnienia konfiguracji, aby nie można było uzyskać dostępu do kontenera w określonych warunkach. Sonda gotowości zachowuje się jak sonda gotowości platformy Kubernetes. Na przykład aplikacja kontenera może wymagać załadowania dużego zestawu danych podczas uruchamiania i nie ma potrzeby odbierania żądań w tym czasie.

W tym artykule wyjaśniono, jak wdrożyć grupę kontenerów zawierającą sondę gotowości, aby kontener odbierał ruch tylko po pomyślnym zakończeniu sondy.

Usługa Azure Container Instances obsługuje również sondy na żywo, które można skonfigurować w celu automatycznego ponownego uruchomienia kontenera w złej kondycji.

Konfiguracja YAML

Na przykład utwórz readiness-probe.yaml plik z następującym fragmentem kodu zawierającym sondę gotowości. Ten plik definiuje grupę kontenerów składającą się z kontenera z małą aplikacją internetową. Aplikacja jest wdrażana z obrazu publicznego mcr.microsoft.com/azuredocs/aci-helloworld . Ta konteneryzowana aplikacja jest również pokazana w temacie Deploy a container instance in Azure using the Azure CLI and other quickstarts (Wdrażanie wystąpienia kontenera na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure i innych przewodników Szybki start).

apiVersion: 2019-12-01
location: eastus
name: readinesstest
properties:
  containers:
  - name: mycontainer
    properties:
      image: mcr.microsoft.com/azuredocs/aci-helloworld
      command:
        - "/bin/sh"
        - "-c"
        - "node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait"
      ports:
      - port: 80
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
      readinessProbe:
        exec:
          command:
          - "cat"
          - "/tmp/ready"
        periodSeconds: 5
  osType: Linux
  restartPolicy: Always
  ipAddress:
    type: Public
    ports:
    - protocol: tcp
      port: '80'
tags: null
type: Microsoft.ContainerInstance/containerGroups

Uruchomienie — Polecenie

Wdrożenie zawiera właściwość definiującą command polecenie początkowe uruchamiane po pierwszym uruchomieniu kontenera. Ta właściwość akceptuje tablicę ciągów. To polecenie symuluje czas uruchamiania aplikacji internetowej, ale kontener nie jest gotowy.

Najpierw uruchamia sesję powłoki i uruchamia node polecenie, aby uruchomić aplikację internetową. Uruchamia również polecenie uśpienia przez 240 sekund, po którym tworzy plik o nazwie ready w /tmp katalogu:

node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait

Polecenie Gotowość

Ten plik YAML definiuje element readinessProbe , który obsługuje exec polecenie gotowości, które działa jako test gotowości. W tym przykładzie /tmp polecenie gotowości sprawdza istnienie ready pliku w katalogu.

ready Gdy plik nie istnieje, polecenie gotowości kończy działanie z wartością inną niż zero. Kontener kontynuuje działanie, ale nie można uzyskać do niego dostępu. Gdy polecenie zakończy się pomyślnie z kodem zakończenia 0, kontener jest gotowy do uzyskania dostępu.

Właściwość periodSeconds wyznacza polecenie gotowości powinno być wykonywane co 5 sekund. Sonda gotowości jest uruchamiana przez okres istnienia grupy kontenerów.

Przykładowe wdrożenie

Uruchom następujące polecenie, aby wdrożyć grupę kontenerów z poprzednią konfiguracją YAML:

az container create --resource-group myResourceGroup --file readiness-probe.yaml

Wyświetlanie kontroli gotowości

W tym przykładzie w ciągu pierwszych 240 sekund polecenie gotowości kończy się niepowodzeniem, gdy sprawdza ready istnienie pliku. Kod stanu zwrócił sygnały, że kontener nie jest gotowy.

Te zdarzenia można wyświetlić w witrynie Azure Portal lub w interfejsie wiersza polecenia platformy Azure. Na przykład w portalu są wyzwalane zdarzenia typu Unhealthy po niepowodzeniu gotowości.

Zdarzenie w złej kondycji portalu

Weryfikowanie gotowości kontenera

Po uruchomieniu kontenera możesz sprawdzić, czy początkowo nie jest on dostępny. Po aprowizacji pobierz adres IP grupy kontenerów:

az container show --resource-group myResourceGroup --name readinesstest --query "ipAddress.ip" --out tsv

Spróbuj uzyskać dostęp do witryny, gdy sonda gotowości kończy się niepowodzeniem:

wget <ipAddress>

Dane wyjściowe pokazują, że witryna nie jest początkowo dostępna:

wget 192.0.2.1
--2019-10-15 16:46:02--  http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...

Po upływie 240 sekund polecenie gotowości zakończy się pomyślnie, sygnalizując, że kontener jest gotowy. Teraz po uruchomieniu wget polecenia polecenie zakończy się powodzeniem:

wget 192.0.2.1
--2019-10-15 16:46:02--  http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...200 OK
Length: 1663 (1.6K) [text/html]
Saving to: ‘index.html.1’

index.html.1                       100%[===============================================================>]   1.62K  --.-KB/s    in 0s

2019-10-15 16:49:38 (113 MB/s) - ‘index.html.1’ saved [1663/1663]

Gdy kontener jest gotowy, możesz również uzyskać dostęp do aplikacji internetowej, przechodząc do adresu IP przy użyciu przeglądarki internetowej.

Uwaga

Sonda gotowości jest nadal uruchamiana przez okres istnienia grupy kontenerów. Jeśli polecenie gotowości zakończy się niepowodzeniem w późniejszym czasie, kontener ponownie stanie się niedostępny.

Następne kroki

Sonda gotowości może być przydatna w scenariuszach obejmujących wiele grup kontenerów, które składają się z kontenerów zależnych. Aby uzyskać więcej informacji na temat scenariuszy obejmujących wiele kontenerów, zobacz Grupy kontenerów w usłudze Azure Container Instances.