Difference between revisions of "PEC-REP/Current/PulsePEGuide/Configure"

From Genesys Documentation
Jump to: navigation, search
Line 9: Line 9:
 
|structuredtext=Before you begin the steps on this page, complete the instructions on {{Link-SomewhereInThisVersion|manual=PulsePEGuide|topic=Planning}}.
 
|structuredtext=Before you begin the steps on this page, complete the instructions on {{Link-SomewhereInThisVersion|manual=PulsePEGuide|topic=Planning}}.
  
Information you will need for shared provisioning:
+
Information you require for shared provisioning:
  
 
*Versions:
 
*Versions:
Line 50: Line 50:
 
{{AnchorDiv|SingleNamespace}}
 
{{AnchorDiv|SingleNamespace}}
 
===Single namespace===
 
===Single namespace===
If you plan to deploy into the Single Namespace (software-defined networking [SDN] with multi-tenant mode, where namespaces are network isolated), ensure that your environment meets the following requirements for inputs:
+
Single namespace deployments have a software-defined networking (SDN) with multitenant mode, where namespaces are network isolated. If you plan to deploy Pulse into the single namespace, ensure that your environment meets the following requirements for inputs:
  
*Backend services deployed into the single namespace must include the string ''pulse'':
+
*Back-end services deployed into the single namespace must include the string ''pulse'':
 
*:<source lang="bash"><db-host>
 
*:<source lang="bash"><db-host>
 
<db-name>
 
<db-name>
Line 66: Line 66:
 
|alignment=Vertical
 
|alignment=Vertical
 
|structuredtext====init Helm chart===
 
|structuredtext====init Helm chart===
This chart is used to initialize the shared PostgreSQL datbase.
+
This chart is used to initialize the shared PostgreSQL database.
  
 
====Get init Helm chart====
 
====Get init Helm chart====
Line 206: Line 206:
 
Run:
 
Run:
 
<source lang="bash">helm upgrade --install pulse-init pulsehelmrepo/init --wait --wait-for-jobs --version=<chart-version> --namespace=pulse -f values-override-init.yaml</source>
 
<source lang="bash">helm upgrade --install pulse-init pulsehelmrepo/init --wait --wait-for-jobs --version=<chart-version> --namespace=pulse -f values-override-init.yaml</source>
Command will finish with exit code 0 if installation is successful.
+
If the installation is successful, the command finishes with exit code 0.
  
 
====Validate init Helm chart====
 
====Validate init Helm chart====
Execute the following command to validate Helm chart initialization. Pulse-init job should have a Status of Completed:
+
To validate Helm chart initialization, run the following command:
 
<source lang="bash">kubectl get pods -n=pulse -l "app.kubernetes.io/name=init,app.kubernetes.io/instance=pulse-init"
 
<source lang="bash">kubectl get pods -n=pulse -l "app.kubernetes.io/name=init,app.kubernetes.io/instance=pulse-init"
 
NAME                  READY  STATUS      RESTARTS  AGE
 
NAME                  READY  STATUS      RESTARTS  AGE
pulse-init-job-5669c  0/1    Completed  0          79m</source>
+
pulse-init-job-5669c  0/1    Completed  0          79m</source>If the initialization was successful, the Pulse-init job has a Status of Completed.
 +
 
 
===Install pulse Helm chart===
 
===Install pulse Helm chart===
 
This chart is used for install shared part.
 
This chart is used for install shared part.
Line 220: Line 221:
 
helm search repo pulsehelmrepo/pulse</source>
 
helm search repo pulsehelmrepo/pulse</source>
 
====Prepare override-pulse file====
 
