Git Product home page Git Product logo

pegasystems / pega-helm-charts Goto Github PK

View Code? Open in Web Editor NEW
123.0 37.0 194.0 45.07 MB

Orchestrate a Pega Platform™ deployment by using Docker, Kubernetes, and Helm to take advantage of Pega Platform Cloud Choice flexibility.

Home Page: https://community.pega.com/knowledgebase/articles/cloud-choice

License: Apache License 2.0

Smarty 23.67% Makefile 0.94% Shell 1.96% Go 73.43%
pega charts helm helm-chart pega-helm-chart kubernetes k8s azure aks google

pega-helm-charts's Introduction

Pega deployment on Kubernetes

This project provides Helm charts and basic examples for deploying Pega on Kubernetes. You will also need to download the required installation kit from the Pega Community which includes rules and data to preload into your relational database. Deploying Pega on Kubernetes requires Pega Infinity 8.3 or later.

Build Status GitHub release

Supported Kubernetes environments

Pegasystems has validated deployments on the following Kubernetes IaaS and PaaS environments.

  • Open-source Kubernetes
  • MiniKube for personal deployments - see the MiniKube runbook
  • Microsoft Azure Kubernetes Service (AKS) - see the AKS runbook
  • Amazon Elastic Kubernetes Service (EKS) - see the EKS runbook
  • Google Kubernetes Engine (GKE) - see the GKE runbook
  • Red Hat OpenShift Container Platform (Self-managed) - see the OpenShift runbook
  • VMware Tanzu Kubernetes Grid Integrated Edition (TKGI) - see the TKGI runbook (Note: VMware Tanzu Kubernetes Grid Integrated Edition (TKGI) was deprecated for all releases in February 2024. Current deployments on TKGI continue to be supported, but as a best practice, do not use TKGI for new deployments of Pega Platform.)

Pega provides multiple runbooks that are Kubernetes-environment specific for clients looking for minimum guidance for configuring and deploying Pega Platform in their organization's Kubernetes account. Pega also provides runbooks for patching or updating Pega Platform with near-zero-downtime. To access the runbooks, click on the appropriate link in the list above.

Because open-source Kubernetes depends on your specific configuration, Pega does not provide a single open-source Kubernetes runbook. Use the Pega helm charts documentation to configure your deployment, with Preparing your local Linux system, Preparing your local Windows 10 system, and the Getting started section below as your starting points.

The helm charts support running on Kubernetes releases that are in Maintenance and Active Support at the time of the helm chart’s release. To review the date of a Pega helm chart release, see Releases; to review the latest matrix of Kubernetes release support, see Kubernetes EOL policy.

Getting started

This project assumes you have an installation of Kubernetes available and have Helm installed locally. The following commands will verify your installation. The exact output may be slightly different, but they should return without error.

$ helm version
version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}

If this command does not successfully return, install Helm 3 for your operating system. See Helm Installation for more information. If you are running Helm 2.x, you will see both a client and server (tiller) portion returned by the version command. Some of the commands below will also differ slightly for Helm 2.x.

  1. Add the Pega repository to your Helm installation.
$ helm repo add pega https://pegasystems.github.io/pega-helm-charts
  1. Verify the new repository by searching it.
$ helm search repo pega
NAME       	            CHART VERSION	APP VERSION	DESCRIPTION
pega/pega  	              1.4.4        	           	Helm chart to configure required installation and deployment configuration settings in your environment for your deployment.
pega/addons	              1.4.4        	1.0        	Helm chart to configure supporting services and tools in your environment for your deployment.
pega/backingservices      1.4.4        	            Helm Chart to provision the latest Search and Reporting Service (SRS) for your Pega Infinity deployment

There are three charts available in this repository - addons, backingservices, and pega.

The addons chart installs a collection of supporting services and tools for a Pega deployment. The services you will need to deploy will depend on your cloud environment - for example you may need a load balancer on Minikube, but not for EKS. These supporting services are deployed once per Kubernetes environment, regardless of how many Pega Infinity instances are deployed.

The backingservices chart installs services like 'Search and Reporting Service' (SRS) that you can configure with one or more Pega deployments. You can deploy these backing services in their own namespace; you can isolate the services to a single environment or share them across multiple Pega Infinity environments.

Example: Single backing service shared across all pega environments:

backingservice 'Search and Reporting Service' deployed and the service endpoint configured across dev, staging and production pega environments. The service provides isolation of data in a shared setup.

Multiple backing service deployments:

You can deploy more than one instance of backing service deployments, in case you want to host a separate deployment of 'Search and Reporting Service' for non-production and production deployments of Pega Infinity. You must configure the appropriate service endpoint using the Pega Infinity deployment values.

  1. Download the values file for pega/pega, pega/addons and pega/backingservices.
$ helm inspect values pega/pega > pega.yaml
$ helm inspect values pega/addons > addons.yaml
$ helm inspect values pega/backingservices > backingservices.yaml
  1. Edit your values yaml files to specify all required information and customizations for your environment.

When making customizations for your environment, check the Pega Platform Support Guide Resources to verify that those changes are supported by your Pega Platform version.

  1. Create namespaces for your Pega deployment, backingservices and the addons (if applicable for your environment).
$ kubectl create namespace mypega
$ kubectl create namespace pegaaddons
$ kubectl create namespace pegabackingservices
  1. To install the backingservices chart, run the following helm command after configuring your values.yaml file (if applicable for your environment).
$ helm install backingservices pega/backingservices --namespace pegabackingservices --values backingservices.yaml
  1. To install the addons chart, run the following helm command after configuring your values.yaml file (if applicable for your environment).
$ helm install addons pega/addons --namespace pegaaddons --values addons.yaml
  1. With addons and backservices deployed, you are ready to deploy Pega Infinity using the pega chart. Before installing using the chart, it is a good idea to review the detailed deployment guide to understand how Pega deploys as a distributed system. Running a Helm installation using the pega chart installs a Pega Infinity instance into a specified namespace. After you edit the chart with your configuration requirements, run the following command to install the pega chart.
$ helm install mypega pega/pega --namespace mypega --values pega.yaml

Important: To edit the charts and deploy using a local version of the pega/addons, pega/backingservices, or pega/pega charts, you must include the filepath to your local chart directory in your Helm chart reference.

Tip: To delete your deployment of Pega nodes, enter the command (this will not delete your database):

$ helm delete release --namespace mypega

Staying current with a Pega Platform upgrade or patching in zero-downtime

Upgrades

To upgrade Pega Platform software deployed in a Kubernetes environment with a zero-downtime process, you must do the following:

  1. Download the latest Pega software from Pega Digital Software Delivery.
  2. Update your repository to use the latest Helm charts and add several parameters to your pega.yaml Helm chart.
  3. Invoke the upgrade process by using the helm upgrade release --namespace mypega command.

