Deploy Interaction Server

From Genesys Documentation
Revision as of 17:33, October 29, 2021 by Karl abraham.abel@genesys.com (talk | contribs) (Published)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
This topic is part of the manual Interaction Server Private Edition Guide for version Current of Interaction Server.

Learn how to deploy Interaction Server.

Assuming that you are already logged in to your target Kubernetes or Openshift cluster via kubectl or OC CLI, create namespace for IXN if not yet created:

kubectl create namespace ixn

Or, for Openshift:

oc new-project ixn

Prepare cluster resources

To prepare your resources, create secrets and a default pull secret for the cluster.
Important
Make sure to review Before you begin for the full list of prerequisites required to deploy Interaction Server.

Create secrets

Create k8s secrets for Redis and Kafka access in ixn namespace:

 kubectl delete secret redis-ors-secret --ignore-not-found

 kubectl create secret generic redis-ors-secret \
 --from-literal='voice-redis-ors-stream={"password":"PaSSword","port":"1234","rejectUnauthorized":"false","servername":"redis-cluster.namespace.svc.cluster.local"}'

 kubectl delete secret kafka-shared-secret --ignore-not-found

 kubectl create secret generic kafka-shared-secret \
 --from-literal='kafka-secrets={"bootstrap": "infra-kafka-cp-kafka.infra.svc.cluster.local:9092"}'

Service account

Either create a service account and set it in Helm values file or just modify an existing one after Helm installed and service account created.

Here is an example of created service account, it must be named as ixn-server-<tenant-uuid> for consul injection working.

kubectl get serviceaccounts
NAME                                             SECRETS   AGE
ixn-server-<tenant-uuid>

Create the pull secret

Use the following code snippet as an example of how to create the default pull secret:

oc create secret docker-registry mycred --docker-server=pureengage.jfrog.io --docker-username=<username> --docker-password=<API key from jfrog>

For Openshift you may add "mycred" secret in current namespace as default pull secret:

oc secrets link default mycred --for=pull

Deploy IXN via Helm

To deploy IXN via Helm, follow these steps:

1. Download latest version of the Interaction Server installation Helm Charts from the artifactory. See the JFrog Platform Artifactory.

2. Extract parameters from chart to see multiple (default) values used to fine-tune the installation.

$ helm show values <helm-repo>/ixn > values.private.OPENSHIFT.yml

You can apply multiple override values to customize your setup. However, Genesys recommends using minimal overriding values in the installation:

Sample override_values.yaml. (Also, refer to Log storage, Consul connection, and Volume mounts.)

image:
  registry: "my-docker-registry.com"
  pullPolicy: Always #IfNotPresent
  imagePullSecrets:
    - name: pullsecret
ixnService:
  image:
    ixnServer:
      repository: "ixn/interaction_server"
      tag: "100.0.003.0609"
    ixnNode:
      repository: "ixn/ixn_node"
      tag: "100.0.003.1900"
    logSidecar:
      enabled: true
      repository: "fluent/fluent-bit"
      tag: "1.8.5"    
  service:
    enabled: true
  volumes: |-
    - name: redis-ors-secret
      secret:
        secretName: redis-ors-secret
    - name: kafka-shared-secret
      secret:
        secretName: kafka-shared-secret
  ixnServer:
    secrets:
      db:
        enabled: true
        secretName: ixn-db-secret-${TENANT_ID}
        username: ${POSTGRES_USER}
        password: ${POSTGRES_PASS}
    confServer:
      host: "localhost"
      port: 8888
      appName: InteractionServer
    db:
      engine: "postgre"
      name: "ixn-${TENANT_ID}"
      host: ${POSTGRES_ADDR}
      port: 5432
      connectionString: "KeepaliveInterval=1;KeepaliveTime=60;"
      optionBlobChunkSize:
      optionReconnectPause:
      schemaName:
    dbinit:
      enabled: true
    logStorage:
      mountPath: "/mnt/logs"
      storageSize: 1Gi
      storageClassName:
      volume:
        emptyDir: {}
    resources:
      requests:
        cpu: "100m"
        memory: "512Mi"
      limits:
        cpu: "200m"
        memory: "2Gi"
    volumeMounts:
      kafka-shared-secret:
        readOnly: true
        mountPath: "/mnt/env-secrets/kafka-secrets"
  ixnNode:
    settings:
      mountPath: "/mnt/settings"
      file: "settings.json"
    storingSessions:
      enabled: true
    db:
      host: ${POSTGRES_ADDR}
      port: 5432
      name: ixn-node-${TENANT_ID}
      options:
        keepAlive: true
        keepAliveInitialDelayMillis: 300000
        ssl:
    redis:
    - host: infra-redis-redis-cluster.infra.svc.cluster.local
      port: ${REDIS_PORT}
      is_redis_cluster: "true"
    secrets:
      db:
        enabled: true
        secretName: ixn-node-db-secret-${TENANT_ID}
        username: ${POSTGRES_USER}
        password: ${POSTGRES_PASS}
    dbinit:
      enabled: true
    consul:
      host:
        value: consul-server.infra.svc.cluster.local
      port: 8500
      sslMode: false
    volumeMounts:
      redis-ors-secret:
        readOnly: true
        mountPath: "/mnt/env-secrets/redis-secrets"