====Prepare override-pulse file====
Create a file with the following content, entering appropriate values where indicated, and save the file as '''values-override-pulse.yaml''':
+
Create a file with the following content, entering appropriate values where indicated, and save the file as '''values-override-pulse.yaml''':  
(Note to reviewers: Updated the Security Context examples in the following yaml, per Dan Hicks' comment in WBRT-15982.)
 
 
<source lang="bash">
 
<source lang="bash">
 
# Default values for pulse.
 
# Default values for pulse.
Line 403: Line 403:
 
Run:
 
Run:
 
<source lang="bash">helm upgrade --install pulse pulsehelmrepo/pulse --wait --version=<chart-version>  --namespace=pulse -f values-override-pulse.yaml</source>
 
<source lang="bash">helm upgrade --install pulse pulsehelmrepo/pulse --wait --version=<chart-version>  --namespace=pulse -f values-override-pulse.yaml</source>
Command will finish with exit code 0 if installation is successful.
+
If installation is successful, the command finishes with exit code 0.
  
 
====Validate pulse Helm chart====
 
====Validate pulse Helm chart====
Execute the following command to list all running Pulse pods:
+
To list all running Pulse pods, run the following command:
 
<source lang="bash">kubectl get pods -n=pulse -l "app.kubernetes.io/name=pulse,app.kubernetes.io/instance=pulse"
 
<source lang="bash">kubectl get pods -n=pulse -l "app.kubernetes.io/name=pulse,app.kubernetes.io/instance=pulse"
 
NAME                    READY  STATUS    RESTARTS  AGE
 
NAME                    READY  STATUS    RESTARTS  AGE
Line 418: Line 418:
 
===Check logs for error===
 
===Check logs for error===
  
#Execute the following command to check the log files:
+
#To check the log files, run the following command:
 
#:<source lang="bash">kubectl get pods
 
#:<source lang="bash">kubectl get pods
os logs <pulse-pod-id></source>
+
os logs <pulse-pod-id></source>Where: <tt>&lt;pulse-pod-id&gt;</tt> is the pod identifier.
#:Where: <tt>&lt;pulse-pod-id&gt;</tt> is the pod identifier.
 
  
 
===Health validation===
 
===Health validation===
  
#Execute the following command to download the health validation metrics:
+
#To download the health validation metrics, run the following command:
 
#:'''GET /actuator/metrics/pulse.health.all'''
 
#:'''GET /actuator/metrics/pulse.health.all'''
#Open two console windows, and execute the following commands:
+
#Open two Command Prompt windows, and run the following commands:
 
##'''Console 1''':
 
##'''Console 1''':
 
##:<source lang="bash">kubectl get pods --namespace pulse -l "app.kubernetes.io/name=pulse,app.kubernetes.io/instance=pulse" -o jsonpath="{.items[0].metadata.name}"
 
##:<source lang="bash">kubectl get pods --namespace pulse -l "app.kubernetes.io/name=pulse,app.kubernetes.io/instance=pulse" -o jsonpath="{.items[0].metadata.name}"
Line 434: Line 433:
 
##:<source lang="bash">curl -X GET http://127.0.0.1:8090/actuator/metrics/pulse.health.all      -H 'Content-Type: application/json'
 
##:<source lang="bash">curl -X GET http://127.0.0.1:8090/actuator/metrics/pulse.health.all      -H 'Content-Type: application/json'
 
</source>
 
</source>
#:If Pulse is running correctly and can connect to Redis and PostgreSQL, the following is returned:
+
#:If Pulse is running correctly and can connect to Redis and PostgreSQL, the following results appear:
 
#*http response is <tt>200</tt>
 
#*http response is <tt>200</tt>
 
#*json response has <tt>measurements.statistic.value</tt> of <tt>1.0</tt>, for example:
 
#*json response has <tt>measurements.statistic.value</tt> of <tt>1.0</tt>, for example:
Line 468: Line 467:
 
|structuredtext=If you encounter problems during deployment, examine the init Helm and Pulse Helm manifests.  
 
|structuredtext=If you encounter problems during deployment, examine the init Helm and Pulse Helm manifests.  
 
===Check init Helm manifests===
 
===Check init Helm manifests===
Execute the following command to output init Helm manifest files into the '''helm-template''' directory:
+
To output init Helm manifest files into the '''helm-template''' directory, run the following command:
 
<source lang="bash">helm template --version=<chart-version> --namespace=pulse --debug --output-dir helm-template init pulsehelmrepo/init -f values-override-init.yaml.yaml
 
<source lang="bash">helm template --version=<chart-version> --namespace=pulse --debug --output-dir helm-template init pulsehelmrepo/init -f values-override-init.yaml.yaml
 
</source>
 
</source>
 
Where: <tt>&lt;chart-version&gt;</tt> is the Helm chart version.
 
Where: <tt>&lt;chart-version&gt;</tt> is the Helm chart version.
 
===Check Pulse Helm manifests===
 
===Check Pulse Helm manifests===
Execute the following command to output Pulse Helm manifest files into the '''helm-template''' directory:
+
To output Pulse Helm manifest files into the '''helm-template''' directory, run the following command:
 
<source lang="bash">helm template --version=<chart-version> --namespace=pulse --debug --output-dir helm-template pulse pulsehelmrepo/pulse -f values-override-pulse.yaml
 
<source lang="bash">helm template --version=<chart-version> --namespace=pulse --debug --output-dir helm-template pulse pulsehelmrepo/pulse -f values-override-pulse.yaml
 
</source>
 
</source>
Line 481: Line 480:
 
|sectionHeading=Override Helm chart values
 
|sectionHeading=Override Helm chart values
 
|alignment=Vertical
 
|alignment=Vertical
|structuredtext=For more information about overriding Helm chart values, see the the "suite-level" documentation: {{SuiteLevelLink|helmoverride}}.  
+
|structuredtext=For more information about overriding Helm chart values, see the suite-level documentation: {{SuiteLevelLink|helmoverride}}.  
 
{{{!}} class="wikitable"
 
{{{!}} class="wikitable"
 
{{!}}+
 
{{!}}+

Revision as of 17:15, April 11, 2022

This topic is part of the manual Genesys Pulse Private Edition Guide for version Current of Reporting.

Learn how to configure Genesys Pulse.

Prerequisites

Before you begin the steps on this page, complete the instructions on Before you begin.

Information you require for shared provisioning:

  • Versions:
    • <image-version> = 100.0.000.0012
    • <chart-versions>= 100.0.000+0012
  • K8S namespace pulse
  • Project Name pulse
  • Postgres credentials
    • <db-host>
    • <db-port>
    • <db-name>
    • <db-user>
    • <db-user-password>
    • <db-ssl-mode>
  • Docker credentials
    • <docker-registry>
    • <docker-registry-secret-name>
  • Redis credentials
    • <redis-host>
    • <redis-port>
    • <redis-password>
    • <redis-enable-ssl>
  • Tenant service variables
    • <tenant-uuid>
    • <tenant-sid>
    • <tenant-name>
    • <tenant-dcu>
  • GAuth/GWS service variables
    • <gauth-url-external>
    • <gauth-url-internal>
    • <gauth-client-id>
    • <gauth-client-secret>
    • <gws-url-external>
    • <gws-url-internal>
  • Storage class:
    • <pv-storage-class-rw-many>
  • Pulse:
    • <pulse-host>

Single namespace

Single namespace deployments have a software-defined networking (SDN) with multitenant mode, where namespaces are network isolated. If you plan to deploy Pulse into the single namespace, ensure that your environment meets the following requirements for inputs:

  • Back-end services deployed into the single namespace must include the string pulse:
    <db-host>
    <db-name>
    <redis-host>
  • The hostname used for Ingress must be unique, and must include the string pulse:
    <pulse-host>
  • Internal service-to-service traffic must use the service endpoints, rather than the Ingress:
    <gauth-url-internal>
    <gws-url-internal>

Deployment

init Helm chart

This chart is used to initialize the shared PostgreSQL database.

Get init Helm chart

helm repo update
helm search repo pulsehelmrepo/init

Prepare override-init file

Create a file with the following content, entering appropriate values where indicated, and save the file as values-override-init.yaml:

# Default values for init.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
 
image:
  tag: "<image-version>"
  pullPolicy: IfNotPresent
  registry: "<docker-registry>"
  imagePullSecrets: [name: "<docker-registry-secret-name>"]
 
# tenant identification, or empty for shared deployment
tenants:
  - id:   "<tenant-uuid>"
    name: "<tenant-name>"
    key:  "<tenant-sid>"
    dcu:  "<tenant-dcu>"
 
# common configuration.
config:
  # set "true" to create config maps
  createConfigMap: true
  # set "true" to create secrets
  createSecret: true
 
  # Postgres config - fill when createConfigMap: true
  # Postgres config map name
  postgresConfig: "pulse-postgres-configmap"
  # Postgres hostname
  postgresHost: "<postgres-hostname>"
  # Postgres port
  postgresPort: "<postgres-port>"
  # Postgres SSL mode
  postgresEnableSSL: "<postgres-ssl-mode>"
 
  # Postgres secret config - fill when createSecret: true
  # Postgres User
  postgresUser: "<postgres-user>"
  # Postgres Password
  postgresPassword: "<postgres-password>"
  # Secret name for postgres
  postgresSecret: "pulse-postgres-secret"
  # Secret key for postgres user
  postgresSecretUser: "META_DB_ADMIN"
  # Secret key for postgres  password
  postgresSecretPassword: "META_DB_ADMINPWD"
   
  # Redis config - fill when createConfigMap: true
  # Redis config map name
  redisConfig: "pulse-redis-configmap"
  # Redis host
  redisHost: "<redis-hostname>"
  # Redis port
  redisPort: "<redis-port>"
  # Redis SSL enabled
  redisEnableSSL: "false"
 
  # Redis secret config - fill when createSecret: true
  # Password for Redis
  redisKey: "<redis-key>"
  # Secret name for Redis
  redisSecret: "pulse-redis-secret"
  # Secret key for Redis password
  redisSecretKey: "REDIS01_KEY"
   
  # GWS secret config - fill when createSecret: true
  # Client ID
  gwsClientId: "<gws-client-id>"
  # Client Secret
  gwsClientSecret: "<gws-client-secret>"
  # Secret name
  gwsSecret: "pulse-gws-secret"
  # Secret key for Client ID
  gwsSecretClientId: "clientId"
  # Secret key for Client Secret
  gwsSecretClientSecret: "clientSecret"
 
  # fill database name
  dbName: "<db-name>"
  # set "true" when need @host added for username
  dbUserWithHost: true
  # set "true" for CSI secrets
  mountSecrets: false
 
## Service account settings
serviceAccount:
  # Specifies whether a service account should be created
  create: false
  # Annotations to add to the service account
  annotations: {}
  # The name of the service account to use.
  # If not set and create is true, a name is generated using the fullname template
  name: ""
 
## Add annotations to all pods
##
podAnnotations: {}
 
## Specifies the security context for all Pods in the service
##
podSecurityContext:
   fsGroup: null
   runAsUser: null
   runAsGroup: 0
   runAsNonRoot: true
 
## Resource requests and limits
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
##
resources:
  limits:
    memory: 256Mi
    cpu: 200m
  requests:
    memory: 128Mi
    cpu: 100m
 
## Priority Class
## ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
##
priorityClassName: ""
 
## Node labels for assignment.
## ref: https://kubernetes.io/docs/user-guide/node-selection/
##
nodeSelector: {}
 
## Tolerations for assignment.
## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
##
tolerations: []

Install init Helm chart

Run:

helm upgrade --install pulse-init pulsehelmrepo/init --wait --wait-for-jobs --version=<chart-version> --namespace=pulse -f values-override-init.yaml

If the installation is successful, the command finishes with exit code 0.

Validate init Helm chart

To validate Helm chart initialization, run the following command:

kubectl get pods -n=pulse -l "app.kubernetes.io/name=init,app.kubernetes.io/instance=pulse-init"
NAME                   READY   STATUS      RESTARTS   AGE
pulse-init-job-5669c   0/1     Completed   0          79m
If the initialization was successful, the Pulse-init job has a Status of Completed.

Install pulse Helm chart

This chart is used for install shared part.

Get pulse Helm chart

helm repo update
helm search repo pulsehelmrepo/pulse

Prepare override-pulse file

Create a file with the following content, entering appropriate values where indicated, and save the file as values-override-pulse.yaml:

# Default values for pulse.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
 
image:
  tag: "<image-version>"
  pullPolicy: IfNotPresent
  registry: "<docker-registry>"
  imagePullSecrets: [name: "<docker-registry-secret-name>"]
 
replicaCount: 2
 
# common configuration.
config:
  dbName: "<db-name>"
  # set "true" when need @host added for username
  dbUserWithHost: true
  # set "true" for CSI secrets
  mountSecrets: false
  # Postgres config map name
  postgresConfig: "pulse-postgres-configmap"
  # Postgres secret name
  postgresSecret: "pulse-postgres-secret"
  # Postgres secret key for user
  postgresSecretUser: "META_DB_ADMIN"
  # Postgres secret key for password
  postgresSecretPassword: "META_DB_ADMINPWD"
  # Redis config map name
  redisConfig: "pulse-redis-configmap"
  # Redis secret name
  redisSecret: "pulse-redis-secret"
  # Redis secret key for access key
  redisSecretKey: "REDIS01_KEY"
  # GAuth secret name
  gwsSecret: "pulse-gws-secret"
  # GAuth secret key for client_id
  gwsSecretClientId: "clientId"
  # GAuth secret key for client_secret
  gwsSecretClientSecret: "clientSecret"
 
# monitoring settings
monitoring:
  # enable the Prometheus metrics endpoint
  enabled: false
  # port is <options.managementPort>
  # HTTP path is <options.managementContext><options.prometheusEndpoint>
  # additional annotations required for monitoring PODs
  # you can reference values of other variables as {{.Values.variable.full.name}}
  podAnnotations: {}
    # prometheus.io/scrape: "true"
    # prometheus.io/port: "{{.Values.options.managementPort}}"
    # prometheus.io/path: "{{.Values.options.managementContext}}{{.Values.options.prometheusEndpoint}}"
  serviceMonitor:
    # enables ServiceMonitor creation
    enabled: false
    # interval at which metrics should be scraped
    scrapeInterval: 30s
    # timeout after which the scrape is ended
    scrapeTimeout:
    # namespace of the ServiceMonitor, defaults to the namespace of the service
    namespace:
    additionalLabels: {}
 
# common log configuration
log:
  # target directory where log will be stored, leave empty for default
  logDir: ""
  # path where volume will be mounted
  volumeMountPath: /data/log
  # log volume type: none | hostpath | pvc
  volumeType: pvc
  # log volume hostpath, used with volumeType "hostpath"
  volumeHostPath: /mnt/log
  # log PVC parameters, used with volumeType "pvc"
  pvc:
    name: pulse-logs
    accessModes:
      - ReadWriteMany
    capacity: 10Gi
    class: <pv-storage-class-rw-many>
 
# application options
options:
  authUrl: "https://<gauth-url-external>"
  authUrlInt: "http://<gauth-url-internal>"
  gwsUrl: "https://<gws-url-external>"
  gwsUrlInt: "http://<gws-url-internal>"
 
## Service account settings
serviceAccount:
  # Specifies whether a service account should be created
  create: false
  # Annotations to add to the service account
  annotations: {}
  # The name of the service account to use.
  # If not set and create is true, a name is generated using the fullname template
  name: ""
 
## Add annotations to all pods
##
podAnnotations: {}
 
## Add labels to all pods
##
podLabels: {}
 
## Specifies the security context for all Pods in the service
##
podSecurityContext:
   fsGroup: null
   runAsUser: null
   runAsGroup: 0
   runAsNonRoot: true
 
## Ingress configuration
ingress:
  enabled: true
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
    ## recommended to increase proxy-body-size size
    # nginx.ingress.kubernetes.io/proxy-body-size: 5m
  hosts:
    - host: "<pulse-host>"
      paths: [/]
  tls: []
  #  - secretName: chart-example-tls
  #    hosts:
  #      - chart-example.local
 
gateway:
  enabled: false
 
## Resource requests and limits
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
##
resources:
  limits:
    memory: 4Gi
    cpu: 1
  requests:
    memory: 650Mi
    cpu: 100m
 
## HPA Settings
## Not supported in this release!
hpa:
  enabled: false
 
## Priority Class
## ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
##
priorityClassName: ""
 
## Node labels for assignment.
## ref: https://kubernetes.io/docs/user-guide/node-selection/
##
nodeSelector: {}
 
## Tolerations for assignment.
## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
##
tolerations: []
 
## Pod Disruption Budget Settings
podDisruptionBudget:
  enabled: false
 
## Affinity for assignment.
## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
##
affinity: {}
 
# control network policies
networkPolicies:
  enabled: false

For more information, see OpenShift security settings.

Install pulse Helm chart

Run:

helm upgrade --install pulse pulsehelmrepo/pulse --wait --version=<chart-version>  --namespace=pulse -f values-override-pulse.yaml

If installation is successful, the command finishes with exit code 0.

Validate pulse Helm chart

To list all running Pulse pods, run the following command:

kubectl get pods -n=pulse -l "app.kubernetes.io/name=pulse,app.kubernetes.io/instance=pulse"
NAME                     READY   STATUS    RESTARTS   AGE
pulse-648b9d6666-f5d84   1/1     Running   0          22m
pulse-648b9d6666-kqhs6   1/1     Running   0          68m

Validation

Use the following procedures to validate the deployment.

Check logs for error

  1. To check the log files, run the following command:
    kubectl get pods
    os logs <pulse-pod-id>
    Where: <pulse-pod-id> is the pod identifier.

Health validation

  1. To download the health validation metrics, run the following command:
    GET /actuator/metrics/pulse.health.all
  2. Open two Command Prompt windows, and run the following commands:
    1. Console 1:
      kubectl get pods --namespace pulse -l "app.kubernetes.io/name=pulse,app.kubernetes.io/instance=pulse" -o jsonpath="{.items[0].metadata.name}"
      kubectl --namespace pulse port-forward <pod-name> 8090:8090
    2. Console 2:
      curl -X GET http://127.0.0.1:8090/actuator/metrics/pulse.health.all       -H 'Content-Type: application/json'
    If Pulse is running correctly and can connect to Redis and PostgreSQL, the following results appear:
    • http response is 200
    • json response has measurements.statistic.value of 1.0, for example:
      {
        "name": "pulse.health.all",
        "description": "Provides overall application status",
        "baseUnit": "Boolean",
        "measurements": [
          {
            "statistic": "VALUE",
            "value": 1
          }
        ],
        "availableTags": [
          {
            "tag": "deployment.code",
            "values": [
              "pulse"
            ]
          },
          {
            "tag": "application.name",
            "values": [
              "pulse"
            ]
          }
        ]
      }

Troubleshooting

If you encounter problems during deployment, examine the init Helm and Pulse Helm manifests.

Check init Helm manifests

To output init Helm manifest files into the helm-template directory, run the following command:

helm template --version=<chart-version> --namespace=pulse --debug --output-dir helm-template init pulsehelmrepo/init -f values-override-init.yaml.yaml

Where: <chart-version> is the Helm chart version.

Check Pulse Helm manifests

To output Pulse Helm manifest files into the helm-template directory, run the following command:

helm template --version=<chart-version> --namespace=pulse --debug --output-dir helm-template pulse pulsehelmrepo/pulse -f values-override-pulse.yaml

Where: <chart-version> is the Helm chart version.

Override Helm chart values

For more information about overriding Helm chart values, see the suite-level documentation: Overriding Helm chart values.

Parameter Description Default Valid values
service.port Designer service to be exposed. 8888 A valid port.

Configure security

Arbitrary UIDs

If your OpenShift deployment uses arbitrary UIDs, you must override the securityContext settings. By default, the user and group IDs are set to 500:500:500. If your deployment uses arbitrary UIDs, update the podSecurityContext section in the YAML file for each chart as discussed in OpenShift security settings.

Comments or questions about this documentation? Contact us for support!