For complete details, see the Pega-provided runbook, Upgrading Pega Platform in your deployment with zero-downtime.

To upgrade your strategic application, use the latest Upgrade Guide available for your strategic application, which is separate from Pega Platform software. You can locate the appropriate upgrade guide for your installed application from the page, All Products.

Patches

To apply a Pega Platform patch with zero downtime to your existing Pega platform software, you must download the latest installer Docker images from Pega Digital Software Delivery and change several options in your Pega Helm chart. For details and helpful resources explaining the Pega Platform patch process, including the Pega Infinity patch policy, see Applying the latest patch. For step-by-step guidance to apply a Pega Platform patch, see the Pega-provided runbook, Patching Pega Platform in your deployment.

Downloading Docker images for your deployment

Clients with appropriate licenses can request access to several required images from the Pega-managed Docker image repository. With your access key, you can log in to the image repository and download these Docker images to install the Pega Platform onto your database. After you pull the images to your local system, you must push them into your private Docker registry.

To download your preferred version of the Pega image to your local system, specify the version tag when by entering:

$ sudo docker pull pega-docker.downloads.pega.com/platform/pega:<version>

Digest: <encryption verification>
Status: Downloaded pega-docker.downloads.pega.com/platform/pega:<version>

All Docker images for Pega Platform releases that are in Standard Support undergo a nightly rebuild that applies the latest available updates and patches to all third-party components. To take advantage of these updates, you must redeploy your Pega Platform with the latest available images. Pega does not guarantee nightly rebuilds for Pega Platform releases in Extended Support and stops rebuilding images for Pega Platform releases that are out of Extended Support.

For details about downloading and then pushing Docker images to your repository for your deployment, see Using Pega-provided Docker images.

From Helm chart versions 2.2.0 and above, update your Pega Platform version to the latest patch version.

Debugging failed upgrades using helm commands

Upgrades using helm charts may fail due to a variety issues, including an invalid configuration, a networking issue, or a platform issue. To diagnose the issue or issues, review failure events in the logs and check for a detailed error; after understanding its cause, you can begin troubleshooting the issue or issues.

To help diagnose an issue, you can find the best information by retrieving relevant logs by trying different contexts such as the following 'kubectl log' options. kubectl logs <pega-zdt-upgrade-podname> -n <namespace>

You can use the following option to improve the usefulness of the log output -f, --follow=false: Specify if the logs should be streamed.

kubectl logs -f <pod-id> -n <namespace>

--tail: Print the last number of lines that you specify in the log file, for example, that last 100 lines in the specified pod. By default this option (with no selector specified so tail=-1) displays all lines of the log file

kubectl logs --tail=100 <pod-id> -n <namespace>

If a container is running, you can log in and run the kubectl log command in the container to review the results, or you can copy the log file in /tmp/foo from a pod to a local temporary directory, /tmp/bar to access the files. kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar

Contributing

This is an open source project and contributions are welcome. Please see the contributing guidelines to get started.

Versioning

New versions of this Helm Chart may be released at any time. Versions are defined using semantic versioning:

  • Major: Pega introduces new features or functionality that results in breaking backwards compatibility with previous chart versions. Examples:
    • The new values.yaml or maps (config/deploy) cannot be used to deploy previously released Docker image versions.
    • A new, required dependency on a specific Pega Platform version or dependent docker image.
  • Minor: Pega adds new functionality and maintains backwards compatibility. Examples:
    • Support for new features while maintaining existing functionality.
    • Support for new, opt-in configurations.
  • Patch: Pega fixes bugs and maintains backwards compatibility between minor releases. Examples:
    • Bug fixes or known issue resolutions.
    • Security vulnerability enhancements.

Helm charts and Docker images compatibility

Both Helm charts and Docker images undergo frequent updates; new Helm chart releases may appear at any time, and the latest patch versions of the Docker images are rebuilt nightly as part of software maintenance (for more information, see Pega-provided Docker images). This might result in incompatibility issues during the install and upgrade process. To ensure that Helm charts and Docker images are compatible, do one of the following actions:

  • If you update your Helm charts to the latest version to take advantage of new features, update your Docker images to the latest version as well (latest build of the latest patch).
  • If you upgrade your Pega Platform to a later version, use the latest Docker image build and latest Helm chart version.

pega-helm-charts's People

Contributors

apegadavis avatar arvasrikanth avatar bhowd1 avatar dcasavant avatar dependabot[bot] avatar evan1oconto avatar heshma avatar hsomu avatar khick77 avatar kingakowalska1 avatar kishorv10 avatar madhuriarugula avatar maracle6 avatar max-levitskiy avatar misterdorito avatar pega-abhinav avatar pega-kshev avatar pega-narasimharao-meda avatar pega-roska avatar pega-sagas1 avatar pega-talba avatar ryanstan avatar saurabh-16 avatar smootherbug avatar sotoiwa avatar taz-mon avatar taz-pega-work avatar umaveerabasaveswararao avatar vnihal72 avatar zitikay avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pega-helm-charts's Issues

Service Session are not sticky when using NodePort

The service is not defined to be sticky when using a NodePort (as far as I can tell), this is causing unusual behavior in designer studio when I have replicas >= 2 on the web tie. Manifests in a ll sorts of unusual ways:

  1. sometimes fails to serve static content
  2. Can't save-as rules
  3. Cannot open some rule
  4. Cannot execute some rules
  5. Etc...

All these issues go away when I scale back to a single web node.

Based on this https://kubernetes.io/docs/concepts/services-networking/service/ I would like to see service.spec.sessionAffinity set to ClientIP at least for the NodePort case

This is important for producing a helm based SDE with multiple web nodes.

Pega bug: BUG-531671

unable to start pega-stream-0

Hi Team,

  I am trying to install pega on our AKS Kubernetes Cluster but I am getting multiple errors before I can run any of the web or batch version. While debugging, what I've observed is that the 'pega-stream-0' fails first and then rest of the images go in a 'CrashLoopBackOff' , here is how the output from the shell looks like 
ubuntu@Pega:~/aks-demo$ kubectl get pods -n mypega
NAME                          READY   STATUS              RESTARTS   AGE
mypega-cassandra-0            1/1     Running             0          12m
mypega-cassandra-1            0/1     ContainerCreating   0          6m21s
pega-batch-79b78bfd7f-b78dx   0/1     CrashLoopBackOff    5          12m
pega-search-0                 1/1     Running             0          12m
pega-stream-0                 0/1     CrashLoopBackOff    6          12m
pega-web-69b559499-ql8j7      0/1     CrashLoopBackOff    6          12m

Here is the description of the pod :

