Closed10
Spring Boot + KubernetesでのTipsいろいろ
ピン留めされたアイテム
参考にした記事・スライド
Liveness Probe / Readiness Probeの設定
Spring Boot 2.3以降より利用可能
設定は
management.endpoint.health.probes.enabled=true
# こちらがあれば上記は不要
spring.main.cloud-platform=kubernetes
さらにmanagement.endpoint.health.group.liveness.include
等でreadiness/livenessにどのチェックを含めるかといった設定も可能
動作するクラウド環境の設定
spring.main.cloud-platform=kubernetes
この設定により、
- Liveness Probe / Readiness Probeのhealthエンドポイントの設定
- Kubernetesコンテナの
*_SERVICE_HOST
,*_SERVICE_PORT
といった環境変数の検知
がされる
JavaのDockerコンテナをDockerfileレスで最適なものを用意してくれるツール。
Maven/Gradleプラグインもあって便利
Graceful Shutdownの設定
server.shutdown=graceful
# 20秒たっても処理が終わらなければ強制ストップ
spring.lifecycle.timeout-per-shutdown-phase=20s
docker build / docker push / kubectl applyを自動化できるツール
Jibとも連携可能
Java8の話
8u191より前の場合
Dockerfileを自前で用意する場合、Javaの起動オプションとして
-XX:+UseContainerSupport
を設定しないとCPU/メモリが正しく認識されなかった。
Java 8u191以降であればオプション不要となったので、設定があれば削除してOK
ウォームアップ、暖機運転をサービスイン前に実施(サイドカーなし、SpringBootの機能で実現)
ここにまとめた。
デフォルトのJavaだと、ヒープサイズが最大ホストの1/4~1/2までとなってしまう。
コンテナ環境はそのアプリケーションのためだけの環境なので、最大限活用できるようにしたい。
これを解決するために、
-
-XX:MaxHeapSize
または-Xmx
で最大ヒープサイズを設定 -
-XX:MaxRAMFraction
(Java10以降ならXX:MaxRAMPercentage
) でメモリサイズ・ヒープサイズの割合を設定
といったことが必要となる。
JVMのヒープ以外のメモリ領域、ホストが使うメモリも考慮する必要があるため、100%ヒープに割り当てるといったことは不可。
ConfigMapをSpring Bootから使う
Spring Boot 2.4以降で可能
spring.config.import=optional:configtree:/etc/config/
このスクラップは2022/05/06にクローズされました