App Connect

 View Only

Deploying a queue manager from the OpenShift web console

By AMAR SHAH posted Mon December 13, 2021 06:59 AM

  

This blog is part of a series. For the whole series list see here


In Scenario 4a, we showed you how to deploy an IBM MQ queue manager in a container using the Kubernetes (OpenShift) command line interface (CLI). That showed that it’s really just a couple of commands and all the detail is really in the definition files.  That’s certainly the approach you’ll want to move to for production so you can automate the deployment through pipelines. However, sometimes it’s useful to just be able to go do actions through a user interface without having to know the detail command lines, and file formats, and that’s what we’re going to look at in this scenario.

Installing the IBM MQ Operator

IBM MQ Operator that we discussed in Scenario 4a will once again be used under the covers to perform the deployment. The operator also provides us with the user interface, which as you will discover, is neatly integrated with the OpenShift web console.

If you did not perform scenario 4a on your environment, you will not yet have the IBM MQ Operator in your catalogue. The instructions for installing the operator are here:

Installing and uninstalling the IBM MQ Operator on Red Hat OpenShift

 

Prepare the queue and channel definitions in a ConfigMap

When we come to create the queue manager, it will need a set of definitions of the queues and channels it is to host, and any settings for the queue manager itself.

Our mqsc definition looks like this:

    DEFINE QLOCAL('BACKEND') REPLACE
   DEFINE CHANNEL('ACEMQCLIENT') CHLTYPE (SVRCONN) SSLCAUTH(OPTIONAL)
    ALTER QMGR CHLAUTH(DISABLED)
    REFRESH SECURITY

 

The appropriate way for a container to pick up settings such as these is via a Kubernetes ConfigMap.

This configuration, and Kubernetes ConfigMaps are described in a little more detail in Scenario 4a.

We will create this via the user interface using the following screen.

Log into the OpenShift web console, and switch to the namespace in which you want to create the queue manager. In our example  we will use a namespace called “mq”.

You can create a new namespace (called a Project in OpenShift) in the OpenShift console as shown below


Once you have created the required Project/Namespace,  we can then proceed to the creation of ConfigMap. The ConfigMap option is available in the left hand menu as shown below.





Enter the required yaml definition in the text box as shown above  and click Create. 

A sample yaml definition is provided below

 

apiVersion: v1
kind: ConfigMap
metadata:
  name: mqsc-example
namespace: mq
data:
  example1.mqsc: |
    DEFINE QLOCAL('BACKEND') REPLACE
    DEFINE CHANNEL('ACEMQCLIENT')  CHLTYPE (SVRCONN)   SSLCAUTH(OPTIONAL)
    ALTER QMGR CHLAUTH(DISABLED)
    REFRESH SECURITY

Create a QueueManager instance

 

Note that the QueueManager and ConfigMap need to be in the same namespace, so ensure you are still in the mq namespace (Project in OpenShift).

Go to the “installed operators”,



search for “IBM MQ” and then click on “Create instance” as shown in the figure below.



This will take you through a guided user interface allowing you to fill in the details for your queue manager. You can accept all the defaults. The only fields you will need to edit:

  • Queue Manager instance name: quickstart-cp4i
  • Accept the License (switch License field to “true”)



You will notice at the top of the form that you can switch to a “YAML view”, and you will see that the UI has built up a file much the same as the mq-quickstart.yaml we used in Scenario 4a. Indeed this is one of the easiest ways to create a correctly formatted file that you can then use on the command line.

Paging down the form we can choose the version of the MQ product to use.

For simplicity, leave the storage choice as ephemeral since we are not concerned with persistent storage of our messages for our current examples.



In the Advanced Configuration section, we will provide links to the ConfigMap we created earlier from the drop down list. We also need to specify the specific key within the ConfigMap to use.

Check the status of queue manager

You can check the current status of all the queue managers from the Queue Manager tab.

Login to MQ Admin UI

It is possible to log directly into the MQ Admin using the URL listed under Admin UI section as seen below. However, by now you should not be surprised to hear that this would be a discouraged practice, not least because it results in a user interface running on the queue manager’s container, but also because it provides access to make changes to the queue manager configuration. Ideally you will quickly move to creation of queue and channels via pipelines, with the definitions stored in a source code repository. Any changes made via the MQ Admin UI would then not be known to your definition file in the repository, and the next time you ran your pipeline those changes would be lost.



So, apart from some exceptional cases for diagnostics, all changes to the queue managers should be made via definition files, ideally stored in source code repository, and enacted by automated pipelines.

QMGR service name and Listener port number

Since we are going to use remote client connection to connect to Queue manager from our ACE message flows,  we will need to know the host and port where queue manager is hosted and listening to for client requests.  When we have installed ACE and MQ in the same Kubernetes cluster, we can interact with MQ queue manager using Service name (as hostname). You can obtain this and the port number using the OpenShift Console as shown below:




From this we can note that  

Service name : quickstart-cp4i-mq-ibm-mq
Port Number : 1414

Now, we have all the information on queue manager side that we needed to use with ACE flows

  • Queue Manager Name : QUICKSTART
  • Queues for applications to PUT and GET messages - BACKEND
  • Channel for Communication with the application - ACEMQCLIENT
  • MQService and Listener port - quickstart-cp4i-mq-ibm-mq/1414

 