Events:
  Type     Reason                  Age                    From                                        Message
  ----     ------                  ----                   ----                                        -------
  Warning  FailedScheduling        9m9s (x3 over 9m14s)   default-scheduler                           pod has unbound immediate PersistentVolumeClaims (repeated 3 times)
  Normal   Scheduled               9m5s                   default-scheduler                           Successfully assigned mypega/pega-stream-0 to aks-agentpool-15155817-vmss000001
  Normal   SuccessfulAttachVolume  5m17s                  attachdetach-controller                     AttachVolume.Attach succeeded for volume "pvc-8a59c95f-5fdd-11ea-9878-7a7ea9d448f2"
  Warning  FailedMount             4m45s (x2 over 7m1s)   kubelet, aks-agentpool-15155817-vmss000001  Unable to mount volumes for pod "pega-stream-0_mypega(8a5cb7b0-5fdd-11ea-9878-7a7ea9d448f2)": timeout expired waiting for volumes to attach or mount for pod "mypega"/"pega-stream-0". list of unmounted volumes=[pega-stream]. list of unattached volumes=[pega-stream pega-volume-config pega-volume-credentials default-token-2zkmb]
  Warning  FailedMount             3m51s (x8 over 4m55s)  kubelet, aks-agentpool-15155817-vmss000001  MountVolume.WaitForAttach failed for volume "pvc-8a59c95f-5fdd-11ea-9878-7a7ea9d448f2" : Cannot find Lun for disk kubernetes-dynamic-pvc-8a59c95f-5fdd-11ea-9878-7a7ea9d448f2

I've verified the volume does exist on the cluster:

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                              STORAGECLASS   REASON   AGE
pvc-6e6c3656-5fde-11ea-9878-7a7ea9d448f2   10Gi       RWO            Delete           Bound    mypega/data-mypega-cassandra-1     default                 11m
pvc-8a59c95f-5fdd-11ea-9878-7a7ea9d448f2   5Gi        RWO            Delete           Bound    mypega/pega-stream-pega-stream-0   default                 17m
 

Please if someone could help identify the issue.

Regards,
Gaurav

Google Cloud SQL Connecting from Google Kubernetes Engine

Everything I've done to connect to my postgres instances to date have been using the Cloud SQL Proxy. https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine

I'm new to Helm just because I've found it hasn't been able to do everything I need so I just end up dealing with my own yaml or in most cases Terraform. However this is a pretty beefy app and I was hoping to use the helm charts. Any hope we can see support for cloud sql proxy?

I download the templates here: https://github.com/pegasystems/pega-helm-charts/releases for GKE but again, a lot of work to get them going. Also I'm not sure if the terraform kubernetes provider is ready for everything in there yet, I need to look a bit closer.

Helm 3 - Installer chart

With Helm 3, the installer chart (with parameter actions.execute being install or upgrade) cannot be installed. We get the following error:

Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: [unknown object type "nil" in ConfigMap.data.DB2ZOS_UDF_WLM, unknown object type "nil" in ConfigMap.data.DISTRIBUTION_KIT_URL, unknown object type "nil" in ConfigMap.data.JDBC_CUSTOM_CONNECTION]

It seems to be similar to issue #34 but on a different chart.

Could you please take a look into it?

Defining custom enviroment variables

Hello,

I've been using this Pega helm chart for some weeks now.
I'm currently working on tweeking the config for our environment.

Now I need to change the timezone on every container to Europe/Amsterdam.
I've tested this by adding an enviroment variable 'TZ' and this worked perfectly.

Next I want to change the helm configuration so this enviroment will be added in every deploymentconfig.

I found the following code in file templates/_pega-deployment.tpl

{{- if .custom }} {{- if .custom.env }} # Additional custom env vars {{ toYaml .custom.env | indent 8 }} {{- end }}

The problem is that I can't find anything regarding setting .custom.env. Could you describe to me how I can configure these custom variables inside this helm chart?

Add CI/CD Pipeline

As a contributor to this repo, I would like to be able to validate my changes (styling/validation/lint/etc) to ensure my contributions are of the highest quality.

Install TLS cert in Tomcat server truststore in k8s to securely integrate with backend APIs

Is your feature request related to a problem? Please describe.
Yes, we need to configure TLS cert in Tomcat server truststore to integrate successfully with backend REST API.

Describe the solution you'd like
Placeholder in values.yaml file for Pega helm chart to install the TLS cert in Tomcat server truststore.

Describe alternatives you've considered
As a workaround, we are configuring cert at rule level. Since we have hundreds of rules, this is not a logn-term solution.

tier.service.domain variable from values.yaml not used?

Hello,

We are deploying Pega Helm charts in a OpenShift 3.11 cluster.
When we deploy an environment the value from tier.service.domain is used as the hostname in our route.
We have configured the following:

      service:
        # Enter the domain name to access web nodes via a load balancer.
        #  e.g. web.mypega.example.com
        domain: "web.pega.{our domain}"
        port: 80
        targetPort: 8080

In our OpenShift cluster the following is configured:

spec:
  host: pega-web-pega2.{our domain}

pega2 is the name of our OpenShift project (namespace).
So looks like OpenShift is generating its own hostname instead of the hostname configured in the values file.

Can you please check why this is happening?

Updating Index.html file for configuring SAML login

Related to the comment on #101 ---

No, but you can extend the Docker image to provide a custom index.html file if required.

I am going to close this issue since there is an expected method of extension via the Docker image. If you disagree, please reopen.

@dcasavant - But as we use different URL's for different environments i don't think that will be good approach to extend and use different docker images for each environment.

Configurable liveness and readiness probes

Some of the pega pods can take a long time to fully start and we've found that the 300 second initialDelaySeconds is not sufficient and causes pods to be restarted prematurely.

As a user of the pega helm charts I want to be able to configure the liveness and readiness probes.

Support custom annotations for services and ingress

As a user of the Pega Helm charts, I want to be able to specify custom annotations for unique load balancer configurations without needing to extend the charts.

Annotations should be settable for services and ingresses as those are frequently used for for custom configurations.

ElasticSearch provides similar configuration as a model for both service and ingress.

Delivery of config files from helm charts causes confusion

The pega helm charts currently deliver copies of prconfig.xml, prlog4j2.xml and context.xml.impl. Upon deployment, these files overwrite the configuration provided by the pega image. If the platform updated the prconfig.xml or prlog4j2.xml in a future version, the new versions would be wiped out after a helm deployment.

I'd like to eliminate the delivery of the config files via helm by default and allow customers to add custom version of these files to config/deploy as needed (at there own risk). If no custom config files are provided, the prconfig.xml and prlog4j2.xml will be deployed from the latest prweb.war and the context.xml.impl will be the version supplied in the pega-web-ready image (which is populated based on environment variables defined via helm).

Expose flags such that we can bypass loading engine/assembly classes during installation

Is your feature request related to a problem? Please describe.
No. This is more of enhancement.

Describe the solution you'd like
If we are using packed image having engine/assembly classes, then there is no need to push those classes to DB during installation. We should be able to pass such flags to helm charts, so that we can stop writing those classes to db.

