こんにちは。
てくさぽBLOGメンバーの岡田です。
IBM WebSphere Hybrid Edition(以下 WSHE)の導入をAzure上で検証してみた3回シリーズの2回目になります。
本記事では前回実施したAzure上にインストールしたOpenShift4.5環境に、WebSphere Liberty Coreをインストールしていきます。
WebSphere Hybrid Editionを導入してみた Vol.1 -OpenShift導入編-
WebSphere Hybrid Editionを導入してみた Vol.2 -WebSphere Liberty導入編- *本編
WebSphere Hybrid Editionを導入してみた Vol.3 -ツール編-
1.WSHEというソフトウェアが無い?
そもそもWSHEとはどのようなソフトウェアなのでしょうか。
分かりづらいですが、WSHEライセンスを購入してもWSHEというソフトウェアが利用できるわけではありません。WSHEライセンスは以下のWebSphere ApplicationServer関連の主要な製品をまとめたものです。
WebSphere Application Serverは,従来型のWebSphere traditionalおよび,コンテナ環境にも対応したWebSphere Libertyの二種類のランタイムがあります。今回は、WebSphere Libertyランタイムをインストールしてみます。
2.作業用サーバーを用意する
今回、Azure上に構築したRHEL8サーバーに以下を導入します。*個々のインストール手順は省略
- ocコマンド
- podmanコマンド
- helmコマンド
3.WebSphere Libertyのインストール
ここからは、Azure上のRHEL8サーバーにログインして行います。
(1)統合OCPレジストリーへのアクセス権を付与する
・OCPにログインします。
oc login -u kubeadmin -p <パスワード> https://api.nicpwhecluster.xxx.com:6443 |
・oc get nodesでノードのホスト名を確認します。
$ oc get node NAME STATUS ROLES AGE VERSION nicpwhecluster-h8lq5-master-0 Ready master 4d23h v1.18.3+e574db2 nicpwhecluster-h8lq5-master-1 Ready master 4d23h v1.18.3+e574db2 nicpwhecluster-h8lq5-master-2 Ready master 4d23h v1.18.3+e574db2 nicpwhecluster-h8lq5-worker-japaneast-1 Ready worker 4d23h v1.18.3+e574db2 nicpwhecluster-h8lq5-worker-japaneast-2 Ready worker 4d23h v1.18.3+e574db2 nicpwhecluster-h8lq5-worker-japaneast-3 Ready worker 4d23h v1.18.3+e574db2 |
・今回はマスターノードの1つ「nicpwhecluster-h8lq5-master-0」で実行します。クラスタから内部経路を使ってレジストリにアクセスします。
$ oc debug nodes/nicpwhecluster-h8lq5-master-0 Starting pod/nicpwhecluster-h8lq5-master-0-debug … To use host binaries, run `chroot /host` Pod IP: 10.0.0.7 If you don’t see a command prompt, try pressing enter. sh-4.2# |
・ノード上でocやpodmanなどのツールにアクセスできるように次のコマンドを実行します。
sh-4.2# chroot /host sh-4.4# |
・アクセストークンを使用して、コンテナイメージ・レジストリにログインします。
sh-4.4# oc login -u kubeadmin -p <パスワード> https://api.nicpwhecluster.xxx.com:6443 The server uses a certificate signed by an unknown authority. You can bypass the certificate check, but any data you send to the server could be intercepted by others. Use insecure connections? (y/n): yLogin successful.You have access to 58 projects, the list has been suppressed. You can list all projects with ‘oc projects’Using project “default”.Welcome! See ‘oc help’ to get started. sh-4.4# sh-4.4# podman login -u kubeadmin -p $(oc whoami -t) image-registry.openshift-image-registry.svc:5000 WARNING! Using –password via the cli is insecure. Please consider using –password-stdin Login Succeeded! sh-4.4# |
・動作確認します。レジストリdocker.ioからイメージをローカルに持ってきます。
sh-4.4# podman pull docker.io/hello-world Trying to pull docker.io/hello-world… Getting image source signatures Copying blob 0e03bdcc26d7 done Copying config bf756fb1ae done Writing manifest to image destination Storing signatures bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b sh-4.4# |
・取得できたか確認します。
sh-4.4# podman images REPOSITORY TAG IMAGE ID CREATED SIZE quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> e62c0ee30db5 3 weeks ago 505 MB quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> b920241dcb5e 3 weeks ago 331 MB quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> 14b9f9be4696 3 weeks ago 312 MB (途中省略) quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> 088760d6a49a 3 weeks ago 912 MB docker.io/library/hello-world latest bf756fb1ae65 13 months ago 20 kB sh-4.4# |
・レジストリに対してpodman pushを実行します。
sh-4.4# podman tag docker.io/hello-world image-registry.openshift-image-registry.svc:5000/openshift/hello-world sh-4.4# podman push image-registry.openshift-image-registry.svc:5000/openshift/hello-world Getting image source signatures Copying blob 9c27e219663c done Copying config bf756fb1ae done Writing manifest to image destination Storing signatures sh-4.4# |
(2)統合OCPレジストリーのエクスポーズ
・DefaultRoute を 「True」にします。
$ oc patch configs.imageregistry.operator.openshift.io/cluster –patch ‘{“spec”:{“defaultRoute”:true}}’ –type=merge config.imageregistry.operator.openshift.io/cluster patched (no change) $ |
・podmanでログインします。
$ HOST=$(oc get route default-route -n openshift-image-registry –template='{{ .spec.host }}’) $ echo $HOST default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com $ $ oc whoami -t M3Dbj0zF2oK68yG21jf7WTV37XeWR8EKRagF62QJOL0 $ $ podman login -u kubeadmin -p <パスワード> –tls-verify=false $HOST Login Succeeded! |
(3)SecurityContextConstraints (SCC) の定義
・https://github.com/IBM/charts/tree/master/stable/ibm-websphere-liberty内の記載から以下の赤枠箇所の内容を含んだyamlファイルを作成します。今回はibm-websphere-liberty-scc.yamlという名前で作成しました。
・oc applyコマンドでibm-websphere-liberty-scc を定義します。
$ oc apply -f ./ibm-websphere-liberty-scc.yaml securitycontextconstraints.security.openshift.io/ibm-websphere-liberty-scc created |
(4)プロジェクトwlp-sample作成
Websphere Liberty用にプロジェクトを作成します。今回は、Webコンソールから「wlp-sample」という名前で作成します。
(5)コンテナ・イメージのビルド
・server.xmlの用意
https://github.com/WASdev/ci.docker/blob/master/ga/latest/full/server.xml内の、36行あるserver.xmlの内容をコピーし、ファイルserver.xmlを作成します。
・以下の内容のDockerファイルを作成します。
FROM ibmcom/websphere-liberty:19.0.0.12-full-java8-ibmjava-ubi COPY –chown=1001:0? server.xml /config/ RUN installUtility install –acceptLicense defaultServer |
・コンテナ・イメージをビルドします。
$ podman build -f ./Dockerfile -t mylibertyapp:1.0 STEP 1: FROM ibmcom/websphere-liberty:19.0.0.12-full-java8-ibmjava-ubi Getting image source signatures Copying blob 58e1deb9693d done Copying blob 78afc5364ad2 done Copying blob 3325260754e7 done Copying blob 4427719dd2c9 done Copying blob c059e0bc6ac9 done Copying blob 0169ad963667 done Copying blob 6195cb089ab9 done Copying blob 9f87c21e1265 done Copying blob 725fc7f0231d done Copying blob 0331a4de6fdc done Copying blob bdab1c39af4a done Copying blob f5b53ae0ca41 done Copying config ce3acc7fda done Writing manifest to image destination Storing signatures STEP 2: COPY –chown=1001:0 server.xml /config/ fbd6f3d9cba9a7a72ac7a0dc3e3011b6400fdb2fd3e21fa34959dfe1925af803 STEP 3: COPY –chown=1001:0 SampleWebApp.war /config/dropins/ d64e1ce4931688a84d354446fbd4fa9f4744ef65cdcb187f830a2c9ea114dff8 STEP 4: RUN installUtility install –acceptLicense defaultServer Checking for missing features required by the server … The server does not require any additional features. No features were installed.Start product validation… Product validation completed successfully. STEP 5: COMMIT mylibertyapp:1.0 515b092feddf7a2ebb165bbdab187bbfd54bf3bf09b55651b990b7da5b76f767 $ |
・作成されたイメージを確認します。
$ podman images | grep myliberty localhost/mylibertyapp 1.0 515b092feddf 28 seconds ago 738 MB $ |
(6)Buildしたコンテナイメージを統合OCPレジストリーにpush
・まず統合OCPレジストリーへログインします。
$ podman login default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com -u kubeadmin -p 75tT5caixaa_Mm7K6HiVT6xvbyFWeoHf1Dp1soB-21Y –tls-verify=false Login Succeeded! $ |
・ビルドしたイメージに統合OCPレジストリーのホスト名とプロジェクトを示す名前を付与します。
実行したらpodman imagesコマンドで確認します。
$ podman tag mylibertyapp:1.0 default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp:1.0
$ podman images | grep myliberty |
・統合OCPレジストリーへコンテナ・イメージを登録(push)します。
$ podman push default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp:1.0 –tls-verify=false Getting image source signatures Copying blob 995a5e8c59d9 done Copying blob 9e4e9b467e1d done Copying blob 18bd03b00625 done Copying blob 33037ee11bc5 done Copying blob 1d7ab3c032a8 done Copying blob da31cc4e7dec done Copying blob eeb6d8f926af done Copying blob 1228a4ab5ec0 done Copying blob 1235447b1b10 done Copying blob 60d1e32eff28 done Copying blob 6ab8cd79d784 done Copying blob 86b23fed23f4 done Copying blob 597be5f3fcff done Copying blob 7dd002d4a36c done Copying blob 6a5e24c477f6 done Copying config 515b092fed done Writing manifest to image destination Copying config 515b092fed done Writing manifest to image destination Storing signatures $ |
・コンテナ・イメージが統合OCPレジストリーにpushされたことを確認します。
$ oc get imagestream NAME IMAGE REPOSITORY TAGS UPDATED mylibertyapp default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp 1.0 55 seconds ago$ oc describe imagestream mylibertyapp Name: mylibertyapp Namespace: wlp-sample Created: About a minute ago Labels: <none> Annotations: <none> Image Repository: default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp Image Lookup: local=false Unique Images: 1 Tags: 11.0 no spec tag* image-registry.openshift-image-registry.svc:5000/wlp-sample/mylibertyapp@sha256:bc6bc8fac41fd59b42d37e02888a3348f057c5caa0d8b41fd74d9e9f4aabdab4 About a minute ago $ |
(7)SCCをサービス・アカウントに付与(grant)
・(3)で作成したibm-websphere-liberty-sccをWebSphere Libertyが使用するサービス・アカウントに付与します。
$ oc project wlp-sample
$ oc adm policy add-scc-to-user ibm-websphere-liberty-scc -z mylibertyapp-ibm-websphe |
(8)WebSphere LibertyのPodをデプロイ
・Helm Chartから変数ファイルを抽出します。
*WebSphere Liberty用helm Chart(「ibm-websphere-liberty-1.10.0.tgz」)をhttps://github.com/IBM/charts/tree/master/repo/stable からダウンロードしておきます。
$ helm inspect values ./ibm-websphere-liberty-1.10.0.tgz > mylibertyapp.yaml $ |
・抽出した変数ファイルをエディタで開いてパラメーターを修正します。今回は以下の2箇所を更新しました。
ー (変更前)license: “” ⇒ (変更後)license: “accept”
ー (変更前)ssl: enabled: true ⇒ (変更後)ssl: enabled: false
・修正した変数ファイルを指定して「helm install」コマンドを実行し、デプロイします。
$ helm install mylibertyapp ./ibm-websphere-liberty-1.10.0.tgz -f ./mylibertyapp.yaml NAME: mylibertyapp LAST DEPLOYED: Mon Mar 1 08:26:17 2021 NAMESPACE: wlp-sample STATUS: deployed REVISION: 1 NOTES: + If you are running on IBM Cloud Kubernetes Service, get the application address by running these commands: ibmcloud cs workers $(kubectl config current-context) export NODE_IP=<Worker node public IP from the first command> export NODE_PORT=$(kubectl get –namespace wlp-sample -o jsonpath=”{.spec.ports[0].nodePort}” services mylibertyapp-ibm-websphe) echo Application Address: http://$NODE_IP:$NODE_PORTOtherwise, run the following commands: export NODE_IP=$(kubectl get nodes -l proxy=true -o jsonpath=”{.items[0].status.addresses[?(@.type==\”Hostname\”)].address}”) export NODE_PORT=$(kubectl get –namespace wlp-sample -o jsonpath=”{.spec.ports[0].nodePort}” services mylibertyapp-ibm-websphe) echo Application Address: http://$NODE_IP:$NODE_PORT $ |
・正常にデプロイできたか確認します。
$ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION mylibertyapp wlp-sample 1 2021-03-01 08:26:17.876891227 +0000 UTC deployed ibm-websphere-liberty-1.10.0 19.0.0.6 $ |
・作成された主要なOCPリソースの一覧と状況を確認します。
$ oc get all -l app=mylibertyapp-ibm-websphe NAME READY STATUS RESTARTS AGE pod/mylibertyapp-ibm-websphe-76478c8fcd-ngqpp 1/1 Running 0 82sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/mylibertyapp-ibm-websphe NodePort 172.30.179.226 <none> 9080:30797/TCP 82sNAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/mylibertyapp-ibm-websphe 1/1 1 1 82sNAME DESIRED CURRENT READY AGE replicaset.apps/mylibertyapp-ibm-websphe-76478c8fcd 1 1 1 82s $ |
(9)手作業でRouteを定義し、WebSphere Libertyにアクセスします
・作成されたServiceを確認します。
$ oc get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mylibertyapp-ibm-websphe NodePort 172.30.179.226 <none> 9080:30797/TCP 112s $ |
・Routeを作成します。
$ oc expose service mylibertyapp-ibm-websphe route.route.openshift.io/mylibertyapp-ibm-websphe exposed $ |
・RouteのHOST名を確認します。
$ oc get route NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD mylibertyapp-ibm-websphe mylibertyapp-ibm-websphe-wlp-sample.apps.nicpwhecluster.xxx.com mylibertyapp-ibm-websphe http None $ |
・最後に、Webページにアクセスしてみます。
ー コマンドの場合
$ curl -s http://mylibertyapp-ibm-websphe-wlp-sample.apps.nicpwhecluster.xxx.com <!DOCTYPE html> <html lang=”en” xml:lang=”en”> <head> <meta charset=”utf-8″ name=”viewport” content=”width=device-width,initial-scale=1.0″> <!–title data-externalizedString=”WELCOME_TITLE”></title–> <title>WebSphere Liberty 19.0.0.12</title> <style> @font-face { font-family: IBMPlexSans-Medium; src: url(‘fonts/IBMPlexSans-Medium.woff’); } (以下、省略) |
4.まとめ
いかがでしたでしょうか。
コンテナ版なのでインストールは簡単かな、と思っていたのですが実行するコマンドも多くて結構大変だった印象です。大まかには「コンテナイメージのビルド」⇒「OCPレジストリにプッシュ」⇒「Podのデプロイ」という流れなのですがそれぞれの工程ごとにいろいろなコマンドを打つ必要があるので、実際にやってみようと思われている方の参考になればと思います。
ここまでお読みいただきありがとうございました。
次回はWSHEで利用可能な各種ツール群をインストールしてみた内容をお伝えいたします。
お問い合わせ
この記事に関するご質問は下記までご連絡ください。
エヌアイシー・パートナーズ株式会社
技術支援本部
E-Mail:nicp_support@NIandC.co.jp