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ą niezerową; 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.
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.