Describe alternatives you've considered
Since these options need to be configurable, we need to expose these options via values.yaml

Additional context
None

ServiceAccount is not configurable

The Pega Helm chart does not have an option to configure the serviceAccount.

It would be good to have a serviceaccount configurable in order to harden a Pega Installation.

For helm 3.0.0 getting "unknown object type "nil"" error on pega chart install

When installing the pega chart I am seeing the following error when using helm 3.0.0

Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: [unknown object type "nil" in Secret.data.DB_PASSWORD, unknown object type "nil" in Secret.data.DB_USERNAME]

Same works fine with helm 2.14.3

Pega stream (StatefulSet resource) doesn't spin up desired number of stream pods

Describe the bug
Pega Stream (StatefulSet resource) is not spinning up desired number of stream pods within namespace in a Cluster

To Reproduce
Have atleast 2 replicas for Stream tier in Values.yaml file for Pega chart and deploy that on k8s cluster.

Expected behavior
If there are 2 replicas in values.yaml file for Stream tier, then both should come up 1 by 1.

Chart version
Using Pega chart version 1.2.4 ..We haven't made any customization.

Server (if applicable, please complete the following information):

  • OS: Ubuntu
  • Environment: PKS
  • Database: MS SQL

Predefined values depends on DB type

Is your feature request related to a problem? Please describe.
We have properties: driverClass, url, driverUri, which are depends on one - dbType and need to be defined for every deployment, but in most case, these properties will always have the same values.

Describe the solution you'd like

  • I suggest to set up dbType as postgres by default (most of the deployment use it as recommend DB for Pega).
  • Instead of using url, add dbHost and dbName for forming connection string
  • For special cases, when we really need custom URI, use the old url parameter.
  • Depends on dbType, define driverClass and driverUri and form connection URI with the default for selected database values.
  • Everything property can be defined by user. If not set, we use default value.

Service configuration issue for AKS

After I deployed, the exposed pega-web tier did not get an external IP address. It looks like the TYPE for the tier is NodePort, and for AKS at least, it should be LoadBalancer.
When I manually change pega-web type in the Pega service, the load-balancer provides an IP address immediately.
Should the service be configured so it is LoadBalancer for all environments and all exposed tiers?

custom prconfig.xml settings are not picked up

Describe the bug
We edited the pega-helm-charts/charts/pega/config/deploy/prconfig.xml file to include a different SystemName and Production level. However when we turn on the system it still has the old values (from the initial install)

    <env name="Identification/SystemName" value="newsystemname" />
    <env name="Identification/ProductionLevel" value="1" />

