kubernetes にデプロイされたアプリケーションがあります。これがtechstackです: Java 11、Spring Boot 2.3.xまたは2.5.x、hikari 3.xまたは4.xを使用
スプリング アクチュエータを使用してヘルスチェックを行います。application.yaml 内liveness
の構成は次のとおりです。readiness
endpoint:
health:
group:
liveness:
include: '*'
exclude:
- db
- readinessState
readiness:
include: '*'
DBがダウンした場合の動作 -
- 影響を受けないよう
liveness
にします。つまり、DB が停止しても、アプリケーション コンテナーは実行し続ける必要があります。 readinesss
トラフィックがコンテナーにヒットしないようにします。
liveness
およびreadiness
コンテナ仕様の構成:
livenessProbe:
httpGet:
path: actuator/health/liveness
port: 8443
scheme: HTTPS
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 5
readinessProbe:
httpGet:
path: actuator/health/readiness
port: 8443
scheme: HTTPS
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 20
アプリケーションが開始され、数時間正常に実行されます。
私がしたこと:
DBをダウンさせました。
指摘された問題:
DB がダウンしている場合、90 秒以上経過すると、さらに 3 つのポッドがスピンアップします。ポッドが記述されると、次のようなステータスと状態が表示されます。
Status: Running
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
実行中のすべてのポッドを一覧表示すると:
NAME READY STATUS RESTARTS AGE
application-a-dev-deployment-success-5d86b4bcf4-7lsqx 0/1 Running 0 6h48m
application-a-dev-deployment-success-5d86b4bcf4-cmwd7 0/1 Running 0 49m
application-a-dev-deployment-success-5d86b4bcf4-flf7r 0/1 Running 0 48m
application-a-dev-deployment-success-5d86b4bcf4-m5nk7 0/1 Running 0 6h48m
application-a-dev-deployment-success-5d86b4bcf4-tx4rl 0/1 Running 0 49m
私の類推/発見:
構成ごとReadinessProbe
:periodSeconds
は 30 秒に設定され、failurethreshold
k8s ドキュメントごとにデフォルトで 3 に設定されています。
application.yaml ごとreadiness
に db チェックが含まれています。これは、30 秒ごとにreadiness
チェックが失敗したことを意味します。3回失敗すると、failurethreshold
満たされ、新しいポッドがスピンアップします。
再起動ポリシーは、デフォルトで Always に設定されています。
質問:
- なぜ新しいポッドを回転させたのですか?
- 1 つ、2 つ、4 つ、または任意の数ではなく、具体的に 3 つのポッドのみを回転させたのはなぜですか?
- これは何か関係があり
restartpolicy
ますか?