應用服務網格作為集群網絡管理的重要工具,為網格內的服務提供流量治理與流量監控的能力。sidecar作為應用服務網格數據面的重要組件,需要依賴服務業務pod的更新來實現sidecar的升級和重新注入。
配置服務實例數
為保證您的服務在sidecar升級的過程中不中斷業務流量,首先確保您的服務實例數大于等于2,升級策略為滾動升級(rollingUpdate)。
相關滾動升級策略如下,供參考:
kubectl get deploy nginx -n namespace_name -oyaml | grep strategy -a10
添加readiness探針
添加readiness探針,可以保證您的新實例pod在真正準備就緒時,才開始接管業務流量。這就避免了在新的實例pod未啟動時,接管業務流量造成的訪問不通問題。
相關配置如下:
kubectl get deploy nginx -n namespace_name -oyaml | grep readinessProbe -a10


配置項說明:
readiness探針配置項:deployment.spec.template.spec.containers[i].readinessProbe
其中,包括探針檢查初始時間,檢查間隔,超時時間等配置。
設置服務就緒時間
服務就緒時間,minReadySeconds:用于標識pod的ready時間至少保持多長時間,才會認為服務是運行中。
相關配置如下:
kubectl get deploy nginx -n namespace_name -oyaml | grep minReadySeconds -a1


配置項說明:
服務就緒時間:deployment.spec.minReadySeconds,可根據您業務的實際情況確定。
配置優雅關閉時間
terminationGracePeriodSeconds,優雅關閉時間。在滾動升級過程中,首先會移除舊的服務實例pod的endpoint,并將實例pod的狀態置為Terminating,這時K8S會發送SIGTERM信號給pod實例,并等待優雅關閉時間后,將pod強制終止。您可以利用這段時間,處理未完成的請求:
kubectl get deploy nginx -n namespace_name -oyaml | grep terminationGracePeriodSeconds -a1


配置項說明:
優雅關閉時間:deployment.spec.template.spec.terminationGracePeriodSeconds,默認值為30s,可根據業務訴求適當調整。
配置preStop
preStop會在實例pod中止前調用,可以用來實現業務pod的優雅關閉。此處需要根據業務訴求來進行相應的配置,以Nginx為例。
kubectl get deploy nginx -n namespace_name -oyaml | grep lifec -a10


在“lifecycle”下的“preStop”中,定義了一個命令 nginx -s quit; sleep 10 ,這個命令首先會發送一個優雅關閉信號給Nginx進程,然后暫停10秒。這樣,在Pod終止之前,Nginx會有足夠的時間完成正在處理的請求并優雅地關閉。
需要注意的是,sleep 10中的10秒是一個示例值,您可以根據實際需要和應用程序的性能來調整這個值,關鍵是為Nginx提供足夠的時間來優雅地關閉。
類似地,您可以選擇運行自定義命令或自定義腳本,來優雅關閉您的服務進程。