Prerequisites

IMPORTANT!

Note the following considerations before deployment of Reporting Services.

For Kubernetes Cluster

Single Zone k8s Cluster

In order to deploy the Reporting pod/container, you will need a dedicated node, that is, you must label one of the Kubernetes cluster nodes so that the Reporting pod/container is deployed on that node only.

Multi-zone k8s Cluster

For any multi-zone's k8s deployment, you will need to label an extra node in the first zone that is provided in the manifest. For example, in manifest "k8s_{aws|gcp|azure}_zones": ["us-east-1a","us-east-1c"], two zones are provided for deploying the cluster. You are required to add a label to the node in first zone of the provided zones, that is "us-east-1a"

In order to label a node, use the following command for a Kubernetes cluster:
kubectl label nodes <nodename> node-name=reporting
This command labels <nodename> with "node-name=reporting".

The labeling of the node also ensures that none of the other TML cluster components are deployed on that node. There are a few changes that are added to the deployment scripts.

For Reporting Pod/Container

The following is the affinity rule added to the reporting-pod-0.yaml:
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
        - matchExpressions:
          - key: node-name
            operator: In
            values:
            - reporting

For Other Pods/Containers

The following is the anti-affinity rule added for other pod/container yamls:
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
        - matchExpressions:
          - key: node-name
            operator: NotIn
            values:
            - reporting
As viewed from the above affinity and anti-affinity rules, the deployment scripts make sure that the Reporting pod/container is deployed on a single node labeled as "node-name=reporting".

For Swarm Cluster

It is required to set REPORTING_HOST_NAME with the node value where Reporting Services is to be deployed. (This has to be executed on Swarm Manager where the deployment script will run.)
1. docker node ls
2. export REPORTING_HOST_NAME=<node_name>
It is required to make modifications in the pod yml files so that only Reporting Services is deployed on the specified dedicated node.
a.  The below placement rule needs to be added in tmgc-reporting.yml file.
 
deploy:
  placement:
    constraints:
      - node.hostname == ${REPORTING_HOST_NAME}
 
  
b. The following files need to be modified to add below placement constraint along with other constraints such that these containers do not run on reporting node.
1. tmgc-nosql.yml
2. tmgc-nosql-ring.yml
3. tmgc-sql.yml
4. tmgc-cache.yml
5. tmgc-log.yml
6. tmgc-tm.yml
7. tmgc-cm.yml
 
deploy:
  placement:
    constraints:
      - node.hostname != ${REPORTING_HOST_NAME}

e.g In tmgc-nosql.yml, tmgc-nosql-ring.yml, tmgc-sql.yml, tmgc-cache.yml, tmgc-log.yml after adding above constraint deploy section would look like as below:
deploy:
  placement:
    constraints:
      - node.hostname == ${HOST_NAME}
      - node.hostname != ${REPORTING_HOST_NAME}
 
and in tmgc-tm.yml and tmgc-cm.yml after adding new constraint, deploy section would like as below:
deploy:
  placement:
    constraints:
      - node.hostname != ${REPORTING_HOST_NAME}