成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Kubernetes實踐之優雅終止

云計算
Pod 銷毀時,會停止容器內的進程,通常在停止的過程中我們需要執行一些善后邏輯,比如等待存量請求處理完以避免連接中斷,或通知相關依賴進行清理等,從而實現優雅終止目的。本文介紹在 Kubernetes 場景下,實現容器優雅終止的最佳實踐。

[[403677]]

本文轉載自微信公眾號「云原生知識宇宙」,作者I am roc。轉載本文請聯系云原生知識宇宙公眾號。

概述

Pod 銷毀時,會停止容器內的進程,通常在停止的過程中我們需要執行一些善后邏輯,比如等待存量請求處理完以避免連接中斷,或通知相關依賴進行清理等,從而實現優雅終止目的。本文介紹在 Kubernetes 場景下,實現容器優雅終止的最佳實踐。

容器終止流程

我們先了解下容器在 Kubernetes 環境中的終止流程:

  1. Pod 被刪除,狀態置為 Terminating。
  2. kube-proxy 更新轉發規則,將 Pod 從 service 的 endpoint 列表中摘除掉,新的流量不再轉發到該 Pod。
  3. 如果 Pod 配置了 preStop Hook ,將會執行。
  4. kubelet 對 Pod 中各個 container 發送 SIGTERM 信號以通知容器進程開始優雅停止。
  5. 等待容器進程完全停止,如果在 terminationGracePeriodSeconds 內 (默認 30s) 還未完全停止,就發送 SIGKILL 信號強制殺死進程。
  6. 所有容器進程終止,清理 Pod 資源。

業務代碼處理 SIGTERM 信號

要實現優雅終止,務必在業務代碼里面處理下 SIGTERM 信號,參考 處理 SIGTERM 代碼示例 ) 。

別讓 shell 導致收不到 SIGTERM 信號

如果容器啟動入口使用了腳本 (如 CMD ["/start.sh"]),業務進程就成了 shell 的子進程,在 Pod 停止時業務進程可能收不到 SIGTERM 信號,因為 shell 不會自動傳遞信號給子進程。更詳細解釋請參考 為什么我的容器收不到 SIGTERM 信號 ?

如果解決?請參考 在 SHELL 中傳遞信號。

合理使用 preStop Hook

若你的業務代碼中沒有處理 SIGTERM 信號,或者你無法控制使用的第三方庫或系統來增加優雅終止的邏輯,也可以嘗試為 Pod 配置下 preStop,在這里面實現優雅終止的邏輯,示例:

  1. lifecycle: 
  2.         preStop: 
  3.           exec
  4.             command: 
  5.             - /clean.sh 

參考 Kubernetes API 文檔

在某些極端情況下,Pod 被刪除的一小段時間內,仍然可能有新連接被轉發過來,因為 kubelet 與 kube-proxy 同時 watch 到 pod 被刪除,kubelet 有可能在 kube-proxy 同步完規則前就已經停止容器了,這時可能導致一些新的連接被轉發到正在刪除的 Pod,而通常情況下,當應用受到 SIGTERM 后都不再接受新連接,只保持存量連接繼續處理,所以就可能導致 Pod 刪除的瞬間部分請求失敗。

這種情況下,我們也可以利用 preStop 先 sleep 一小下,等待 kube-proxy 完成規則同步再開始停止容器內進程:

  1. lifecycle: 
  2.           preStop: 
  3.             exec
  4.               command: 
  5.               - sleep 
  6.               - 5s 

調整優雅時長

如果需要的優雅終止時間比較長 (preStop + 業務進程停止可能超過 30s),可根據實際情況自定義 terminationGracePeriodSeconds,避免過早的被 SIGKILL 殺死,示例:

參考資料

處理 SIGTERM 代碼示例: https://imroc.cc/k8s/ref/code-example-of-handle-sigterm/

為什么我的容器收不到 SIGTERM 信號: https://imroc.cc/k8s/faq/why-cannot-receive-sigterm/

在 SHELL 中傳遞信號: https://imroc.cc/k8s/trick/propagating-signals-in-shell/

 

責任編輯:武曉燕 來源: 云原生知識宇宙
相關推薦

2021-03-11 14:33:28

Kubernetes開源容器

2021-03-12 07:47:44

KubernetesRedis-clustRedis

2021-06-03 08:32:52

KubernetesRBACRole

2025-01-13 06:00:00

Go語言gRPC

2023-10-19 19:42:25

IstioPodkubernetes

2021-10-26 10:28:41

開發架構Kubernetes

2023-05-12 14:14:00

Java線程中斷

2022-09-01 08:50:22

kubernetes容器

2024-09-03 16:28:20

2021-12-29 17:24:16

Kubernetes集群事件

2021-06-25 15:53:25

Kubernetes程序技巧

2022-01-27 08:27:23

Dubbo上下線設計

2015-07-17 10:25:43

kubernetesDocker集群系統

2021-06-08 10:26:10

云計算云計算產業云應用

2019-08-09 10:58:48

2020-09-25 08:00:57

Kubernetes

2023-11-07 07:08:57

2018-12-16 16:21:08

HadoopKubernetes容器

2019-08-16 11:48:53

容器云平臺軟件

2023-03-27 08:41:59

Java并發編程中斷線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 农夫在线精品视频免费观看 | 日韩在线播放一区 | 亚洲精品丝袜日韩 | 亚洲午夜视频在线观看 | 可以在线看的黄色网址 | 欧美在线一区二区三区 | 麻豆av电影网| 亚洲色欲色欲www | 久久精品欧美一区二区三区麻豆 | 国产农村妇女毛片精品久久麻豆 | 伊人精品一区二区三区 | 国产精品一区二区三区四区 | 亚洲精品久久久久久一区二区 | 可以免费观看的av片 | 精品国产乱码久久久久久果冻传媒 | 美女网站视频免费黄 | 午夜视频一区二区三区 | 一级黄a| 午夜视频网 | 91精品国产91久久久久久吃药 | 欧美视频成人 | 亚洲国产精品自拍 | 亚洲男人天堂2024 | 九九热国产精品视频 | 天天色图 | 中文字幕在线中文 | 国产精品久久久久久久久久免费 | 中文字幕91| 欧美专区在线观看 | 欧美区日韩区 | 国产亚洲一区二区三区 | 最新日韩欧美 | 欧美4p | 福利网址 | 欧美aaaaa| 91免费在线播放 | wwwxxx国产| 日韩精品999 | 欧美日韩视频在线播放 | 欧美性另类 | 日韩欧美精品在线 |