Decision Management

Quick setup ODM on CNCF kubernetes using command line (10 min)

By Mathias Mouly posted Mon December 21, 2020 10:06 AM


This article demonstrates how to deploy an IBM® Operational Decision Manager (ODM) on a standard kubernetes environment as quickly as possible.

To do this, we will use the images located on IBM entitled registry and all the ODM chart easiness allowing to get quickly an ODM running topology.


First, install the following software on your machine:

Prepare your environment for the ODM installation (5 min)

Log in to MyIBM Container Software Library with the IBMid and password that are associated with the entitled software.

In the Container software library tile, verify your entitlement on the View library page, and then go to Get entitlement key to retrieve the key.

Create a pull secret by running a kubectl create secret command.

$ kubectl create secret docker-registry icregistry-secret --docker-username=cp \
    --docker-password="<API_KEY_GENERATED>" --docker-email=<USER_EMAIL>


  • <API_KEY_GENERATED> is the entitlement key from the previous step. Make sure you enclose the key in double-quotes.
  • <USER_EMAIL> is the email address associated with your IBMid.

Note: The value for the docker-server parameter is the only registry domain name that contains the images. You must set the docker-username to cp to use an entitlement key as docker-password.

Make a note of the secret name so that you can set it for the image.pullSecrets parameter when you run a helm install of your containers. The image.repository parameter will later be set to

Add the public IBM Helm charts repository:

helm repo add ibmcharts
helm repo update

Check you can access ODM's chart

helm search repo ibm-odm-prod
NAME                  	CHART VERSION	APP VERSION	DESCRIPTION                     
ibmcharts/ibm-odm-prod	20.3.0   	IBM Operational Decision Manager

Install your ODM Helm release (5 min)

You can now install the product. We will use the postgresql internal database by disabling the persistence (internalDatabase.persistence.enabled=false) to avoid any platform complexity concerning persistent volume allocation. 

helm install myodmrelease ibmcharts/ibm-odm-prod --version 20.3.0 \
        --set --set image.pullSecrets=icregistry-secret \
        --set image.tag= \
--set internalDatabase.persistence.enabled=false

Note: On OpenShift, you have to set the following parameters due to security context constraint :  --set internalDatabase.runAsUser='' --set customization.runAsUser=''.


Check the topology

Run the following command to check the status of the pods that have been created:

kubectl get pods
NAME                                                      READY   STATUS    RESTARTS   AGE
myodmrelease-dbserver-***                                 1/1     Running   0          20m
myodmrelease-odm-decisioncenter-*** 1/1 Running 0 20m
myodmrelease-odm-decisionrunner-*** 1/1 Running 0 20m myodmrelease-odm-decisionserverconsole-*** 1/1 Running 0 20m myodmrelease-odm-decisionserverruntime-*** 1/1 Running 0 20m

Access ODM services

By default as service.type=NodePort, the services are exposed with a public IP to be accessed with the following command:

kubectl get services
NAME                                           TYPE           CLUSTER-IP     EXTERNAL-IP       PORT(S)          AGE
kubernetes ClusterIP <none> 443/TCP 19h
myodmrelease-dbserver ClusterIP <none> 5432/TCP 10m myodmrelease-odm-decisioncenter NodePort <none> 9453:31130/TCP 10m myodmrelease-odm-decisionrunner NodePort <none> 9443:31325/TCP 10m myodmrelease-odm-decisionserverconsole NodePort <none> 9443:32448/TCP 10m myodmrelease-odm-decisionserverconsole-notif ClusterIP <none> 1883/TCP 10m myodmrelease-odm-decisionserverruntime NodePort <none> 9443:31921/TCP 10m

You can then open a browser on to access Decision Server console, Decision Server Runtime, and Decision Runner, and on to access Decision Center.

Note: Getting the exposed IP address is different for every platform. For example, if you are using mikikube, you can get it with command line : "minikube ip"

Now that you have your first ODM deployment, you can go beyond and deal with more advance topics like load balancer and persistence management :

The Operational Decision Manager Documentation on Certified Kubernetes

How to deploy Operational Decision Manager (ODM) on Azure Kubernetes Service?

How to deploy Operational Decision Manager (ODM) on Amazon EKS container ?





Fri January 08, 2021 02:51 PM

Great Helpful post thanks for sharing.