Spring on Kubernetes 最佳實(shí)踐(三) 探針配置

Liveness 和 Readiness

  • Kubernetes有兩個(gè)探測(cè)配置以確定應(yīng)用程序是飯后準(zhǔn)備好接受流量以及應(yīng)用程序是否仍在運(yùn)行
  • 如果準(zhǔn)備就緒探針未返回200,則不會(huì)向其發(fā)送流量
  • 如果活動(dòng)探針未返回200, 則會(huì)重啟Pod
  • Spring Boot 在Actuator模塊內(nèi)置了一組端點(diǎn),來(lái)提供程序的應(yīng)用信息,確保應(yīng)用程序處于活動(dòng)狀態(tài)

/actuator/health/readiness 和 /actuator/health/liveness endpoint只有在Spring Boot 2.3.x 版本活以上才有,低于此版本的使用/actuator/health endpoint

配置Readiness探針

apiVersion: apps/v1
kind: Deployment
metadata:
  ...
  name: k8s-demo-app
spec:
...
  template:
    ...
    spec:
      containers:
        ...
        readinessProbe:
          httpGet:
            port: 8080
            path: /actuator/health/readiness

配置Liveness探針

apiVersion: apps/v1
kind: Deployment
metadata:
  ...
  name: k8s-demo-app
spec:
...
  template:
    ...
    spec:
      containers:
        ...
        livenessProbe:
          httpGet:
            port: 8080
            path: /actuator/health/liveness

優(yōu)雅關(guān)閉應(yīng)用程序

由于Kubnernetes以非同步方式關(guān)閉應(yīng)用程序,因此在停止前請(qǐng)求還是有可能路由到即將關(guān)閉的應(yīng)用程序。
為了解決這個(gè)問(wèn)題,我們可以配置應(yīng)用停止前先睡眠10秒,以便在終止請(qǐng)求請(qǐng)求不會(huì)路由到應(yīng)用程序。
將preStop命令添加到您的deploy.yaml的podspec中

apiVersion: apps/v1
kind: Deployment
metadata:
  ...
  name: k8s-demo-app
spec:
...
  template:
    ...
    spec:
      containers:
        ...
        lifecycle:
          preStop:
            exec:
              command: ["sh", "-c", "sleep 10"]

  • 當(dāng)應(yīng)用程序收到需要關(guān)閉的通知時(shí),盡管新的請(qǐng)求將不會(huì)發(fā)送到此應(yīng)用程序,但是它也可能還正在處理一些未完成的請(qǐng)求.
  • 為了使我們能夠在應(yīng)用程序關(guān)閉前完成這些請(qǐng)求的處理,我們可以在應(yīng)用程序中配置一個(gè)"寬限期"
  • 在application.properties 文件內(nèi)添加下面的配置
server.shutdown.grace-period=30s

server.shutdown.grace-period 配置只有在Spring Boot 2.3.x 版本活以上才生效

重新構(gòu)建容器和使新的k8s描述文件生效

./mvnw clean package
kubectl apply -f ./k8s
  • Kubernetes將創(chuàng)建新的Pod,舊的Pod將會(huì)停止

示例代碼地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容