Canlılık yoklaması yapılandırma

Kapsayıcılı uygulamalar uzun süre çalışabilir ve kapsayıcı yeniden başlatılarak onarılması gerekebilecek bozuk durumlarla sonuçlanabilir. Azure Container Instances canlılık yoklamalarını destekler; böylece kritik işlevler çalışmıyorsa kapsayıcı grubunuzdaki kapsayıcılarınızı yeniden başlatacak şekilde yapılandırabilirsiniz. Canlılık yoklaması, Kubernetes canlılık yoklaması gibi davranır.

Bu makalede, canlılık araştırması içeren bir kapsayıcı grubunun nasıl dağıtılacağı açıklanır ve sanal bir iyi durumda olmayan kapsayıcının otomatik olarak yeniden başlatılması gösterilir.

Azure Container Instances, trafiğin kapsayıcıya yalnızca hazır olduğunda ulaşmasını sağlamak için yapılandırabileceğiniz hazır olma yoklamalarını da destekler.

YAML dağıtımı

Aşağıdaki kod parçacığıyla bir liveness-probe.yaml dosya oluşturun. Bu dosya, sonunda iyi durumda olmayan bir NGINX kapsayıcısı içeren bir kapsayıcı grubu tanımlar.

apiVersion: 2019-12-01
location: eastus
name: livenesstest
properties:
  containers:
  - name: mycontainer
    properties:
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
      command:
        - "/bin/sh"
        - "-c"
        - "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"
      ports: []
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
      livenessProbe:
        exec:
            command:
                - "cat"
                - "/tmp/healthy"
        periodSeconds: 5
  osType: Linux
  restartPolicy: Always
tags: null
type: Microsoft.ContainerInstance/containerGroups

Bu kapsayıcı grubunu önceki YAML yapılandırmasıyla dağıtmak için aşağıdaki komutu çalıştırın:

az container create --resource-group myResourceGroup --name livenesstest -f liveness-probe.yaml

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, kapsayıcının iyi durumda olmayan bir duruma girmesini simüle eder.

İlk olarak bir bash oturumu başlatır ve dizinin içinde /tmp adlı healthy bir dosya oluşturur. Ardından dosyayı silmeden önce 30 saniye boyunca uyku moduna girer ve 10 dakikalık bir uyku moduna girer:

/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"

Liveness komutu

Bu dağıtım, canlılık denetimi işlevi gören bir canlılık komutunu destekleyen bir livenessProbe exec tanımlar. Bu komut sıfır olmayan bir değerle çıkarsa, kapsayıcı öldürülür ve yeniden başlatılır ve dosyanın bulunamadığını bildirir healthy . Bu komut çıkış kodu 0 ile başarıyla çıkarsa hiçbir işlem yapılmaz.

periodSeconds özelliği canlılık komutunun her 5 saniyede bir yürütülmesini belirtir.

Canlılık çıkışını doğrulama

İlk 30 saniye içinde start healthy komutu tarafından oluşturulan dosya bulunur. Canlılık komutu dosyanın varlığını denetlediğinde healthy , durum kodu 0 döndürür ve başarılı olduğunu gösterir, bu nedenle yeniden başlatma gerçekleşmez.

30 saniye cat /tmp/healthy sonra komut başarısız olur ve iyi durumda olmayan ve öldürme olaylarının oluşmasına neden olur.

Bu olaylar Azure portalından veya Azure CLI'dan görüntülenebilir.

Portal iyi durumda değil olayı

Azure portalında olayları görüntüleyerek canlılık komutunun başarısız olması üzerine türdeki Unhealthy olaylar tetiklenir. Sonraki olay türündedir Killingve yeniden başlatmanın başlayabilmesi için kapsayıcı silme işlemini belirtir. Kapsayıcının yeniden başlatma sayısı, bu olay her gerçekleştiğinde artar.

Genel IP adresleri ve düğüme özgü içerik gibi kaynakların korunması için yeniden başlatmalar yerinde tamamlanır.

Portal yeniden başlatma sayacı

Canlılık yoklaması sürekli başarısız olursa ve çok fazla yeniden başlatma tetiklerse kapsayıcınız üstel bir geri alma gecikmesi girer.

Canlılık yoklamaları ve yeniden başlatma ilkeleri

Yeniden başlatma ilkeleri canlılık yoklamaları tarafından tetiklenen yeniden başlatma davranışının yerini alır. Örneğin, bir restartPolicy = Never ve canlılık yoklaması ayarlarsanız, başarısız bir canlılık denetimi nedeniyle kapsayıcı grubu yeniden başlatılmaz. Kapsayıcı grubu bunun yerine kapsayıcı grubunun yeniden başlatma ilkesine Neverbağlıdır.

Sonraki adımlar

Bir önkoşul işlevi düzgün çalışmıyorsa, otomatik yeniden başlatmaları etkinleştirmek için görev tabanlı senaryolar canlılık araştırması gerektirebilir. Görev tabanlı kapsayıcıları çalıştırma hakkında daha fazla bilgi için bkz . Azure Container Instances'ta kapsayıcılı görevleri çalıştırma.