ixnVQNode:
  image:
    ixnVQNode:
      repository: "ixn/ixn_vq_node"
      tag: "100.0.003.0601"
  serviceAccount:
    create: true
    name: ixn
  volumes : |-
    - name: kafka-shared-secret
      secret:
        secretName: kafka-shared-secret
  volumeMounts:
    kafka-shared-secret:
      readOnly: true
      mountPath: "/mnt/env-secrets/kafka-secrets"
tenant:
  id: "9350e2fc-a1dd-4c65-8d40-1f75a2e080dd"
  sid: t100
replicaCount: 1

3. Validate the Helm chart and provided values, enter:

$ helm template ixn-{short-tenant-id} <helm-repo>/ixn --version={version} -f values.private.OPENSHIFT.yml

4. Install the Interaction Server chart, using the override values file that you prepared in step, enter:

$ helm upgrade --install ixn-{short-tenant-id} <helm-repo>/ixn --version={version} -f values.private.OPENSHIFT.yml

5. Wait until all containers are ready. There should be 4/4 (5/5 if a logging sidecar enabled) for ixn-*-sts-0 and 3/3 containers for ixn-*-vqnode. If there is something like 1/1, it usually means something is wrong with consul sidecar injection.

If the following error appeared: "line 5: exec: /home/genesys/interaction_server/interaction_server_64: cannot execute: Permission denied", ixn-{short-tenant-id}-sts-0 pod restart may be required if service account policy was applied after pod started), refer to Service account.

kubectl get pods
NAME                                                  READY   STATUS    RESTARTS   AGE
ixn-{short-tenant-id}-sts-0                           4/4     Running  0          8m1s
ixn-{short-tenant-id}-vqnode-deploy-6d8bc6846d-ml49d  3/3     Running  0          21m

6. If troubleshooting is necessary, try adding the --dry-run command line parameter in helm install .. for verbose error output.

To see the full set of available parameters, extract the default helm values from helm package:

$ helm show values <helm-repo>/ixn > values.private.OPENSHIFT.yml

Log storage

The following is a log storage example configuration in IXN Helm values:

ixnService:
  ixnServer:
    logStorage:
      mountPath: "/mnt/logs"
      storageSize: 1Gi
      storageClassName:
      volume:
        emptyDir: {}

Consul connection

Consul connection can be configured in several ways:

ixnService:
  ixnNode:
    consul:
      host:
        value: <consul hostname>
      port: <consul port>
      sslMode: false
ixnService:
  ixnNode:
    consul:
      host:
        valueFrom:
          fieldRef:
            fieldPath: status.hostIP
      port: <consul port>
      sslMode: false

Volume mounts

Volume mounts example:

ixnService:
  volumes: |-
    - name: redis-ors-secret
      secret:
        secretName: redis-ors-secret
    - name: kafka-shared-secret
      secret:
        secretName: kafka-shared-secret
  ixnServer:
    volumeMounts:
      kafka-shared-secret:
        readOnly: true
        mountPath: "/mnt/env-secrets/kafka-secrets"
  ixnNode:
    volumeMounts:
      redis-ors-secret:
        readOnly: true
        mountPath: "/mnt/env-secrets/redis-secrets"
  ixnVQNode:
    volumes : |-
      - name: kafka-shared-secret
        secret:
          secretName: kafka-shared-secret
    volumeMounts:
      kafka-shared-secret:
        readOnly: true
        mountPath: "/mnt/env-secrets/kafka-secrets"

Configure monitoring and logging

To configure monitoring parameters in the Helm values file, see Monitoring.

To configure logging parameters in the Helm values file, see Logging.

Validate the deployment

There must be two pods. Each pod must be in a Running state and all READY checks should pass.

Retrieved from "https://all.docs.genesys.com/IXN/Current/IXNPEGuide/Deploy (2025-07-23 18:59:29)"
Comments or questions about this documentation? Contact us for support!