Difference between revisions of "PEC-REP/Current/PulsePEGuide/Provision"
(Published) |
(Published) |
||
Line 72: | Line 72: | ||
|sectionHeading=Tenant provisioning | |sectionHeading=Tenant provisioning | ||
|alignment=Vertical | |alignment=Vertical | ||
− | |structuredtext={{ | + | |structuredtext====Install init tenant chart=== |
+ | '''Get the <tt>init-tenant</tt> helm chart''' | ||
+ | |||
+ | Download the <tt>init-tenant</tt> helm chart from JFrog using your credentials. | ||
+ | |||
+ | '''Prepare override file''' | ||
+ | |||
+ | Update the <tt>values-override-init-tenant.yaml file:</tt> <source lang="text"># Default values for init-tenant. | ||
+ | # This is a YAML-formatted file. | ||
+ | # Declare variables to be passed into your templates. | ||
+ | |||
+ | # * Images | ||
+ | # Replace for your values: registry and secret | ||
+ | image: | ||
+ | name: init | ||
+ | tag: "${DOCKER_TAG}" | ||
+ | pullPolicy: IfNotPresent | ||
+ | repository: "${DOCKER_REGISTRY}/pulse/" | ||
+ | |||
+ | imagePullSecrets: [name: ${DOCKER_REGISTRY_SECRET_NAME}] | ||
+ | |||
+ | # * Tenant info | ||
+ | # Replace for your values | ||
+ | tenant: | ||
+ | # Tenant UUID | ||
+ | id: ${TENANT_UUID} | ||
+ | # Tenant SID (like 0001) | ||
+ | sid: ${TENANT_SID} | ||
+ | |||
+ | # common configuration. | ||
+ | config: | ||
+ | dbName: "${DB_NAME_SHARED}" | ||
+ | # 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" | ||
+ | |||
+ | ## 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: {} | ||
+ | |||
+ | ## Containers should run as genesys user and cannot use elevated permissions | ||
+ | ## !!! THESE OPTIONS SHOULD NOT BE CHANGED UNLESS INSTRUCTED BY GENESYS !!! | ||
+ | # securityContext: | ||
+ | # runAsUser: 500 | ||
+ | # runAsGroup: 500 | ||
+ | |||
+ | ## 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: [] | ||
+ | |||
+ | # * Templates | ||
+ | templates: | ||
+ | - Agent_Group_Status.gpb | ||
+ | - Agent_KPIs.gpb | ||
+ | - Agent_Login.gpb | ||
+ | - Alert_Widget.gpb | ||
+ | - Callback_Activity.gpb | ||
+ | - Campaign_Activity.gpb | ||
+ | - Campaign_Callback_Status.gpb | ||
+ | - Campaign_Group_Activity.gpb | ||
+ | - Campaign_Group_Status.gpb | ||
+ | - Chat_Agent_Activity.gpb | ||
+ | - Chat_Queue_Activity.gpb | ||
+ | - Chat_Service_Level_Performance.gpb | ||
+ | - Chat_Waiting_Statistics.gpb | ||
+ | - Email_Agent_Activity.gpb | ||
+ | - Email_Queue_Activity.gpb | ||
+ | - Facebook_Media_Activity.gpb | ||
+ | - IFRAME.gpb | ||
+ | - IWD_Agent_Activity.gpb | ||
+ | - IWD_Queue_Activity.gpb | ||
+ | - Queue_KPIs.gpb | ||
+ | - Queue_Overflow_Reason.gpb | ||
+ | - Static_Text.gpb | ||
+ | - Twitter_Media_Activity.gpb | ||
+ | - eServices_Agent_Activity.gpb | ||
+ | - eServices_Queue_KPIs.gpb </source> | ||
+ | |||
+ | '''Install the <tt>init-tenant</tt> helm chart''' <source lang="text">source .tenant_init_variables | ||
+ | |||
+ | envsubst < ./values-override-init-tenant.yaml | \ | ||
+ | helm upgrade --install "pulse-init-tenant-${TENANT_SID}" pe-jfrog-stage/init-tenant \ | ||
+ | --wait --wait-for-jobs \ | ||
+ | --version="${CHART_VERSION}" \ | ||
+ | --namespace="${NAMESPACE}" \ | ||
+ | -f - </source> | ||
+ | |||
+ | '''Validate the <tt>init-tenant</tt> helm chart'''<source lang="text"><source lang="text">source .tenant_init_variables | ||
+ | |||
+ | oc get pods -n="${NAMESPACE}" -l "app.kubernetes.io/name=init-tenant,app.kubernetes.io/instance=pulse-init-tenant-${TENANT_SID}" </source> | ||
+ | |||
+ | The above command should report the <tt>pulse-init-tenant</tt> job as completed, for example:<source lang="text"> | ||
+ | NAME READY STATUS RESTARTS AGE | ||
+ | pulse-init-tenant-100-job-qszgl 0/1 Completed 0 2d20h </source> | ||
+ | |||
+ | ===Install dcu helm chart=== | ||
+ | |||
+ | '''Get the <tt>dcu</tt> helm chart''' | ||
+ | |||
+ | Download the <tt>dcu</tt> helm chart from JFrog using your credentials. | ||
+ | |||
+ | '''Prepare override file''' | ||
+ | |||
+ | Update the <tt>values-override-dcu.yaml</tt> file: | ||
+ | <source lang="text"># Default values for dcu. | ||
+ | # This is a YAML-formatted file. | ||
+ | # Declare variables to be passed into your templates. | ||
+ | |||
+ | replicaCount: "${TENANT_DCU}" | ||
+ | |||
+ | # * Tenant info | ||
+ | # tenant identification, or empty for shared deployment | ||
+ | tenant: | ||
+ | # Tenant UUID | ||
+ | id: "${TENANT_UUID}" | ||
+ | # Tenant SID (like 0001) | ||
+ | sid: "${TENANT_SID}" | ||
+ | |||
+ | # * 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-dcu-logs | ||
+ | accessModes: | ||
+ | - ReadWriteMany | ||
+ | capacity: 10Gi | ||
+ | class: ${PV_STORAGE_CLASS_RW_MANY} | ||
+ | |||
+ | # * Config info | ||
+ | # Set your values. | ||
+ | config: | ||
+ | dbName: "${DB_NAME_SHARED}" | ||
+ | # 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" | ||
+ | redisConfig: "pulse-redis-configmap" | ||
+ | # Redis secret name | ||
+ | redisSecret: "pulse-redis-secret" | ||
+ | # Redis secret key for access key | ||
+ | redisSecretKey: "REDIS01_KEY" | ||
+ | |||
+ | # * Image | ||
+ | # container image common settings | ||
+ | image: | ||
+ | name: | ||
+ | tag: "${DOCKER_TAG}" | ||
+ | pullPolicy: IfNotPresent | ||
+ | repository: "${DOCKER_REGISTRY}/pulse/" | ||
+ | |||
+ | imagePullSecrets: [name: ${DOCKER_REGISTRY_SECRET_NAME}] | ||
+ | |||
+ | ## 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: {} | ||
+ | |||
+ | ## 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: {} | ||
+ | |||
+ | # * Monitoring settings | ||
+ | monitoring: | ||
+ | # enable the Prometheus metrics endpoint | ||
+ | enabled: false | ||
+ | # port number of the Prometheus metrics endpoint | ||
+ | port: 9091 | ||
+ | # HTTP path to scrape for metrics | ||
+ | path: /metrics | ||
+ | # 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.monitoring.port}}" | ||
+ | # prometheus.io/path: "/metrics" | ||
+ | podMonitor: | ||
+ | # enables PodMonitor creation for the POD | ||
+ | enabled: true | ||
+ | # interval at which metrics should be scraped | ||
+ | scrapeInterval: 30s | ||
+ | # timeout after which the scrape is ended | ||
+ | scrapeTimeout: | ||
+ | # namespace of the PodMonitor, defaults to the namespace of the POD | ||
+ | namespace: | ||
+ | additionalLabels: {} | ||
+ | alerts: | ||
+ | # enables alert rules | ||
+ | enabled: true | ||
+ | # alert condition duration | ||
+ | duration: 5m | ||
+ | # namespace of the alert rules, defaults to the namespace of the POD | ||
+ | namespace: | ||
+ | additionalLabels: {} | ||
+ | |||
+ | ########################################################################## | ||
+ | |||
+ | # * Configuration for the Collector container | ||
+ | collector: | ||
+ | # resource limits for container | ||
+ | resources: | ||
+ | # minimum resource requirements to start container | ||
+ | requests: | ||
+ | # minimal amount of memory required to start a container | ||
+ | memory: "300Mi" | ||
+ | # minimal CPU to reserve | ||
+ | cpu: "200m" | ||
+ | # resource limits for containers | ||
+ | limits: | ||
+ | # maximum amount of memory a container can use before being evicted | ||
+ | # by the OOM Killer | ||
+ | memory: "4Gi" | ||
+ | # maximum amount of CPU resources that can be used and should be tuned to reflect | ||
+ | # what the application can effectively use before needing to be horizontally scaled out | ||
+ | cpu: "8000m" | ||
+ | # securityContext: | ||
+ | # runAsUser: 500 | ||
+ | # runAsGroup: 500 | ||
+ | |||
+ | # * Configuration for the StatServer container | ||
+ | statserver: | ||
+ | # resource limits for container | ||
+ | resources: | ||
+ | # minimum resource requirements to start container | ||
+ | requests: | ||
+ | # minimal amount of memory required to start a container | ||
+ | memory: "300Mi" | ||
+ | # minimal CPU to reserve | ||
+ | cpu: "100m" | ||
+ | # resource limits for containers | ||
+ | limits: | ||
+ | # maximum amount of memory a container can use before being evicted | ||
+ | # by the OOM Killer | ||
+ | memory: "4Gi" | ||
+ | # maximum amount of CPU resources that can be used and should be tuned to reflect | ||
+ | # what the application can effectively use before needing to be horizontally scaled out | ||
+ | cpu: "4000m" | ||
+ | # securityContext: | ||
+ | # runAsUser: 500 | ||
+ | # runAsGroup: 500 | ||
+ | |||
+ | # * Configuration for the monitor sidecar container | ||
+ | monitorSidecar: | ||
+ | # resource limits for container | ||
+ | resources: | ||
+ | # disabled: true | ||
+ | # minimum resource requirements to start container | ||
+ | requests: | ||
+ | # minimal amount of memory required to start a container | ||
+ | memory: "30Mi" | ||
+ | # minimal CPU to reserve | ||
+ | cpu: "2m" | ||
+ | # resource limits for containers | ||
+ | limits: | ||
+ | # maximum amount of memory a container can use before being evicted | ||
+ | # by the OOM Killer | ||
+ | memory: "70Mi" | ||
+ | # maximum amount of CPU resources that can be used and should be tuned to reflect | ||
+ | # what the application can effectively use before needing to be horizontally scaled out | ||
+ | cpu: "10m" | ||
+ | # securityContext: | ||
+ | # runAsUser: 500 | ||
+ | # runAsGroup: 500 | ||
+ | |||
+ | ########################################################################## | ||
+ | |||
+ | # * Configuration for the Configuration Server Proxy container | ||
+ | csproxy: | ||
+ | # resource limits for container | ||
+ | resources: | ||
+ | # minimum resource requirements to start container | ||
+ | requests: | ||
+ | # minimal amount of memory required to start a container | ||
+ | memory: "200Mi" | ||
+ | # minimal CPU to reserve | ||
+ | cpu: "50m" | ||
+ | # resource limits for containers | ||
+ | limits: | ||
+ | # maximum amount of memory a container can use before being evicted | ||
+ | # by the OOM Killer | ||
+ | memory: "2Gi" | ||
+ | # maximum amount of CPU resources that can be used and should be tuned to reflect | ||
+ | # what the application can effectively use before needing to be horizontally scaled out | ||
+ | cpu: "1000m" | ||
+ | # securityContext: | ||
+ | # runAsUser: 500 | ||
+ | # runAsGroup: 500 | ||
+ | |||
+ | # volumeClaims contains persistent volume claims for services | ||
+ | # All available storage classes can be found here: | ||
+ | # https://github.com/genesysengage/tfm-azure-core-aks/blob/master/k8s-module/storage.tf | ||
+ | volumeClaims: | ||
+ | # statserverBackup is storage for statserver backup data | ||
+ | statserverBackup: | ||
+ | name: statserver-backup | ||
+ | accessModes: | ||
+ | - ReadWriteOnce | ||
+ | # capacity is storage capacity | ||
+ | capacity: "1Gi" | ||
+ | # class is storage class. Must be set explicitly. | ||
+ | class: ${PV_STORAGE_CLASS_RW_ONCE} </source> | ||
+ | |||
+ | '''Install the <tt>dcu</tt> helm chart''' | ||
+ | |||
+ | <source lang="text">source .tenant_init_variables | ||
+ | |||
+ | envsubst < ./values-override-dcu.yaml | \ | ||
+ | helm upgrade --install "pulse-dcu-${TENANT_SID}" pe-jfrog-stage/dcu \ | ||
+ | --wait \ | ||
+ | --reuse-values \ | ||
+ | --version="${CHART_VERSION}" \ | ||
+ | --namespace="${NAMESPACE}" \ | ||
+ | -f - </source> | ||
+ | |||
+ | '''Validate the <tt>dcu</tt> helm chart''' | ||
+ | |||
+ | <source lang="text">source .tenant_init_variables | ||
+ | |||
+ | oc get pods -n="${NAMESPACE}" -l "app.kubernetes.io/name=dcu,app.kubernetes.io/instance=pulse-dcu-${TENANT_SID}" </source> | ||
+ | |||
+ | The above command should report all <tt>pulse-dcu</tt> pods as running, for example: | ||
+ | <source lang="text">NAME READY STATUS RESTARTS AGE | ||
+ | pulse-dcu-100-0 4/4 Running 2 2d20h | ||
+ | pulse-dcu-100-1 4/4 Running 0 167m </source> | ||
+ | |||
+ | ===Install lds helm cahrt=== | ||
+ | |||
+ | '''Get the <tt>lds</tt> helm chart''' | ||
+ | |||
+ | Download the <tt>lds</tt> helm chart from JFrog using your credentials. | ||
+ | |||
+ | '''Prepare override file''' | ||
+ | |||
+ | Update the <tt>values-override-lds.yaml</tt> file: | ||
+ | <source lang="text"># Default values for lds. | ||
+ | # This is a YAML-formatted file. | ||
+ | # Declare variables to be passed into your templates. | ||
+ | |||
+ | replicaCount: 2 | ||
+ | |||
+ | # * Tenant info | ||
+ | # tenant identification, or empty for shared deployment | ||
+ | tenant: | ||
+ | # Tenant UUID | ||
+ | id: "${TENANT_UUID}" | ||
+ | # Tenant SID (like 0001) | ||
+ | sid: "${TENANT_SID}" | ||
+ | |||
+ | # * 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-lds-logs | ||
+ | accessModes: | ||
+ | - ReadWriteMany | ||
+ | capacity: 10Gi | ||
+ | class: ${PV_STORAGE_CLASS_RW_MANY} | ||
+ | |||
+ | # * Container image common settings | ||
+ | image: | ||
+ | name: | ||
+ | tag: "${DOCKER_TAG}" | ||
+ | pullPolicy: IfNotPresent | ||
+ | repository: "${DOCKER_REGISTRY}/pulse/" | ||
+ | |||
+ | imagePullSecrets: [name: ${DOCKER_REGISTRY_SECRET_NAME}] | ||
+ | |||
+ | ## 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: {} | ||
+ | |||
+ | ## 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: {} | ||
+ | # * Monitoring settings | ||
+ | monitoring: | ||
+ | # enable the Prometheus metrics endpoint | ||
+ | enabled: false | ||
+ | # port number of the Prometheus metrics endpoint | ||
+ | port: 9091 | ||
+ | # HTTP path to scrape for metrics | ||
+ | path: /metrics | ||
+ | # 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.monitoring.port}}" | ||
+ | # prometheus.io/path: "/metrics" | ||
+ | podMonitor: | ||
+ | # enables PodMonitor creation for the POD | ||
+ | enabled: true | ||
+ | # interval at which metrics should be scraped | ||
+ | scrapeInterval: 30s | ||
+ | # timeout after which the scrape is ended | ||
+ | scrapeTimeout: | ||
+ | # namespace of the PodMonitor, defaults to the namespace of the POD | ||
+ | namespace: | ||
+ | additionalLabels: {} | ||
+ | alerts: | ||
+ | # enables alert rules | ||
+ | enabled: true | ||
+ | # alert condition duration | ||
+ | duration: 5m | ||
+ | # namespace of the alert rules, defaults to the namespace of the POD | ||
+ | namespace: | ||
+ | additionalLabels: {} | ||
+ | |||
+ | |||
+ | # * Configuration for the LDS container | ||
+ | lds: | ||
+ | # resource limits for container | ||
+ | resources: | ||
+ | # minimum resource requirements to start container | ||
+ | requests: | ||
+ | # minimal amount of memory required to start a container | ||
+ | memory: "50Mi" | ||
+ | # minimal CPU to reserve | ||
+ | cpu: "50m" | ||
+ | # resource limits for containers | ||
+ | limits: | ||
+ | # maximum amount of memory a container can use before being evicted | ||
+ | # by the OOM Killer | ||
+ | memory: "4Gi" | ||
+ | # maximum amount of CPU resources that can be used and should be tuned to reflect | ||
+ | # what the application can effectively use before needing to be horizontally scaled out | ||
+ | cpu: "4000m" | ||
+ | # securityContext: | ||
+ | # runAsUser: 500 | ||
+ | # runAsGroup: 500 | ||
+ | |||
+ | # * Configuration for the monitor sidecar container | ||
+ | monitorSidecar: | ||
+ | # resource limits for container | ||
+ | resources: | ||
+ | # minimum resource requirements to start container | ||
+ | requests: | ||
+ | # minimal amount of memory required to start a container | ||
+ | memory: "30Mi" | ||
+ | # minimal CPU to reserve | ||
+ | cpu: "2m" | ||
+ | # resource limits for containers | ||
+ | limits: | ||
+ | # maximum amount of memory a container can use before being evicted | ||
+ | # by the OOM Killer | ||
+ | memory: "70Mi" | ||
+ | # maximum amount of CPU resources that can be used and should be tuned to reflect | ||
+ | # what the application can effectively use before needing to be horizontally scaled out | ||
+ | cpu: "10m" | ||
+ | # securityContext: | ||
+ | # runAsUser: 500 | ||
+ | # runAsGroup: 500 | ||
+ | |||
+ | # * Configuration for the Configuration Server Proxy container | ||
+ | csproxy: | ||
+ | resources: | ||
+ | # minimum resource requirements to start container | ||
+ | requests: | ||
+ | # minimal amount of memory required to start a container | ||
+ | memory: "200Mi" | ||
+ | # minimal CPU to reserve | ||
+ | cpu: "50m" | ||
+ | # resource limits for containers | ||
+ | limits: | ||
+ | # maximum amount of memory a container can use before being evicted | ||
+ | # by the OOM Killer | ||
+ | memory: "2Gi" | ||
+ | # maximum amount of CPU resources that can be used and should be tuned to reflect | ||
+ | # what the application can effectively use before needing to be horizontally scaled out | ||
+ | cpu: "1000m" | ||
+ | # securityContext: | ||
+ | # runAsUser: 500 | ||
+ | # runAsGroup: 500 </source> | ||
+ | |||
+ | '''Install the <tt>lds</tt> helm chart''' | ||
+ | <source lang="text">source .tenant_init_variables | ||
+ | |||
+ | envsubst < ./values-override-lds.yaml | \ | ||
+ | helm upgrade --install "pulse-lds-${TENANT_SID}" pe-jfrog-stage/lds \ | ||
+ | --wait \ | ||
+ | --version="${CHART_VERSION}" \ | ||
+ | --namespace="${NAMESPACE}" \ | ||
+ | -f - </source> | ||
+ | |||
+ | '''Validate the <tt>lds</tt> helm chart''' | ||
+ | <source lang="text">source .tenant_init_variables | ||
+ | |||
+ | oc get pods -n="${NAMESPACE}" -l "app.kubernetes.io/name=lds,app.kubernetes.io/instance=pulse-lds-${TENANT_SID}" | ||
+ | </source> | ||
+ | |||
+ | The above command should report all pulse-lds pods as running, for example: | ||
+ | <source lang="text"> | ||
+ | NAME READY STATUS RESTARTS AGE | ||
+ | pulse-lds-100-0 3/3 Running 0 2d20h | ||
+ | pulse-lds-100-1 3/3 Running 0 2d20h </source> | ||
+ | |||
+ | ===Install permissions helm chart=== | ||
+ | '''Get the <tt>permissions</tt> helm chart''' | ||
+ | |||
+ | Download the <tt>permissions</tt> helm chart from JFrog using your credentials. | ||
+ | |||
+ | '''Prepare override file''' | ||
+ | |||
+ | Update the <tt>values-override-permissions.yaml</tt> file: | ||
+ | <source lang="text"># Default values for permissions. | ||
+ | # This is a YAML-formatted file. | ||
+ | # Declare variables to be passed into your templates. | ||
+ | |||
+ | # * Image configuration | ||
+ | image: | ||
+ | name: userpermissions | ||
+ | tag: "${DOCKER_TAG}" | ||
+ | pullPolicy: IfNotPresent | ||
+ | repository: "${DOCKER_REGISTRY}/pulse/" | ||
+ | |||
+ | imagePullSecrets: [name: ${DOCKER_REGISTRY_SECRET_NAME}] | ||
+ | |||
+ | # * Tenant info | ||
+ | # tenant identification, or empty for shared deployment | ||
+ | tenant: | ||
+ | # Tenant UUID | ||
+ | id: "${TENANT_UUID}" | ||
+ | # Tenant SID (like 0001) | ||
+ | sid: "${TENANT_SID}" | ||
+ | |||
+ | # common configuration. | ||
+ | config: | ||
+ | dbName: "${DB_NAME_SHARED}" | ||
+ | # 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" | ||
+ | |||
+ | |||
+ | # * Configuration for the Configuration Server Proxy container | ||
+ | csproxy: | ||
+ | # resource limits for container | ||
+ | resources: | ||
+ | # minimum resource requirements to start container | ||
+ | requests: | ||
+ | # minimal amount of memory required to start a container | ||
+ | memory: "200Mi" | ||
+ | # minimal CPU to reserve | ||
+ | cpu: "50m" | ||
+ | # resource limits for containers | ||
+ | limits: | ||
+ | # maximum amount of memory a container can use before being evicted | ||
+ | # by the OOM Killer | ||
+ | memory: "2Gi" | ||
+ | # maximum amount of CPU resources that can be used and should be tuned to reflect | ||
+ | # what the application can effectively use before needing to be horizontally scaled out | ||
+ | cpu: "1000m" | ||
+ | # securityContext: | ||
+ | # runAsUser: 500 | ||
+ | # runAsGroup: 500 | ||
+ | |||
+ | # * 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-permissions-logs | ||
+ | accessModes: | ||
+ | - ReadWriteMany | ||
+ | capacity: 10Gi | ||
+ | class: ${PV_STORAGE_CLASS_RW_MANY} | ||
+ | |||
+ | ## Containers should run as genesys user and cannot use elevated permissions | ||
+ | ## !!! THESE OPTIONS SHOULD NOT BE CHANGED UNLESS INSTRUCTED BY GENESYS !!! | ||
+ | # securityContext: | ||
+ | # runAsUser: 500 | ||
+ | # runAsGroup: 500 | ||
+ | |||
+ | ## Resource requests and limits | ||
+ | ## ref: http://kubernetes.io/docs/user-guide/compute-resources/ | ||
+ | ## | ||
+ | resources: | ||
+ | limits: | ||
+ | memory: "1Gi" | ||
+ | cpu: "500m" | ||
+ | requests: | ||
+ | memory: "400Mi" | ||
+ | cpu: "50m" | ||
+ | |||
+ | ## 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: {} | ||
+ | |||
+ | ## Add annotations to all pods | ||
+ | ## | ||
+ | podAnnotations: {} | ||
+ | |||
+ | ## Add labels to all pods | ||
+ | ## | ||
+ | podLabels: {} </source> | ||
+ | |||
+ | '''Install permissions helm chart''' | ||
+ | <source lang="text">source .tenant_init_variables | ||
+ | |||
+ | envsubst < ./values-override-permissions.yaml | \ | ||
+ | helm upgrade --install "pulse-permissions-${TENANT_SID}" pe-jfrog-stage/permissions \ | ||
+ | --wait \ | ||
+ | --version="${CHART_VERSION}" \ | ||
+ | --namespace="${NAMESPACE}" \ | ||
+ | -f -</source> | ||
+ | |||
+ | '''Validate permissions helm chart''' | ||
+ | <source lang="text"> source .tenant_init_variables | ||
+ | |||
+ | oc get pods -n="${NAMESPACE}" -l "app.kubernetes.io/name=permissions,app.kubernetes.io/instance=pulse-permissions-${TENANT_SID}"</source> | ||
+ | The above command should report all <tt>pulse-permissions</tt> pods as running, for example: | ||
+ | <source lang="text">NAME READY STATUS RESTARTS AGE | ||
+ | pulse-permissions-100-c5ff8bb7d-jl7d7 2/2 Running 2 2d20h </source> | ||
|Status=No | |Status=No | ||
}}{{Section | }}{{Section |
Revision as of 06:51, July 1, 2021
Contents
Learn how to provision Genesys Pulse.
Prerequisites
Please complete Before you begin instructions.
Information you will need:
- Versions:
- <image-version> = 9.0.100.10
- <chart-versions>= 9.0.100+10
- K8S namespace <namespace> (e.g. 'pulse')
- Project Name <project-name> (e.g. 'pulse')
- Postgres credentials
- <db-host>
- <db-port>
- <db-name>
- <db-user>
- <db-user-password>
- <db-superuser>
- <db-superuser-password>
- <db-ssl-mode>
- Docker credentials
- <docker-email>
- <docker-password>
- <docker-user>
- OpenShift credentials
- <openshift-url>
- <openshift-port>
- <openshift-token>
- Redis credentials
- <redis-host>
- <redis-port>
- <redis-password>
- <redis-enable-ssl>
- Tenant service variables
- <tenant-uuid>
- <tenant-sid>
- <tenant-name>
export PROJECT_NAME='<project-name>'
export NAMESPACE='<namespace>'
export CHART_VERSION='<chart-version>'
export DB_HOST='<db-host>'
export DB_PORT='<db-port>'
export DB_NAME_SHARED='<db-name>'
export DB_USER_SHARED='<db-user>'
export DB_PASSWORD_SHARED='<db-user-password>'
export DB_NAME_SUPERUSER='<db-superuser>'
export DB_PASSWORD_SUPERUSER='<db-superuser-password>'
export DB_SSL_MODE='<db-ssl-mode>'
export DOCKER_REGISTRY_SECRET_NAME='<docker-registry-secret-name>'
export DOCKER_REGISTRY='<docker-registry>'
export DOCKER_TAG='<image-version>'
export REDIS_ENABLE_SSL='<redis-enable-ssl>'
export REDIS_PASWORD='<redis-password>'
export REDIS_PORT='<redis-port>'
export REDIS_HOST='<redis-host>'
export TENANT_UUID='<tenant-uuid>'
export TENANT_DCU='2'
export TENANT_NAME='<tenant-name>'
export TENANT_SID='<tenant-sid>'
export PV_STORAGE_CLASS_RW_MANY='<rw-many-storage-class>'
export PV_STORAGE_CLASS_RW_ONCE='<rw-once-storage-class>'
Tenant provisioning
Install init tenant chart
Get the init-tenant helm chart
Download the init-tenant helm chart from JFrog using your credentials.
Prepare override file
Update the values-override-init-tenant.yaml file:# Default values for init-tenant.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
# * Images
# Replace for your values: registry and secret
image:
name: init
tag: "${DOCKER_TAG}"
pullPolicy: IfNotPresent
repository: "${DOCKER_REGISTRY}/pulse/"
imagePullSecrets: [name: ${DOCKER_REGISTRY_SECRET_NAME}]
# * Tenant info
# Replace for your values
tenant:
# Tenant UUID
id: ${TENANT_UUID}
# Tenant SID (like 0001)
sid: ${TENANT_SID}
# common configuration.
config:
dbName: "${DB_NAME_SHARED}"
# 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"
## 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: {}
## Containers should run as genesys user and cannot use elevated permissions
## !!! THESE OPTIONS SHOULD NOT BE CHANGED UNLESS INSTRUCTED BY GENESYS !!!
# securityContext:
# runAsUser: 500
# runAsGroup: 500
## 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: []
# * Templates
templates:
- Agent_Group_Status.gpb
- Agent_KPIs.gpb
- Agent_Login.gpb
- Alert_Widget.gpb
- Callback_Activity.gpb
- Campaign_Activity.gpb
- Campaign_Callback_Status.gpb
- Campaign_Group_Activity.gpb
- Campaign_Group_Status.gpb
- Chat_Agent_Activity.gpb
- Chat_Queue_Activity.gpb
- Chat_Service_Level_Performance.gpb
- Chat_Waiting_Statistics.gpb
- Email_Agent_Activity.gpb
- Email_Queue_Activity.gpb
- Facebook_Media_Activity.gpb
- IFRAME.gpb
- IWD_Agent_Activity.gpb
- IWD_Queue_Activity.gpb
- Queue_KPIs.gpb
- Queue_Overflow_Reason.gpb
- Static_Text.gpb
- Twitter_Media_Activity.gpb
- eServices_Agent_Activity.gpb
- eServices_Queue_KPIs.gpb
source .tenant_init_variables
envsubst < ./values-override-init-tenant.yaml | \
helm upgrade --install "pulse-init-tenant-${TENANT_SID}" pe-jfrog-stage/init-tenant \
--wait --wait-for-jobs \
--version="${CHART_VERSION}" \
--namespace="${NAMESPACE}" \
-f -
<source lang="text">source .tenant_init_variables
oc get pods -n="${NAMESPACE}" -l "app.kubernetes.io/name=init-tenant,app.kubernetes.io/instance=pulse-init-tenant-${TENANT_SID}"
NAME READY STATUS RESTARTS AGE
pulse-init-tenant-100-job-qszgl 0/1 Completed 0 2d20h
Install dcu helm chart
Get the dcu helm chart
Download the dcu helm chart from JFrog using your credentials.
Prepare override file
Update the values-override-dcu.yaml file:
# Default values for dcu.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicaCount: "${TENANT_DCU}"
# * Tenant info
# tenant identification, or empty for shared deployment
tenant:
# Tenant UUID
id: "${TENANT_UUID}"
# Tenant SID (like 0001)
sid: "${TENANT_SID}"
# * 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-dcu-logs
accessModes:
- ReadWriteMany
capacity: 10Gi
class: ${PV_STORAGE_CLASS_RW_MANY}
# * Config info
# Set your values.
config:
dbName: "${DB_NAME_SHARED}"
# 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"
redisConfig: "pulse-redis-configmap"
# Redis secret name
redisSecret: "pulse-redis-secret"
# Redis secret key for access key
redisSecretKey: "REDIS01_KEY"
# * Image
# container image common settings
image:
name:
tag: "${DOCKER_TAG}"
pullPolicy: IfNotPresent
repository: "${DOCKER_REGISTRY}/pulse/"
imagePullSecrets: [name: ${DOCKER_REGISTRY_SECRET_NAME}]
## 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: {}
## 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: {}
# * Monitoring settings
monitoring:
# enable the Prometheus metrics endpoint
enabled: false
# port number of the Prometheus metrics endpoint
port: 9091
# HTTP path to scrape for metrics
path: /metrics
# 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.monitoring.port}}"
# prometheus.io/path: "/metrics"
podMonitor:
# enables PodMonitor creation for the POD
enabled: true
# interval at which metrics should be scraped
scrapeInterval: 30s
# timeout after which the scrape is ended
scrapeTimeout:
# namespace of the PodMonitor, defaults to the namespace of the POD
namespace:
additionalLabels: {}
alerts:
# enables alert rules
enabled: true
# alert condition duration
duration: 5m
# namespace of the alert rules, defaults to the namespace of the POD
namespace:
additionalLabels: {}
##########################################################################
# * Configuration for the Collector container
collector:
# resource limits for container
resources:
# minimum resource requirements to start container
requests:
# minimal amount of memory required to start a container
memory: "300Mi"
# minimal CPU to reserve
cpu: "200m"
# resource limits for containers
limits:
# maximum amount of memory a container can use before being evicted
# by the OOM Killer
memory: "4Gi"
# maximum amount of CPU resources that can be used and should be tuned to reflect
# what the application can effectively use before needing to be horizontally scaled out
cpu: "8000m"
# securityContext:
# runAsUser: 500
# runAsGroup: 500
# * Configuration for the StatServer container
statserver:
# resource limits for container
resources:
# minimum resource requirements to start container
requests:
# minimal amount of memory required to start a container
memory: "300Mi"
# minimal CPU to reserve
cpu: "100m"
# resource limits for containers
limits:
# maximum amount of memory a container can use before being evicted
# by the OOM Killer
memory: "4Gi"
# maximum amount of CPU resources that can be used and should be tuned to reflect
# what the application can effectively use before needing to be horizontally scaled out
cpu: "4000m"
# securityContext:
# runAsUser: 500
# runAsGroup: 500
# * Configuration for the monitor sidecar container
monitorSidecar:
# resource limits for container
resources:
# disabled: true
# minimum resource requirements to start container
requests:
# minimal amount of memory required to start a container
memory: "30Mi"
# minimal CPU to reserve
cpu: "2m"
# resource limits for containers
limits:
# maximum amount of memory a container can use before being evicted
# by the OOM Killer
memory: "70Mi"
# maximum amount of CPU resources that can be used and should be tuned to reflect
# what the application can effectively use before needing to be horizontally scaled out
cpu: "10m"
# securityContext:
# runAsUser: 500
# runAsGroup: 500
##########################################################################
# * Configuration for the Configuration Server Proxy container
csproxy:
# resource limits for container
resources:
# minimum resource requirements to start container
requests:
# minimal amount of memory required to start a container
memory: "200Mi"
# minimal CPU to reserve
cpu: "50m"
# resource limits for containers
limits:
# maximum amount of memory a container can use before being evicted
# by the OOM Killer
memory: "2Gi"
# maximum amount of CPU resources that can be used and should be tuned to reflect
# what the application can effectively use before needing to be horizontally scaled out
cpu: "1000m"
# securityContext:
# runAsUser: 500
# runAsGroup: 500
# volumeClaims contains persistent volume claims for services
# All available storage classes can be found here:
# https://github.com/genesysengage/tfm-azure-core-aks/blob/master/k8s-module/storage.tf
volumeClaims:
# statserverBackup is storage for statserver backup data
statserverBackup:
name: statserver-backup
accessModes:
- ReadWriteOnce
# capacity is storage capacity
capacity: "1Gi"
# class is storage class. Must be set explicitly.
class: ${PV_STORAGE_CLASS_RW_ONCE}
Install the dcu helm chart
source .tenant_init_variables
envsubst < ./values-override-dcu.yaml | \
helm upgrade --install "pulse-dcu-${TENANT_SID}" pe-jfrog-stage/dcu \
--wait \
--reuse-values \
--version="${CHART_VERSION}" \
--namespace="${NAMESPACE}" \
-f -
Validate the dcu helm chart
source .tenant_init_variables
oc get pods -n="${NAMESPACE}" -l "app.kubernetes.io/name=dcu,app.kubernetes.io/instance=pulse-dcu-${TENANT_SID}"
The above command should report all pulse-dcu pods as running, for example:
NAME READY STATUS RESTARTS AGE
pulse-dcu-100-0 4/4 Running 2 2d20h
pulse-dcu-100-1 4/4 Running 0 167m
Install lds helm cahrt
Get the lds helm chart
Download the lds helm chart from JFrog using your credentials.
Prepare override file
Update the values-override-lds.yaml file:
# Default values for lds.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicaCount: 2
# * Tenant info
# tenant identification, or empty for shared deployment
tenant:
# Tenant UUID
id: "${TENANT_UUID}"
# Tenant SID (like 0001)
sid: "${TENANT_SID}"
# * 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-lds-logs
accessModes:
- ReadWriteMany
capacity: 10Gi
class: ${PV_STORAGE_CLASS_RW_MANY}
# * Container image common settings
image:
name:
tag: "${DOCKER_TAG}"
pullPolicy: IfNotPresent
repository: "${DOCKER_REGISTRY}/pulse/"
imagePullSecrets: [name: ${DOCKER_REGISTRY_SECRET_NAME}]
## 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: {}
## 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: {}
# * Monitoring settings
monitoring:
# enable the Prometheus metrics endpoint
enabled: false
# port number of the Prometheus metrics endpoint
port: 9091
# HTTP path to scrape for metrics
path: /metrics
# 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.monitoring.port}}"
# prometheus.io/path: "/metrics"
podMonitor:
# enables PodMonitor creation for the POD
enabled: true
# interval at which metrics should be scraped
scrapeInterval: 30s
# timeout after which the scrape is ended
scrapeTimeout:
# namespace of the PodMonitor, defaults to the namespace of the POD
namespace:
additionalLabels: {}
alerts:
# enables alert rules
enabled: true
# alert condition duration
duration: 5m
# namespace of the alert rules, defaults to the namespace of the POD
namespace:
additionalLabels: {}
# * Configuration for the LDS container
lds:
# resource limits for container
resources:
# minimum resource requirements to start container
requests:
# minimal amount of memory required to start a container
memory: "50Mi"
# minimal CPU to reserve
cpu: "50m"
# resource limits for containers
limits:
# maximum amount of memory a container can use before being evicted
# by the OOM Killer
memory: "4Gi"
# maximum amount of CPU resources that can be used and should be tuned to reflect
# what the application can effectively use before needing to be horizontally scaled out
cpu: "4000m"
# securityContext:
# runAsUser: 500
# runAsGroup: 500
# * Configuration for the monitor sidecar container
monitorSidecar:
# resource limits for container
resources:
# minimum resource requirements to start container
requests:
# minimal amount of memory required to start a container
memory: "30Mi"
# minimal CPU to reserve
cpu: "2m"
# resource limits for containers
limits:
# maximum amount of memory a container can use before being evicted
# by the OOM Killer
memory: "70Mi"
# maximum amount of CPU resources that can be used and should be tuned to reflect
# what the application can effectively use before needing to be horizontally scaled out
cpu: "10m"
# securityContext:
# runAsUser: 500
# runAsGroup: 500
# * Configuration for the Configuration Server Proxy container
csproxy:
resources:
# minimum resource requirements to start container
requests:
# minimal amount of memory required to start a container
memory: "200Mi"
# minimal CPU to reserve
cpu: "50m"
# resource limits for containers
limits:
# maximum amount of memory a container can use before being evicted
# by the OOM Killer
memory: "2Gi"
# maximum amount of CPU resources that can be used and should be tuned to reflect
# what the application can effectively use before needing to be horizontally scaled out
cpu: "1000m"
# securityContext:
# runAsUser: 500
# runAsGroup: 500
Install the lds helm chart
source .tenant_init_variables
envsubst < ./values-override-lds.yaml | \
helm upgrade --install "pulse-lds-${TENANT_SID}" pe-jfrog-stage/lds \
--wait \
--version="${CHART_VERSION}" \
--namespace="${NAMESPACE}" \
-f -
Validate the lds helm chart
source .tenant_init_variables
oc get pods -n="${NAMESPACE}" -l "app.kubernetes.io/name=lds,app.kubernetes.io/instance=pulse-lds-${TENANT_SID}"
The above command should report all pulse-lds pods as running, for example:
NAME READY STATUS RESTARTS AGE
pulse-lds-100-0 3/3 Running 0 2d20h
pulse-lds-100-1 3/3 Running 0 2d20h
Install permissions helm chart
Get the permissions helm chart
Download the permissions helm chart from JFrog using your credentials.
Prepare override file
Update the values-override-permissions.yaml file:
# Default values for permissions.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
# * Image configuration
image:
name: userpermissions
tag: "${DOCKER_TAG}"
pullPolicy: IfNotPresent
repository: "${DOCKER_REGISTRY}/pulse/"
imagePullSecrets: [name: ${DOCKER_REGISTRY_SECRET_NAME}]
# * Tenant info
# tenant identification, or empty for shared deployment
tenant:
# Tenant UUID
id: "${TENANT_UUID}"
# Tenant SID (like 0001)
sid: "${TENANT_SID}"
# common configuration.
config:
dbName: "${DB_NAME_SHARED}"
# 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"
# * Configuration for the Configuration Server Proxy container
csproxy:
# resource limits for container
resources:
# minimum resource requirements to start container
requests:
# minimal amount of memory required to start a container
memory: "200Mi"
# minimal CPU to reserve
cpu: "50m"
# resource limits for containers
limits:
# maximum amount of memory a container can use before being evicted
# by the OOM Killer
memory: "2Gi"
# maximum amount of CPU resources that can be used and should be tuned to reflect
# what the application can effectively use before needing to be horizontally scaled out
cpu: "1000m"
# securityContext:
# runAsUser: 500
# runAsGroup: 500
# * 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-permissions-logs
accessModes:
- ReadWriteMany
capacity: 10Gi
class: ${PV_STORAGE_CLASS_RW_MANY}
## Containers should run as genesys user and cannot use elevated permissions
## !!! THESE OPTIONS SHOULD NOT BE CHANGED UNLESS INSTRUCTED BY GENESYS !!!
# securityContext:
# runAsUser: 500
# runAsGroup: 500
## Resource requests and limits
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
##
resources:
limits:
memory: "1Gi"
cpu: "500m"
requests:
memory: "400Mi"
cpu: "50m"
## 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: {}
## Add annotations to all pods
##
podAnnotations: {}
## Add labels to all pods
##
podLabels: {}
Install permissions helm chart
source .tenant_init_variables
envsubst < ./values-override-permissions.yaml | \
helm upgrade --install "pulse-permissions-${TENANT_SID}" pe-jfrog-stage/permissions \
--wait \
--version="${CHART_VERSION}" \
--namespace="${NAMESPACE}" \
-f -
Validate permissions helm chart
source .tenant_init_variables
oc get pods -n="${NAMESPACE}" -l "app.kubernetes.io/name=permissions,app.kubernetes.io/instance=pulse-permissions-${TENANT_SID}"
The above command should report all pulse-permissions pods as running, for example:
NAME READY STATUS RESTARTS AGE
pulse-permissions-100-c5ff8bb7d-jl7d7 2/2 Running 2 2d20h
Troubleshooting
Check init-tenant helm chart manifests
Run to output manifest into helm-template directory:
source .tenant_init_variables
envsubst < ./values-override-init-tenant.yaml | \
helm template \
--version="${CHART_VERSION}" \
--namespace="${NAMESPACE}" \
--debug \
--output-dir helm-template \
"${CHART_NAME_TENANT_INIT}" pe-jfrog-stage/init-tenant \
-f -
Check dcu helm chart manifests
Run to output manifest into helm-template directory:
source .tenant_init_variables
envsubst < ./values-override-dcu.yaml | \
helm template \
--version="${CHART_VERSION}" \
--namespace="${NAMESPACE}" \
--debug \
--output-dir helm-template \
"pulse-dcu-${TENANT_SID}" pe-jfrog-stage/dcu \
-f -
Check lds helm chart manifests
Run to output manifest into helm-template directory:
source .tenant_init_variables
envsubst < ./values-override-lds.yaml | \
helm template \
--version="${CHART_VERSION}" \
--namespace="${NAMESPACE}" \
--debug \
--output-dir helm-template \
"pulse-lds-${TENANT_SID}" pe-jfrog-stage/lds \
-f -
Check permissions helm chart manifests
Run to output manifest into helm-template directory:
source .tenant_init_variables
envsubst < ./values-override-permissions.yaml | \
helm template \
--version="${CHART_VERSION}" \
--namespace="${NAMESPACE}" \
--debug \
--output-dir helm-template \
"pulse-permissions" pe-jfrog-stage/permissions \
-f -