試して学ぼう、IBMの”Cloud Native Starter for Java/Jakarta EE
based Microservices”をKubernetes上でデプロイ︕
⼩薗井 康志
Developer Advocate
Tokyo Team
学習の⽬的とゴール
Developer Advocate紹介
コードパターン紹介
コンテナー、Kubernetes, OpenShiftとは
Java on Openshift コードパターン
Minishiftとは︖
Minishiftを利⽤してアプリケーション モダン化(modernize)コードを試してみよう
Yasushi Osonoi
IBM Developer Advocate
Specialist in Open Source
@osonoit
TECHNOLOGISTS RULE THE WORLD
技術者が世の中を変えていくお⼿伝いをします︕
・技術情報を提供します
・開発者と話をします
・開発者にとって何が⼀番良いかを考えます
・開発者の困ったを⼀緒に解決します
・開発者をヒーローにします
OUR ACTIVITIES
こんな活動をしながら技術者のみなさまをサポートします︕
・オンラインでの情報発信(Blog、SNS、Podcastなど)
・オフラインでの情報発信(書籍、雑誌など)
・セミナー、勉強会などでの登壇
・コミュニティ、Meetupなどのリード
・ハンズオンワークショップなどでの講師
・ハッカソン、ラボ、Dojoなどでのテックサポート
DEVELOPER ADVOCATE in TOKYO
Tokyo Team is a part of Worldwide Developer Advocate Teams!
Developer Advocate City Leader
AKIRA ONISHI
WW Developer Advocate
KYOKO NISHITO
WW Developer Advocate
TAIJI HAGINO
WW Developer Advocate
AYA TOKURA
Program Manager
TOSHIO YAMASHITA
WW Developer Advocate
NORIKO KATO
Client Developer Advocate
YASUSHI OSONOI
Digital Developer Advocate
JUNKI SAGAWA
IBM Code Patterns
https://ibm.biz/ibmcodejp
解説 + デモ動画 + ソースコードが揃ったアプリ開発パターン集
IBM Code Patterns
Javaで検索すると
IBM Code Patterns
Javaで検索すると
IBM Code Patterns
Javaで検索すると
開発者向けサイト IBM Developer
ibm.biz/IBMDevJP
最新情報やスキルアップに役⽴つ6,000を超える技術記事を提供
コンテナー、Kubernetes, OpenShiftとは
https://www.jsanet.or.jp/seminar/text/seminar_177.html
物流コンテナによる⾰命
コンテナの発明者は、全⽶有数のトラック
運送会社のオーナーとなったマルコム・
マクリーン(Malcom P. McLean)
国際貨物輸送の分野に
海陸⼀貫輸送という⼤変⾰
1970年代には世界の主要航路のコンテナ
化がほぼ完了した。わずか10年程度でこれ
ほど急激な形態の変化が起こったのは海運
史上でも他に例がない。
https://en.wikipedia.org/wiki/Malcom_McLean
港湾荷役のボトルネックを解消
物流コストの削減とスピードアップ
コンテナ⾰命は業務改⾰
陸海⼀貫輸送
海上輸送
陸送(トラック) 陸送(鉄道)港湾荷役 港湾荷役
コンテナ船
Group Name / DOC ID / Month XX, 2018 / © 2018
IBM Corporation
コンテナーテクノロジーを使ったアプリ
ケーション市場規模予測, 2022
15
$4.3B
(4644億円)
Source: 2019 Contain
IBM Developer SF Team / Introduction to
Group Name / DOC ID / Month XX, 2018 / © 2018
IBM Corporation
コンテナーテクノロジーを使っている
IT管理者
16
87%
IBM Developer SF Team / Introduction to
Source: 2019 Contain
Group Name / DOC ID / Month XX, 2018 / © 2018
IBM Corporation
1つあるいは2つのオーケストレーショ
ンツールを使っているIT管理者
17
65%
IBM Developer SF Team / Introduction to
Source: 2019 Contain
Group Name / DOC ID / Month XX, 2018 / © 2018
IBM Corporation
Kubernetes repository
へのコミット数(GitHub)
18
84,413
IBM Developer SF Team / Introduction to
Source: 2019 Contain
いま、IT業界の
コンテナ⾰命が
始まる
「仮想マシン(VM)」と「コンテナ」
コンテナは仮想マシン(VM)に⽐べてリソース効率がよい
スケールアウトが簡単
コンテナを使った開発の流れ
Dockerfileなど Docker
イメージなど
コンテナー
レジストリ
マニフェストで
コンテナ⾃体の
詳細を記述
開発者
コンテナー
イメージ作成
イメージの
登録
開発者
アプリ実⾏
アプリ開発
3段階のプロセス
コンテナーのポータビリティ
nコンテナーのポータビリティ
•アプリケーション稼働に必要な依存ファイルを
パッケージングできる
•物理サーバーに固定されない
→ 同じアーキテクチャの環境であれば
ポータビリティが存在ある
システム基盤
(クラウド)
ホストOS
システム基盤
(オンプレミス)
ホストOS
コ
ン
テ
ナ
エ
ン
ジ
ン
App1
Bin/Lib
s
App2
Bin/Lib
s
App3
Bin/Lib
s
「僕の環境では動いた」
問題が発⽣しない
コ
ン
テ
ナ
エ
ン
ジ
ン
App3
Bin/Lib
s
Kubernetesとは
23
コンテナーの運⽤実⾏と管理を⾏うオーケストレーションツール
• コンテナーが⼤量になってくると管理しきれない部分をカバー
• 複数のDockerホストの管理
• 死活監視
• スケジューリング
• スケーリング
• 障害時のリカバリー
• アプリ実⾏に必要なインフラリソースを管理
• 永続的なストレージ
• ネットワーク
• クレデンシャル情報 etc…
• 宣⾔的設定モデル
• 「あるべき状態」を記述すると、それを実現し続けようとしてくれる
• 障害時も⾃動で復旧作業を実施
Kubernetesの代表的な機能
スケールアウト 負荷分散 バージョン管理
(ロールアウト)
ネットワーク管理
永続ストレージ管理
死活監視
⾃⼰復旧
CPU / Memory リソース管理
© 2019 IBM Corporation
OpenShiftは、Kubernetesとの互換性を維持しながら、CICD機能を強化、開発者
に代わって、ビルド、リポジトリ登録、デプロイを⾃動実⾏します。
OPENSHIFT
機能拡張
OpenShift CICD利⽤
アプリケーション
(コンテナ)
Kubernetes
アプリケーション
(コンテナ)
Ubuntu / CentOS… Linux
Kubernetes
アプリケーション
(コンテナ)
コンテナ ランタイム
Linux OS
コンテナ
オーケストレーション
Kubernetesの標準機能
で構築したアプリケーション
どちらでも
動作可能
RHEL / RHCOS
コンテナ ランタイム
OpenShiftとは
Minishift とは
• OpenShiftは、Kubernetesに、Red Hat社独⾃の拡張を加え、さらに、
Red Hatのソフトウェア保守とウェブや電話での問い合わせ対応サービ
スを提供する企業向けKubernetesのプラットフォーム
• OpenShiftは、Red Hat社が提供する有償サービス(サブスクリプショ
ン )のもとで利⽤できるソフトウェア
• OpenShiftの学習やローカルの開発環境⽤に無償で提供されるのが、
Minishift (OpenShift 3.11に相当)
「MiniShiftに関する疑問の整理、「 Dockerから⼊るKubernetes」執筆打明け話とか、OKDやCRCとの整理など」
https://qiita.com/MahoTakara/items/3c1c208640518e832660 より抜粋
マイクロサービス
Java on OpenShift
https://developer.ibm.com/jp/patterns/jee-app-modernization-with-
openshift/
Java EE と Open Liberty を使⽤した架空の医療アプリ内に
Kubernetes ベースのマイクロサービスをデプロイする
Java on OpenShift
https://developer.ibm.com/jp/patterns/app-modernization-s2i-
openshift/
Kubernetes ベースのマイクロサービスで従来型の患者記録アプリを変換する
Minishiftで試してみましょう︕
• Java EEアプリケーションのモダナイゼーション
• Jave EEのアプリケーションをモダナイズしてマイクロサービス化
• ビジネスロジックはOpen liberty上のJava EEアプリケーションに
• 患者⽤UIアプリはNode.jsで
• さらにこれらを全てコンテナ化しRedHat OpenShift on IBM Cloud
に以降
• 将来は管理⽤アプリをPHPで拡張
Minishiftで試してみましょう︕
• 以前のアーキテクチャー
• Example Healthは架空の医療会社です。この会社には歴
史があり、数十万の患者記録があります。もともと、
Example Healthはアプリケーションにモノリシックアプリ
ケーション構造を使用していました。それらのアプリケー
ション構造は、メインフレーム上のDb2データベースに接続
されたWebSphereで実行されるフルスタックのJavaアプリ
ケーションでした。Example Healthの元のアーキテクチャ
は右の通りです。
オンプレミス
WebSphere
患者向けUI – JSP
(Patient UI)
ビジネスロジック
– JEE
Db2
– 患者データ(patient Data)
Synthea
– テストデータ生成
Minishiftで試してみましょう︕
• マイクロサービス化後 IBM Cloud
OpenShift
患者向けUI –
Node.js(Patient UI)
[コンテナ]
Compose for MySQLDb2
– 患者データ(patient Data)
Synthea
– テストデータ生成
コンテナ化
ビジネスロジック – JEE
OpenLiberty [コンテナ]
Minishiftで試してみましょう︕
• マイクロサービス化後 IBM Cloud
OpenShift
患者向けUI –
Node.js(Patient UI)
[コンテナ]
ビジネスロジック – JEE
OpenLiberty [コンテナ]
Compose for MySQLDb2
– 患者データ(patient Data)
Synthea
– テストデータ生成
コンテナ化
Minishiftで試してみましょう︕
• アプリ画⾯ オンプレミス
WebSphere
患者向けUI – JSP
(Patient UI)
ビジネスロジック
– JEE
Db2
– 患者データ(patient Data)
Synthea
– テストデータ生成
Minishiftで試してみましょう︕
• Minishiftでも試せるように minishift
OpenShift
患者向けUI –
Node.js(Patient UI)
[コンテナ]
ビジネスロジック – JEE
OpenLiberty [コンテナ]
MySQL – 患者データ
(patient Data) [コンテナ]
Synthea
– テストデータ生成
https://qiita.com/daihiraoka/items/23cfaed7662d36ccc7ab
コンテナ化
Minishiftで試してみましょう︕
• ⼿順
• 準備
• Minishiftインストール
• 参考
• Mavenインストール
• Dockerのインストール
• 設定
• Gitクローン
• Java EEアプリのビルド、Dockerイメージ作成、登録
• Minishift上にMySQlコンテナをデプロイ、データベースを設定
Minishiftで試してみましょう︕
• PHPプログラムによる拡張も予定してます minishift
OpenShift
患者向けUI –
Node.js(Patient UI)
[コンテナ]
ビジネスロジック – JEE
OpenLiberty [コンテナ]
MySQL – 患者データ
(patient Data) [コンテナ]
Synthea
– テストデータ生成
管理者向けアプリ
PHP(management UI)
[コンテナ]
Java on OpenShift
https://developer.ibm.com/jp/patterns/app-modernization-php-s2i-
openshift/
Kubernetes ベースのマイクロサービスで健康記録管理者⽤アプリを変換する
健康記録管理者用アプリでは、Example
Health の健康記録管理者がシステムに含ま
れるすべての患者のリストを表示して、以
下の患者データの統計内訳を確認できます。
-年齢
-性別
-最もよく施されている上位 3 つの投薬治療
-糖尿病有病率
-ぜんそく有病率
Java on OpenShift
https://github.com/nheidloff/openshift-on-ibm-cloud-
workshops/tree/master/2-deploying-to-openshift#deploying-java-
microservices-to-openshift-on-ibm-cloud
Deploying Java Microservices to OpenShift on IBM Cloud
有料
Java on OpenShift
https://github.com/IBM/cloud-native-starter#setup
Cloud Native Starter for Java EE based Microservices
on Kubernetes and Istio
Eclipse MicroProfile Config
https://developer.ibm.com/jp/patterns/configure-your-app-using-
eclipse-microprofile-config/
システム・プロパティーや環境変数などを使用して容易にアプリケーションを構成する
Eclipse MicroProfile
https://developer.ibm.com/jp/patterns/deploy-microprofile-java-
microservices-on-kubernetes/
MicroProfile を使用してJava マイクロサービスを作成し、Kubernetes 上にデプロイする
IBM Code Patterns
https://ibm.biz/ibmcodejp
解説 + デモ動画 + ソースコードが揃ったアプリ開発パターン集
開発者向けサイト IBM Developer
ibm.biz/IBMDevJP
最新情報やスキルアップに役⽴つ6,000を超える技術記事を提供
Java-minishift-20191123

Java-minishift-20191123