To Reproduce

  • Install pega 8.3.1 on a new database with system name and production level (in my case system name = 'pega' production level = '2'.
  • Edit the prconfig.xml file.
  • Roll out the new configuration.

Expected behavior
Pega environment starts with the new system name and production level, as specified in the prconfig.xml

Chart version
6 commits behind master.

Server (if applicable, please complete the following information):

  • OS: Redhat linux
  • Environment: Openshift 4.2
  • Database: PostgreSQL 11

Helm 3 - Deployment strategy with Stream tier

tier:
  - name: custom
    nodeType: Stream
    volumeClaimTemplate:
        resources:
          requests:
            storage: 5Gi
    deploymentStrategy:
      rollingUpdate:
        maxSurge: 25%
        maxUnavailable: 25%
      type: RollingUpdate

This fails because a Stream nodeType uses a StatefulSet under the covers which does not support a strategy element as defined here:

Helm 3 will barf with this setup.

There is no obvious documentation for this, nor is their any protection in the helm charts themselves.

Request that the addition of strategy be fixed to work with StatefulSets, by automatically ignoring -or- by doing the correct equivalent for StatefulSets (if one exists)

Deploy action not working for EKS

Describe the bug
I tried to deploy the Pega 8.3.1 in EKS. When I give install as action in pega.yaml, everything was fine and all database changes completed without any issues.
When I change from install to deploy as action, getting error as below

============================
Checking valid action
Invalid action '' passed.
Valid actions are : install, upgrade, install-deploy, upgrade-deploy, pre-upgrade, post-upgrade

To Reproduce
Tried to deploy pega web in EKS.

Expected behavior
Pega-web POD should be running fine.

Chart version
Using the latest version of chart which 1.2.5

Server (if applicable, please complete the following information):

  • OS: Redhat Linux 8
  • Environment: Amazon EKS
  • Database: PostgreSQL

Additional context
Add any other context about the problem here.

Install failing due to missing ingress annotations

Describe the bug
Installing without an ingress block for the tier throws an error.

To Reproduce

$ helm template pega/pega --values deploypega84mktmssql.yaml -n pega84mktmssql
Error: template: pega/templates/_pega-k8s-ingress.tpl:9:12: executing "pega.k8s.ingress" at <.node.ingress.annotations>: nil pointer evaluating interface {}.annotations

Additional context
BUG-547744

pega-batch and pega-web is not up Failed to bootstrap

We are installing pega in Azure AKS. Installer pod is showing installation complete. However pega batch and pega web is not getting up.

MSSQL used Azure services
Cassandra installed as Pod

We are following instruction as per
https://github.com/pegasystems/pega-helm-charts/blob/master/docs/Deploying-Pega-on-AKS.md#installing-and-deploying-pega-platform-using-helm-charts--90-minutes

Current Status of Pods:

NAME                          READY   STATUS      RESTARTS   AGE
mypega-cassandra-0            1/1     Running     0          3d20h
mypega-cassandra-1            1/1     Running     0          3d20h
mypega-cassandra-2            1/1     Running     0          3d20h
pega-batch-74cff9cd9c-42r7x   0/1     Running     775        2d23h
pega-batch-74cff9cd9c-bkmzr   0/1     Running     774        2d23h
pega-db-install-lbd55         0/1     Completed   0          3d20h
pega-search-0                 1/1     Running     0          3d20h
pega-stream-0                 0/1     Running     962        3d20h
pega-web-56f7756499-gfn6m     0/1     Running     961        3d20h
pega-web-6c598859b9-mzvs5     0/1     Running     11         152m

Possible root cause
Failed to bootstrap PegaRULES
Could not load the java class 'com/pega/pegarules/internal/bootstrap/phase2/PRBootstrapImpl.class' from the database table 'rules.pr_engineclasses'

Log from the web Pod:

kubectl logs pega-web-6c598859b9-mzvs5 -n mypega
  ____                    ____             _             
 |  _ \ ___  __ _  __ _  |  _ \  ___   ___| | _____ _ __ 
 | |_) / _ \/ _` |/ _` | | | | |/ _ \ / __| |/ / _ \ '__|
 |  __/  __/ (_| | (_| | | |_| | (_) | (__|   <  __/ |   
 |_|   \___|\__, |\__,_| |____/ \___/ \___|_|\_\___|_|   
            |___/                              v2.1.0
 
Downloading database driver: https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/7.4.1.jre11/mssql-jdbc-7.4.1.jre11.jar
Using JDBC_URL: jdbc:sqlserver://******:1433;database=pega;selectMethod=cursor;sendStringParametersAsUnicode=false
Loading prlog4j2 from /opt/pega/config/prlog4j2.xml...
Loading prconfig from /opt/pega/config/prconfig.xml...
No context.xml was specified in /opt/pega/config/context.xml.  Generating from templates.
JAVA_OPTS: "-Xms4096m -Xmx7168m -Djava.awt.headless=true -Djava.security.properties=/usr/local/tomcat/conf/java.security.overwrite -DNodeTier= -XX:HeapDumpPath=/heapdumps -Dpega.logdir=/usr/local/tomcat/logs/pega-web-6c598859b9-mzvs5"
CATALINA_OPTS: " -DmaxThreads=300 -Didentification.nodeid=pega-web-6c598859b9-mzvs5 -DNodeType=WebUser -DNodeSettings="Pega-IntegrationEngine/EnableRequestorPools=false;" -Dindex.directory= -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9001 -Dcom.sun.management.jmxremote.rmi.port=9001 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1 -DSMAAutoNodeDiscovery=true -DSMAAutoNodeDiscoveryJMXPort=9001 -DSMAAutoNodeDiscoveryPort=8080 "
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
17-Feb-2020 15:57:49.909 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.31
17-Feb-2020 15:57:49.911 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Feb 5 2020 19:32:12 UTC
17-Feb-2020 15:57:49.911 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.31.0
17-Feb-2020 15:57:49.911 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
17-Feb-2020 15:57:49.911 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            4.15.0-1067-azure
17-Feb-2020 15:57:49.911 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
17-Feb-2020 15:57:49.911 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /opt/java/openjdk
17-Feb-2020 15:57:49.911 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.6+10
17-Feb-2020 15:57:49.912 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            AdoptOpenJDK
17-Feb-2020 15:57:49.912 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
17-Feb-2020 15:57:49.912 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
17-Feb-2020 15:57:49.913 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
17-Feb-2020 15:57:49.913 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
17-Feb-2020 15:57:49.913 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
17-Feb-2020 15:57:49.913 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
17-Feb-2020 15:57:49.913 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
17-Feb-2020 15:57:49.913 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xms4096m
17-Feb-2020 15:57:49.913 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx7168m
17-Feb-2020 15:57:49.913 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.awt.headless=true
17-Feb-2020 15:57:49.914 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.security.properties=/usr/local/tomcat/conf/java.security.overwrite
17-Feb-2020 15:57:49.914 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -DNodeTier=
17-Feb-2020 15:57:49.914 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:HeapDumpPath=/heapdumps
17-Feb-2020 15:57:49.914 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dpega.logdir=/usr/local/tomcat/logs/pega-web-6c598859b9-mzvs5
17-Feb-2020 15:57:49.914 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
17-Feb-2020 15:57:49.914 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
17-Feb-2020 15:57:49.914 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
17-Feb-2020 15:57:49.914 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -DmaxThreads=300
17-Feb-2020 15:57:49.914 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Didentification.nodeid=pega-web-6c598859b9-mzvs5
17-Feb-2020 15:57:49.914 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -DNodeType=WebUser
17-Feb-2020 15:57:49.914 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -DNodeSettings=Pega-IntegrationEngine/EnableRequestorPools=false;
17-Feb-2020 15:57:49.914 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dindex.directory=
17-Feb-2020 15:57:49.915 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote
17-Feb-2020 15:57:49.915 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.port=9001
17-Feb-2020 15:57:49.915 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.rmi.port=9001
17-Feb-2020 15:57:49.915 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.authenticate=false
17-Feb-2020 15:57:49.915 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.ssl=false
17-Feb-2020 15:57:49.915 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.rmi.server.hostname=127.0.0.1
17-Feb-2020 15:57:49.915 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -DSMAAutoNodeDiscovery=true
17-Feb-2020 15:57:49.915 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -DSMAAutoNodeDiscoveryJMXPort=9001
17-Feb-2020 15:57:49.915 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -DSMAAutoNodeDiscoveryPort=8080
17-Feb-2020 15:57:49.915 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
17-Feb-2020 15:57:49.915 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
17-Feb-2020 15:57:49.915 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
17-Feb-2020 15:57:49.916 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
17-Feb-2020 15:57:49.916 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib]
17-Feb-2020 15:57:50.257 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
17-Feb-2020 15:57:50.273 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [566] milliseconds
17-Feb-2020 15:57:50.372 WARNING [main] org.apache.catalina.users.MemoryUserDatabase.createUser Null or zero length user name specified. The user will be ignored.
17-Feb-2020 15:57:50.373 INFO [main] org.apache.tomcat.util.digester.FactoryCreateRule.begin Error creating object: [Null or zero length user name specified. The user will be ignored.]
17-Feb-2020 15:57:50.374 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
17-Feb-2020 15:57:50.375 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.31]
17-Feb-2020 15:57:50.382 INFO [main] org.apache.catalina.startup.HostConfig.deployDescriptor Deploying deployment descriptor [/usr/local/tomcat/conf/Catalina/localhost/prweb.xml]
17-Feb-2020 15:57:51.116 INFO [main] org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory.getObjectInstance Name = PRFileStore Ignoring unknown property: value of "Database-based File Access" for "description" property
17-Feb-2020 15:57:51.123 INFO [main] org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory.getObjectInstance Name = AdminPegaRULES Ignoring unknown property: value of "PegaRULES Admin datasource" for "description" property
17-Feb-2020 15:58:00.641 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
17-Feb-2020 15:58:00.661 INFO [main] com.pega.pegarules.internal.bootstrap.PRBootstrapDataSource. Loading bootstrap properties from /prbootstrap.properties
17-Feb-2020 15:58:00.663 INFO [main] com.pega.pegarules.internal.bootstrap.SettingReaderJNDI. Could not find java:comp/env/prbootstrap/ in the local JNDI context, skipping prconfig setting lookup
17-Feb-2020 15:58:00.663 INFO [main] com.pega.pegarules.internal.bootstrap.SettingReaderJNDI. Could not find prbootstrap in the local JNDI context, skipping prconfig setting lookup
17-Feb-2020 15:58:00.670 INFO [main] com.pega.pegarules.internal.bootstrap.PRBootstrapDataSource. Bootstrap datatables schema: data
17-Feb-2020 15:58:00.785 INFO [main] com.pega.pegarules.internal.bootstrap.PRBootstrapDataSource. Archive version [0      ]
17-Feb-2020 15:58:00.785 INFO [main] com.pega.pegarules.internal.bootstrap.PRBootstrap. Engine schema defined in allclasses: null
17-Feb-2020 15:58:00.787 INFO [main] com.pega.pegarules.internal.bootstrap.PRBootstrap. Engine classes schema: rules
17-Feb-2020 15:58:00.787 INFO [main] com.pega.pegarules.internal.bootstrap.PRBootstrap. Assembled classes schema: rules
17-Feb-2020 15:58:00.788 INFO [main] com.pega.pegarules.internal.bootstrap.PRBootstrap. prbootstrap.properties merged with prbootstrap entries in Data-Admin-System-Settings
17-Feb-2020 15:58:00.896 WARNING [main] com.pega.pegarules.internal.bootstrap.PRBootstrap. PRBootstrap.calculateEngineCodeVersionFromDB() - unable to calculate codeset version from database: Read timed out
17-Feb-2020 15:58:00.899 INFO [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. Will load phase 2 bootstrap from Pega-EngineCode:
17-Feb-2020 15:58:00.964 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. 
17-Feb-2020 15:58:00.964 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. ============================= Failed to bootstrap PegaRULES =============================
17-Feb-2020 15:58:00.964 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. 
17-Feb-2020 15:58:00.964 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. Could not load the java class 'com/pega/pegarules/internal/bootstrap/phase2/PRBootstrapImpl.class' from the database table 'rules.pr_engineclasses'
17-Feb-2020 15:58:00.964 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. This is usually due to an empty 'rules.pr_engineclasses' table, or possibly it does not contain the configured codeset version.
17-Feb-2020 15:58:00.964 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. In this run the prbootstrap.properties specified 'pega-enginecode:', checking database...
17-Feb-2020 15:58:00.964 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. 
17-Feb-2020 15:58:01.071 WARNING [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. PRMiniLoader - unable to load classes from the database: Read timed out
17-Feb-2020 15:58:01.073 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. Unable to access code through filesystem
	java.nio.file.NoSuchFileException: /usr/local/tomcat/webapps/prweb/WEB-INF/lib/boot/prbootphase2.jar
		at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
		at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
		at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
		at java.base/sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
		at java.base/sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:149)
		at java.base/sun.nio.fs.LinuxFileSystemProvider.readAttributes(LinuxFileSystemProvider.java:99)
		at java.base/java.nio.file.Files.readAttributes(Files.java:1763)
		at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1225)
		at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:727)
		at java.base/java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:844)
		at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:247)
		at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:177)
		at java.base/java.util.jar.JarFile.<init>(JarFile.java:346)
		at java.base/java.util.jar.JarFile.<init>(JarFile.java:317)
		at java.base/java.util.jar.JarFile.<init>(JarFile.java:256)
		at com.pega.pegarules.internal.bootstrap.PRMiniLoader.<init>(PRMiniLoader.java:288)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.createMiniLoader(PRBootstrap.java:722)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.checkForStartup(PRBootstrap.java:666)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethodPropagatingThrowable(PRBootstrap.java:419)
		at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethodPropagatingThrowable(AppServerBridgeToPega.java:224)
		at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethod(AppServerBridgeToPega.java:273)
		at com.pega.pegarules.internal.web.servlet.WebAppLifeCycleListenerBoot.contextInitialized(WebAppLifeCycleListenerBoot.java:92)
		at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4685)
		at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5146)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
		at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
		at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
		at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:631)
		at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1831)
		at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
		at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:526)
		at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:425)
		at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)
		at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
		at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
		at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
		at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)
		at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
		at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
		at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.base/java.lang.reflect.Method.invoke(Method.java:566)
		at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
		at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
