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.
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 Killing
ve 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.
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 Never
bağ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.