User interface alternatives

We started this tutorial from the OpenShift web console, and similar more generic instructions are present here:

Deploying a queue manager using the Red Hat OpenShift web console

It’s worth noting however, that you can also get to the operator user interface through another route.  If you have installed the Cloud Pak for Integration “platform navigator” (Automation Hub), you can also do it through that.

Deploying a queue manager using the IBM Cloud Pak for Integration Platform Navigator

Whichever route you choose, ultimately you end up at the same MQ web console provided by the IBM MQ Operator, providing a consistent way to graphically administer MQ on OpenShift.

It’s worth mentioning that you can of course use a mixture of both the user interface and the command line. For example you could use the user interface as a simple way to prepare the definition YAML file for the Operator, then proceed to use that file on the command line. Or you might have a fully automated pipeline for deployment, but still choose to use the user interface for occasional status checking and diagnostics on the environment.




Acknowledgement and thanks to Kim Clark for providing valuable technical input to this article.




#AppConnectEnterprise(ACE)
#containers
#Docker
#IntegrationBus(IIB)
#MQ
5 comments
118 views

Permalink

Comments

Fri June 02, 2023 12:50 PM

Hi Amar,

How can we migrate existing Qmgr running on prime or on vm's to OCP. 

Migrating qmgr (with saveqmgr backup or dumpmqcfg config) to OCP. How to create Multi instance qmgr and clustering on OCP. Appreciate if you could share the steps. Thank You.

Tue July 26, 2022 10:54 AM

Hi Rajesh,

The error is clear. The deployment can not find the Config Map :-)

The instructions ask you to create a config map called "mqsc-example" but it seems you are using the name "mqsc-ini-example".

Can you check you are using the right name?

Best regards... Joel

Tue July 26, 2022 10:43 AM

Hi Amar,
I am getting the following error when I am trying to deploy a MQ queue manager using the steps you mentioned;


As I am no expert of MQ, but I support AIX server where 2 instances of MQ are running right now in my organization.  My manager wanted me to migrate these to openshift, then I found your blog and tried to follow and got this error. 

And here is output from oc get events;
root@ISTXN-474H1J3:~# oc get events
LAST SEEN TYPE REASON OBJECT MESSAGE
87m Normal Pulling pod/eda-mq-lab-ibm-mq-0 Pulling image "cp.icr.io/cp/ibm-mqadvanced-server-integration@sha256:69c2e6440964e847cce19dbd68aabb5fa51b338a49836b1e202aa57c184c2614"
2m32s Normal BackOff pod/eda-mq-lab-ibm-mq-0 Back-off pulling image "cp.icr.io/cp/ibm-mqadvanced-server-integration@sha256:69c2e6440964e847cce19dbd68aabb5fa51b338a49836b1e202aa57c184c2614"
7m9s Warning FailedMount pod/mqsc-ini-cp4i-ibm-mq-0 MountVolume.SetUp failed for volume "cm-mqsc-ini-example" : configmap "mqsc-ini-example" not found
2m9s Warning FailedMount pod/mqsc-ini-cp4i-ibm-mq-0 Unable to attach or mount volumes: unmounted volumes=[cm-mqsc-ini-example], unattached volumes=[cm-mqsc-ini-example oidc-certificate kube-api-access-2mqss]: timed out waiting for the condition
15m Warning FailedMount pod/mqsc-ini-cp4i-ibm-mq-0 Unable to attach or mount volumes: unmounted volumes=[cm-mqsc-ini-example], unattached volumes=[kube-api-access-2mqss cm-mqsc-ini-example oidc-certificate]: timed out waiting for the condition
31m Warning FailedMount pod/mqsc-ini-cp4i-ibm-mq-0 Unable to attach or mount volumes: unmounted volumes=[cm-mqsc-ini-example], unattached volumes=[oidc-certificate kube-api-access-2mqss cm-mqsc-ini-example]: timed out waiting for the condition
92m Normal Pulling pod/quickstart-cp4i-ibm-mq-0 Pulling image "cp.icr.io/cp/ibm-mqadvanced-server-integration@sha256:84f3bf90e6719a6d908df331304a2af854cc4e277b8bc21c7054ce9c24e4f2c5"
2m28s Normal BackOff pod/quickstart-cp4i-ibm-mq-0 Back-off pulling image "cp.icr.io/cp/ibm-mqadvanced-server-integration@sha256:84f3bf90e6719a6d908df331304a2af854cc4e277b8bc21c7054ce9c24e4f2c5"
root@ISTXN-474H1J3:~#


To me, it looks like error due to entitlement, but you are the SME to point me in the right direction.  I request you to please help me to solve this, I am trying to create a POC to deploy MQ onto openshift.  


Tue July 26, 2022 08:13 AM

Hi Joel  you probably meant to reply to @RAJESH VERMA​ and yes, you are right, the describe output will be useful to know more about the qmgr instance.   Also capture the 'oc get events' .

Thanks, Amar

Mon July 25, 2022 06:35 PM

Hi Amar, with the information provided is hard to tell what the problem is.

Can you describe the queue manager and/or pod associated to get more details?

And since it seems you are an IBMer probably using the internal channels could be faster, but if I;m mistaken, please post the output of the describe commands to provide additional feedback.

Best regards... Joel