がじぇったー

お金と家電とプログラミングのブログ

PodのAuto-Healingについて(liveness probes)

こんにちわ

がじぇったー (@hackmylife7) | Twitter


です。


PodsのAuto Healingについて学んでいきます。



f:id:gadgeterkun:20190706230722p:plain

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する方法

  • コマンドの実行結果(コマンドの実行結果が正常(0)かどうか、Timeoutを起こしていないかを見ている)
  • TCP Socketのコネクション(セッション)がはられたかどうか
  • HTTP のリクエストを送って正常なResponse(200番台、300番台)がかえってくるか

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)

Kubernetes完全ガイド (impress top gear)



Kubernetesの他の記事へは下記の一覧から飛べるようにしているので参照ください。

gadgeterkun.hatenablog.com