Skip to main content
ComponentsEnterprise
Availability2024.1

Configure the deployment

Editing the deploy script

Configure the database

Packaged or external database

Production requirements

Hardening checks before launch

Troubleshooting

Fixing common deployment issues
OpenShift Setup This guide explains how to deploy a small GermainUX environment on an existing Red Hat OpenShift cluster.
Testing environments onlyThe configuration supplied with the GermainUX OpenShift distribution is intended for development, evaluation, and testing. It is not a production reference architecture. Production deployments require environment-specific sizing, high availability, persistent storage, security, monitoring, backup, and disaster-recovery planning.

Requirements

Before starting, confirm that you have:
  • A supported OpenShift cluster
  • Access to create resources in the target OpenShift project
  • The OpenShift CLI (oc)
  • kubectl, if required by the supplied scripts
  • A default or explicitly configured StorageClass
  • Access to the GermainUX container images
  • A valid GermainUX license
  • Network connectivity to any external database, SMTP server, identity provider, or datastore
  • Sufficient permissions to create Routes, Services, ConfigMaps, Secrets, workloads, and persistent-volume claims
Cluster-administrator access may be required if the deployment needs custom Security Context Constraints, cluster-wide resources, or storage configuration.

Example lab capacity

The original GermainUX lab environment used: These are sample lab values—not production requirements. Confirm whether the CPU, memory, and disk values apply per node in your OpenShift environment.

Production sizing must account for

  • Number of monitored users and applications
  • Telemetry volume
  • Data-retention period
  • Elasticsearch indexing and query activity
  • Kafka throughput
  • Database workload
  • Replication and high availability
  • JVM heap requirements
  • Expected growth

Obtain the GermainUX package

Download the OpenShift deployment package provided for your licensed GermainUX release and extract it:
Obtain the current package and supported component-version matrix from GermainUX Support. Do not deploy manifests generated for a different GermainUX release without reviewing their compatibility.

Connect to OpenShift

Sign in using your organization’s approved authentication method:
Confirm the connected cluster and user:

Create or select a project

Create a dedicated project when appropriate:
Or select an existing project:
Verify the active project before deploying:
Use separate projects for development, QA, staging, and production unless your organization has approved another isolation model.

Configure the GermainUX license

Locate the license configuration supplied in the extracted package. In packages following the Kubernetes structure, it may be located under:
Update the encrypted license value with the content supplied by Germain Software. Do not:
  • Commit the license to a public repository.
  • Embed it in an unprotected container image.
  • Include it in logs.
  • Store an unencrypted copy in a ConfigMap.
Use an OpenShift Secret or your organization’s secret-management solution whenever supported by the deployment package.

Configure the deployment

Open:
Update the values for the target OpenShift environment. Depending on the package version, the script may include variables such as:
Use only versions approved for the installed GermainUX release.

Messaging compatibility

GermainUX 2024.2 and later uses Kafka. ActiveMQ applies only to earlier releases. For GermainUX 2024.2 or later:
  • Configure the approved Kafka version.
  • Do not deploy ActiveMQ unless Germain Support explicitly requires it for a compatibility or upgrade scenario.

Environment name

Set a unique environment name:
The environment name may be used to generate resource names, manifest directories, and configuration paths. Avoid changing it after initialization unless you intend to create a separate environment.

Configure image access

If the images are stored in a private registry, create an image-pull secret:
Link it to the service account used by the workloads:
Do not place registry credentials directly in deployment manifests or shell scripts.

Configure the database

The deployment can use its packaged database resources or an external configuration database.

Packaged database

If using the database supplied with the deployment:
  • Confirm that persistent storage is available.
  • Set resource requests and limits.
  • Protect the database credentials.
  • Verify the StorageClass.
  • Configure backups when the environment must be retained.

External database

When using an external configuration database:
  1. Set the packaged MySQL replica count to 0. Older deployment packages may use: mysqlReplicase=0 Use the exact variable name found in your deploy-germain.sh file.
  2. Configure the database host: germainDbHostname="<database-hostname>"
  3. Update common.properties: germain.config.url=jdbc:mysql://<database-host>:3306/APMCFG?rewriteBatchedStatements=true germain.config.username=<database-user> germain.config.password=<database-password>
Confirm that:
  • OpenShift workloads can resolve the database hostname.
  • Network policies and firewalls permit the connection.
  • The schema exists.
  • The account has the required permissions.
  • TLS is configured when required.
  • Credentials are provided through Secrets where supported.
Do not retain example usernames or passwords in a shared or production environment.

Configure email

