ステートレスなアプリケーションを作る
アプリケーションで大切なのはただ動くことでなく可用性を上げる(動きやすくする)ことが大切。そのために使えるkubernetesのリソースを紹介していく
Readiness Probe
第一に、コンテナが起動することとトラフィックが受けられるようになることは必ずしも一致しないんだなも。例えばコンテナが二つあって片方が起動しても、もう片方が死んでたらトラフィックは受けられないんだなも。
readinessprobeはコンテナがreadyになるまでの時間やエンドポイントを制御できます。
マニフェスト例
readinessProbe:
httpGet:
path:/healthz
port:8080
initialDelaySecond: 5
periodSecond: 5
上の例だとhealthzというヘルスチェック用エンドポイントまで5秒に一回ヘルスチェックが入る。失敗するとserviceリソースの対象から外れ、トラフィックを受けなくなる。
Liveness Probe
ReadinessとProbeが失敗した時の挙動が変わる。
どうなる? > Podが再起動する
これはPodがハングした時に、再起動したら直りそうだなってときに使うといいと思うよ。けど安易に使うべきではないんだなも。無限にPodを再起動する恐れがあります。
マニフェスト例(Readinessとほぼ同じ)
livenessProbe:
httpGet:
path:/healthz
port:8080
initialDelaySecond: 5
periodSecond: 5
LivenessとReadinessは一緒に使えるけど、LivenessはReadinessのProbeを待つなんてことはしないから、一緒に使うならReadinessが先になるように実装することが推奨されている。らしい
Startup Probe
Podの初回起動時のみ動く。起動が遅いアプリなどに使用する想定。
マニフェスト例
startupProbe:
httpGet:
path:/healthz
port:liveness-port
failureThershold: 30
periodSeconds: 10
上記の例では最大30秒*10回=300秒コンテナの起動を待つ設定になる。