Kubernetes基盤において、 Podが終了する際の挙動と、安全に落とす方法について調査・検証しました。 また、安全に終了する設定がなされていないPodをChaos Meshで炙り出すデモをしました。
- 2022/05/11- NTT DATA- Keisuke SAKASAI @k6s4i53rx© 2022 NTT DATA CorporationOracle Cloud Hangout Cafe #5LT: その Pod 突然落ちても大丈夫ですか !?
View Slide
- 2022/05/11 Oracle Cloud Hangout Cafe - © 2022 NTT DATA CorporationWho am I- 2022/05/11 Oracle Cloud Hangout Cafe -逆 井 啓 佑さかさ い© 2022 NTT DATA Corporation Company:- NTT DATA Corporation Work:- 決済システムの Product Owner と 非機能 Test (約半年間)- Kubernetes を始めとするモダンな技術スタック ... Description:- 先日、業務内の GKE Upgrade 時に勉強した、「Pod の正常終了」について簡単にまとめて、LT しようと思います。 k8s 超基本!!なお話になります...が大事なTopicです逆 井 啓 佑
- 2022/05/11 Oracle Cloud Hangout Cafe - © 2022 NTT DATA Corporation商用環境でバンバン Request が飛んできている Pod、突然、落ちても大丈夫ですか??Introdaction
- 2022/05/11 Oracle Cloud Hangout Cafe - © 2022 NTT DATA Corporation「突然」とは言わないまでも...例えば、GKE Upgrade の際には、Pod を落とす 場合もあります。※ Upgrade 戦略によるIntrodactionOld New❶ 新 Node 作成❷ 新 Node に Pod 作成❸ 旧 Node の Pod 落とす❹ 旧 Node 削除
- 2022/05/11 Oracle Cloud Hangout Cafe - © 2022 NTT DATA Corporation「突然」とは言わないまでも...例えば、GKE Upgrade の際には、Pod を落とす 場合もあります。※ Upgrade 戦略によるIntrodactionOld New❶ 新 Node 作成❷ 新 Node に Pod 作成❸ 旧 Node の Pod 落とす❹ 旧 Node 削除落とした Pod が決済リクエストを処理中だった場合、そのリクエストはどうなるのか?正常に決済は終了できるのか?上記ついて、「Pod が落ちる」を踏み込んで理解することで考えます。
- 2022/05/11 Oracle Cloud Hangout Cafe - © 2022 NTT DATA CorporationPod が落ちるPod が落ちる際の挙動Pod の Shutdownプロセス実行❶Service から Pod へのルーティング削除ReplicaSet やDeployment管理下からの除外❷ ❸replicas=3New!!これら3つの処理が、非同期に実行される。ここで、❷ のルーティング削除 => ❶ の Shutdown プロセス実施といった 順序制御はない 。preStop SIGTERMSIGKILL削除開始強制終了.terminationGracePeriodSecondsデフォルト: 30 秒preStop は最期にコンテナで実行される処理Pod に .deletionTimestamp が設定
- 2022/05/11 Oracle Cloud Hangout Cafe - © 2022 NTT DATA CorporationPod が落ちる際の挙動PodStatusRunning TerminatingPod削除開始deletionTimestamp設定コンテナ強制終了(設定されていたら)preStop 処理(preStop が終わったら)SIGTERM 処理terminationGracePeriodSeconds経過後SIGKILL 処理Service からPod へのルーティングが除外.terminationGracePeriodSecondsデフォルト: 30 秒参考(神資料):アルパカでもわかる安全なPodの終了
- 2022/05/11 Oracle Cloud Hangout Cafe - © 2022 NTT DATA CorporationPod が落ちる際の挙動PodStatusRunning TerminatingPod削除開始deletionTimestamp設定コンテナ強制終了(設定されていたら)preStop 処理(preStop が終わったら)SIGTERM 処理terminationGracePeriodSeconds経過後SIGKILL 処理Service からPod へのルーティングが除外.terminationGracePeriodSecondsデフォルト: 30 秒preStop 処理が不適な場合、SIGTERM 処理中に Pod に Request=> Request エラーになり得る仕掛かり中の Request がある状態で、SIGTERM / SIGKILL 処理が走る 場合がある=> Request エラーになり得る
- 2022/05/11 Oracle Cloud Hangout Cafe - © 2022 NTT DATA CorporationPod が落ちる際のアプローチPodStatusRunning TerminatingPod削除開始deletionTimestamp設定コンテナ強制終了❶ preStop 処理=> Request を受け付けなくなるまで十分 sleepSIGTERM 処理terminationGracePeriodSeconds経過後SIGKILL 処理Service からPod へのルーティングが除外.terminationGracePeriodSecondsデフォルト: 30 秒 => 十分長く❷ Request 処理中のプロセスは、完了してから Shutdown する=> Graceful Shutdown❸ Request の処理が十分終わるterminationGracePeriodSeconds を設定し、SIGKILL されないようにチューニング
- 2022/05/11 Oracle Cloud Hangout Cafe - © 2022 NTT DATA CorporationPod が落ちる際のアプローチこの対応により、基本的に Request エラーとならず、Pod を落とすことができる■ Kubernetes 側の設定:● 適切な時間 preStop 処理で sleep 設定する● Pod が落ちる際に、仕掛かり中のリクエストが処理し切れる時間に、terminationGracePeriodSeconds をチューニングする■ Application 側の設定:● SIGTERM を受領しても、仕掛かり中のプロセスが完了してから、Shutdown するように実装今回は、終了にフォーカスしていますが、 Pod の同時存在最低数を定義する、Pod Disruption Budget や、 Pod が Ready になってから Request を受け付ける、Rediness Probe もあります (基本)!
- 2022/05/11 Oracle Cloud Hangout Cafe - © 2022 NTT DATA Corporation最後に、展開としてこのような設定を、システムを構成する各 MS で行い、商用影響なく Pod が落とすことができる(前述した戦略での GKE Update 等も乗り切れる) 必要がある。=> 大規模な場合、MS の数/新規追加される MS の数、 .またそれら開発チームも膨大となり、横並びでの確認/統制が課題となる。.=> Chaos Mesh で無作為に Pod に擬似障害(=突然落とす)を起こし、設定漏れ/ミスを把握するPod 障害詳細は Main Session で !!=> 自動的に 設定漏れを炙り出す仕組み が必要
- 2022/05/11 Oracle Cloud Hangout Cafe - © 2022 NTT DATA CorporationDEMO の設定10 秒間隔でランダムにPod を落とす❶ preStop処理実装❷ preStop処理未実装HTTP RequestapiVersion: apps/v1kind: Deploymentmetadata:name: gracefullabels:app: gracefulspec:replicas: 3selector:matchLabels:app: gracefultemplate:metadata:labels:app: gracefulspec:containers:- name: gracefullifecycle:preStop:exec:command: ["sh", "-c", "sleep 3"]preStop 処理を実装した Pod の Manifest❶ preStop で 3 秒 sleep するため、ルーティング除外後に SIGTERM❷ preStop がないため、SIGTERM 処理中にリクエストが来る可能性=> リクエストエラーとなり得る
- 2022/05/11 Oracle Cloud Hangout Cafe - © 2022 NTT DATA CorporationDEMO📹 https://drive.google.com/file/d/1igm4DHoiK7lm6PcfTUZSDhpIMRke8w7q/view?usp=sharing
- 2022/05/11 Oracle Cloud Hangout Cafe - © 2022 NTT DATA Corporation終わり✔ GKE Upgrade などで、 商用環境の Pod を落とさなければいけないユースケースがある✔ 適切な設定をすることで、Request 処理中の Pod でも エラーなく正常に落とすことができる。基本的な設定であるので忘れずに...✔ 設定漏れがないか横並びで確認するために、Chaos Mesh は有効かも 👀 !?
- 2022/05/11 Oracle Cloud Hangout Cafe - © 2022 NTT DATA Corporation記載されている会社名、商品名、またはサービス名は、各社の商標登録または商標です。