Adding license metering annotations to custom containers

Use license annotations to track usage based on the limits defined on a container, rather than on the underlying machine. You configure the Operational Decision Manager container to be deployed with specific annotations that the IBM®® License Service then uses to track usage.

The IBM License Service must be installed on the Kubernetes cluster where the Operational Decision Manager containers (predefined or custom) are deployed to track usage. For information about the supported environments and installation instructions, see Installing License Service on the Kubernetes cluster External link opens a new window or tab.

The IBM License Service processes pod annotations to track licenses. Product teams must use specific metering annotations in the spec.template.metadata.annotations section of their Kubernetes pod template for custom Operational Decision Manager containers, similarly to what is provided for the predefined Operational Decision Manager containers.

Note: The property containername must be set to the name of the container as it is shown in the spec.template.spec.containers.name parameter of your pod template. However, for the decisionServerConsole container, containername must be set to "" because the decisionServerConsole container is not charged.

Operational Decision Manager on Kubernetes deployment

Operational Decision Manager on Kubernetes (production)

For all the containers except the Decision Runner container, use the following annotations:

spec:
  template:
    metadata:
      annotations:
        productName: "IBM Operational Decision Manager"
        productID: "b1a07d4dc0364452aa6206bb6584061d"
        productVersion: "9.6.0"
        productMetric: "PROCESSOR_VALUE_UNIT"
        productChargedContainers: <containername>

The <containername> parameter should be left empty for the Decision Server console because the decisionServerConsole container is not charged.

You can put decisioncenter or decisionserverruntime for the others components.

For the Decision Runner container, use the following annotations:

spec:
  template:
    metadata:
      annotations:
        productName: "IBM Operational Decision Manager - Non Prod"
        productID: "e32af5770e06427faae142993c691048"
        productVersion: "9.6.0"
        productMetric: "PROCESSOR_VALUE_UNIT"
        productChargedContainers: <containername>
Operational Decision Manager on Kubernetes (nonproduction)

The Decision Runner container is always charged in nonproduction mode. For all the containers, use the following annotations:

spec:
  template:
    metadata:
      annotations:
        productName: "IBM Operational Decision Manager - Non Prod"
        productID: "e32af5770e06427faae142993c691048"
        productVersion: "9.6.0"
        productMetric: "PROCESSOR_VALUE_UNIT"
        productChargedContainers: <containername>

The <containername> parameter should be left empty for the Decision Server console because the decisionServerConsole container is not charged.

You can put decisioncenter or decisionserverruntime for the others components.

Decision Server runtime production example

The following example shows the container annotations for a production Decision Server runtime:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-odm-decisionserverruntime
  ...
spec:
  ...
  template:
    metadata:
      ...
      annotations:
        productName: "IBM Operational Decision Manager"
        productID: "b1a07d4dc0364452aa6206bb6584061d"
        productVersion: "9.6.0"
        productMetric: "PROCESSOR_VALUE_UNIT"
        productChargedContainers: my-odm-decisionserverruntime
    spec:
      ...

      containers:
      - name: my-odm-decisionserverruntime
        image: my-repo/my-odm-decisionserverruntime:9.6.0-amd64
        ...

Cloud Pak for Business Automation deployment

Operational Decision Manager on Kubernetes (production)

For all the containers except the Decision Runner container, use the following annotations:

spec:
  template:
    metadata:
      annotations:
        cloudpakName: "IBM Cloud Pak for Business Automation"
        cloudpakId: "94a9c8c358bb43ba8fbdea62e7e166a5"
        cloudpakVersion: "26.0.0"
        productName: "Operational Decision Manager Containers - CP4BA"
        productID: "cfdbd71c64094971a70b6985df6b1e93"
        productCloudpakRatio: "1:5"
        productMetric: "VIRTUAL_PROCESSOR_CORE"
        productVersion: "26.0.0"
        productChargedContainers:  <containername>

The <containername> parameter should be left empty for the Decision Server console because the decisionServerConsole container is not charged.

You can put decisioncenter or decisionserverruntime for the others components.

For the Decision Runner container, use the following annotations:

spec:
  template:
    metadata:
      annotations:
        cloudpakName: "IBM Cloud Pak for Business Automation"
        cloudpakId: "94a9c8c358bb43ba8fbdea62e7e166a5"
        cloudpakVersion: "26.0.0"
        productName: "Operational Decision Manager Containers - CP4BA - Non Prod"
        productVersion: "26.0.0"
        productID: "d803dec7647d48d39f6803e077d36080"
        productMetric: "VIRTUAL_PROCESSOR_CORE"
        productCloudpakRatio: "2:5"
        productChargedContainers: "decisionrunner"
Operational Decision Manager on Kubernetes (nonproduction)

The Decision Runner container is always charged in nonproduction mode. For all the containers, use the following annotations:

spec:
  template:
    metadata:
      annotations:
        cloudpakName: "IBM Cloud Pak for Business Automation"
        cloudpakId: "94a9c8c358bb43ba8fbdea62e7e166a5"
        cloudpakVersion: "26.0.0"
        productName: "Operational Decision Manager Containers - CP4BA - Non Prod"
        productVersion: "26.0.0"
        productID: "d803dec7647d48d39f6803e077d36080"
        productMetric: "VIRTUAL_PROCESSOR_CORE"
        productCloudpakRatio: "2:5"
        productChargedContainers: <containername>

The <containername> parameter should be left empty for the Decision Server console because the decisionServerConsole container is not charged.

You can put decisioncenter or decisionserverruntime for the others components.

Decision Server runtime production example

The following example shows the container annotations for a production Decision Server runtime:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-odm-decisionserverruntime
  ...
spec:
  ...
  template:
    metadata:
      ...
      annotations:
        cloudpakName: "IBM Cloud Pak for Business Automation"
        cloudpakId: "94a9c8c358bb43ba8fbdea62e7e166a5"
        cloudpakVersion: "26.0.0"
        productName: "Operational Decision Manager Containers - CP4BA"
        productID: "cfdbd71c64094971a70b6985df6b1e93"
        productCloudpakRatio: "1:5"
        productMetric: "VIRTUAL_PROCESSOR_CORE"
        productVersion: "26.0.0"
        productChargedContainers: my-odm-decisionserverruntime
    spec:
      ...

      containers:
      - name: my-odm-decisionserverruntime
        image: my-repo/my-odm-decisionserverruntime:9.6.0-amd64
        ...