Canlılık (liveness) ve hazırlık (readiness) probları, bir konteynerin durumunu kontrol eden mekanizmalardır. Canlılık probu konteynerin düzgün çalışıp çalışmadığını belirler; hazırlık probu ise istekleri karşılamaya hazır olup olmadığını tespit eder. Bu konu, Elastic Container Instance (ECI) içindeki konteynerler için canlılık ve hazırlık problarının nasıl yapılandırılacağını açıklar. Bu problar, ECI'nin konteynerlerinizin durumunu izlemesine ve yönetmesine yardımcı olarak hizmetin yüksek düzeyde kullanılabilirliğini ve kararlılığını sağlar.
Genel bakış
ECI, konteynerlerin sağlığını ve durumunu kontrol etmek için canlılık ve hazırlık problarını destekler.
|
Prob |
Açıklama |
Kullanım senaryoları |
|
canlılık probu |
Konteynerin düzgün çalışıp çalışmadığını kontrol eder.
|
|
|
hazırlık probu |
Konteynerin istekleri kabul etmeye ve yanıtlamaya hazır olup olmadığını kontrol eder.
|
Bir uygulama geçici olarak trafiği karşılayamıyorsa hazırlık probu kullanın. Örneğin, başlatma sırasında büyük miktarda veri veya yapılandırma dosyası yüklenirken bu durum oluşabilir. Böyle durumlarda uygulamayı sonlandırmak istemezsiniz ancak geçici olarak istek gönderilmesini durdurmak isteyebilirsiniz. |
API yapılandırması
CreateContainerGroup işlemiyle bir ECI örneği oluştururken LivenessProbe ve ReadinessProbe parametrelerini kullanarak probları yapılandırabilirsiniz. Daha fazla bilgi için bkz. CreateContainerGroup.
LivenessProbe parametreleri
LivenessProbe parametrelerini yapılandırırken yalnızca bir denetim yöntemi belirtebilirsiniz: HttpGet, Exec veya TcpSocket.
|
Parametre |
Tür |
Örnek |
Açıklama |
|
Container.N.LivenessProbe.HttpGet.Path |
string |
/healthyz |
HTTP GET sağlık denetimi isteğinin yolu. |
|
Container.N.LivenessProbe.HttpGet.Port |
integer |
8888 |
HTTP GET sağlık denetimi isteğinin bağlantı noktası. |
|
Container.N.LivenessProbe.HttpGet.Scheme |
string |
HTTP |
HTTP GET isteğinin protokolü. Geçerli değerler:
|
|
Container.N.LivenessProbe.Exec.Command.N |
array |
cat /tmp/healthy |
Sağlık denetimi için konteyner içinde çalıştırılacak komut. |
|
Container.N.LivenessProbe.TcpSocket.Port |
integer |
8000 |
TCP soketi sağlık denetimi için kontrol edilecek bağlantı noktası. |
|
Container.N.LivenessProbe.InitialDelaySeconds |
integer |
5 |
Konteyner başladıktan sonra ilk probun çalışmasına kadar geçen saniye cinsinden gecikme süresi. |
|
Container.N.LivenessProbe.PeriodSeconds |
integer |
1 |
Probu çalıştırma aralığı. Varsayılan değer: 10. Minimum değer: 1. Birim: saniye. |
|
Container.N.LivenessProbe.SuccessThreshold |
integer |
1 |
Bir başarısızlıktan sonra probun başarılı sayılması için gereken ardışık başarı sayısı. Canlılık probları için bu değer 1 olmalıdır. Varsayılan: 1. |
|
Container.N.LivenessProbe.FailureThreshold |
integer |
3 |
Probu başarısız saymak için gereken ardışık başarısızlık sayısı. Varsayılan değer: 3. |
|
Container.N.LivenessProbe.TimeoutSeconds |
integer |
1 |
Probu zaman aşımına uğratacak saniye sayısı. Varsayılan değer: 1. Minimum değer: 1. Birim: saniye. |
ReadinessProbe parametreleri
ReadinessProbe parametrelerini yapılandırırken yalnızca bir denetim yöntemi belirtebilirsiniz: HttpGet, Exec veya TcpSocket.
|
Parametre |
Tür |
Örnek |
Açıklama |
|
Container.N.ReadinessProbe.HttpGet.Path |
string |
/healthyz |
HTTP GET sağlık denetimi isteğinin yolu. |
|
Container.N.ReadinessProbe.HttpGet.Port |
integer |
8888 |
HTTP GET sağlık denetimi isteğinin bağlantı noktası. |
|
Container.N.ReadinessProbe.HttpGet.Scheme |
string |
HTTP |
HTTP GET isteğinin protokolü. Geçerli değerler:
|
|
Container.N.ReadinessProbe.Exec.Command.N |
array |
cat /tmp/healthy |
Sağlık denetimi için konteyner içinde çalıştırılacak komut. |
|
Container.N.ReadinessProbe.TcpSocket.Port |
integer |
8000 |
TCP soketi sağlık denetimi için kontrol edilecek bağlantı noktası. |
|
Container.N.ReadinessProbe.InitialDelaySeconds |
integer |
5 |
Konteyner başladıktan sonra ilk probun çalışmasına kadar geçen saniye cinsinden gecikme süresi. |
|
Container.N.ReadinessProbe.PeriodSeconds |
integer |
1 |
Probu çalıştırma aralığı. Varsayılan değer: 10. Minimum değer: 1. Birim: saniye. |
|
Container.N.ReadinessProbe.SuccessThreshold |
integer |
1 |
Bir başarısızlıktan sonra probun başarılı sayılması için gereken minimum ardışık başarı sayısı. Varsayılan: 1. Minimum: 1. |
|
Container.N.ReadinessProbe.FailureThreshold |
integer |
3 |
Probu başarısız saymak için gereken ardışık başarısızlık sayısı. Varsayılan değer: 3. |
|
Container.N.ReadinessProbe.TimeoutSeconds |
integer |
1 |
Probu zaman aşımına uğratacak saniye sayısı. Varsayılan değer: 1. Minimum değer: 1. Birim: saniye. |
Konsol yapılandırması
Elastic Container Instance konsolunda bir ECI örneği oluştururken Container Configurations bölümünde bir konteyner seçin, konteynerin gelişmiş ayarlarını genişletin, sağlık denetimlerini etkinleştirin ve ardından probları yapılandırın.
Konsolda probları yapılandırırken yalnızca komut satırı ve HTTP isteği yöntemleri desteklenir. TCP soketi yöntemi desteklenmez.
|
Parametre |
Açıklama |
|
Timeout Period |
|
|
Method |
Bir denetim yöntemi seçin.
|
|
Script |
Denetim yöntemi olarak Script seçerseniz konteynerde çalıştırılacak komutu belirtmeniz gerekir. |
|
HTTP Request |
Denetim yöntemi olarak HTTP Request seçerseniz HTTP GET isteği için yolu, bağlantı noktasını ve protokolü belirtmeniz gerekir. |
Örnek
Bu örnekte, canlılık ve hazırlık probları içeren bir ECI örneği oluşturma ve probları gözlemlemek için hizmet hatasını simüle etme adımları gösterilmektedir.
-
ECI örneği oluşturmak için CreateContainerGroup işlemini çağırın.
Aşağıdaki örnekte sağlık denetimleri için TCP soketi yöntemi kullanılmaktadır:
ContainerGroupName=test-probe # Use the nginx image and automatically create and associate an EIP. Container.1.Name=container-1 Container.1.Image=nginx AutoCreateEip=true # Liveness probe: checks port 80 every 3s, starting 5s after launch. Success threshold: 1, failure threshold: 3, timeout: 10s. Container.1.LivenessProbe.TcpSocket.Port=80 Container.1.LivenessProbe.InitialDelaySeconds=5 Container.1.LivenessProbe.PeriodSeconds=3 Container.1.LivenessProbe.SuccessThreshold=1 Container.1.LivenessProbe.FailureThreshold=3 Container.1.LivenessProbe.TimeoutSeconds=10 # Readiness probe: checks port 80 every 3s, starting 5s after launch. Success threshold: 1, failure threshold: 3, timeout: 10s. Container.1.ReadinessProbe.TcpSocket.Port=80 Container.1.ReadinessProbe.InitialDelaySeconds=5 Container.1.ReadinessProbe.PeriodSeconds=3 Container.1.ReadinessProbe.SuccessThreshold=1 Container.1.ReadinessProbe.FailureThreshold=3 Container.1.ReadinessProbe.TimeoutSeconds=10 -
Elastic Container Instance konsolunda ECI örneği olaylarını görüntüleyin.
ECI örneği oluşturulduktan sonra örnek kimliğine tıklayarak ayrıntılar sayfasını açın. Events sekmesinde konteynerin normal başladığını görebilirsiniz.
Olay listesinde sırasıyla dört Normal olay gösterilir: Pulling image "nginx", Successfully pulled image "nginx", Created container container-1 ve Started container container-1.
Konteynere bağlanın. Daha fazla bilgi için bkz. Workbench ile ECI örneğine bağlanma.
-
Hizmet hatasını simüle etmek için Nginx dinleme bağlantı noktasını değiştirin.
-
Nginx dinleme bağlantı noktasını değiştirin.
NotBu örnekte kullanılan Nginx görüntüsünde
vimyüklü değildir.vikomutunu çalıştırmadan önce vim'i yüklemek içinapt-get updateveapt-get install vimkomutlarını çalıştırın.vi /etc/nginx/conf.d/default.confAşağıdaki örnekte gösterildiği gibi dinleme bağlantı noktasını 80'den 8080'e değiştirin:
server { listen 8080; listen [::]:8080; server_name localhost; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } -
Nginx yapılandırmasını yeniden yükleyin.
nginx -s reload
-
-
Probların etkisini kontrol edin.
Nginx'i yeniden yükledikten birkaç saniye sonra konteyner otomatik olarak yeniden başlar. Canlılık ve hazırlık probları başarısız olduktan sonra konteynerin yeniden başlatıldığını görmek için örnek olaylarını görüntüleyebilirsiniz.
Olay listesinde, probların
dial tcp 172.x.x.x:80: connect: connection refusedmesajıyla başarısız olduğu gösterilir. Bu mesaj, konteyner bağlantı noktasına yapılan bağlantının reddedildiğini belirtir. Sonuç olarak, ECIcontainer-1konteynerini otomatik olarak yeniden başlatır.