To enable email alerts and reports, update the SMTP settings in common.properties. Configure:
  • SMTP hostname and port
  • Authentication
  • Username and password
  • Sender address
  • TLS or STARTTLS
  • Any required certificate trust
Store SMTP credentials in an OpenShift Secret whenever supported.

Review OpenShift security requirements

OpenShift commonly runs containers with an automatically assigned, non-root user ID. Before deployment, confirm that every GermainUX image can:
  • Run without a fixed root user
  • Write only to approved mounted directories
  • Use group-writable files and directories where required
  • Operate without privileged mode
  • Avoid prohibited Linux capabilities
  • Use the default restricted Security Context Constraint when possible
Do not grant privileged or overly permissive Security Context Constraints simply to bypass file-permission or image-design problems. If an exception is required, document and restrict it to the specific service account and workload.

Generate the manifests

Run:
The script generates Kubernetes-compatible YAML files under the directory identified by germainEnvName. Review the generated resources before applying them:
  • Project or namespace
  • Container images and tags
  • Image-pull secrets
  • Service accounts
  • Security contexts
  • Resource requests and limits
  • Persistent-volume claims
  • StorageClass
  • ConfigMaps and Secrets
  • Services and ports
  • Routes
  • Health probes
  • Replica counts
  • Node placement rules

Deploy GermainUX

The generated resources must be applied in this order:

1 1. Apply configuration resources

2. Apply infrastructure resources

Wait for the infrastructure components to become ready:

3. Apply GermainUX resources

Monitor the deployment:
You can use kubectl apply instead of oc apply for standard Kubernetes resources, but oc is recommended when working with OpenShift-specific objects such as Routes.

Configure external access

List existing Routes:
If the package creates a Route, retrieve its hostname:
If no Route is supplied, create one for the GermainUX service according to your organization’s TLS and ingress standards. Example:
For production, configure TLS and use a trusted certificate. Do not expose a test environment using default credentials to an untrusted network.

Access the GermainUX Workspace

The default Workspace path is:
When using an OpenShift Route, access it through the Route hostname and configured protocol:
An initial test deployment may use:
Change the default password immediately after the first successful sign-in.

Validate the deployment

Check pods

Investigate pods in any of these states:

Check services and routes

Check persistent storage

Required claims should report:

Review pod details and events

Review logs

For a multi-container pod:
For a container that restarted:

Production requirements

Before using GermainUX on OpenShift in production, implement:
  • Resource requests and limits
  • Multiple replicas for supported stateless components
  • Pod anti-affinity and topology-spread constraints
  • Pod disruption budgets
  • Suitable persistent storage
  • Database and datastore backups
  • TLS for external and internal connections
  • OpenShift Secrets or an external secret manager
  • NetworkPolicies
  • Restricted service accounts and RBAC
  • Restricted Security Context Constraints
  • Image vulnerability scanning
  • Approved registries and immutable image tags
  • Readiness, liveness, and startup probes
  • Centralized logs and metrics
  • Capacity and disk-usage alerts
  • Upgrade, rollback, and disaster-recovery procedures

Troubleshooting

Pod is rejected by OpenShift security

Review:
Look for errors related to:
  • Security Context Constraints
  • Fixed user IDs
  • Privileged containers
  • Disallowed capabilities
  • Writable-directory permissions
  • HostPath volumes
Correct the image or workload security context whenever possible. Grant a broader SCC only after security review.

Pod cannot pull its image

Verify:
  • Image registry and repository
  • Image tag
  • Image-pull secret
  • Service-account secret linkage
  • Registry certificates
  • Network access from cluster nodes

Persistent-volume claim remains pending

Check:
Confirm that the requested access mode and storage size are supported by the selected StorageClass.

Route is unavailable

Check:
Verify that:
  • The Route points to the correct Service.
  • The Service has ready endpoints.
  • The target port is correct.
  • The router is healthy.
  • DNS resolves the Route hostname.
  • TLS settings are valid.

GermainUX cannot reach an external database

Confirm:
  • DNS resolution from the project
  • Egress NetworkPolicies
  • External firewall rules
  • Database listener availability
  • Credentials and permissions
  • TLS and certificate trust
  • JDBC connection configuration
Source: OpenShift Setup.

Get Help

Contact GermainUX Support

The GermainUX team helps you get up and running faster, empower your team, turn data into actionable insights, and optimize performance to deliver measurable business outcomes.

Can't find what you need?

Search all GermainUX docs with Ctrl + K, or use the feedback buttons at the bottom of this page to tell us what is missing.

The content of this document is proprietary to GERMAIN SOFTWARE.