Kubernetes ile aşinalığınız varsa ve uygulama konteynerleriniz başlamadan veya durmadan önce kaynak dağıtımı ya da düzgün kapatma gibi belirli eylemleri gerçekleştirmeniz gerekiyorsa, uygulama yaşam döngüsü yönetimini yapılandırabilirsiniz. Bu konuda, Serverless App Engine (SAE) uygulamalarınız için PostStart, PreStop ve TerminationGracePeriodSeconds ayarlarının nasıl yapılandırılacağı açıklanmaktadır.
Genel Bakış
-
Kubernetes bileşeni kubelet tarafından yönetilen bir pod kancası (veya konteyner kancası), bir konteynerin yaşam döngüsündeki kritik aşamalarda özel görevleri çalıştırır. Bu aşamalar arasında konteyner işlemi başlamadan önce (PostStart) ve sonlandırılmadan önce (PreStop) yer alır. Kancalar, Kubernetes'in konteyner yaşam döngüsünü daha esnek ve hassas bir şekilde yönetmesine olanak tanır. Daha fazla bilgi için bkz. Container Lifecycle Hooks.
PostStart: Bir konteyner oluşturulduktan hemen sonra çalışan ve bu olayı bildiren bir yaşam döngüsü kancasıdır. Kanca işleyicisine herhangi bir parametre iletilmez. İşleyici başarısız olursa, konteyner yeniden başlatma ilkesine göre sonlandırılır ve yeniden başlatılır.
PreStop: Bir konteyner sonlandırılmadan önce tetiklenen ve genellikle temizleme görevlerini çalıştırmak veya düzgün bir kapatma işlemi yapmak için kullanılan bir yaşam döngüsü kancasıdır. Kanca işleyicisi, Kubernetes konteynere bir sonlandırma sinyali (SIGTERM gibi) göndermeden önce yürütmesini tamamlamalıdır. İşleyicinin sonucundan bağımsız olarak, tamamlandığında Kubernetes SIGTERM sinyalini gönderir ve konteyneri zorla sonlandırmadan önce belirtilen bir süre bekler.
TerminationGracePeriodSeconds: Bu ayar, bir konteynerin sonlandırılması için bir bekleme süresi belirterek zorla durdurulmadan önce temizleme ve kapatma işlemlerini tamamlamasına olanak tanır. Ani sonlandırmadan kaynaklanan veri kaybı, istek hataları ve hizmet kullanılamazlığı gibi sorunları önleyerek kararlılığı artırır. PreStop kancası ile birlikte kullanıldığında, eksiksiz bir düzgün kapatma süreci sağlar.
Giriş noktaları
Giriş noktası senaryoya göre değişir:
Create application
SAE console adresine oturum açın. Sol gezinme bölmesinde seçeneğini belirleyin. Bir bölge ve ad alanı seçin, ardından Create Application öğesine tıklayın.
Basic Information sihirbaz sayfasında gerekli parametreleri yapılandırın ve Next: Advanced Settings öğesine tıklayın.
Advanced Settings sayfasında Application Lifecycle Management bölümünü bulun ve genişletin.
Modify a running application
Bir uygulamayı yeniden dağıtmak, uygulamanın yeniden başlatılmasına neden olur. Hizmet kesintilerini önlemek için dağıtımları yoğun olmayan saatlerde yapın.
SAE console adresine oturum açın. Sol gezinme bölmesinde seçeneğini belirleyin. Bölgeyi ve ad alanını seçin, ardından uygulamanızın adına tıklayın.
Uygulamanın Basic Information sayfasında Deploy Application öğesine tıklayın.
Deploy Application sayfasında Application Lifecycle Management bölümünü bulun ve genişletin.
Modify a stopped application
SAE console adresine oturum açın. Sol gezinme bölmesinde seçeneğini belirleyin. Bölgeyi ve ad alanını seçin, ardından uygulamanızın adına tıklayın.
Uygulamanın Basic Information sayfasında Modify Application Configurations öğesine tıklayın.
Modify Application Configurations sayfasında Application Lifecycle Management bölümünü bulun ve genişletin.
Yordam
Application Lifecycle Management bölümünde ihtiyacınıza göre PostStart, PreStop ve TerminationGracePeriodSeconds ayarlarını yapılandırın.
Konteynerleriniz için eksiksiz bir yaşam döngüsü yönetim döngüsü oluşturmak, hizmetlerin sorunsuz başlatılıp kapatılmasını, kaynakların düzenli serbest bırakılmasını ve sıfır kesintiyle çalışmayı sağlamak amacıyla bu üç ayarı da yapılandırmanızı öneririz.
PostStart
Application Lifecycle Management bölümünde, PostStart sekmesinde PostStart kancasını yapılandırın.
SAE iki kabuk yorumlayıcısı sağlar:
>_ /bin/sh
>_ /bin/bash
Örneğin, uygulama başlamadan önce /usr/share/message dosyasına Hello from the postStart handler içeriğini yazın.
>_/bin/sh seçeneğini belirleyin ve kod düzenleyicide aşağıdaki komutu girin: echo "Hello from the postStart handler" > /usr/share/message.
Üretim ortamında ayarları iş gereksinimlerinize göre yapılandırın. Bu konudaki örnek yalnızca minimum doğrulama amaçlıdır ve üretim ortamında kullanılmamalıdır.
Sonucu doğrulayın:
Uygulama oluşturulduktan veya yeniden dağıtıldıktan sonra, örneğin terminalini açmak için Webshell kullanın ve /usr/share/message dosyasının var olduğunu ve beklenen içeriği içerdiğini doğrulayın.
[~]$cat /usr/share/message
Hello from the postStart handler
[~]$
PreStop
Application Lifecycle Management bölümünde, PreStop sekmesinde PreStop kancasını yapılandırın.
SAE iki kabuk yorumlayıcısı sağlar:
>_ /bin/sh
>_ /bin/bash
Örneğin, konteyner sonlandırılmadan önce bir betik çalıştırarak /cleanup.log dosyasına Perform cleanup yazın ve ardından doğrulama için 100 saniye bekleyin.
Üretim ortamında ayarları iş gereksinimlerinize göre yapılandırın. Bu konudaki örnek yalnızca minimum doğrulama amaçlıdır ve üretim ortamında kullanılmamalıdır.
>_/bin/sh seçeneğini belirleyin ve kod düzenleyicide aşağıdaki komutu girin: echo "Perform cleanup" > /cleanup.log && sleep 100.
Sonucu doğrulayın:
Uygulamanın Basic Information sayfasında Stop Application öğesine tıklayın. Ardından, örneğin terminalini açmak için Webshell kullanın ve /cleanup.log dosyasının var olduğunu ve beklenen içeriği içerdiğini doğrulayın.
[/]$cat /cleanup.log
Perform cleanup
[/]$
TerminationGracePeriodSeconds
Application Lifecycle Management bölümünde, TerminationGracePeriodSeconds sekmesinde düzgün kapatma zaman aşımını 60 saniye olarak ayarlayın.
Düzgün kapatma zaman aşımı, konteynerin düzgün bir şekilde sonlanması için gereken süreden kısa olursa, konteyner zorla sonlandırılır (Sinyal: SIGKILL, çıkış kodu: 137). Bu gereken süre, hem PreStop kancasının yürütülmesini hem de konteynerin SIGTERM sinyalini işlemesini kapsar. Örneğin, konteynerin düzgün sonlanması için 100 saniye gerekiyorsa ancak zaman aşımı 60 saniye olarak ayarlanmışsa, konteyner düzgün sonlanma işlemi tamamlanmadan önce öldürülür.
Sonucu doğrulayın:
Bu örnekte, doğrulama amacıyla düzgün kapatma zaman aşımı kasıtlı olarak konteynerin düzgün kapatma süresinden daha kısa ayarlanmıştır.
Uygulamanın Basic Information sayfasında Stop Application öğesine tıklayın. Ardından, örneğin terminalini açmak için Webshell kullanın ve konteynerin 137 çıkış kodunu raporladığını doğrulayın.
Düzgün kapatma sırasında, konteyner yapılandırılan zaman aşımı dolana kadar Terminating durumunda kalır.
[/]${"metadata":{},"status":"Failure","message":"command terminated with non-zero exit code: error executing command [env COLUMNS=137 ROWS=46 LINES=46 /bin/sh -i -c /bin/bash || clear;/bin/sh], exit code 137","reason":"NonZeroExitCode","details":{"causes":[{"reason":"ExitCode","message":"137"}]}}