Difference between revisions of "PEC-REP/Current/PulsePEGuide/Provision"
Line 50: | Line 50: | ||
{{AnchorDiv|SingleNamespace}} | {{AnchorDiv|SingleNamespace}} | ||
===Single namespace=== | ===Single namespace=== | ||
− | Single namespace deployments have a software-defined networking (SDN) with multitenant mode, where namespaces are network isolated. If you plan to deploy Pulse into the single namespace | + | Single namespace deployments have a software-defined networking (SDN) with multitenant mode, where namespaces are network isolated. If you plan to deploy Pulse into the single namespace, ensure that your environment meets the following requirements for inputs: |
*Back-end services deployed into the single namespace must include the string ''pulse'': | *Back-end services deployed into the single namespace must include the string ''pulse'': | ||
Line 89: | Line 89: | ||
# set service domain used to access voice service | # set service domain used to access voice service | ||
# example for GKE VPC case: voice.svc.gke1-uswest1.gcpe002.gencpe.com | # example for GKE VPC case: voice.svc.gke1-uswest1.gcpe002.gencpe.com | ||
− | |||
voiceDomain: "voice.svc.<domain>" | voiceDomain: "voice.svc.<domain>" | ||
# set service domain used to access ixn service | # set service domain used to access ixn service | ||
# example for GKE VPC case: ixn.svc.gke1-uswest1.gcpe002.gencpe.com | # example for GKE VPC case: ixn.svc.gke1-uswest1.gcpe002.gencpe.com | ||
− | |||
ixnDomain: "ixn.svc.<domain>" | ixnDomain: "ixn.svc.<domain>" | ||
# set service domain used to access pulse service | # set service domain used to access pulse service | ||
# example for GKE VPC case: pulse.svc.gke1-uswest1.gcpe002.gencpe.com | # example for GKE VPC case: pulse.svc.gke1-uswest1.gcpe002.gencpe.com | ||
− | |||
pulseDomain: "pulse.svc.<domain>" | pulseDomain: "pulse.svc.<domain>" | ||
# set configration server password, used when create secrets | # set configration server password, used when create secrets | ||
Line 220: | Line 217: | ||
*Update the <tt>values-override-init-tenant.yaml</tt> file (GKE): | *Update the <tt>values-override-init-tenant.yaml</tt> file (GKE): | ||
− | *:{{NoteFormat|Enable configurator only for configurations in GKE with VPC scoped DNS | + | *:{{NoteFormat|Enable configurator only for configurations in GKE with VPC scoped DNS. |
}} | }} | ||
Line 239: | Line 236: | ||
# set service domain used to access voice service | # set service domain used to access voice service | ||
# example for GKE VPC case: voice.svc.gke1-uswest1.gcpe002.gencpe.com | # example for GKE VPC case: voice.svc.gke1-uswest1.gcpe002.gencpe.com | ||
− | |||
voiceDomain: "voice.svc.<domain>" | voiceDomain: "voice.svc.<domain>" | ||
# set service domain used to access ixn service | # set service domain used to access ixn service | ||
# example for GKE VPC case: ixn.svc.gke1-uswest1.gcpe002.gencpe.com | # example for GKE VPC case: ixn.svc.gke1-uswest1.gcpe002.gencpe.com | ||
− | |||
ixnDomain: "ixn.svc.<domain>" | ixnDomain: "ixn.svc.<domain>" | ||
# set service domain used to access pulse service | # set service domain used to access pulse service | ||
# example for GKE VPC case: pulse.svc.gke1-uswest1.gcpe002.gencpe.com | # example for GKE VPC case: pulse.svc.gke1-uswest1.gcpe002.gencpe.com | ||
− | |||
pulseDomain: "pulse.svc.<domain>" | pulseDomain: "pulse.svc.<domain>" | ||
# set configration server password, used when create secrets | # set configration server password, used when create secrets | ||
Line 373: | Line 367: | ||
- eServices_Queue_KPIs.gpb | - eServices_Queue_KPIs.gpb | ||
</source> | </source> | ||
− | + | ||
− | *:<source lang="bash"> | + | '''Install the <tt>init-tenant</tt> helm chart''': <br /> |
− | # Default values for | + | To install the <tt>init-tenant</tt> helm chart, run the following command: |
− | # This is a YAML-formatted file. | + | <source lang="bash"> |
− | # Declare variables to be passed into your templates. | + | helm upgrade --install "pulse-init-tenant-<tenant-sid>" pulsehelmrepo/init-tenant --wait --wait-for-jobs --version="<chart-version>"--namespace=pulse -f values-override-init-tenant.yaml |
− | + | </source> | |
− | + | If installation is successful, the exit code <tt>0</tt> appears. | |
− | + | ||
− | + | '''Validate the <tt>init-tenant</tt> helm chart''':<br /> | |
− | + | To validate the <tt>init-tenant</tt> helm chart, run the following command: | |
− | + | <source lang="bash"> | |
− | + | kubectl get pods -n="pulse" -l "app.kubernetes.io/name=init-tenant,app.kubernetes.io/instance=pulse-init-tenant-<tenant-sid>" | |
− | + | </source> | |
− | + | If the deployment was successful, the <tt>pulse-init-tenant</tt> job is listed as <tt>Completed</tt>/. | |
− | # * Tenant info | + | For example: |
− | # | + | <source lang="bash"> |
− | tenant: | + | NAME READY STATUS RESTARTS AGE |
− | # Tenant UUID | + | pulse-init-tenant-100-job-qszgl 0/1 Completed 0 2d20h |
− | id: <tenant-uuid> | + | </source> |
+ | |||
+ | ===Install dcu helm chart=== | ||
+ | |||
+ | '''Get the <tt>dcu</tt> helm chart:''' | ||
+ | <source lang="bash"> | ||
+ | helm repo update | ||
+ | helm search repo <pulsehelmrepo>/dcu | ||
+ | </source> | ||
+ | |||
+ | '''Prepare the override file:''' | ||
+ | |||
+ | *Update the <tt>values-override-dcu.yaml</tt> file (AKS): | ||
+ | *:<source lang="bash"># 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) | # Tenant SID (like 0001) | ||
− | sid: <tenant-sid> | + | 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: | config: | ||
dbName: "<db-name>" | dbName: "<db-name>" | ||
# set "true" when need @host added for username | # set "true" when need @host added for username | ||
dbUserWithHost: true | dbUserWithHost: true | ||
− | |||
mountSecrets: false | mountSecrets: false | ||
− | |||
postgresConfig: "pulse-postgres-configmap" | postgresConfig: "pulse-postgres-configmap" | ||
# Postgres secret name | # Postgres secret name | ||
Line 410: | Line 444: | ||
# Postgres secret key for password | # Postgres secret key for password | ||
postgresSecretPassword: "META_DB_ADMINPWD" | postgresSecretPassword: "META_DB_ADMINPWD" | ||
+ | redisConfig: "pulse-redis-configmap" | ||
+ | # Redis secret name | ||
+ | redisSecret: "pulse-redis-secret" | ||
+ | # Redis secret key for access key | ||
+ | redisSecretKey: "REDIS01_KEY" | ||
− | ## Service account settings | + | # * Image |
+ | # container image common settings | ||
+ | image: | ||
+ | tag: "<image-version>" | ||
+ | pullPolicy: IfNotPresent | ||
+ | registry: "<docker-registry>" | ||
+ | imagePullSecrets: [name: "<docker-registry-secret-name>"] | ||
+ | |||
+ | ## Service account settings | ||
serviceAccount: | serviceAccount: | ||
# Specifies whether a service account should be created | # Specifies whether a service account should be created | ||
Line 427: | Line 474: | ||
## Specifies the security context for all Pods in the service | ## Specifies the security context for all Pods in the service | ||
## | ## | ||
− | podSecurityContext: | + | podSecurityContext: {} |
− | |||
− | |||
− | |||
− | |||
− | ## | + | ## Add labels to all pods |
− | |||
## | ## | ||
− | + | podLabels: {} | |
− | + | ||
− | + | ## HPA Settings | |
− | + | ## Not supported in this release! | |
− | + | hpa: | |
− | + | enabled: false | |
− | |||
## Priority Class | ## Priority Class | ||
Line 459: | Line 500: | ||
tolerations: [] | 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 | |
− | + | # enable golden signals metrics (not supported for PE) | |
− | + | goldenSignals: | |
− | + | 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: {} | ||
− | # * | + | # * 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: {} | ||
− | # * | + | # * 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: {} | ||
− | # | + | ########################################################################## |
− | # | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ## | + | # * Configuration for the Configuration Server Proxy container |
− | + | csproxy: | |
− | # | + | # define domain for the configuration host |
− | + | params: | |
− | + | cfgHost: "tenant-<tenant-uuid>.voice.<domain>" | |
− | + | # 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: {} | ||
− | # | + | # 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> | ||
+ | |||
+ | *Update the <tt>values-override-dcu.yaml</tt> file (GKE): | ||
+ | *:<source lang="bash"># 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>" | |
− | ## | + | # set "true" when need @host added for username |
− | # | + | dbUserWithHost: true |
− | # | + | mountSecrets: false |
− | + | 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: | |
− | + | tag: "<image-version>" | |
− | + | pullPolicy: IfNotPresent | |
− | + | registry: "<docker-registry>" | |
− | + | 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: {} | |
− | + | ||
− | + | ## Specifies the security context for all Pods in the service | |
− | + | ## | |
− | + | podSecurityContext: | |
− | + | runAsNonRoot: true | |
− | + | runAsUser: 500 | |
− | + | runAsGroup: 500 | |
− | + | fsGroup: 0 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | #### | + | ## 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 | |
− | + | # enable golden signals metrics (not supported for PE) | |
− | # | + | goldenSignals: |
− | + | 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: | |
− | # | + | # define domain for the configuration host |
− | + | params: | |
− | + | cfgHost: "tenant-<tenant-uuid>.voice.<domain>" | |
− | + | # 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'''<br />To install the <tt>dcu</tt> helm chart, run the following command: | |
− | + | <source lang="bash">helm upgrade --install "pulse-dcu-<tenant-sid>" pulsehelmrepo/dcu --wait --reuse-values --version=<chart-version> --namespace=pulse -f values-override-dcu.yaml | |
− | + | </source> | |
− | + | ||
− | + | '''Validate the <tt>dcu</tt> helm chart'''<br />To validate the <tt>dcu</tt> helm chart, run the following command: | |
− | + | <source lang="bash">kubectl get pods -n=pulse -l "app.kubernetes.io/name=dcu,app.kubernetes.io/instance=pulse-dcu-<tenant-sid>" | |
− | + | </source> | |
− | + | Check the output to ensure that all <tt>pulse-dcu</tt> pods are running, for example: | |
− | + | <source lang="bash"> | |
− | ## | + | NAME READY STATUS RESTARTS AGE |
− | + | pulse-dcu-100-0 3/3 Running 0 5m23s | |
+ | pulse-dcu-100-1 3/3 Running 0 4m47s | ||
+ | </source> | ||
+ | |||
+ | ===Install lds helm chart=== | ||
+ | |||
+ | '''Get the <tt>lds</tt> helm chart:''' | ||
+ | <source lang="bash">helm repo update | ||
+ | helm search repo <pulsehelmrepo>/lds</source> | ||
+ | |||
+ | '''Prepare the override file:''' | ||
+ | |||
+ | *Update values in the <tt>values-override-lds.yaml</tt> file (AKS): | ||
+ | *:<source lang="bash"># 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: | |
− | + | tag: "<image-version>" | |
− | + | pullPolicy: IfNotPresent | |
− | + | registry: "<docker-registry>" | |
− | + | 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: {} | ||
− | # | + | ## Specifies the security context for all Pods in the service |
− | + | ## | |
− | + | podSecurityContext: {} | |
− | + | ||
− | + | ## 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 | |
− | + | # enable golden signals metrics (not supported for PE) | |
− | + | goldenSignals: | |
− | + | 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: {} | ||
− | # * | + | # * 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: {} | ||
− | # * | + | # * Configuration for the Configuration Server Proxy container |
− | # | + | csproxy: |
− | + | # define domain for the configuration host | |
− | + | params: | |
− | # | + | cfgHost: "tenant-<tenant-uuid>.voice.<domain>" |
− | + | 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: {} | |
− | + | </source> | |
− | + | ||
− | + | *Update values in the <tt>values-override-lds.yaml</tt> file (GKE): | |
− | + | *:<source lang="bash"># 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> | ||
− | ## Add labels to all pods | + | # * Container image common settings |
+ | image: | ||
+ | tag: "<image-version>" | ||
+ | pullPolicy: IfNotPresent | ||
+ | registry: "<docker-registry>" | ||
+ | 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: {} | ||
+ | |||
+ | ## Specifies the security context for all Pods in the service | ||
+ | ## | ||
+ | podSecurityContext: | ||
+ | runAsNonRoot: true | ||
+ | runAsUser: 500 | ||
+ | runAsGroup: 500 | ||
+ | fsGroup: 0 | ||
+ | |||
+ | ## Add labels to all pods | ||
## | ## | ||
podLabels: {} | podLabels: {} | ||
Line 1,154: | Line 1,225: | ||
enabled: false | enabled: false | ||
# enable golden signals metrics (not supported for PE) | # enable golden signals metrics (not supported for PE) | ||
− | |||
goldenSignals: | goldenSignals: | ||
enabled: false | enabled: false | ||
Line 1,164: | Line 1,234: | ||
# you can reference values of other variables as {{.Values.variable.full.name}} | # you can reference values of other variables as {{.Values.variable.full.name}} | ||
podAnnotations: {} | podAnnotations: {} | ||
− | |||
− | |||
− | |||
− | |||
# prometheus.io/scrape: "true" | # prometheus.io/scrape: "true" | ||
# prometheus.io/port: "{{.Values.monitoring.port}}" | # prometheus.io/port: "{{.Values.monitoring.port}}" | ||
Line 1,190: | Line 1,256: | ||
additionalLabels: {} | additionalLabels: {} | ||
− | + | # * Configuration for the LDS container | |
− | + | lds: | |
− | # * Configuration for the | ||
− | |||
# resource limits for container | # resource limits for container | ||
resources: | resources: | ||
Line 1,199: | Line 1,263: | ||
requests: | requests: | ||
# minimal amount of memory required to start a container | # minimal amount of memory required to start a container | ||
− | memory: " | + | memory: "50Mi" |
# minimal CPU to reserve | # minimal CPU to reserve | ||
− | cpu: " | + | cpu: "50m" |
# resource limits for containers | # resource limits for containers | ||
limits: | limits: | ||
Line 1,209: | Line 1,273: | ||
# maximum amount of CPU resources that can be used and should be tuned to reflect | # 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 | # what the application can effectively use before needing to be horizontally scaled out | ||
− | cpu: " | + | cpu: "4000m" |
# securityContext: | # securityContext: | ||
# runAsUser: 500 | # runAsUser: 500 | ||
# runAsGroup: 500 | # runAsGroup: 500 | ||
− | # * Configuration for the | + | # * Configuration for the monitor sidecar container |
− | + | monitorSidecar: | |
# resource limits for container | # resource limits for container | ||
resources: | resources: | ||
Line 1,221: | Line 1,285: | ||
requests: | requests: | ||
# minimal amount of memory required to start a container | # minimal amount of memory required to start a container | ||
− | memory: " | + | memory: "30Mi" |
# minimal CPU to reserve | # minimal CPU to reserve | ||
− | cpu: " | + | cpu: "2m" |
# resource limits for containers | # resource limits for containers | ||
limits: | limits: | ||
# maximum amount of memory a container can use before being evicted | # maximum amount of memory a container can use before being evicted | ||
# by the OOM Killer | # by the OOM Killer | ||
− | memory: " | + | memory: "70Mi" |
# maximum amount of CPU resources that can be used and should be tuned to reflect | # 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 | # what the application can effectively use before needing to be horizontally scaled out | ||
− | cpu: " | + | cpu: "10m" |
# securityContext: | # securityContext: | ||
# runAsUser: 500 | # runAsUser: 500 | ||
# runAsGroup: 500 | # runAsGroup: 500 | ||
− | # * Configuration for the | + | # * Configuration for the Configuration Server Proxy container |
− | + | csproxy: | |
− | # | + | # define domain for the configuration host |
− | + | params: | |
− | + | cfgHost: "tenant-<tenant-uuid>.voice.<domain>" | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
resources: | resources: | ||
# minimum resource requirements to start container | # minimum resource requirements to start container | ||
Line 1,281: | Line 1,322: | ||
# securityContext: | # securityContext: | ||
# runAsUser: 500 | # runAsUser: 500 | ||
− | # runAsGroup: 500 | + | # runAsGroup: 500</source> |
+ | |||
+ | '''Update values in the <tt>values-override-lds-vq.yaml</tt> file:''' | ||
+ | <source lang="bash"># Default values for lds. | ||
+ | # This is a YAML-formatted file. | ||
+ | # Declare variables to be passed into your templates. | ||
+ | |||
+ | lds: | ||
+ | params: | ||
+ | cfgApp: "pulse-lds-vq-$((K8S_POD_INDEX % 2))" | ||
− | + | log: | |
− | + | pvc: | |
− | + | name: pulse-lds-vq-logs | |
− | |||
− | |||
− | |||
− | name: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</source> | </source> | ||
− | '''Validate the <tt> | + | '''Install the <tt>lds</tt> helm chart''':<br />To install the <tt>lds</tt> helm chart, run the following command: |
− | <source lang="bash">kubectl get pods -n=pulse -l "app.kubernetes.io/name= | + | <source lang="bash"> |
+ | helm upgrade --install "pulse-lds-<tenant-sid>" pulsehelmrepo/lds --wait --version=<chart-version> --namespace=pulse -f values-override-lds.yaml | ||
+ | helm upgrade --install "pulse-lds-vq-<tenant-sid>" pulsehelmrepo/lds --wait --version=<chart-version> --namespace=pulse -f values-override-lds.yaml -f values-override-lds-vq.yaml | ||
+ | </source> | ||
+ | If the installation is successful, the exit code <tt>0</tt> appears. | ||
+ | |||
+ | '''Validate the <tt>lds</tt> helm chart''':<br />To validate the <tt>lds</tt> helm chart, run the following command: | ||
+ | <source lang="bash">kubectl get pods -n=pulse -l "app.kubernetes.io/name=lds,app.kubernetes.io/instance=pulse-lds-<tenant-sid>" | ||
</source> | </source> | ||
− | + | Verify that the command reports all pulse-lds-vq pods as Running, for example: | |
<source lang="bash"> | <source lang="bash"> | ||
NAME READY STATUS RESTARTS AGE | NAME READY STATUS RESTARTS AGE | ||
− | pulse- | + | pulse-lds-100-0 3/3 Running 0 2d20h |
− | pulse- | + | pulse-lds-100-1 3/3 Running 0 2d20h </source> |
− | </source> | ||
− | ===Install | + | ===Install permissions helm chart=== |
− | + | '''Get the <tt>permissions</tt> helm chart''' | |
− | '''Get the <tt> | ||
<source lang="bash">helm repo update | <source lang="bash">helm repo update | ||
− | helm search repo | + | helm search repo <pulsehelmrepo>/permissions</source> |
'''Prepare the override file:''' | '''Prepare the override file:''' | ||
− | *Update values in the <tt>values-override- | + | *Update values in the <tt>values-override-permissions.yaml</tt> file (AKS): |
− | *:<source lang="bash"># Default values for | + | *:<source lang="bash"># Default values for permissions. |
# This is a YAML-formatted file. | # This is a YAML-formatted file. | ||
# Declare variables to be passed into your templates. | # Declare variables to be passed into your templates. | ||
− | + | # * Image configuration | |
− | + | image: | |
+ | tag: "<image-version>" | ||
+ | pullPolicy: IfNotPresent | ||
+ | registry: "<docker-registry>" | ||
+ | imagePullSecrets: [name: "<docker-registry-secret-name>"] | ||
+ | |||
# * Tenant info | # * Tenant info | ||
# tenant identification, or empty for shared deployment | # tenant identification, or empty for shared deployment | ||
Line 1,334: | Line 1,381: | ||
sid: "<tenant-sid>" | sid: "<tenant-sid>" | ||
− | # | + | # common configuration. |
− | + | config: | |
− | # | + | dbName: "<db-name>" |
− | + | # set "true" when need @host added for username | |
− | # | + | dbUserWithHost: true |
− | + | # set "true" for CSI secrets | |
− | # | + | mountSecrets: false |
− | + | # Postgres config map name | |
− | # | + | postgresConfig: "pulse-postgres-configmap" |
− | + | # Postgres secret name | |
− | + | postgresSecret: "pulse-postgres-secret" | |
− | + | # Postgres secret key for user | |
− | + | postgresSecretUser: "META_DB_ADMIN" | |
− | + | # Postgres secret key for password | |
− | + | postgresSecretPassword: "META_DB_ADMINPWD" | |
− | + | # Redis config map name | |
− | + | redisConfig: "pulse-redis-configmap" | |
+ | # Redis secret name | ||
+ | redisSecret: "pulse-redis-secret" | ||
+ | # Redis secret key for access key | ||
+ | redisSecretKey: "REDIS01_KEY" | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ## | + | # * Configuration for the Configuration Server Proxy container |
− | + | csproxy: | |
− | # | + | # define domain for the configuration host |
− | + | params: | |
− | + | cfgHost: "tenant-<tenant-uuid>.voice.<domain>" | |
− | + | # 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: {} | ||
− | ## | + | # * Common log configuration |
− | ## | + | log: |
− | + | # target directory where log will be stored, leave empty for default | |
− | + | logDir: "" | |
− | ## Specifies the security context for all Pods in the service | + | # 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> | ||
+ | |||
+ | ## Specifies the security context for all Pods in the service | ||
## | ## | ||
podSecurityContext: {} | podSecurityContext: {} | ||
− | ## | + | ## 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 | ## HPA Settings | ||
Line 1,409: | Line 1,488: | ||
## | ## | ||
affinity: {} | affinity: {} | ||
+ | </source> | ||
+ | |||
+ | *Update values in the <tt>values-override-permissions.yaml</tt> file (GKE): | ||
+ | *:<source lang="bash"># Default values for permissions. | ||
+ | # This is a YAML-formatted file. | ||
+ | # Declare variables to be passed into your templates. | ||
− | # * | + | # * Image configuration |
− | + | image: | |
− | + | tag: "<image-version>" | |
− | + | pullPolicy: IfNotPresent | |
− | + | registry: "<docker-registry>" | |
− | + | 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>" | |
− | + | # 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: | csproxy: | ||
# define domain for the configuration host | # define domain for the configuration host | ||
params: | params: | ||
cfgHost: "tenant-<tenant-uuid>.voice.<domain>" | cfgHost: "tenant-<tenant-uuid>.voice.<domain>" | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
# resource limits for container | # resource limits for container | ||
resources: | resources: | ||
Line 2,340: | Line 1,623: | ||
## | ## | ||
affinity: {}</source> | affinity: {}</source> | ||
− | |||
'''Install the permissions helm chart:''' | '''Install the permissions helm chart:''' | ||
To install the permissions helm chart, run the following command: | To install the permissions helm chart, run the following command: | ||
Line 2,373: | Line 1,655: | ||
<source lang="bash">helm template --version=<chart-version> --namespace=pulse --debug --output-dir helm-template pulse-permissions pulsehelmrepo/permissions -f values-override-permissions.yaml | <source lang="bash">helm template --version=<chart-version> --namespace=pulse --debug --output-dir helm-template pulse-permissions pulsehelmrepo/permissions -f values-override-permissions.yaml | ||
</source> | </source> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|Status=No | |Status=No | ||
}} | }} | ||
|PEPageType=55cef4ff-9306-4313-8fd8-377282a38478 | |PEPageType=55cef4ff-9306-4313-8fd8-377282a38478 | ||
}} | }} |
Latest revision as of 16:01, March 29, 2023
Contents
Learn how to provision Genesys Pulse.
Prerequisites
Before performing the steps described on this page, complete the Before you begin instructions, and ensure that you have the following information:
- Versions:
- <image-version> = 100.0.000.0015
- <chart-versions>= 100.0.000+0015
- K8S namespace pulse
- Project Name pulse
- Postgres credentials:
- <db-host>
- <db-port>
- <db-name>
- <db-user>
- <db-user-password>
- <db-ssl-mode>
- Docker credentials:
- <docker-registry>
- <docker-registry-secret-name>
- Redis credentials:
- <redis-host>
- <redis-port>
- <redis-password>
- <redis-enable-ssl>
- Tenant service variables:
- <tenant-uuid>
- <tenant-sid>
- <tenant-name>
- <tenant-dcu>
- GAuth/GWS service variables:
- <gauth-url-external>
- <gauth-url-internal>
- <gauth-client-id>
- <gauth-client-secret>
- <gws-url-external>
- <gws-url-internal>
- Storage class:
- <pv-storage-class-rw-many>
- <pv-storage-class-rw-once>
- Pulse:
- <pulse-host>
Single namespace
Single namespace deployments have a software-defined networking (SDN) with multitenant mode, where namespaces are network isolated. If you plan to deploy Pulse into the single namespace, ensure that your environment meets the following requirements for inputs:
- Back-end services deployed into the single namespace must include the string pulse:
- <db-host>
- <db-name>
- <redis-host>
- The hostname used for Ingress must be unique, and must include the string pulse:
- <pulse-host>
- Internal service-to-service traffic must use the service endpoints, rather than the Ingress Controller:
- <gauth-url-internal>
- <gws-url-internal></source>
Tenant provisioning
Install init tenant chart
Get the init-tenant helm chart:
helm repo update
helm search repo <pulsehelmrepo>/init-tenant
Prepare the override file:
- Update the values-override-init-tenant.yaml file (AKS):
# 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: tag: "<image-version>" pullPolicy: IfNotPresent registry: "<docker-registry>" imagePullSecrets: [name: "<docker-registry-secret-name>"] configurator: enabled: true # set service domain used to access voice service # example for GKE VPC case: voice.svc.gke1-uswest1.gcpe002.gencpe.com voiceDomain: "voice.svc.<domain>" # set service domain used to access ixn service # example for GKE VPC case: ixn.svc.gke1-uswest1.gcpe002.gencpe.com ixnDomain: "ixn.svc.<domain>" # set service domain used to access pulse service # example for GKE VPC case: pulse.svc.gke1-uswest1.gcpe002.gencpe.com pulseDomain: "pulse.svc.<domain>" # set configration server password, used when create secrets cfgUser: "default" # set configration server user, used when create secrets cfgPassword: "password" # common log configuration cfgHost: "tenant-9350e2fc-a1dd-4c65-8d40-1f75a2e080dd.voice.svc.<domain>" 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: none # log volume hostpath, used with volumeType "hostpath" volumeHostPath: /mnt/log # log PVC parameters, used with volumeType "pvc" pvc: name: pulse-init-tenant-logs accessModes: - ReadWriteMany capacity: 10Gi class: <pv-storage-class-rw-many> # * 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>" # 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: {} ## Specifies the security context for all Pods in the service ## podSecurityContext: {} ## 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
- Update the values-override-init-tenant.yaml file (GKE):
- ImportantEnable configurator only for configurations in GKE with VPC scoped DNS.
# 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: tag: "<image-version>" pullPolicy: IfNotPresent registry: "<docker-registry>" imagePullSecrets: [name: "<docker-registry-secret-name>"] configurator: enabled: true # set service domain used to access voice service # example for GKE VPC case: voice.svc.gke1-uswest1.gcpe002.gencpe.com voiceDomain: "voice.svc.<domain>" # set service domain used to access ixn service # example for GKE VPC case: ixn.svc.gke1-uswest1.gcpe002.gencpe.com ixnDomain: "ixn.svc.<domain>" # set service domain used to access pulse service # example for GKE VPC case: pulse.svc.gke1-uswest1.gcpe002.gencpe.com pulseDomain: "pulse.svc.<domain>" # set configration server password, used when create secrets cfgUser: "default" # set configration server user, used when create secrets cfgPassword: "password" # common log configuration cfgHost: "tenant-<tenant-uuid>.voice.svc.<domain>" 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: none # log volume hostpath, used with volumeType "hostpath" volumeHostPath: /mnt/log # log PVC parameters, used with volumeType "pvc" pvc: name: pulse-init-tenant-logs accessModes: - ReadWriteMany capacity: 10Gi class: nfs-client # * 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>" # 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: {} ## Specifies the security context for all Pods in the service ## podSecurityContext: fsGroup: null runAsUser: null runAsGroup: 0 runAsNonRoot: true ## Resource requests and limits ## ref: http://kubernetes.io/docs/user-guide/compute-resources/ ## resources: limits: memory: 256Mi cpu: 200m requests: memory: 128Mi cpu: 100m ## Priority Class ## ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/ ## priorityClassName: "" ## Node labels for assignment. ## ref: https://kubernetes.io/docs/user-guide/node-selection/ ## nodeSelector: {} ## Tolerations for assignment. ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ ## tolerations: [] # * 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
Install the init-tenant helm chart:
To install the init-tenant helm chart, run the following command:
helm upgrade --install "pulse-init-tenant-<tenant-sid>" pulsehelmrepo/init-tenant --wait --wait-for-jobs --version="<chart-version>"--namespace=pulse -f values-override-init-tenant.yaml
If installation is successful, the exit code 0 appears.
Validate the init-tenant helm chart:
To validate the init-tenant helm chart, run the following command:
kubectl get pods -n="pulse" -l "app.kubernetes.io/name=init-tenant,app.kubernetes.io/instance=pulse-init-tenant-<tenant-sid>"
If the deployment was successful, the pulse-init-tenant job is listed as Completed/. For example:
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:
helm repo update
helm search repo <pulsehelmrepo>/dcu
Prepare the override file:
- Update the values-override-dcu.yaml file (AKS):
# 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>" # set "true" when need @host added for username dbUserWithHost: true mountSecrets: false 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: tag: "<image-version>" pullPolicy: IfNotPresent registry: "<docker-registry>" 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: {} ## Specifies the security context for all Pods in the service ## podSecurityContext: {} ## 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 # enable golden signals metrics (not supported for PE) goldenSignals: 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: {} # * 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: {} # * 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: {} ########################################################################## # * Configuration for the Configuration Server Proxy container csproxy: # define domain for the configuration host params: cfgHost: "tenant-<tenant-uuid>.voice.<domain>" # 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: {} # 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>
- Update the values-override-dcu.yaml file (GKE):
# 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>" # set "true" when need @host added for username dbUserWithHost: true mountSecrets: false 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: tag: "<image-version>" pullPolicy: IfNotPresent registry: "<docker-registry>" 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: {} ## Specifies the security context for all Pods in the service ## podSecurityContext: runAsNonRoot: true runAsUser: 500 runAsGroup: 500 fsGroup: 0 ## 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 # enable golden signals metrics (not supported for PE) goldenSignals: 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: # define domain for the configuration host params: cfgHost: "tenant-<tenant-uuid>.voice.<domain>" # 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
To install the dcu helm chart, run the following command:
helm upgrade --install "pulse-dcu-<tenant-sid>" pulsehelmrepo/dcu --wait --reuse-values --version=<chart-version> --namespace=pulse -f values-override-dcu.yaml
Validate the dcu helm chart
To validate the dcu helm chart, run the following command:
kubectl get pods -n=pulse -l "app.kubernetes.io/name=dcu,app.kubernetes.io/instance=pulse-dcu-<tenant-sid>"
Check the output to ensure that all pulse-dcu pods are running, for example:
NAME READY STATUS RESTARTS AGE
pulse-dcu-100-0 3/3 Running 0 5m23s
pulse-dcu-100-1 3/3 Running 0 4m47s
Install lds helm chart
Get the lds helm chart:
helm repo update
helm search repo <pulsehelmrepo>/lds
Prepare the override file:
- Update values in the values-override-lds.yaml file (AKS):
# 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: tag: "<image-version>" pullPolicy: IfNotPresent registry: "<docker-registry>" 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: {} ## Specifies the security context for all Pods in the service ## podSecurityContext: {} ## 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 # enable golden signals metrics (not supported for PE) goldenSignals: 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: {} # * 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: {} # * Configuration for the Configuration Server Proxy container csproxy: # define domain for the configuration host params: cfgHost: "tenant-<tenant-uuid>.voice.<domain>" 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: {}
- Update values in the values-override-lds.yaml file (GKE):
# 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: tag: "<image-version>" pullPolicy: IfNotPresent registry: "<docker-registry>" 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: {} ## Specifies the security context for all Pods in the service ## podSecurityContext: runAsNonRoot: true runAsUser: 500 runAsGroup: 500 fsGroup: 0 ## 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 # enable golden signals metrics (not supported for PE) goldenSignals: 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: # define domain for the configuration host params: cfgHost: "tenant-<tenant-uuid>.voice.<domain>" 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
Update values in the values-override-lds-vq.yaml file:
# Default values for lds.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
lds:
params:
cfgApp: "pulse-lds-vq-$((K8S_POD_INDEX % 2))"
log:
pvc:
name: pulse-lds-vq-logs
Install the lds helm chart:
To install the lds helm chart, run the following command:
helm upgrade --install "pulse-lds-<tenant-sid>" pulsehelmrepo/lds --wait --version=<chart-version> --namespace=pulse -f values-override-lds.yaml
helm upgrade --install "pulse-lds-vq-<tenant-sid>" pulsehelmrepo/lds --wait --version=<chart-version> --namespace=pulse -f values-override-lds.yaml -f values-override-lds-vq.yaml
If the installation is successful, the exit code 0 appears.
Validate the lds helm chart:
To validate the lds helm chart, run the following command:
kubectl get pods -n=pulse -l "app.kubernetes.io/name=lds,app.kubernetes.io/instance=pulse-lds-<tenant-sid>"
Verify that the command reports all pulse-lds-vq 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
helm repo update
helm search repo <pulsehelmrepo>/permissions
Prepare the override file:
- Update values in the values-override-permissions.yaml file (AKS):
# Default values for permissions. # This is a YAML-formatted file. # Declare variables to be passed into your templates. # * Image configuration image: tag: "<image-version>" pullPolicy: IfNotPresent registry: "<docker-registry>" 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>" # 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: # define domain for the configuration host params: cfgHost: "tenant-<tenant-uuid>.voice.<domain>" # 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: {} # * 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> ## Specifies the security context for all Pods in the service ## podSecurityContext: {} ## 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: {}
- Update values in the values-override-permissions.yaml file (GKE):
# Default values for permissions. # This is a YAML-formatted file. # Declare variables to be passed into your templates. # * Image configuration image: tag: "<image-version>" pullPolicy: IfNotPresent registry: "<docker-registry>" 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>" # 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: # define domain for the configuration host params: cfgHost: "tenant-<tenant-uuid>.voice.<domain>" # 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> ## Specifies the security context for all Pods in the service ## podSecurityContext: fsGroup: null runAsUser: null runAsGroup: 0 runAsNonRoot: true ## Resource requests and limits ## ref: http://kubernetes.io/docs/user-guide/compute-resources/ ## resources: limits: memory: "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: {}
Install the permissions helm chart: To install the permissions helm chart, run the following command:
helm upgrade --install "pulse-permissions-<tenant-sid>" pulsehelmrepo/permissions --wait --version="<chart-version>" --namespace=pulse -f values-override-permissions.yaml
If installation is successful, the exit code 0 appears.
Validate the permissions helm chart:
To validate the permissions helm chart, run the following command:
kubectl get pods -n=pulse -l "app.kubernetes.io/name=permissions,app.kubernetes.io/instance=pulse-permissions-<tenant-sid>"
Verify that the command 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:
To output the manifest into the helm-template directory, run the following command:
helm template --version=<chart-version> --namespace=pulse --debug --output-dir helm-template pulse-init-tenant-<tenant-sid> pulsehelmrepo/init-tenant -f values-override-init-tenant.yaml
Check dcu helm chart manifests:
To output the dcu Helm chart manifest into the helm-template directory, run the following command:
helm template --version=<chart-version> --namespace=pulse --debug --output-dir helm-template pulse-dcu-<tenant-sid> pulsehelmrepo/dcu -f values-override-dcu.yaml
Check lds helm chart manifests:
To output the lds chart manifest into the helm-template directory, run the following command:
helm template --version=<chart-version> --namespace=pulse --debug --output-dir helm-template pulse-lds-<tenant-sid> pulsehelmrepo/lds -f values-override-lds.yaml
Check permissions Helm chart manifests:
To output the Helm chart manifest into the helm-template directory, run the following command:
helm template --version=<chart-version> --namespace=pulse --debug --output-dir helm-template pulse-permissions pulsehelmrepo/permissions -f values-override-permissions.yaml