More Related Content
Similar to Legacy App Operator というパワーワードで Cloud Native 時代を乗り越えられないか考えてみた (20)
Legacy App Operator というパワーワードで Cloud Native 時代を乗り越えられないか考えてみた
- 1. Legacy App Operator というパワーワードで
Cloud Native 時代を乗り越えられないか
考えてみた
2019-12-20
OPENSHIFT.RUN
Daiki Kawanuma
IBM Japan, Ltd.
- 4. 「Lift & Shift だ」と人々は言う
でも実際に Shift しますか?
Lift Shift
OS
App
OS
App
OS
App
- 6. 対象となるレガシーアプリ
やばさ その1
レガシーアプリの仕様
JDK バージョン:1.5
フレームワーク:使用せずスクラッチ
ビルド方式:Apache Antベースの独自仕様
パッケージ方式:war
アプリケーションサーバ:Tomcat
使用プロトコル:http/https, JDBC, RMI
Web
Batch
Server
Batch
Timer
DB
JDBC
JDBC
JDBC
RMI
RMI
- 7. 対象となるレガシーアプリ
やばさ その2
ビルド方式
Ant ベースの独自 Windows バッチ
数十のフォルダを強引にwar構造にした上で
1つの巨大なwarファイルを作り上げる
アプリケーション構造
1つのwarであるにも関わらずプロセスは3つ
warを展開した後、個別にプロセスを起動
依存関係があり、起動の順番に注意が必要
# BatchServer コンポーネントプロセス
java -cp /opt/apache-tomcat/…/classes/: ¥
labo.hirarins.legacy.app.batch.Server &
# BatchTimer コンポーネントプロセス
java -cp /opt/apache-tomcat/…/classes/: ¥
labo.hirarins.legacy.app.batch.Timer &
# Web コンポーネントプロセス (Tomcat プロセス)
/opt/apache-tomcat/bin/catalina.sh run
- 8. 対象となるレガシーアプリ
やばさ その3
RMI通信先の
ハードコーディング
private static synchronized void setRegistry() {
if (registry == null) {
registry = LocateRegistry.getRegistry("localhost");
}
}
アプリケーション起動時の
初期データ書き込み
起動
↓
初期データ書き込み
↓
再起動
↓
初期データ書き込み失敗
起動
↓
初期データ書き込み
↓
スケールアウト
↓
初期データ書き込み失敗
←データ削除が必要→
アカウントロック解除機能の
欠如
ログイン失敗数超過
↓
ロック解除依頼メール送信
↓
運用担当者のオペレーションで解除
バッチ処理の
リカバリ・リラン
• 単純リランで解決するバッチ処理エラーなど存在しない
• 運用監視システムによって発報された障害連絡が運用担当者に届く
• 昼夜問わず対応が強いられる
- 11. Legacy App Operator
その1
apiVersion: ”example.com/v1"
kind: LegacyApp
metadata:
name: enterprise-xxx
spec:
db-hostname: postgres.default.svc.cluster.local
db-port: 5432
db-dbname: postgres
db-user: postgres
db-password: password
業務チームにやってもらうこと
legacyapp-cr.yaml
これだけ!!
1. ビルド済み War の提供
2. CR.yaml の提供
- 12. Legacy App Operator
その2
機能別に Pod を分離
Web Batch
Server
Batch
Timer
catalina.sh
java
BatchServer
java
BatchTimer
Ambassador コンテナの差し込み
Web
Batch
Server
Batch
Timer
localhost:1099
localhost:1099
batch-server:1099
- 14. regacy-
app:1.0.0
war
1. Legacy App Dockerfile
batch-server-
deployment
.yaml
batch-timer-
deployment
.yaml
web-
deployment
.yaml
2. Legacy App Deployments
ref
legacyapp-
operator
.shapply
5. Operator Shell
operator:
1.0.0include
6. Operator Dockerfile
operator-
deployment
.yaml
7. Operator Deployment
ref
legacyapp-
cr.yaml
legacyapp-
crd.yaml
4. Legacy App CR 3. Legacy App CRD
ref
listen
基盤チーム
業務チーム