IBM MQ 9.2は、OpenShiftのOperatorに対応しており、簡単にクラスターにデプロイできるようになっている。
基本的には以下の公式の手順に従えばよい。
https://www.ibm.com/support/knowledgecenter/ja/SSFKSJ_9.2.0/com.ibm.mq.ctr.doc/ctr_install_uninstall.html
カタログソースの追加
デフォルトのOperator HubにはIBM MQは表示されないことと思う。まずはカタログソースを追加する。
以下のyamlファイルを作成する。
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
name: opencloud-operators
namespace: openshift-marketplace
spec:
displayName: IBMCS Operators
publisher: IBM
sourceType: grpc
image: docker.io/ibmcom/ibm-common-service-catalog:latest
updateStrategy:
registryPoll:
interval: 45m
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
name: ibm-operator-catalog
namespace: openshift-marketplace
spec:
displayName: ibm-operator-catalog
publisher: IBM Content
sourceType: grpc
image: docker.io/ibmcom/ibm-operator-catalog
updateStrategy:
registryPoll:
interval: 45m
上記の2ファイルをクラスターに適用する。
$ oc apply -f operator-source-cs.yaml
catalogsource.operators.coreos.com/opencloud-operators created
$ oc apply -f operator-source-ibm.yaml
catalogsource.operators.coreos.com/ibm-operator-catalog created
$ oc get catalogsource -n openshift-marketplace
NAME DISPLAY TYPE PUBLISHER AGE
certified-operators Certified Operators grpc Red Hat 186d
community-operators Community Operators grpc Red Hat 186d
ibm-operator-catalog ibm-operator-catalog grpc IBM Content 28s
opencloud-operators IBMCS Operators grpc IBM 59s
redhat-marketplace Red Hat Marketplace grpc Red Hat 46d
redhat-operators Red Hat Operators grpc Red Hat 186d
Operator Groupの作成
Operatorのインストールは、デフォルトだとすべてのネームスペース(プロジェクト)に対して行われるが、今回は特定のネームスペースに限定する。特定のネームスペースに限定する場合は、そのネームスペースにOperator Groupを作成する必要があるようだ。
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: ibm-mq-operator
namespace: kame-test
spec:
targetNamespaces:
- kame-test
$ oc apply -f mq-operator-group.yaml
operatorgroup.operators.coreos.com/ibm-mq-operator created
Subscription Objectの作成
以下のyamlファイルを作成して適用する。チャネルのバージョンは現時点で最新の1.4とした。
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: ibm-mq
namespace: kame-test
spec:
channel: v1.4
name: ibm-mq
source: ibm-operator-catalog
sourceNamespace: openshift-marketplace
$ oc apply -f mq-sub.yaml
subscription.operators.coreos.com/ibm-mq created
QMGRのデプロイ
まずはSWライセンス認証のためのシークレットを作成する。キーは以下のリンクから取得する(要IBM ID)。
https://myibm.ibm.com/products-services/containerlibrary
$ oc create secret docker-registry ibm-entitlement-key -n kame-test \
--docker-server=cp.icr.io \
--docker-username=cp \
--docker-password=XXXXXXXXXXX \
--docker-email=XXXXXXXX
secret/ibm-entitlement-key created
QMGRデプロイ用のyamlを作成し、デプロイする。今回はとりあえず動くものをデプロイする目的で、永続ストレージは利用しない。実運用で利用する場合はyamlにボリューム情報を記載するのがよいと思われる。
apiVersion: mq.ibm.com/v1beta1
kind: QueueManager
metadata:
name: test-qmgr01
namespace: kame-test
spec:
version: 9.2.1.0-r1
license:
accept: true
license: L-APIG-BMJJBM
web:
enabled: true
queueManager:
name: "QUICKSTART"
storage:
queueManager:
type: ephemeral
template:
pod:
containers:
- name: qmgr
env:
- name: MQSNOAUT
value: "yes"
$ oc apply -f test-qmgr01.yaml
queuemanager.mq.ibm.com/test-qmgr01 created
デプロイが成功すると、ステータスがRunningになる。
デフォルトだと1つのPodで1コア/1GBのメモリーを必要としているため、クラスターのリソース起因でPendingになっていないか確認するとよい。
$ oc get queuemanager -n kame-test
NAME PHASE
test-qmgr01 Running
実体としては、StatefulSetとしてデプロイされていることが分かる。また、Routerが自動的に作成されている(Webコンソール用も含めて)。
$ oc get all -n kame-test
NAME READY STATUS RESTARTS AGE
pod/ibm-common-service-operator-769d788d44-wdjkc 1/1 Running 0 21m
pod/ibm-mq-7848fd4d66-b65t2 1/1 Running 0 21m
pod/test-qmgr01-ibm-mq-0 1/1 Running 0 4m53s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ibm-mq-webhook ClusterIP 172.21.187.212 <none> 443/TCP 21m
service/test-qmgr01-ibm-mq ClusterIP 172.21.104.164 <none> 9443/TCP,1414/TCP 10m
service/test-qmgr01-ibm-mq-metrics ClusterIP 172.21.222.188 <none> 9157/TCP 10m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/ibm-common-service-operator 1/1 1 1 21m
deployment.apps/ibm-mq 1/1 1 1 21m
NAME DESIRED CURRENT READY AGE
replicaset.apps/ibm-common-service-operator-769d788d44 1 1 1 21m
replicaset.apps/ibm-mq-7848fd4d66 1 1 1 21m
NAME READY AGE
statefulset.apps/test-qmgr01-ibm-mq 1/1 10m
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
route.route.openshift.io/test-qmgr01-ibm-mq-qm test-qmgr01-ibm-mq-qm-kame-test.XXXXXXXXXXXXXXXXXXXXX.jp-tok.containers.appdomain.cloud test-qmgr01-ibm-mq 1414 passthrough None
route.route.openshift.io/test-qmgr01-ibm-mq-web test-qmgr01-ibm-mq-web-kame-test.XXXXXXXXXXXXXXXXXXXXX.jp-tok.containers.appdomain.cloud test-qmgr01-ibm-mq 9443 passthrough None
NAME PHASE
queuemanager.mq.ibm.com/test-qmgr01 Running
Podにログインすると、runmqscが実行可能になっています。
$ oc -n kame-test rsh test-qmgr01-ibm-mq-0
sh-4.4$
sh-4.4$ runmqsc
5724-H72 (C) Copyright IBM Corp. 1994, 2020.
Starting MQSC for queue manager QUICKSTART.
dis q(*)
1 : dis q(*)
AMQ8409I: Display Queue details.
QUEUE(AMQ.600C0F612593CC02) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.ADMIN.ACCOUNTING.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.ADMIN.ACTIVITY.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.ADMIN.CHANNEL.EVENT) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.ADMIN.COMMAND.EVENT) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.ADMIN.COMMAND.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.ADMIN.CONFIG.EVENT) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.ADMIN.LOGGER.EVENT) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.ADMIN.PERFM.EVENT) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.ADMIN.PUBSUB.EVENT) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.ADMIN.QMGR.EVENT) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.ADMIN.STATISTICS.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.ADMIN.TRACE.ACTIVITY.QUEUE)
TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.ADMIN.TRACE.ROUTE.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.AMQP.COMMAND.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.BROKER.ADMIN.STREAM) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.BROKER.CONTROL.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.BROKER.DEFAULT.STREAM) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.BROKER.INTER.BROKER.COMMUNICATIONS)
TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.CHANNEL.INITQ) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.CHANNEL.SYNCQ) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.CHLAUTH.DATA.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.CICS.INITIATION.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.CLUSTER.COMMAND.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.CLUSTER.HISTORY.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.CLUSTER.REPOSITORY.QUEUE)
TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.CLUSTER.TRANSMIT.MODEL.QUEUE)
TYPE(QMODEL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.CLUSTER.TRANSMIT.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.DDELAY.LOCAL.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.DEAD.LETTER.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.DEFAULT.ALIAS.QUEUE) TYPE(QALIAS)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.DEFAULT.INITIATION.QUEUE)
TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.DEFAULT.LOCAL.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.DEFAULT.MODEL.QUEUE) TYPE(QMODEL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.DEFAULT.REMOTE.QUEUE) TYPE(QREMOTE)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.DOTNET.XARECOVERY.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.DURABLE.MODEL.QUEUE) TYPE(QMODEL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.DURABLE.SUBSCRIBER.QUEUE)
TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.HIERARCHY.STATE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.INTER.QMGR.CONTROL) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.INTER.QMGR.FANREQ) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.INTER.QMGR.PUBS) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.INTERNAL.REPLY.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.INTERNAL.REQUEST.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.JMS.TEMPQ.MODEL) TYPE(QMODEL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.MQEXPLORER.REPLY.MODEL) TYPE(QMODEL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.MQSC.REPLY.QUEUE) TYPE(QMODEL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.NDURABLE.MODEL.QUEUE) TYPE(QMODEL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.PENDING.DATA.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.PROTECTION.ERROR.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.PROTECTION.POLICY.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.REST.REPLY.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.RETAINED.PUB.QUEUE) TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.SELECTION.EVALUATION.QUEUE)
TYPE(QLOCAL)
AMQ8409I: Display Queue details.
QUEUE(SYSTEM.SELECTION.VALIDATION.QUEUE)
TYPE(QLOCAL)