Hazır olma yoklamalarını yapılandırma

Trafiğe hizmet veren kapsayıcılı uygulamalar için kapsayıcınızın gelen istekleri işlemeye hazır olduğunu doğrulamak isteyebilirsiniz. Azure Container Instances, kapsayıcınıza belirli koşullar altında erişilemeyecek yapılandırmalar eklemek için hazır olma yoklamalarını destekler. Hazırlık araştırması, Kubernetes hazırlık araştırması gibi davranır. Örneğin, bir kapsayıcı uygulamasının başlatma sırasında büyük bir veri kümesi yüklemesi gerekebilir ve bu süre boyunca istek almasını istemezsiniz.

Bu makalede, kapsayıcının yalnızca yoklama başarılı olduğunda trafik alması için hazır olma araştırması içeren bir kapsayıcı grubunun nasıl dağıtılacağı açıklanmaktadır.

Azure Container Instances, iyi durumda olmayan bir kapsayıcının otomatik olarak yeniden başlatılmasına neden olacak şekilde yapılandırabileceğiniz canlılık yoklamalarını da destekler.

YAML yapılandırması

Örneğin, hazır olma yoklaması içeren aşağıdaki kod parçacığına sahip bir dosya oluşturun readiness-probe.yaml . Bu dosya, küçük bir web uygulaması çalıştıran bir kapsayıcıdan oluşan bir kapsayıcı grubu tanımlar. Uygulama genel mcr.microsoft.com/azuredocs/aci-helloworld görüntüden dağıtılır. Bu kapsayıcılı uygulama, Azure CLI'yi ve diğer hızlı başlangıçları kullanarak Azure'da kapsayıcı örneği dağıtma bölümünde de gösterilmiştir.

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

Başlat komutu

Dağıtım, kapsayıcı ilk kez çalışmaya başladığında çalışan bir başlangıç komutu tanımlayan bir command özellik içerir. Bu özellik bir dizi dizeyi kabul eder. Bu komut, web uygulamasının çalıştığı ancak kapsayıcının hazır olmadığı bir zamanın benzetimini oluşturur.

İlk olarak, bir kabuk oturumu başlatır ve web uygulamasını başlatmak için bir node komut çalıştırır. Ayrıca 240 saniye boyunca uyku moduna geçmek için bir komut başlatır ve ardından dizinin içinde /tmp adlı ready bir dosya oluşturur:

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

Hazırlık komutu

Bu YAML dosyası, hazır olma denetimi işlevi gören bir hazırlık komutunu destekleyen bir readinessProbe exec tanımlar. Bu örnek hazır olma komutu, dizinindeki dosyanın varlığı ready için sınar /tmp .

ready Dosya mevcut olmadığında, hazır olma komutu sıfır olmayan bir değerle çıkar; kapsayıcı çalışmaya devam eder ancak erişilemez. Komut çıkış kodu 0 ile başarıyla çıktığında kapsayıcıya erişilmeye hazır olur.

periodSeconds özelliği, hazırlık komutunun 5 saniyede bir yürütülmesi gerektiğini belirtir. Hazır olma yoklaması, kapsayıcı grubunun ömrü boyunca çalışır.

Örnek dağıtım

Önceki YAML yapılandırmasına sahip bir kapsayıcı grubu dağıtmak için aşağıdaki komutu çalıştırın:

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

Hazırlık denetimlerini görüntüleme

Bu örnekte, ilk 240 saniye içinde dosyanın varlığını denetlediğinde ready hazır olma komutu başarısız olur. Durum kodu, kapsayıcının hazır olmadığını belirten sinyaller döndürdü.

Bu olaylar Azure portalından veya Azure CLI'dan görüntülenebilir. Örneğin portal, hazır olma komutunun başarısız olduğu durumda türdeki Unhealthy olayların tetiklenmiş olduğunu gösterir.

Portal iyi durumda değil olayı

Kapsayıcı hazırlığını doğrulama

Kapsayıcıyı başlattıktan sonra başlangıçta erişilebilir olmadığını doğrulayabilirsiniz. Sağlamadan sonra kapsayıcı grubunun IP adresini alın:

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

Hazırlık yoklaması başarısız olurken siteye erişmeyi deneyin:

wget <ipAddress>

Çıktıda başlangıçta siteye erişilemiyor:

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...

240 saniye sonra hazır olma komutu başarılı olur ve kapsayıcının hazır olduğunu gösterir. Şimdi komutu çalıştırdığınızda wget başarılı olur:

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]

Kapsayıcı hazır olduğunda, web tarayıcısı kullanarak IP adresine göz atarak web uygulamasına da erişebilirsiniz.

Not

Hazır olma yoklaması, kapsayıcı grubunun ömrü boyunca çalışmaya devam eder. Hazır olma komutu daha sonra başarısız olursa kapsayıcı yeniden erişilemez hale gelir.

Sonraki adımlar

Hazırlık araştırması, bağımlı kapsayıcılardan oluşan çok kapsayıcılı grupları içeren senaryolarda yararlı olabilir. Çok kapsayıcılı senaryolar hakkında daha fazla bilgi için bkz . Azure Container Instances'ta kapsayıcı grupları.