17-Feb-2020 15:58:01.101 INFO [main] com.pega.pegarules.internal.bootstrap.PRBootstrap. 
============ PegaRULES Bootstrap Configuration ============
           Date: Mon Feb 17 15:58:01 GMT 2020
   Java Version: AdoptOpenJDK 11.0.6
  Configuration: file:/usr/local/tomcat/webapps/prweb/WEB-INF/classes/prbootstrap.properties
Pega-EngineCode: 
       Database: Microsoft SQL Server 12.00.2000
         Driver: Microsoft JDBC Driver 7.4 for SQL Server 7.4.1.0

(!) Unable to use given database configuration
(!) Unable to locate classes on filesystem
=============== End Bootstrap Configuration ===============

Unable to load phase 2 bootstrap class: com.pega.pegarules.internal.bootstrap.phase2.PRBootstrapImpl
17-Feb-2020 15:58:01.102 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRBootstrap. Error initializing PRAppLoader
	java.lang.ClassNotFoundException: com.pega.pegarules.internal.bootstrap.phase2.PRBootstrapImpl
		at com.pega.pegarules.internal.bootstrap.PRMiniLoader.loadClass(PRMiniLoader.java:381)
		at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.loadPhase2BootstrapClass(PRBootstrap.java:727)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.checkForStartup(PRBootstrap.java:670)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethodPropagatingThrowable(PRBootstrap.java:419)
		at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethodPropagatingThrowable(AppServerBridgeToPega.java:224)
		at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethod(AppServerBridgeToPega.java:273)
		at com.pega.pegarules.internal.web.servlet.WebAppLifeCycleListenerBoot.contextInitialized(WebAppLifeCycleListenerBoot.java:92)
		at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4685)
		at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5146)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
		at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
		at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
		at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:631)
		at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1831)
		at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
		at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:526)
		at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:425)
		at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)
		at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
		at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
		at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
		at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)
		at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
		at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
		at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.base/java.lang.reflect.Method.invoke(Method.java:566)
		at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
		at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
17-Feb-2020 15:58:01.103 SEVERE [main] com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega. Problem during method invocation (contextInitialized)
	java.lang.RuntimeException: PRAppLoader was not properly initialized, unable to load class com.pega.pegarules.web.servlet.WebAppLifeCycleListener
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.getImplementationOf(PRBootstrap.java:217)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.getEntry(PRBootstrap.java:334)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.getMethod(PRBootstrap.java:314)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethodPropagatingThrowable(PRBootstrap.java:420)
		at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethodPropagatingThrowable(AppServerBridgeToPega.java:224)
		at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethod(AppServerBridgeToPega.java:273)
		at com.pega.pegarules.internal.web.servlet.WebAppLifeCycleListenerBoot.contextInitialized(WebAppLifeCycleListenerBoot.java:92)
		at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4685)
		at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5146)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
		at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
		at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
		at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:631)
		at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1831)
		at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
		at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:526)
		at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:425)
		at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)
		at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
		at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
		at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
		at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)
		at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
		at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
		at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.base/java.lang.reflect.Method.invoke(Method.java:566)
		at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
		at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
