rights reserved. • Graceful な終了 § 事前に計画されたノードの終了 • Forceful な終了 § 外部要因によりノードを終了しなければならなくなった際の対応 6 E K S A u t o M o d e は 2 種 類 の ⽅ 法 で ノ ー ド を 終 了 す る Graceful な終了と Forceful な終了
rights reserved. • Graceful なノードの終了は、 • 全ノードの 10% ずつ実施する • 夜間帯 (17時 – 9時) は実施しない 8 A u t o M o d e が G r a c e f u l に ノ ー ド を 終 了 さ せ る と き の ⽅ 法 を 設 定 NodePool Disruption Budgets apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: default spec: disruption: … budgets: - nodes: ”10%" - nodes: "0" schedule: "0 0-8,17-23 * * *" duration: 1h
rights reserved. • Graceful § ノードの新規起動を確認してから、ノードの終了を開始する • Forceful の内、Spot Interruption § ノードの新規起動とノードの終了を同時に開始 11 ノ ー ド の 削 除 開 始 の タ イ ミ ン グ は G r a c e f u l と F o r c e f u l で 異 な る Auto Mode がノード終了を開始させるプロセス EC2 マネージドインスタンス EC2 マネージドインスタンス EC2 マネージドインスタンス
rights reserved. • Graceful § ノードの新規起動を確認してから、ノードの終了を開始する • Forceful の内、Spot Interruption § ノードの新規起動とノードの終了を同時に開始 12 ノ ー ド の 削 除 開 始 の タ イ ミ ン グ は G r a c e f u l と F o r c e f u l で 異 な る Auto Mode がノード終了を開始させるプロセス EC2 マネージドインスタンス EC2 マネージドインスタンス EC2 マネージドインスタンス
rights reserved. • Graceful § ノードの新規起動を確認してから、ノードの終了を開始する • Forceful の内、Spot Interruption § ノードの新規起動とノードの終了を同時に開始 13 ノ ー ド の 削 除 開 始 の タ イ ミ ン グ は G r a c e f u l と F o r c e f u l で 異 な る Auto Mode がノード終了を開始させるプロセス EC2 マネージドインスタンス EC2 マネージドインスタンス EC2 マネージドインスタンス
rights reserved. • Forceful (Spot Interruption 以外) § ノードの終了をすぐに開始する 14 ノ ー ド の 削 除 開 始 の タ イ ミ ン グ は G r a c e f u l と F o r c e f u l で 異 な る Auto Mode がノード終了を開始させるプロセス EC2 マネージドインスタンス EC2 マネージドインスタンス
rights reserved. • Forceful (Spot Interruption 以外) § ノードの終了をすぐに開始する 15 ノ ー ド の 削 除 開 始 の タ イ ミ ン グ は G r a c e f u l と F o r c e f u l で 異 な る Auto Mode がノード終了を開始させるプロセス EC2 マネージドインスタンス EC2 マネージドインスタンス
rights reserved. • Forceful (Spot Interruption 以外) § ノードの終了をすぐに開始する 16 ノ ー ド の 削 除 開 始 の タ イ ミ ン グ は G r a c e f u l と F o r c e f u l で 異 な る Auto Mode がノード終了を開始させるプロセス EC2 マネージドインスタンス EC2 マネージドインスタンス EC2 マネージドインスタンス
rights reserved. • Forceful (Spot Interruption 以外) § ノードの終了をすぐに開始する 17 ノ ー ド の 削 除 開 始 の タ イ ミ ン グ は G r a c e f u l と F o r c e f u l で 異 な る Auto Mode がノード終了を開始させるプロセス EC2 マネージドインスタンス EC2 マネージドインスタンス EC2 マネージドインスタンス
rights reserved. t e r m i n a t i o n G r a c e P e r i o d = ノ ー ド 終 了 ま で の 待 機 時 間 19 ノード終了に関する Auto Mode の設定 time Node 起動 ノード削除開始 • 新しい Pod のデプロイをブロック • ノード上の Pod の排出 (Eviction)を開始 Node 削除 ⼀定期間、ノードの削除を待機 • 安価なインスタンスの置き換え • AMI の置き換え • ノードの期限切れ • etc.
rights reserved. t e r m i n a t i o n G r a c e P e r i o d = ノ ー ド 終 了 ま で の 待 機 時 間 20 ノード終了に関する Auto Mode の設定 time Node 起動 ノード削除開始 • 新しい Pod のデプロイをブロック • ノード上の Pod の排出 (Eviction)を開始 Node 削除 terminationGracePeriod • 安価なインスタンスの置き換え • AMI の置き換え • ノードの期限切れ • etc.
rights reserved. t e r m i n a t i o n G r a c e P e r i o d = ノ ー ド 終 了 ま で の 待 機 時 間 22 ノード終了に関する Auto Mode の設定 time Node 起動 ノード削除開始 • 新しい Pod のデプロイをブロック • ノード上の Pod の排出 (Eviction)を開始 Node 削除 terminationGracePeriod • 安価なインスタンスの置き換え • AMI の置き換え • ノードの期限切れ • etc.
rights reserved. t e r m i n a t i o n G r a c e P e r i o d = ノ ー ド 終 了 ま で の 待 機 時 間 23 ノード終了に関する Auto Mode の設定 time Node 起動 ノード削除開始 • 新しい Pod のデプロイをブロック • ノード上の Pod の排出 (Eviction)を開始 Node 削除 terminationGracePeriod • 安価なインスタンスの置き換え • AMI の置き換え • ノードの期限切れ • etc. expireAfter 最⼤ 21 ⽇
rights reserved. N o d e が P o d よ り も 早 く 終 了 さ れ な い よ う に す る 25 Pod と Node の終了期間 time Node 起動 ノード削除開始 Pod のデプロイをブロック Node 削除 terminationGracePeriod expireAfter 最⼤ 21 ⽇
rights reserved. N o d e が P o d よ り も 早 く 終 了 さ れ な い よ う に す る 26 Pod と Node の終了期間 time Node 起動 ノード削除開始 Pod のデプロイをブロック Node 削除 terminationGracePeriod Pod の起動
rights reserved. N o d e が P o d よ り も 早 く 終 了 さ れ な い よ う に す る 27 Pod と Node の終了期間 time Node 起動 ノード削除開始 Pod のデプロイをブロック Node 削除 terminationGracePeriod Pod の起動 Pod 終了処理開始 SIGTERM 送信など
rights reserved. N o d e が P o d よ り も 早 く 終 了 さ れ な い よ う に す る 28 Pod と Node の終了期間 time Node 起動 ノード削除開始 Pod のデプロイをブロック Node 削除 terminationGracePeriod Pod の起動 Pod 終了処理開始 SIGTERM 送信など Pod 削除 terminationGracePeriodSeconds
rights reserved. P o d D i s r u p t i o n B u d g e t ( P D B ) で 同 時 に 中 断 可 能 な P o d の 数 を 制 限 す る 29 可⽤性を確保できるようにノードを終了させる time Node 起動 ノード削除開始 Pod のデプロイをブロック Node 削除 terminationGracePeriod Pod の起動 Pod 終了処理開始 SIGTERM 送信など Pod 削除 terminationGracePeriodSeconds ︖︖︖
rights reserved. P o d D i s r u p t i o n B u d g e t ( P D B ) で 同 時 に 中 断 可 能 な P o d の 数 を 制 限 す る 30 可⽤性を確保できるようにノードを終了させる apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: sample-pdb spec: maxUnavailable: 1 selector: matchLabels: app: sample-app EC2 マネージドインスタンス sample-app
rights reserved. P o d D i s r u p t i o n B u d g e t ( P D B ) で 同 時 に 中 断 可 能 な P o d の 数 を 制 限 す る 31 可⽤性を確保できるようにノードを終了させる apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: sample-pdb spec: maxUnavailable: 1 selector: matchLabels: app: sample-app EC2 マネージドインスタンス sample-app • 利⽤できない Pod は最⼤ 1つ • 可⽤性を確保 • ノードの終了をブロック
rights reserved. P o d D i s r u p t i o n B u d g e t ( P D B ) で 同 時 に 中 断 可 能 な P o d の 数 を 制 限 す る 32 可⽤性を確保できるようにノードを終了させる time Node 起動 ノード削除開始 Pod のデプロイをブロック Node 削除 terminationGracePeriod Pod の起動 Pod 終了処理開始 SIGTERM 送信など Pod 削除 terminationGracePeriodSeconds PDB により Pod の終了開始を ブロック
rights reserved. P o d D i s r u p t i o n B u d g e t ( P D B ) に よ り P o d が 退 避 す る た め に 必 要 な 時 間 が ⻑ く な る 33 可⽤性と性能のトレードオフ Node 起動 ノード削除開始 Pod のデプロイをブロック Node 削除 terminationGracePeriod Pod の起動 Pod 強制 削除 terminationGracePeriodSeconds 厳格な PDB (同時に 1つしか終了 できないなど) = ブロックの時間が⻑くなる
rights reserved. Node と Pod のタイムラインまとめ 34 time Node 起動 ノード削除開始 Pod のデプロイをブロック Node 削除 terminationGracePeriod Pod の起動 Pod 終了処理開始 SIGTERM 送信など Pod 削除 terminationGracePeriodSeconds PDB ブロック expireAfter 最⼤ 21 ⽇
rights reserved. t e r m i n a t i o n G r a c e P e r i o d が 2 4 時 間 あ れ ば 問 題 な い こ と が 多 い 35 ステートレスな Web ワークロード time Node 起動 Pod の起動 Pod 削除 10秒 ノード削除開始 Pod のデプロイをブロック expireAfter (2週間) Node 削除 terminationGracePeriod (24 時間) Pod 終了処理開始 SIGTERM 送信など
rights reserved. 36 C o n s o l i d a t i o n の 対 象 か ら 除 外 す る Do Not Disrupt EC2 マネージドインスタンス apiVersion: apps/v1 kind: Deployment … annotations: karpenter.sh/do-not-disrupt: true • Consolidation の対象にならない • 以下の対象にはなる • Forceful (Spot 中断など) • Drift (AMI 更新など)
rights reserved. S I G T E R M を 無 視 す る プ ロ セ ス の 場 合 37 ステートレスな Web ワークロード time Node 起動 Pod の起動 Pod をなんらかの⼿段で 削除 ノード削除開始 期限切れ、Drift, Forceful expireAfter (2週間) Node 削除 terminationGracePeriod (1週間) Pod 終了処理開始 SIGTERM 無視