Difference between revisions of "VM/Current/VMPEGuide/Deploy"

From Genesys Documentation
Jump to: navigation, search
(Published)
 
 
(5 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Article
+
{{ArticlePEServiceDeploy
|Standalone=No
+
|ServiceId=4d384b74-f61d-48f7-bace-30048213bf99
|DisplayName=Deploy Voice Microservices
+
|IncludeAssumptions=Yes
|Context=Learn how to deploy Voice Microservices.
 
|ComingSoon=No
 
 
|Section={{Section
 
|Section={{Section
 
|alignment=Vertical
 
|alignment=Vertical
|structuredtext={{NoteFormat|Make sure to review {{Link-SomewhereInThisVersion|manual=VMPEGuide|topic=Planning}} for the full list of prerequisites required to deploy Voice Microservices.
+
|structuredtext={{NoteFormat|Make sure to review {{Link-SomewhereInThisVersion|manual=VMPEGuide|topic=Planning}} for the full list of prerequisites required to deploy Voice Microservices.<br/>
<br/>
+
To deploy the Tenant service, see the ''{{Link-AnywhereElse|product=PrivateEdition|version=Current|manual=TenantPEGuide|display text=Tenant Service Private Edition Guide}}''.<br/>
To deploy the Tenant service, see the ''{{Link-AnywhereElse|product=PrivateEdition|version=Current|manual=TenantPEGuide|display text=Tenant Service Private Edition Guide}}''.|}}For solution-level deployment information, see {{SuiteLevelLink|openshift}}.
+
For information about deploying Voicemail Service, see {{Link-SomewhereInThisVersion|manual=VMPEGuide|topic=DeployVoicemail|display text=Deploy Voicemail}}.|}}
 +
<!--For solution-level deployment information, see {{SuiteLevelLink|openshift}}.-->
 
|Status=No
 
|Status=No
 
}}{{Section
 
}}{{Section
 
|sectionHeading=General deployment prerequisites
 
|sectionHeading=General deployment prerequisites
 
|alignment=Vertical
 
|alignment=Vertical
|structuredtext=Before you deploy the Voice Services, you must deploy the infrastructure services. See {{Link-SomewhereInThisVersion|manual=VMPEGuide|topic=Planning|anchor=ThirdParty|display text=Third-party prerequisites}} for the list of required infrastructure services.
+
|structuredtext=Before you deploy the Voice Services, you must deploy the infrastructure services. See {{Link-SomewhereInThisVersion|manual=VMPEGuide|topic=Planning|anchor=ThirdParty|display text=Third-party prerequisites}} for the list of required infrastructure services.
 +
 
 +
In addition, see {{Link-SomewhereInThisVersion|manual=VMPEGuide|topic=DeployConsul|display text=Consul requirements for Voice services}} and {{Link-SomewhereInThisVersion|manual=VMPEGuide|topic=DeployRedis|display text=Redis requirements for Voice services}} for information about specific configuration that must be completed in Consul before you {{Link-SomewhereInThisVersion|manual=VMPEGuide|topic=Configure|display text=configure}} or deploy Voice Microservices.  
  
 
To override values for both the infrastructure services and voice services, see {{Link-SomewhereInThisVersion|manual=VMPEGuide|topic=Configure|anchor=OverrideHelmValues|display text=Override Helm chart values}}.
 
To override values for both the infrastructure services and voice services, see {{Link-SomewhereInThisVersion|manual=VMPEGuide|topic=Configure|anchor=OverrideHelmValues|display text=Override Helm chart values}}.
 
+
|Status=No
Genesys recommends the following order of deployment for the Voice Microservices:
+
}}{{Section
 +
|sectionHeading=Deployment order for Voice Microservices
 +
|alignment=Vertical
 +
|structuredtext=Genesys recommends the following order of deployment for the Voice Microservices:
  
 
*{{Link-SomewhereInThisVersion|manual=VMPEGuide|topic=Deploy|anchor=DeployVoice|display text=Voice Services}}
 
*{{Link-SomewhereInThisVersion|manual=VMPEGuide|topic=Deploy|anchor=DeployVoice|display text=Voice Services}}
 
*{{Link-AnywhereElse|product=PrivateEdition|version=Current|manual=TenantPEGuide|display text=Tenant Service}}
 
*{{Link-AnywhereElse|product=PrivateEdition|version=Current|manual=TenantPEGuide|display text=Tenant Service}}
 
*{{Link-SomewhereInThisVersion|manual=VMPEGuide|topic=DeployVoicemail|display text=Voicemail Service}}
 
*{{Link-SomewhereInThisVersion|manual=VMPEGuide|topic=DeployVoicemail|display text=Voicemail Service}}
 
===Deploy Consul===
 
Consul is required for multiple Services in the Genesys package. In addition to any other Consul configuration, the following Consul features are required for Voice Services:
 
 
*connectinject – to deploy sidecar containers in voice pods.
 
*controller – to provide service intention functionality.
 
*openshift – to set OpenShift specific permissions.
 
*syncCatalog – to sync K8 services into Consul: set '''toK8S: false''' and '''addK8SNamespaceSuffix: false''' for syncing services only from K8 to Consul.
 
*AccessControlList – to enable ACL, set '''manageSystemACLs: true'''.
 
*storageclass – to set the storage class to a predefined storage class.
 
*TLS – to enable TLS, set '''enabled: true''' and follow the steps/commands described below to set up TLS.
 
 
Here is the file content for the Consul configuration:
 
<source lang="text">
 
# config.yaml
 
global:
 
  name: consul
 
  tls:
 
    enabled: true
 
    caCert:
 
      secretName: consul-ca-cert
 
      # The key of the Kubernetes secret.
 
      secretKey: tls.crt
 
    caKey:
 
      # The name of the Kubernetes secret.
 
      secretName: consul-ca-key
 
      # The key of the Kubernetes secret.
 
      secretKey: tls.key
 
  acls:
 
    manageSystemACLs: true
 
  openshift:
 
    enabled: true
 
connectInject:
 
  enabled: true
 
controller:
 
  enabled: true
 
syncCatalog:
 
  enabled: true
 
  toConsul: true
 
  toK8S: false
 
  addK8SNamespaceSuffix: false
 
</source>
 
<!--
 
{{{!}} class="wikitable"
 
!Command
 
!Purpose
 
{{!}}-
 
{{!}}consul tls ca create
 
{{!}}To generate Consul certificates.
 
{{!}}-
 
{{!}}kubectl create secret generic consul-ca-cert -n consul --from-file='tls.crt=./consul-agent-ca.pem'
 
{{!}}To obtain the TLS certification and store it as a Kubernetes secret.
 
{{!}}-
 
{{!}}kubectl create secret generic consul-ca-key -n consul --from-file='tls.key=./consul-agent-ca-key.pem'
 
{{!}}To obtain the TLS key and store it as a Kubernetes secret.
 
{{!}}}
 
 
====Commands to deploy Consul====
 
<source lang="text">
 
kubectl create ns consul
 
helm repo add hashicorp https://helm.releases.hashicorp.com
 
helm repo update
 
helm install consul hashicorp/consul -f ./consul/consul-config.yaml -n consul
 
kubectl get pods -n consul
 
</source>
 
-->
 
====Add a rule for Consul DNS forwarding====
 
OpenShift sends DNS requests to the DNS server in the '''openshift-dns''' namespace. To forward Consul FQDN resolution to a Consul DNS server, add a forwarding rule to '''configmap''' of the default DNS operator. Save the Consul's DNS IP address using the following command:
 
<source lang="text">
 
kubectl get svc consul-dns -n <consul namespace> -o jsonpath={.spec.clusterIP} (Internal IP of consul-dns service)
 
> oc edit dns.operator/default
 
Add the below specs:
 
spec:
 
servers:
 
- name: consul-dns
 
zones:
 
- consul
 
forwardPlugin:
 
upstreams:
 
- <Internal IP of consul-dns service>
 
</source>
 
 
|Status=No
 
|Status=No
 
}}{{Section
 
}}{{Section
|sectionHeading=Deployment of Redis
+
|sectionHeading=Create the Voice namespace
|alignment=Vertical
 
|structuredtext====Deployment of Redis===
 
====Add a Helm repository====
 
<source lang="text">
 
kubectl create namespace infra
 
helm repo add bitnami https://charts.bitnami.com/bitnami
 
helm repo add elastic https://helm.elastic.co
 
helm repo add confluentinc https://confluentinc.github.io/cp-helm-charts/
 
helm repo update
 
</source>
 
 
 
====Deploy the Helm Charts====
 
<source lang="text">
 
#REDIS#
 
helm install infra-redis bitnami/redis-cluster --set usePassword=true --set cluster.nodes=6 --set persistence.size=1G -n infra
 
</source>
 
|Status=Yes
 
}}{{Section
 
 
|alignment=Vertical
 
|alignment=Vertical
|structuredtext====Create the Voice namespace===
+
|structuredtext=Before deploying Voice Services and their dependencies, create a namespace using the following command:
Before deploying Voice Services and their dependencies, create a namespace using the following command:
 
 
<source lang="text">
 
<source lang="text">
 
kubectl create ns voice
 
kubectl create ns voice
 
</source>
 
</source>
In all Voice Services and their dependencies configuration files, the namespace is '''voice'''. If you want a specific/custom namespace, create the namespace (using the above command) and change the namespace in files, as required.
+
In all Voice Services and the configuration files of their dependencies, the namespace is '''voice'''. If you want a specific, custom namespace, create the namespace (using the preceding command) and remember to change the namespace in files, as required.
 
|Status=No
 
|Status=No
 
}}{{Section
 
}}{{Section
Line 136: Line 40:
 
|anchor=DeployVoice
 
|anchor=DeployVoice
 
|alignment=Vertical
 
|alignment=Vertical
|structuredtext====Register the Redis service in Consul===
+
|structuredtext=Voice Services require a Persistent Volume Claim (PVC); the Voice SIP Cluster Service uses a persistent volume to store traditional SIP Server logs. Before deploying Voice Services, create the PVC.  
After the creation of the Redis cluster, the Redis IP address should be registered with Consul. Cluster information needs to be created for the Kubernetes services and endpoints with Redis. Once they are created, Consul will automatically sync those Kubernetes services and register them in Consul.
 
 
 
====Kubernetes Service and endpoint creation====
 
The Redis registration should be done for all of the following Redis service names. The Voice services will use these service names for connecting to the Redis cluster.
 
<source lang="text">
 
redis-agent-state
 
redis-call-state
 
redis-config-state
 
redis-ors-state
 
redis-ors-stream
 
redis-registrar-state
 
redis-rq-state
 
redis-sip-state
 
redis-tenant-stream
 
</source>
 
 
 
=====Manifest file=====
 
For all the Redis service names mentioned above, create a separate service and endpoint using the following example:
 
<source lang="text">
 
apiVersion: v1
 
kind: Service
 
metadata:
 
  name: <redis-service-name> (ex, redis-agent-state)
 
  namespace: <namespace> (ex, voice)
 
  annotations:
 
    "consul.hashicorp.com/service-sync": "true"
 
spec:
 
  clusterIP: None
 
---
 
apiVersion: v1
 
kind: Endpoints
 
metadata:
 
  name: <redis-service-name> (ex, redis-agent-state)
 
  namespace: <namespace> (ex, voice)
 
subsets:
 
  - addresses:
 
      - ip: <redis MASTER IP> (ex, 51.143.122.147)
 
    ports:
 
      - port: <redis port> (ex, 6379)
 
        name: redisport
 
        protocol: <redis transport> (ex, TCP)
 
</source>
 
  
Get the Redis primary IP using the following command:
+
====Storage class and Claim name====
<source lang="text">
+
The created persistent volume must be configured in the '''sip_node_override_values.yaml''' file as shown below:
kubectl get pods infra-redis-redis-cluster-0 -n infra -o jsonpath='{.status.podIP}' (get IPaddress of the master redis pod)
 
</source>
 
|Status=No
 
}}{{Section
 
|alignment=Vertical
 
|structuredtext====Deploy Voice Services===
 
Before deploying Voice Services, we must create Persistent Volume Claims (PVC) that are required for Voice Services.
 
 
 
====Persistent volumes====
 
The Voice SIP Cluster Service uses the persistent volume, a "piece" of storage, to store traditional SIP Server logs in OpenShift.
 
 
 
=====Persistent Volume  in OCS Storage Type=====
 
A Storage Class might have been already created in the OCP (OpenShift Container Platform). This Storage Class is used for creating PVC and must be set in the override values of '''sip_node_override_values.yaml'''.
 
 
 
For the OpenShift cluster with OpenShift Container Storage (OCS) storage, configure the Storage Class to be used for creating the persistent volume. In the case of OCS storage, PV will be created automatically when PVC is claimed. For such clusters, the '''volumeName''' parameter in '''sip_node_override_values.yaml''' must be empty.
 
<source lang="text">
 
# pvc will be created for logs
 
volumes:
 
  pvcLog:
 
    create: true
 
    claim: sip-log-pvc
 
    storageClass: voice
 
    volumeName:
 
 
 
  pvcJsonLog:
 
    create: true
 
    claim: sip-json-log-pvc
 
    storageClass: voice
 
    volumeName:
 
</source>
 
<!--
 
=====Persistent Volume  in NFS Storage Type=====
 
For the OpenShift cluster with Network File System (NFS) storage, the persistent volume must be created manually:
 
<source lang="text">
 
kubectl apply -f ./voice_helm_values/sip_node_log_pv.yaml
 
</source>
 
-->
 
The created persistent volume must be configured in '''sip_node_override_values.yaml''' as shown below:
 
 
<source lang="text">
 
<source lang="text">
 
# pvc will be created for logs
 
# pvc will be created for logs
Line 237: Line 61:
  
 
====Configure the DNS Server for voice-sip====
 
====Configure the DNS Server for voice-sip====
The Voice SIP Cluster Service requires that the DNS server is configured in '''sip_node_override_values.yaml'''.  
+
The Voice SIP Cluster Service requires the DNS server to be configured in its '''sip_node_override_values.yaml''' file.  
 
+
Follow the steps in the [https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/ Kubernetes documentation] to install a '''dnsutils''' pod. Using the '''dnsutils''' pod, get the '''dnsserver''' that's used in the environment.
In the OCP environment, the Kubernetes DNS server name can be obtained using the following command:
 
<source lang="text">
 
oc get dns.operator/default -o jsonpath={.status.clusterIP}
 
</source>
 
  
In a non-OCP environment, follow the steps provided in [https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/ Kubernetes documentation] and install the '''dnsutils''' pod. Using the '''dnsutils''' pods, get the '''dnsserver''' that is used in the environment.
+
The default value in the SIP Helm chart is <tt>10.0.0.10</tt>. If the '''dnsserver''' address is different, update it in the '''sip_node_override_values.yaml''' file as shown below:
 
 
Default value in the SIP Helm chart is "10.0.0.10"; if the DNS server address is different, update it in '''sip_node_override_values.yaml''' as shown below:
 
 
<source lang="text">
 
<source lang="text">
 
# update dns server ipaddress
 
# update dns server ipaddress
Line 253: Line 71:
 
       dnsServer: "10.202.0.10"
 
       dnsServer: "10.202.0.10"
 
</source>
 
</source>
 
+
|Status=No
====Voice Service Helm chart deployment====
+
}}{{Section
Deploy the Voice Services using the provided Helm charts.
+
|sectionHeading=Voice Service Helm chart deployment
<source lang="text">
+
|anchor=HelmChartDeployment
 +
|alignment=Vertical
 +
|structuredtext=Deploy the Voice Services using the provided Helm charts.<source lang="text">
 
helm upgrade --install --force --wait --timeout 300s -n voice -f ./voice_helm_values/agent_override_values.yaml voice-agent <helm-repo>/voice-agent-<helmchart-version>.tgz --set version=<container-version> --username "$JFROG_USER" --password "$JFROG_PASSWORD"
 
helm upgrade --install --force --wait --timeout 300s -n voice -f ./voice_helm_values/agent_override_values.yaml voice-agent <helm-repo>/voice-agent-<helmchart-version>.tgz --set version=<container-version> --username "$JFROG_USER" --password "$JFROG_PASSWORD"
 
   
 
   
Line 276: Line 96:
 
   
 
   
 
helm upgrade --install --force --wait --timeout 300s -n voice -f ./voice_helm_values/sipproxy_override_values.yaml voice-sipproxy <helm-repo>/voice-sipproxy-<helmchart-version>.tgz --set version=<container-version> --username "$JFROG_USER" --password "$JFROG_PASSWORD"
 
helm upgrade --install --force --wait --timeout 300s -n voice -f ./voice_helm_values/sipproxy_override_values.yaml voice-sipproxy <helm-repo>/voice-sipproxy-<helmchart-version>.tgz --set version=<container-version> --username "$JFROG_USER" --password "$JFROG_PASSWORD"
</source>
+
</source>The following table contains a list of the minimum recommended Helm chart versions that should be used:
The following table contains a list of the minimum recommended Helm chart versions that should be used:  
 
 
{{{!}} class="wikitable"
 
{{{!}} class="wikitable"
 
!Service name
 
!Service name
Line 319: Line 138:
 
|Status=No
 
|Status=No
 
}}{{Section
 
}}{{Section
|sectionHeading=Deploy in OpenShift
+
|sectionHeading=Validate the deployment
 +
|anchor=Validatedep
 
|alignment=Vertical
 
|alignment=Vertical
|structuredtext=To deploy in the OpenShift platform, you use the '''oc''' command instead of the '''kubectl''' command.
+
|structuredtext=Follow the steps below to validate the successful deployment of voice microservices.
|Status=No
+
 
}}{{Section
+
#Verify the helm deployments using the following command.
|sectionHeading=Validate the deployment in OpenShift
+
#:<source>helm list -n voice</source>
|anchor=Validate
+
#:Sample output:
|alignment=Vertical
+
#:<source>NAME                                            NAMESPACE      REVISION        UPDATED                                STATUS          CHART
|structuredtext={{Notices|Notice=PEComingSoon}}
+
                                                                                                                                                                            APP VERSION
 +
voice-agent-latest                              voice          4              2022-08-18 13:22:12.355810905 +0000 UTC deployed        voice-agent-100.0.1000006          1.0
 +
voice-callthread-latest                        voice          70              2022-08-18 09:44:07.078583581 +0000 UTC deployed        voice-callthread-100.0.1000006      1.0
 +
voice-config-latest                            voice          61              2022-08-19 01:33:02.039668264 +0000 UTC deployed        voice-config-100.0.1000006          1.0
 +
voice-dialplan-latest                          voice          5              2022-08-18 12:33:31.223393121 +0000 UTC deployed        voice-dialplan-100.0.1000009        1.0
 +
voice-ors-latest                                voice          1              2022-08-15 21:40:32.013855856 +0000 UTC deployed        voice-ors-100.0.1000018            1.0
 +
voice-registrar-latest                          voice          108            2022-08-18 13:41:26.37007884 +0000 UTC  deployed        voice-registrar-100.0.1000007      latest-aa9f28a
 +
voice-rq-latest                                voice          14              2022-08-18 13:44:07.187279228 +0000 UTC deployed        voice-rq-100.0.1000004              1.0
 +
voice-sip-latest                                voice          193            2022-08-10 23:06:05.057511521 +0000 UTC deployed        voice-sip-100.0.1000018            1.0
 +
voice-sipfe-latest                              voice          73              2022-08-10 23:49:45.166013304 +0000 UTC deployed        voice-sipfe-100.0.1000006          1.0
 +
voice-sipproxy-latest                          voice          5              2022-08-11 17:13:30.894221491 +0000 UTC deployed        voice-sipproxy-100.0.1000007        1.0
 +
voice-voicemail-latest                          voice          67              2022-08-18 15:18:47.347509225 +0000 UTC deployed        voice-voicemail-100.0.1000015      1.0
 +
</source>
 +
#Verify readiness state of Kubernetes objects using the kubectl commands.
 +
##Run the following command to check the deployments:
 +
##:<source>kubectl get deployments -n voice</source>
 +
##:Sample output:
 +
##:<source>NAME                  READY  UP-TO-DATE  AVAILABLE  AGE
 +
voice-agent            2/2    2            2          40d
 +
voice-callthread      3/3    3            3          704d
 +
voice-config          1/1    1            1          704d
 +
voice-dialplan        1/1    1            1          41d
 +
voice-registrar        1/1    1            1          703d
 +
voice-sip-debug-kpan  2/2    2            2          68d
 +
voice-sipfe            3/3    3            3          727d
 +
voice-voicemail        1/1    1            1          87d</source>
 +
##Run the following command to check the Statefulsets:
 +
##:<source>kubectl get statefulset -n voice</source>
 +
##:Sample output:
 +
##:<source>NAME              READY  AGE
 +
voice-ors        50/50  40d
 +
voice-rq          20/20  40d
 +
voice-sip        30/30  703d
 +
voice-sipproxy    5/5    40d</source>
 +
#Check if all the pods are running and in Ready state.
 +
##Run the following command to check the readiness of the pods.
 +
##:<source>kubectl get pods -n voice</source>
 +
##:Sample output:
 +
##:<source>NAME                                    READY  STATUS        RESTARTS        AGE
 +
t2100-0                                3/3    Running      0                4d23h
 +
voice-agent-55dc97685b-pnfxr            2/2    Running      0                170m
 +
voice-callthread-75984d848b-bm8q7      2/2    Running      0                170m
 +
voice-callthread-75984d848b-kqv4t      2/2    Running      0                170m
 +
voice-config-7666dd56cf-sf69f          2/2    Running      0                39h
 +
voice-dialplan-788d84d766-8z8d4        2/2    Running      0                37h
 +
voice-ors-0                            2/2    Running      0                18h
 +
voice-ors-1                            2/2    Running      0                6d5h
 +
voice-registrar-6c54c6bc9-tkvk2        2/2    Running      0                39h
 +
voice-rq-0                              2/2    Running      0                38h
 +
voice-rq-1                              2/2    Running      0                4d17h
 +
voice-sip-0                            3/3    Running      0                39h
 +
voice-sip-1                            3/3    Running      0                11d
 +
voice-sipfe-56c7bc77dd-7fpkh            2/2    Running      0                170m
 +
voice-sipproxy-0                        2/2    Running      0                11d
 +
voice-voicemail-66f745448b-wqmfc        2/2    Running      0                4d20h</source>
 +
#Verify the health status of the pods in Consul dashboard.
 +
#:If the services are running and in Ready state, the health check will be marked as Green in Consul dashboard.
 +
#:[[File:Voicemcs deploy validate consul.png]]
 +
#Check the versions of microservices in Grafana dashboard.
 +
#:Only if voice-dashboards are deployed in the voice namespace, you can perform this check in the dashboard.
 +
#:[[File:Voicemcs deploy validate grafana.png]]
 +
#Check for any crash, KafkaJS or Redis connection errors in Prometheus, Grafana dashboards and/or logs of the respective microservices.
 +
 
 +
From a functional point of view, you can validate the voice microservices deployment by performing the following steps.
 +
 
 +
#Before you can validate the voice microservices, you must create few objects in the Tenant configdb to start the verification.
 +
##Port forward the Tenant instance at 8888 port and access the tenant objects through Configuration Manager application.
 +
##:<source>kubectl port forward t2100-0 8888:8888 -n voice</source>
 +
##Create a few Directory Numbers (DNs) under the Sip_Cluster switch with the following options:
 +
##:<source>[TServer]
 +
contact=*
 +
dual-dialog-enabled=false
 +
infra-class=2
 +
make-call-rfc3725-flow=1
 +
refer-enabled=false
 +
sip-cti-control=talk,hold
 +
sip-ring-tone-mode=1
 +
use-contact-as-dn=true
 +
use-register-for-service-state=false</source>
 +
##Create a Place object and map the DNs created.
 +
##Create new Agents with username and password, under the "Persons" section.
 +
##Map the Place to the agent.
 +
#Once the objects are created successfully, follow the steps below to validate the voice microservices deployment..
 +
##Register the DNs from Endpoints.
 +
##Login/Logout the Agents from Workspace Web Edition or a similar application and change the states - Ready, Not Ready and Logout.
 +
##Make few test calls between the agents.
 +
##Perform other call functionalities like - hold/retrieve, conference, transfer, after call work, and so on.
 +
##If Designer is available, load different strategies onto route points (external facing SBC Numbers) and validate if the inbound call made from PSTN is being routed to the agent/skill group configured.
 +
#Additionally, you can also check the below after the deployment of voice microservices.
 +
##Verify whether the Grafana dashboards of the voice microservices are updated with relevant data and they reflect the status of the services correctly.
 +
##Check if the alerts and alarms are configured for the voice microservices and are active.
 
|Status=No
 
|Status=No
 
}}
 
}}
 +
|Standalone=No
 +
|DisplayName=Deploy Voice Microservices
 +
|Context=Learn how to deploy Voice Microservices.
 +
|ComingSoon=No
 
|PEPageType=45d1441f-dc69-4a17-bd47-af5d811ce167
 
|PEPageType=45d1441f-dc69-4a17-bd47-af5d811ce167
 
}}
 
}}

Latest revision as of 08:31, March 27, 2023

This topic is part of the manual Voice Microservices Private Edition Guide for version Current of Voice Microservices.

Learn how to deploy Voice Microservices into a private edition environment.

Assumptions

  • The instructions on this page assume you are deploying the service in a service-specific namespace, named in accordance with the requirements on Creating namespaces. If you are using a single namespace for all private edition services, replace the namespace element in the commands on this page with the name of your single namespace or project.
  • Similarly, the configuration and environment setup instructions assume you need to create namespace-specific (in other words, service-specific) secrets. If you are using a single namespace for all private edition services, you might not need to create separate secrets for each service, depending on your credentials management requirements. However, if you do create service-specific secrets in a single namespace, be sure to avoid naming conflicts.
Important
Make sure to review Before you begin for the full list of prerequisites required to deploy Voice Microservices.

To deploy the Tenant service, see the Tenant Service Private Edition Guide.

For information about deploying Voicemail Service, see Deploy Voicemail.

General deployment prerequisites

Before you deploy the Voice Services, you must deploy the infrastructure services. See Third-party prerequisites for the list of required infrastructure services.

In addition, see Consul requirements for Voice services and Redis requirements for Voice services for information about specific configuration that must be completed in Consul before you configure or deploy Voice Microservices.

To override values for both the infrastructure services and voice services, see Override Helm chart values.

Deployment order for Voice Microservices

Genesys recommends the following order of deployment for the Voice Microservices:

Create the Voice namespace

Before deploying Voice Services and their dependencies, create a namespace using the following command:

kubectl create ns voice

In all Voice Services and the configuration files of their dependencies, the namespace is voice. If you want a specific, custom namespace, create the namespace (using the preceding command) and remember to change the namespace in files, as required.

Deploy Voice services

Voice Services require a Persistent Volume Claim (PVC); the Voice SIP Cluster Service uses a persistent volume to store traditional SIP Server logs. Before deploying Voice Services, create the PVC.

Storage class and Claim name

The created persistent volume must be configured in the sip_node_override_values.yaml file as shown below:

# pvc will be created for logs
volumes:
  pvcLog:
    create: true
    claim: sip-log-pvc
    storageClass: voice
    volumeName: <pv name> (ex sip-log-pv)
   
  pvcJsonLog:
    create: true
    claim: sip-json-log-pvc
    storageClass: voice
    volumeName: <pv name> (ex sip-log-pv)

Configure the DNS Server for voice-sip

The Voice SIP Cluster Service requires the DNS server to be configured in its sip_node_override_values.yaml file. Follow the steps in the Kubernetes documentation to install a dnsutils pod. Using the dnsutils pod, get the dnsserver that's used in the environment.

The default value in the SIP Helm chart is 10.0.0.10. If the dnsserver address is different, update it in the sip_node_override_values.yaml file as shown below:

# update dns server ipaddress
  context:
    envs:
      dnsServer: "10.202.0.10"

Voice Service Helm chart deployment

Deploy the Voice Services using the provided Helm charts.
helm upgrade --install --force --wait --timeout 300s -n voice -f ./voice_helm_values/agent_override_values.yaml voice-agent <helm-repo>/voice-agent-<helmchart-version>.tgz --set version=<container-version> --username "$JFROG_USER" --password "$JFROG_PASSWORD"
 
helm upgrade --install --force --wait --timeout 300s -n voice -f ./voice_helm_values/callthread_override_values.yaml voice-callthread <helm-repo>/voice-callthread-<helmchart-version>.tgz --set version=<container-version> --username "$JFROG_USER" --password "$JFROG_PASSWORD"
 
helm upgrade --install --force --wait --timeout 200s -n voice -f ./voice_helm_values/config_override_values.yaml voice-config <helm-repo>/voice-config-<helmchart-version>.tgz --set version=<container-version> --username "$JFROG_USER" --password "$JFROG_PASSWORD"
 
helm upgrade --install --force --wait --timeout 300s -n voice -f ./voice_helm_values/dialplan_override_values.yaml voice-dialplan <helm-repo>/voice-dialplan-<helmchart-version>.tgz --set version=<container-version> --username "$JFROG_USER" --password "$JFROG_PASSWORD"
 
helm upgrade --install --force --wait --timeout 200s -n voice -f ./voice_helm_values/ors_node_override_values.yaml voice-ors <helm-repo>/voice-ors-<helmchart-version>.tgz --set version=<container-version> --username "$JFROG_USER" --password "$JFROG_PASSWORD"
 
helm upgrade --install --force --wait --timeout 300s -n voice -f ./voice_helm_values/registrar_override_values.yaml voice-registrar <helm-repo>/voice-registrar-<helmchart-version>.tgz --set version=<container-version> --username "$JFROG_USER" --password "$JFROG_PASSWORD"
 
helm upgrade --install --force --wait --timeout 200s -n voice -f ./voice_helm_values/rq_node_override_values.yaml voice-rq <helm-repo>/voice-rq-<helmchart-version>.tgz --set version=<container-version> --username "$JFROG_USER" --password "$JFROG_PASSWORD"
 
helm upgrade --install --force --wait --timeout 200s -n voice -f ./voice_helm_values/sip_node_override_values.yaml voice-sip <helm-repo>/voice-sip-<helmchart-version>.tgz --set version=<container-version> --username "$JFROG_USER" --password "$JFROG_PASSWORD"
 
helm upgrade --install --force --wait --timeout 300s -n voice -f ./voice_helm_values/sipfe_override_values.yaml voice-sipfe <helm-repo>/voice-sipfe-<helmchart-version>.tgz --set version=<container-version> --username "$JFROG_USER" --password "$JFROG_PASSWORD"
 
helm upgrade --install --force --wait --timeout 300s -n voice -f ./voice_helm_values/sipproxy_override_values.yaml voice-sipproxy <helm-repo>/voice-sipproxy-<helmchart-version>.tgz --set version=<container-version> --username "$JFROG_USER" --password "$JFROG_PASSWORD"
The following table contains a list of the minimum recommended Helm chart versions that should be used:
Service name Helm chart version
voice-config voice-config-9.0.11.tgz
voice-dialplan voice-dialplan-9.0.08.tgz
voice-registrar voice-registrar-9.0.14.tgz
voice-agent voice-agent-9.0.10.tgz
voice-callthread voice-callthread-9.0.12.tgz
voice-sip voice-sip-9.0.22.tgz
voice-sipfe voice-sipfe-9.0.06.tgz
voice-sipproxy voice-sipproxy-9.0.09.tgz
voice-rq voice-rq-9.0.08.tgz
voice-ors voice-ors-9.0.08.tgz

Deploy the Tenant service

The Tenant Service is included with the Voice Microservices, but has its own deployment procedure. To deploy the Tenant Service, see Deploy the Tenant Service.

Validate the deployment

Follow the steps below to validate the successful deployment of voice microservices.

  1. Verify the helm deployments using the following command.
    helm list -n voice
    Sample output:
    NAME                                            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART
                                                                                                                                                                                 APP VERSION
    voice-agent-latest                              voice           4               2022-08-18 13:22:12.355810905 +0000 UTC deployed        voice-agent-100.0.1000006           1.0
    voice-callthread-latest                         voice           70              2022-08-18 09:44:07.078583581 +0000 UTC deployed        voice-callthread-100.0.1000006      1.0
    voice-config-latest                             voice           61              2022-08-19 01:33:02.039668264 +0000 UTC deployed        voice-config-100.0.1000006          1.0
    voice-dialplan-latest                           voice           5               2022-08-18 12:33:31.223393121 +0000 UTC deployed        voice-dialplan-100.0.1000009        1.0
    voice-ors-latest                                voice           1               2022-08-15 21:40:32.013855856 +0000 UTC deployed        voice-ors-100.0.1000018             1.0
    voice-registrar-latest                          voice           108             2022-08-18 13:41:26.37007884 +0000 UTC  deployed        voice-registrar-100.0.1000007       latest-aa9f28a
    voice-rq-latest                                 voice           14              2022-08-18 13:44:07.187279228 +0000 UTC deployed        voice-rq-100.0.1000004              1.0
    voice-sip-latest                                voice           193             2022-08-10 23:06:05.057511521 +0000 UTC deployed        voice-sip-100.0.1000018             1.0
    voice-sipfe-latest                              voice           73              2022-08-10 23:49:45.166013304 +0000 UTC deployed        voice-sipfe-100.0.1000006           1.0
    voice-sipproxy-latest                           voice           5               2022-08-11 17:13:30.894221491 +0000 UTC deployed        voice-sipproxy-100.0.1000007        1.0
    voice-voicemail-latest                          voice           67              2022-08-18 15:18:47.347509225 +0000 UTC deployed        voice-voicemail-100.0.1000015       1.0
  2. Verify readiness state of Kubernetes objects using the kubectl commands.
    1. Run the following command to check the deployments:
      kubectl get deployments -n voice
      Sample output:
      NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
      voice-agent            2/2     2            2           40d
      voice-callthread       3/3     3            3           704d
      voice-config           1/1     1            1           704d
      voice-dialplan         1/1     1            1           41d
      voice-registrar        1/1     1            1           703d
      voice-sip-debug-kpan   2/2     2            2           68d
      voice-sipfe            3/3     3            3           727d
      voice-voicemail        1/1     1            1           87d
    2. Run the following command to check the Statefulsets:
      kubectl get statefulset -n voice
      Sample output:
      NAME              READY   AGE
      voice-ors         50/50   40d
      voice-rq          20/20   40d
      voice-sip         30/30   703d
      voice-sipproxy    5/5     40d
  3. Check if all the pods are running and in Ready state.
    1. Run the following command to check the readiness of the pods.
      kubectl get pods -n voice
      Sample output:
      NAME                                    READY   STATUS        RESTARTS         AGE
      t2100-0                                 3/3     Running       0                4d23h
      voice-agent-55dc97685b-pnfxr            2/2     Running       0                170m
      voice-callthread-75984d848b-bm8q7       2/2     Running       0                170m
      voice-callthread-75984d848b-kqv4t       2/2     Running       0                170m
      voice-config-7666dd56cf-sf69f           2/2     Running       0                39h
      voice-dialplan-788d84d766-8z8d4         2/2     Running       0                37h
      voice-ors-0                             2/2     Running       0                18h
      voice-ors-1                             2/2     Running       0                6d5h
      voice-registrar-6c54c6bc9-tkvk2         2/2     Running       0                39h
      voice-rq-0                              2/2     Running       0                38h
      voice-rq-1                              2/2     Running       0                4d17h
      voice-sip-0                             3/3     Running       0                39h
      voice-sip-1                             3/3     Running       0                11d
      voice-sipfe-56c7bc77dd-7fpkh            2/2     Running       0                170m
      voice-sipproxy-0                        2/2     Running       0                11d
      voice-voicemail-66f745448b-wqmfc        2/2     Running       0                4d20h
  4. Verify the health status of the pods in Consul dashboard.
    If the services are running and in Ready state, the health check will be marked as Green in Consul dashboard.
    Voicemcs deploy validate consul.png
  5. Check the versions of microservices in Grafana dashboard.
    Only if voice-dashboards are deployed in the voice namespace, you can perform this check in the dashboard.
    Voicemcs deploy validate grafana.png
  6. Check for any crash, KafkaJS or Redis connection errors in Prometheus, Grafana dashboards and/or logs of the respective microservices.

From a functional point of view, you can validate the voice microservices deployment by performing the following steps.

  1. Before you can validate the voice microservices, you must create few objects in the Tenant configdb to start the verification.
    1. Port forward the Tenant instance at 8888 port and access the tenant objects through Configuration Manager application.
      kubectl port forward t2100-0 8888:8888 -n voice
    2. Create a few Directory Numbers (DNs) under the Sip_Cluster switch with the following options:
      [TServer]
      	contact=*
      	dual-dialog-enabled=false
      	infra-class=2
      	make-call-rfc3725-flow=1
      	refer-enabled=false
      	sip-cti-control=talk,hold
      	sip-ring-tone-mode=1
      	use-contact-as-dn=true
      	use-register-for-service-state=false
    3. Create a Place object and map the DNs created.
    4. Create new Agents with username and password, under the "Persons" section.
    5. Map the Place to the agent.
  2. Once the objects are created successfully, follow the steps below to validate the voice microservices deployment..
    1. Register the DNs from Endpoints.
    2. Login/Logout the Agents from Workspace Web Edition or a similar application and change the states - Ready, Not Ready and Logout.
    3. Make few test calls between the agents.
    4. Perform other call functionalities like - hold/retrieve, conference, transfer, after call work, and so on.
    5. If Designer is available, load different strategies onto route points (external facing SBC Numbers) and validate if the inbound call made from PSTN is being routed to the agent/skill group configured.
  3. Additionally, you can also check the below after the deployment of voice microservices.
    1. Verify whether the Grafana dashboards of the voice microservices are updated with relevant data and they reflect the status of the services correctly.
    2. Check if the alerts and alarms are configured for the voice microservices and are active.
Retrieved from "https://all.docs.genesys.com/VM/Current/VMPEGuide/Deploy (2025-07-19 19:04:17)"
Comments or questions about this documentation? Contact us for support!