17-Feb-2020 15:58:01.104 SEVERE [main] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file
17-Feb-2020 15:58:01.106 SEVERE [main] org.apache.catalina.core.StandardContext.startInternal Context [/prweb] startup failed due to previous errors
17-Feb-2020 15:58:01.107 INFO [main] com.pega.pegarules.internal.bootstrap.PRBootstrap. prbootstrap.properties merged with prbootstrap entries in Data-Admin-System-Settings
17-Feb-2020 15:58:01.214 WARNING [main] com.pega.pegarules.internal.bootstrap.PRBootstrap. PRBootstrap.calculateEngineCodeVersionFromDB() - unable to calculate codeset version from database: Read timed out
17-Feb-2020 15:58:01.214 INFO [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. Will load phase 2 bootstrap from Pega-EngineCode:
17-Feb-2020 15:58:01.275 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. 
17-Feb-2020 15:58:01.276 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. ============================= Failed to bootstrap PegaRULES =============================
17-Feb-2020 15:58:01.276 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. 
17-Feb-2020 15:58:01.276 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. Could not load the java class 'com/pega/pegarules/internal/bootstrap/phase2/PRBootstrapImpl.class' from the database table 'rules.pr_engineclasses'
17-Feb-2020 15:58:01.276 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. This is usually due to an empty 'rules.pr_engineclasses' table, or possibly it does not contain the configured codeset version.
17-Feb-2020 15:58:01.276 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. In this run the prbootstrap.properties specified 'pega-enginecode:', checking database...
17-Feb-2020 15:58:01.276 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. 
17-Feb-2020 15:58:01.382 WARNING [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. PRMiniLoader - unable to load classes from the database: Read timed out
17-Feb-2020 15:58:01.382 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRMiniLoader. Unable to access code through filesystem
	java.nio.file.NoSuchFileException: /usr/local/tomcat/webapps/prweb/WEB-INF/lib/boot/prbootphase2.jar
		at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
		at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
		at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
		at java.base/sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
		at java.base/sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:149)
		at java.base/sun.nio.fs.LinuxFileSystemProvider.readAttributes(LinuxFileSystemProvider.java:99)
		at java.base/java.nio.file.Files.readAttributes(Files.java:1763)
		at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1225)
		at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:727)
		at java.base/java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:844)
		at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:247)
		at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:177)
		at java.base/java.util.jar.JarFile.<init>(JarFile.java:346)
		at java.base/java.util.jar.JarFile.<init>(JarFile.java:317)
		at java.base/java.util.jar.JarFile.<init>(JarFile.java:256)
		at com.pega.pegarules.internal.bootstrap.PRMiniLoader.<init>(PRMiniLoader.java:288)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.createMiniLoader(PRBootstrap.java:722)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.checkForStartup(PRBootstrap.java:666)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethodPropagatingThrowable(PRBootstrap.java:419)
		at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethodPropagatingThrowable(AppServerBridgeToPega.java:224)
		at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethod(AppServerBridgeToPega.java:273)
		at com.pega.pegarules.internal.web.servlet.WebAppLifeCycleListenerBoot.contextDestroyed(WebAppLifeCycleListenerBoot.java:75)
		at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4732)
		at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5396)
		at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:187)
		at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
		at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
		at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
		at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:631)
		at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1831)
		at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
		at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:526)
		at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:425)
		at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)
		at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
		at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
		at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
		at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)
		at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
		at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
		at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.base/java.lang.reflect.Method.invoke(Method.java:566)
		at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
		at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
17-Feb-2020 15:58:01.400 INFO [main] com.pega.pegarules.internal.bootstrap.PRBootstrap. 
============ PegaRULES Bootstrap Configuration ============
           Date: Mon Feb 17 15:58:01 GMT 2020
   Java Version: AdoptOpenJDK 11.0.6
  Configuration: file:/usr/local/tomcat/webapps/prweb/WEB-INF/classes/prbootstrap.properties
Pega-EngineCode: 
       Database: Microsoft SQL Server 12.00.2000
         Driver: Microsoft JDBC Driver 7.4 for SQL Server 7.4.1.0

(!) Unable to use given database configuration
(!) Unable to locate classes on filesystem
=============== End Bootstrap Configuration ===============

Unable to load phase 2 bootstrap class: com.pega.pegarules.internal.bootstrap.phase2.PRBootstrapImpl
17-Feb-2020 15:58:01.400 SEVERE [main] com.pega.pegarules.internal.bootstrap.PRBootstrap. Error initializing PRAppLoader
	java.lang.ClassNotFoundException: com.pega.pegarules.internal.bootstrap.phase2.PRBootstrapImpl
		at com.pega.pegarules.internal.bootstrap.PRMiniLoader.loadClass(PRMiniLoader.java:381)
		at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.loadPhase2BootstrapClass(PRBootstrap.java:727)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.checkForStartup(PRBootstrap.java:670)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethodPropagatingThrowable(PRBootstrap.java:419)
		at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethodPropagatingThrowable(AppServerBridgeToPega.java:224)
		at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethod(AppServerBridgeToPega.java:273)
		at com.pega.pegarules.internal.web.servlet.WebAppLifeCycleListenerBoot.contextDestroyed(WebAppLifeCycleListenerBoot.java:75)
		at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4732)
		at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5396)
		at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:187)
		at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
		at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
		at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
		at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:631)
		at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1831)
		at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
		at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:526)
		at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:425)
		at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)
		at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
		at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
		at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
		at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)
		at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
		at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
		at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.base/java.lang.reflect.Method.invoke(Method.java:566)
		at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
		at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
17-Feb-2020 15:58:01.401 SEVERE [main] com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega. Problem during method invocation (contextDestroyed)
	java.lang.RuntimeException: PRAppLoader was not properly initialized, unable to load class com.pega.pegarules.web.servlet.WebAppLifeCycleListener
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.getImplementationOf(PRBootstrap.java:217)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.getEntry(PRBootstrap.java:334)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.getMethod(PRBootstrap.java:314)
		at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethodPropagatingThrowable(PRBootstrap.java:420)
		at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethodPropagatingThrowable(AppServerBridgeToPega.java:224)
		at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethod(AppServerBridgeToPega.java:273)
		at com.pega.pegarules.internal.web.servlet.WebAppLifeCycleListenerBoot.contextDestroyed(WebAppLifeCycleListenerBoot.java:75)
		at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4732)
		at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5396)
		at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:187)
		at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
		at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
		at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
		at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:631)
		at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1831)
		at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
		at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:526)
		at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:425)
		at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)
		at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
		at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
		at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
		at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)
		at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
		at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
		at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.base/java.lang.reflect.Method.invoke(Method.java:566)
		at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
		at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
17-Feb-2020 15:58:01.414 INFO [main] org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of deployment descriptor [/usr/local/tomcat/conf/Catalina/localhost/prweb.xml] has finished in [11,032] ms
17-Feb-2020 15:58:01.415 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/ROOT]
17-Feb-2020 15:58:10.660 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
17-Feb-2020 15:58:10.671 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/ROOT] has finished in [9,255] ms
17-Feb-2020 15:58:10.674 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
17-Feb-2020 15:58:10.684 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [20,409] milliseconds

