RED HAT |Daein Park
#rhconvergence
1
Red Hat Customer Convergence
#rhconvergence
2.
RED HAT |Daein Park
#rhconvergence
2
OpenShift で JBoss EAP 構築
Daein Park
Technical Support Engineer
2018/05/29
3.
RED HAT |Daein Park
#rhconvergence
3
AGENDA
●
OpenShift の概要
●
OpenShift と JBoss EAP
●
JBoss EAP の構築( DEMO )
●
アプリケーション構築の TIPs
●
QA
4.
RED HAT |Daein Park
#rhconvergence
4
OpenShift の概要
5.
RED HAT |Daein Park
#rhconvergence
5
OpenShift の簡単なご紹介
●
Enterprise Kubernetes and more
https://www.openshift.com/learn/topics/kubernetes/
●
Product Family
●
OpenShift Online (Multi tenant)
●
OpenShift Dedicated (Single tenant)
●
OpenShift Container Platform ( 本日の対象 )
●
Built on RHEL, Kubernetes, Docker +Alpha
●
Microservice Architecture, Infrastructure as Code
●
DevOps ...
6.
RED HAT |Daein Park
#rhconvergence
6
OpenShift のコアコンセプト
●
Containers and Images
●
Pods and Services
●
Projects and Users
●
Builds and ImageStreams
●
Deployments
●
Routes
●
Persistent Volumes
●
Persistent Volume Claims
7.
RED HAT |Daein Park
#rhconvergence
7
OpenShift のレイヤ構成
8.
RED HAT |Daein Park
#rhconvergence
8
OpenShift のデプロイフロー
●
S2I(Source To Image) はソースコードから Docker イメージをビルドするツールセット
●
ベースイメージにソースを入れて新しいイメージ作成 Speed, Image flexibility, Operational security ...
※ 下記の図は処理フローの説明のため一部処理が省略されております。
9.
RED HAT |Daein Park
#rhconvergence
9
OpenShift と JBoss EAP
10.
RED HAT |Daein Park
#rhconvergence
10
OpenShift で JBoss EAP の構築メリット
●
Java EE のアプリケーションをコンテナ環境で稼働する Best Practice→JBoss EAP
●
RHCC から提供するイメージで簡単に利用可能(+セキュリティ)
●
OpenShift をサポートする機能を提供
●
Automated transaction recovery 機能
●
OpenShift 機能と関連して設定ガイド及び資料が充実
●
関連製品に対しても OpenShift をサポート (AMQ, RHDM, Fuse ...)
11.
RED HAT |Daein Park
#rhconvergence
11
JBoss EAP の構築 (DEMO)
RED HAT |Daein Park
#rhconvergence
13
DEMO 環境
●
OpenShift 構成
●
OpenShift Container Platform v3.9
●
Master ホスト x 1
●
CPU: Core x 4
●
Memory: 8Gi
●
Node ホスト x 3
●
CPU: Core x 2
●
Memory: 4Gi
●
ストレージ構成
●
内部 Service の Pod 用 : NFS
●
Apps の Pod 用 : CNS (GlusterFS)
★iSCSI で Block タイプの Volume を Provision
14.
RED HAT |Daein Park
#rhconvergence
14
DEMO システム構成
●
Application 構成
●
JBoss EAP (Application Server)
●
JBoss EAP v7.1 for OpenShift
●
Httpd v2.4 (Web Server)
●
PostgreSQL v9.2 (DB Server)
●
Management System 構成
●
CI/CD : Jenkins
●
Monitoring : Prometheus
●
Logging : EFK
15.
RED HAT |Daein Park
#rhconvergence
15
DEMO 内容
●
アプリケーション環境を Dev(Build)→Stg(Deploy)→Prod(Deploy) 順に作成
●
S2I による Build, Rolling Update による Deploy
16.
RED HAT |Daein Park
#rhconvergence
16
JBoss EAP for OpenShift イメージ関連設定 #1
●
Jboss EAP for OpenShift イメージを取得する方法
●
Red Hat Registry から直接 PULL する方法
●
それ以外には third-party registry, Satellite 等
●
作業手順
●
Red Hat Container Catalog サイトにアクセス
●
関連イメージを検索して PULL するイメージを選択
●
Get Latest Image タグを選択して関連プラットフォームを選択
●
提示された方法に従ってイメージを取得
17.
RED HAT |Daein Park
#rhconvergence
17
JBoss EAP for OpenShift イメージ関連設定 #2
●
Red Hat Container Catalog
●
RHCC
[ https://access.redhat.com/containers ]
●
日本語の説明ページ
[http://jp-redhat.com/openeye_online/column/oss-note/5894/]
●
セキュリティチームの審査
●
FAQ
18.
RED HAT |Daein Park
#rhconvergence
18
JBoss EAP for OpenShift イメージ関連設定 #3
19.
RED HAT |Daein Park
#rhconvergence
19
JBoss EAP for OpenShift イメージ関連設定 #4
●
RHCC からコピーしたコマンドの実行
●
openshift プロジェクトにインポートすることで共有可能
●
既存 ImageStream 名を指定し、タグでバージョンを指定(バージョンアップも同じ手順)
-- Import the image to openshift namespace
master1~# oc import-image jboss-eap71-openshift:1.1 -n openshift
--from=registry.access.redhat.com/jboss-eap-7/eap71-openshift:1.1
--confirm
-- Check the image imported
master1~# oc get is jboss-eap71-openshift -n openshift
-- Tag the latest version
master1~# oc tag jboss-eap71-openshift:1.1 jboss-eap71-openshift:latest -n openshift
20.
RED HAT |Daein Park
#rhconvergence
20
DEMO: Jenkins 環境構築
RED HAT |Daein Park
#rhconvergence
46
DEMO:Prod 環境構築 #1-9
●
Web Console, Service Catalog (Template Service Broker)
47.
RED HAT |Daein Park
#rhconvergence
47
DEMO 内容 (再掲)
●
Application 構成を Dev→Stg→Prod →順に作成 完了
●
Build(S2I), Rolling Update による Deploy
48.
RED HAT |Daein Park
#rhconvergence
48
アプリケーションの構築 TIPs
49.
RED HAT |Daein Park
#rhconvergence
49
OpenShift でよく発生する問題
実はコンテナ環境だから OpenShift だから発生する問題ではないです。
●
アプリケーションの Pod を Scale したら追加される Pod が起動失敗する
●
急停止された DB の Pod が次回起動時に自動リカバリーできなくて起動失敗する
●
Pod の暴走によって node ホスト全体の Pod 移動が発生する
●
アプリケーションが DB 等依存サービスがあったら起動順序の制御はどうするのか?
50.
RED HAT |Daein Park
#rhconvergence
50
アプリケーションの Pod を Scale したら追加される Pod が起動失敗する
●
アプリケーションで冗長構成が対応できるか確認
●
1 つの Pod では問題なかったのに Scale すると Pod が起動できなくなる
●
ログをみるとリソースへのロックや冗長構成に対応していないケース
51.
RED HAT |Daein Park
#rhconvergence
51
急停止された DB の Pod が次回起動時に自動リカバリーできなくて起動失敗する
●
NFS で PV を作成して利用することが原因
●
殆どの RDBMS が該当
REDO ログ系は必ず DISK に保存される担保がないと異常停止されたらデータの Recovery ができない
そのため fsync/fdatasync で DISK に即時に書き込むよう制御する必要がある
●
Block 系の Storage を専用で利用する必要があります。
●
ReadWriteOnce の PV を作成して利用
52.
RED HAT |Daein Park
#rhconvergence
52
Pod の暴走によって node ホスト全体の Pod 移動が発生する
●
メモリの場合、閾値を超えたら OOM-Killer 起動される。
●
Requests == Limits
●
CPU は Requests の設定を実施しましょう。
●
性能テスト等で事前に閾値を決めておきましょう。
resources:
requests:
memory: "512Mi"
cpu: "1000m"
limits:
memory: "512Mi"
cpu: "2000m"
53.
RED HAT |Daein Park
#rhconvergence
53
アプリケーションが DB 等依存サービスがあったら起動順序の制御はどうするのか?
●
アプリケーションを構成するコンポーネント間の起動順序 == 依存関係
●
Liveness, ReadinessProbe を適切に設定して対応可能
●
LivenessProbe: Pod に再起動する必要か監視
●
DB サービスが稼働していない場合には AP サーバを再起動させる
●
ReadinessProbe: Pod のサービスが外部からアクセスできる状態か監視
●
WEB サーバは AP サーバで該当ページが表示できない限り外部トラフィックを受けない
●
両方を組み合わせれば自動リカバリーが実現できる
<1> AP サーバがアクセスできない
<2> 外部からのアクセス遮断
<3> 復旧しないと再起動
<4> アクセス可能になったら再度外部公開等 ⇒ <1>