28. Kubernetes における Java
Kubernetes でアプリケーションをコンテナとして管理するようになると、1
コンテナのコア数、メモリは小さい傾向となるため、これまでのメニーコ
ア、大規模ヒープが利用できる JVM の優位性は必ずしもアドバンテー
ジとは言えない。
Kubernetes
VM VM VM VM VM VM VM VM
29. The Twelve-Factor App
I. コードベース
バージョン管理されている1つのコードベースと複数のデプロイ
VII. ポートバインディング
ポートバインディングを通してサービスを公開する
II. 依存関係
依存関係を明示的に宣言し分離する
VIII. 並行性
プロセスモデルによってスケールアウトする
III. 設定
設定を環境変数に格納する
IX. 廃棄容易性
高速な起動とグレースフルシャットダウンで堅牢性を最大化する
IV. バックエンドサービス
バックエンドサービスをアタッチされたリソースとして扱う
X. 開発/本番一致
開発、ステージング、本番環境をできるだけ一致させた状態を保つ
V. ビルド、リリース、実行
ビルド、リリース、実行の3つのステージを厳密に分離する
XI. ログ
ログをイベントストリームとして扱う
VI. プロセス
アプリケーションを1つもしくは複数のステートレスなプロセスとして実行する
XII. 管理プロセス
管理タスクを1回限りのプロセスとして実行する
クラウドネイティブの指針として、12-factor App があるが、アプリケー
ションサーバ時代の実装を大きく変える必要がある。
30. JDK のコンテナイメージ
12-factor App の観点からコンテナのサイズは小さければ小さいほどよ
いが、オフィシャルの JDK の docker イメージのサイズは大きい。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
openjdk 11 f75c7d826c08 3 weeks ago 605MB
31. alpine とカスタム JRE
alpine と、Java9 からの jlink によるカスタム JRE でまずはコンテナイ
メージを可能な限り小さくする。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zulu.custom 11 2ca39f1ed611 17 seconds ago 69.3MB
--add-modules jdk.localedata --include-locales=en,ja,*-IN
Spring Boot は厳密には fatJar ではないので jdeps で出力される依存
性はアテにならない。また、日本語ロケール等を利用する場合は、以下
のモジュールも必要。