PodのAuto-Healingについて(liveness probes)
こんにちわ
がじぇったー (@hackmylife7) | Twitter
です。
PodsのAuto Healingについて学んでいきます。
TL;DR(要約)
- Auto-Healing機能を用いることによりPod/Containerの障害時の振る舞い(常に再起動するか、停止しておくか)を定義することができる
- Containerのヘルスチェックの方法は二種類あり、Readiness Probesと Liveness Probesの二つをCheckすることにより、K8sはContainerの状態がどういう状態なのかを確認することができる
- Liveness Probesは基本的に再起動しないとPodが正常に動かない、という場合に使用する
- Readiness Probesはサービスインへ準備(Ready)ができているかどうかを確認するので、立ち上がりまでの時間がかかるようなContainerに対して使用を検討する
Auto-Healing
障害時にPod、あるいはその中のContainerの復旧を自動でおこなうケースにおいてこのAuto-Healing機能を使う。
Kubernetesに限定した話ではないが、この機能を使う前に
まず何を「失敗(Down)」としてみなすのか、
そして「もし失敗(Down)したら何をするのか?」を決めておく必要がある
それを決めた上でAuto-Healing機能を用いた対応策を考える
K8s環境における障害対応
以下の観点から考える
- Pod自体のRestart Policyをどう定義するか
- Always / OnFailure / Never
- Liveness probeを使うか、Readiness probeを使うか
- 他のNodeでPodを立ち上げる場合はControllers(Deployment)を使う
Pod自体の再起動はPod自体の特性を鑑みて、Restart Policyを定義する
- Always: Podが停止したら常に再起動を行う
- OnFilure: 正常終了しない場合(終了コードが0以外)、Restartをかける
- Never: 一旦Podが停止したら再起動をかけない
※ Restart Policyが効くのは同一Node上で稼働させるケースのみである
※ ただし何度も何度もDownしてしまうようなケースに備えて、再起動するたびにPodの再起動の間隔を長くするような設定を入れること
Container のヘルスチェックにについて
Readiness Probesと Liveness Probesの二つをCheckすることにより、K8sはContainerの状態がどういう状態なのかを確認することができる(Podの中のコンテナに対してhealth checkを行う)
Checkする方法
Liveness ProbesとReadiness Probesの違い
- Liveness Probes: Podの稼働状態を常に確認し、確認できない場合(Failure)はPodの再起動をかける
- Readiness Probes: Podの状態がサービスを提供できる状態かどうかをチェックする
ReadinessはReadyの名詞形。
Podがサービスインへ準備(Ready)ができているかどうかを確認する。
Liveness ProbesとReadiness Probesの使い分け
Liveness Probes
基本的に再起動しないとPodが正常に動かない、という場合に使用する。
Liveness ProbesはPodの応答がないことを検知し、Podの再起動を行う
例えば、プロセスのバグやメモリーリーク等が考えられる場合に使用を検討する
Readiness Probes
サービスインへ準備(Ready)ができているかどうかを確認するので、立ち上がりまでの時間がかかるようなContainerに対して使用を検討する
参考(Kubernetesの最強参考書)
Kubernetes完全ガイド (impress top gear)
- 作者: 青山真也
- 出版社/メーカー: インプレス
- 発売日: 2018/09/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Kubernetesの他の記事へは下記の一覧から飛べるようにしているので参照ください。