Sidecar proxy eklenmiş bir pod sonlandırıldığında, poda gelen ve poddan giden uzun süreli istekler kesilebilir veya başarısız olabilir. Bu sorunların nedenini ve çözüm yollarını öğrenin.
Belirtiler
Bir poda sidecar proxy eklendikten sonra, pod sonlandırılırken aşağıdaki iki sorun ortaya çıkar:
Poda gönderilen bazı uzun süreli istekler kesilir.
Podun diğer hizmetlere gönderdiği istekler başarısız olabilir.
Neden
Bir poda sidecar proxy eklendiğinde, istio-proxy uygulama podunun trafiğini yönlendirir. Pod sonlandırılmaya başladığında, ilgili Service artık trafiği bu poda iletmez.
Istio'da istio-proxy, varsayılan olarak bir sonlandırma sinyali aldıktan 5 saniye sonra zorla durdurulur. Bu 5 saniye içinde istio-proxy yeni gelen bağlantıları (gelen trafik) kabul etmeyi bırakır ancak mevcut gelen bağlantıları işlemeye devam eder. Giden bağlantılar (giden trafik) bu süre boyunca etkilenmez ve başlatılabilir. 5 saniye dolduğunda istio-proxy durur. Sonlandırılan hizmete yapılan çağrıların işlenmesi uzun sürerse, üzerindeki istekler tamamlanmadan önce mevcut gelen ve giden bağlantılar sonlandırılır.
Çözümler
Aşağıdaki her iki çözüm de, varsayılan olarak sonlandırma sinyalinden 5 saniye sonra gerçekleşen istio-proxy durdurma işleminden önce mevcut gelen ve giden bağlantıların tamamlanması için daha fazla zaman tanır. İsteklerinizin maksimum bekleme süresini tahmin edebiliyorsanız 1. Çözümde açıklandığı gibi sonlandırma boşaltma süresini uzatın. Bu süreyi tahmin edemiyorsanız 2. Çözümde açıklandığı gibi bir preStop betiği yapılandırın.
1. Çözüm: Sidecar proxy sonlandırma boşaltma süresini uzatın
Gelen ve giden bağlantıların bu süre içinde tamamen işlenebilmesi için sidecar proxy'nin sonlandırma boşaltma süresini uzatın.
ASM konsolu ile oturum açın. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini seçin.
Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde Data Plane Component Management > Configure the agent parameters of the injected Sidecar seçeneğini seçin.
Configure the agent parameters of the injected Sidecar sayfasında Namespace sekmesini tıklayın.
Bir Namespace seçin, Lifecycle Management öğesini tıklayın, Sidecar Proxy Drain Duration at Pod Termination seçeneğini belirleyin, bir süre girin ve Update Settings düğmesini tıklayın.
2. Çözüm: Sidecar proxy yaşam döngüsü için bir preStop betiği yapılandırın
İsteklerin maksimum bekleme süresini tahmin edemiyorsanız sidecar proxy'nin yaşam döngüsü için bir preStop betiği yapılandırın. PreStop betiği, istek bağlantılarının hâlâ var olup olmadığını kontrol eder. İstek bağlantısı kalmadığında sidecar proxy varsayılan 5 saniyelik süreyi bekler ve ardından çıkar.
ASM konsolu ile oturum açın. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini seçin.
Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde Data Plane Component Management > Configure the agent parameters of the injected Sidecar seçeneğini seçin.
Configure the agent parameters of the injected Sidecar sayfasında Namespace sekmesini tıklayın.
Bir Namespace seçin, Lifecycle Management öğesini tıklayın, Lifecycle of Sidecar Proxy seçeneğini belirleyin, metin kutusuna aşağıdaki içeriği girin ve Update Settings düğmesini tıklayın.
{
"postStart": {
"exec": {
"command": [
"pilot-agent",
"wait"
]
}
},
"preStop": {
"exec": {
"command": [
"/bin/sh",
"-c",
"while [ $(netstat -plunt | grep tcp | grep -v envoy | wc -l | xargs) -ne 0 ]; do sleep 1; done"
]
}
}
}