Helm chart best practice

Is your feature request related to a problem? Please describe.
Pega chart templates are hard to read and understand. It's easier to parse chart to understand which output should we expect. It cames from break one of Helm's best practice - "Each resource definition should be in its own template file."

Describe the solution you'd like
Split YAML files that generate multiple resources in loops. Places with custom logic in .tpl files and YAML content in .yaml files. Create a .yaml file for each resource and use .tpl files inside to avoid duplication of logic. The redundancy of standard Kubernetes constructions should be totally ok.

Example
There is pega-tier-deployment.yaml template file. It can be split to web-tier-deployment.yaml, batch-tier-deployment.yaml and batch-tier-deployment.yaml.

Helm deployments should allow specification of application root context

For multi-tenant environments, the application root context might be used to differentiate the deployments in an environment.
Currently, we hard-code the application root context to "prweb". This prevents load balancers from using the root context for traffic routing.

As part of a the configuration of a helm deployment, a user should have the ability to override the default application root context.

Passing an environment variable with the custom application root context name into the docker image will allow this override.

NOTE: This requires a change to the docker-pega-web-ready project as well to consume this environment variable.

HPA configuration still has deprecated apiVersion breaking the auto-scaler

During #27, the HPA configuration template seems to have been left out. This makes the auto-scaler to not function correctly.

kubectl get hpa results in <unknown> values like:

NAME             REFERENCE               TARGETS                         MINPODS   MAXPODS   REPLICAS   AGE
pega-batch-hpa   Deployment/pega-batch   <unknown>/85%, <unknown>/700%   1         5         0          8d 
pega-web-hpa     Deployment/pega-web     <unknown>/85%, <unknown>/700%   1         5         0          8d

Also kubectl describe hpa gives AbleToScale as False and FailedGetScale warning:

Name:                                                     pega-batch-hpa
Namespace:                                                pega-ns
Labels:                                                   <none>
Annotations:                                              <none>
CreationTimestamp:                                        Tue, 03 Dec 2019 15:12:33 +0000
Reference:                                                Deployment/pega-batch
Metrics:                                                  ( current / target )
  resource memory on pods  (as a percentage of request):  <unknown> / 85%
  resource cpu on pods  (as a percentage of request):     <unknown> / 700%
Min replicas:                                             1
Max replicas:                                             5
Deployment pods:                                          0 current / 0 desired
Conditions:
  Type         Status  Reason          Message
  ----         ------  ------          -------
  AbleToScale  False   FailedGetScale  the HPA controller was unable to get the target's current scale: no matches for kind "Deployment" in group "extensions"
Events:
  Type     Reason          Age                   From                       Message
  ----     ------          ----                  ----                       -------
  Warning  FailedGetScale  75s (x5436 over 22h)  horizontal-pod-autoscaler  no matches for kind "Deployment" in group "extensions"


Name:                                                     pega-web-hpa
Namespace:                                                pega-ns
Labels:                                                   <none>
Annotations:                                              <none>
CreationTimestamp:                                        Tue, 03 Dec 2019 15:12:33 +0000
Reference:                                                Deployment/pega-web
Metrics:                                                  ( current / target )
  resource memory on pods  (as a percentage of request):  <unknown> / 85%
  resource cpu on pods  (as a percentage of request):     <unknown> / 700%
Min replicas:                                             1
Max replicas:                                             5
Deployment pods:                                          0 current / 0 desired
Conditions:
  Type         Status  Reason          Message
  ----         ------  ------          -------
  AbleToScale  False   FailedGetScale  the HPA controller was unable to get the target's current scale: no matches for kind "Deployment" in group "extensions"
Events:
  Type     Reason          Age                   From                       Message
  ----     ------          ----                  ----                       -------
  Warning  FailedGetScale  75s (x5436 over 22h)  horizontal-pod-autoscaler  no matches for kind "Deployment" in group "extensions"

GKE Ingress

GKE ingress now support session based affinity, https://cloud.google.com/load-balancing/docs/backend-service#session_affinity

Is there a limitation with this and Pega still?

Also GKE has a managed certificate resource: https://cloud.google.com/kubernetes-engine/docs/how-to/managed-certs

So ideally we would just use Google to manage all that stuff for us and get rid of Traefik. Keep the deployment easier. If we can use ingress like I mention above let me know and I'll clone this repo and see if I can figure out the helm stuff.

[Questions]Is pega-helm-charts supported with Kubernets Cluster in Alibaba Cloud?

Hi Dear,
We are planing to deploy PEGA platform to the k8s cluster hosted in Alibaba Cloud (which is the similar service as EKS, it provides Nginx-ingress-controller by default).
If this helm chart verified in Alibaba Cloud already or not?
If we need to deploy PEGA in Alibaba Cloud, which provider parameter we need to set? "k8s"?
And if Nginx is supported as LB/Ingress-controller?
Thanks so much!
Brs// Kevin

Setting a custom annotation on a service causes a template error

Describe the bug

Running the helm template command with custom annotations causes the following error

Error: YAML parse error on pega/templates/pega-tier-service.yaml: error converting YAML to JSON: yaml: line 8: did not find expected key

To Reproduce

  1. Download and unpack the chart pega-1.2.6
  2. Edit the web tier's service block in pega/values.yaml
      service:
        # For help configuring the service block, see the Helm chart documentation
        # https://github.com/pegasystems/pega-helm-charts/blob/master/charts/pega/README.md#service
        port: 80
        targetPort: 8080
       # customization:
        annotations:
          myannotation: "true" 
  1. Render the template helm template pega --values pega/values.yaml

Expected behavior
The templates should render with the custom annotations set in the pega-web service

Chart version
pega-1.2.6 . No customizations besides the change to values.yaml noted above
helm version 3.0.2 on ubuntu linux

Bump Traefik chart dependency to 1.77.3

Is your feature request related to a problem? Please describe.
There is currently no ability to have the addons chart deploy a namespace-scoped Traefik ingress controller.

Describe the solution you'd like
helm/charts#16111 added the ability to scope the *Role and *RoleBinding for the Traefik service account to a single namespace. Change https://github.com/pegasystems/pega-helm-charts/blob/master/charts/addons/requirements.yaml#L3 to 1.77.3.

Describe alternatives you've considered
Granting further access to developers to give them the ability to create cluster-scoped resources but this is undesirable.

Pegasearch runs as privileged

When deploying pega helm chart on Openshift 4.2 we get the following error:

create Pod pega-search-0 in StatefulSet pega-search failed error: pods "pega-search-0" is forbidden: unable to validate against any security context constraint: [spec.initContainers[1].securityContext.privileged: Invalid value: true: Privileged containers are not allowed]

Is it possible to change the image so that pega-search does not run as privileged?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.