Skip to main content

Global View upgrade (2026.6.1)

Global View is one of the core components of the Virtana Platform. It provides a centralized, unified dashboard to monitor and manage performance across your entire infrastructure, consolidating insights from multiple sources into a single pane of glass.

This topic describes how to upgrade an existing Global View installation from version 2026.4.1 to version 2026.6.1.

Prerequisites

Before you upgrade Global View to 2026.6.1, confirm that your environment meets the following requirements:

  • An existing Virtana Platform installation running version 2026.4.1.

  • A Kubernetes cluster with Helm 3.x installed.

  • Access to the Virtana Helm repository.

  • Valid Docker registry credentials.

  • DNS records configured for the Global View, Keycloak, and GrowthBook hostnames.

What's new in 2026.6.1

Version 2026.6.1 changes several parts of the Global View values files. Review these changes before you prepare your configuration:

  • SolrCloud data migration runs by default and can resize persistent volume claims (PVCs).

  • SeaweedFS replaces MinIO as the object storage backend.

  • The Victoria Metrics storageClass parameter is renamed to storageClassName.

  • VirtanAI (Copilot) uses a provider-based configuration instead of OPENAI_API_KEY.

Setup for upgrading to version 2026.6.1

Complete the preparation described in this section before you run any Helm command. If you aren't ready to migrate SolrCloud data, prepare for the migration first and upgrade afterward.

In version 2026.6.1, SolrCloud migration is enabled by default. The migration moves your existing Solr and ZooKeeper data to new SolrCloud pods, using a dedicated persistent volume claim (PVC) as temporary storage. Alerts data is unavailable in the Global View UI until the migration finishes.

The migration can also resize your Solr and ZooKeeper PVCs. Confirm that your storage class allows resizing before you start.

Check the storage class and PVC usage

The SolrCloud migration job resizes your Solr and ZooKeeper persistent volume claims (PVCs) when they're more than 45% full, so the storage class behind those PVCs must support volume expansion. Check the following before you upgrade:

  • Confirm that the storage class used by the Solr and ZooKeeper PVCs has allowVolumeExpansion set to true.

  • Measure how much of each Solr and ZooKeeper PVC is in use. If your storage class already supports allowVolumeExpansion, you can skip this measurement.

  • If a PVC is more than 45% full and your storage class doesn't support volume expansion, resize the PVC manually before you start the upgrade. If the PVC is more than 45% full and no resize happens, the migration job can fail.

To measure PVC usage, run the following script from a machine that has access to the Kubernetes cluster where Global View is deployed. The script writes a CSV file named solr_pvc_usage.csv:

#!/bin/bash

OUTPUT_FILE="solr_pvc_usage.csv"
NAMESPACE="controlplane"

echo "Pod,Filesystem,Size,Used,Available,UsePercent" > "$OUTPUT_FILE"

# Solr pods
for pod in solrcloud-solr-0 solrcloud-solr-1 solrcloud-solr-2
do
    kubectl -n "$NAMESPACE" exec "$pod" -- df -h /bitnami/solr 2>/dev/null | \
    awk -v pod="$pod" 'NR==2 {print pod "," $1 "," $2 "," $3 "," $4 "," $5}' \
    >> "$OUTPUT_FILE"
done

# Zookeeper pods
for pod in solrcloud-zookeeper-0 solrcloud-zookeeper-1 solrcloud-zookeeper-2
do
    kubectl -n "$NAMESPACE" exec "$pod" -- df -h /bitnami/zookeeper 2>/dev/null | \
    awk -v pod="$pod" 'NR==2 {print pod "," $1 "," $2 "," $3 "," $4 "," $5}' \
    >> "$OUTPUT_FILE"
done

echo "Results written to $OUTPUT_FILE"

Open solr_pvc_usage.csv and check the UsePercent column for each pod. Any value above 45% means that PVC needs volume expansion support or a manual resize.

Note

The SolrCloud migration takes several minutes to complete, and the exact duration depends on how much data SolrCloud holds. Run the helm upgrade command for the controlplane-service release with a timeout of at least 1 hour so that the migration has enough time to finish.

Stop traffic and check cluster permissions

Traffic that reaches the cluster during the SolrCloud migration can cause data inconsistency. Stop all traffic to the cluster before you begin the migration, and resume it after the migration finishes and you can see alerts data in the Global View UI.

The migration job also creates a Kubernetes role. Confirm that no policy in your cluster blocks the creation of this role or the execution of the migration job. The following table describes the permissions the role needs:

Kubernetes resource

Required permissions

Impact

StatefulSets named solrcloud-solr, solrcloud-zookeeper, apache-solr, and apache-zookeeper

get, list, watch, patch, update

To update and patch the Solr and ZooKeeper StatefulSets

Pods

get, list, watch, create, delete, exec

To update and restart the Solr and ZooKeeper pods during migration

PersistentVolumeClaims

get, list, watch, create, update, patch, delete

To create, update, delete, and resize PVCs

Deployments

get, list, watch

To monitor the progress of the alerts-service deployment during migration

How the SolrCloud migration works

The SolrCloud migration runs in two phases: a backup phase before the new pods deploy, and a restore phase after they come online. Both phases run as Kubernetes jobs, and both use a persistent volume claim (PVC) named solrcloud-backup-pvc as temporary storage. The migration starts when alerts-service.solr.migration.enabled is set to true in global-view-values.yaml.

During the backup phase, the following happens:

  1. The upgrade creates the solrcloud-backup-pvc PVC for the migration job.

  2. A migration backup job starts and checks the Solr and ZooKeeper PVCs for usage. If usage exceeds the configured threshold, the job resizes the PVCs and then continues.

  3. The same job patches the existing SolrCloud StatefulSet with the parameters that migration requires, and waits for the SolrCloud pods to come online.

  4. The job backs up the data from each Solr pod in turn to solrcloud-backup-pvc, then merges the data from all SolrCloud pods and stores the merged result on the PVC.

  5. The job writes a backup.complete marker file to the PVC. The marker prevents a second backup if you re-run the job, so a re-run goes directly to the restore phase.

During the restore phase, the following happens:

  1. The standard deployment runs. It deletes the existing SolrCloud and ZooKeeper pods and creates new pods that use the 2026.6.1 images.

  2. After all new Solr and ZooKeeper pods are running, a second migration job starts and restores the backup to the new SolrCloud pods.

  3. The restore job copies the data from solrcloud-backup-pvc to a temporary location on each SolrCloud pod, inserts the data using the Solr API, and then deletes the temporary data from the pods.

  4. When the restore job completes, your data is visible in the Global View UI.

To repeat the backup, delete the backup.complete marker file from the solrcloud-backup-pvc PVC and re-run the job.

Warning

Deleting the solrcloud-backup-pvc PVC deletes all backed-up SolrCloud data on that PVC. If you delete the PVC, you must re-run the migration job to take a new backup. To repeat a backup without losing data, delete only the backup.complete marker file.

Configure the SolrCloud migration

SolrCloud migration is enabled by default in version 2026.6.1. To change how the migration behaves, set the following values in global-view-values.yaml:

alerts-service:
  solr:
    migration:
      enabled: true
      storageSize: "100Gi"
      pvcResizeThreshold: 45
      resources:
        requests:
          cpu: 100m
          memory: 1Gi
        limits:
          cpu: 500m
          memory: 1Gi

The following table describes the fields in the global configuration block:

Table 13.

Field

Description

Default values

enabled

Toggles the migration job on or off. When true, the migration process is activated.

true

storageSize

Size of the Persistent Volume Claim (PVC) provisioned for the migration job. Should match the size of the SolrCloud PVC to ensure sufficient space during data transfer.

100 Gi

pvcResizeThreshold

The migration job will trigger a PVC resize only if current disk usage exceeds 45% of total capacity. Acts as a safeguard to avoid unnecessary resize operations. Only applies when migration.enabled is true.

45

requests.cpu

Minimum CPU guaranteed to the container.

100m

requests.memory

Minimum memory guaranteed.

1Gi

limits.cpu

Maximum CPU the container can use.

500m

limits.memory

Maximum memory the container can consume.

1Gi



After the SolrCloud migration completes

After the SolrCloud migration finishes and you can see your data in the Global View UI, complete the following cleanup tasks:

  • Set alerts-service.solr.migration.enabled to false in global-view-values.yaml. This setting prevents the migration job from running again during future upgrades.

  • Keep the solrcloud-backup-pvc persistent volume claim (PVC) for a few days as a backup. Virtana recommends that you delete it only after you confirm that the migration succeeded and all your data appears in Global View.

  • Delete the Solr and ZooKeeper PVCs from the previous deployment to free up storage, again only after you confirm that the migration succeeded and all your data appears in Global View.

Starting with version 2026.6.1, Global View uses SeaweedFS as the object storage backend instead of MinIO. Existing MinIO data migrates automatically during the upgrade.

Remove all MinIO configuration from your global-view-values.yaml file before you upgrade. New installations need no MinIO deployment or configuration changes.

SeaweedFS configuration is optional. If you don't provide any SeaweedFS configuration, Global View deploys SeaweedFS with its default settings. To customize SeaweedFS, add the following values to global-view-values.yaml:

seaweedfs:
  image:
    registry: <REGISTRY_NAME>

  allInOne:
    data:
      type: persistentVolumeClaim
      size: 20Gi
      storageClass: *defaultStorageClass

    nodeSelector: *nodeSelector
    affinity: *affinity
    tolerations: *tolerations

Note

Check the storageClass value in the SeaweedFS configuration and confirm that it matches a storage class that exists in your Kubernetes environment. An unmatched storage class prevents the SeaweedFS persistent volume claim (PVC) from binding.

For the Victoria Metrics component, the storageClass parameter is renamed to storageClassName in global-view-values.yaml. Update this parameter name in your existing global-view-values.yaml file before you upgrade. The sample values in this topic use the new name.

In 2026.6.1, VirtanAI (the Copilot chatbot) uses a provider-based configuration model that supports OpenAI, Gemini, and LiteLLM. This model replaces the single OPENAI_API_KEY variable used in earlier releases.

Add the following blocks to global-view-values.yaml:

virtana-ai:
  enabled: true
  env:
    VIRTANA_AI_MODEL_PROVIDER: ""   

cp-configs:
  virtana_ai:
    virtana_ai_api_key: ""            
    virtana_ai_inference_endpoint: "" 

The following table describes the VirtanAI configuration fields:

Field

Description

Default value

virtana-ai.enabled

Enables the VirtanAI (Copilot) component.

true

virtana-ai.env.VIRTANA_AI_MODEL_PROVIDER

Selects the model provider. Supported values: OPENAI, GEMINI, LITELLM.

""

cp-configs.virtana_ai.virtana_ai_api_key

API key for the selected provider. Replaces the former OPENAI_API_KEY variable.

""

cp-configs.virtana_ai.virtana_ai_inference_endpoint

Inference endpoint URL. Leave blank for OpenAI or Gemini. For a self-hosted LiteLLM deployment, set the LiteLLM endpoint URL, for example https://litellm.example.com.

""

Set the following variables in the input.env file:

VIRTANA_AI_MODEL_PROVIDER=''
VIRTANA_AI_API_KEY=''
VIRTANA_AI_INFERENCE_ENDPOINT=''

The following table maps VirtanAI setting to its OVA configuration.

Table 14.

OVA Variables

Description

VIRTANA_AI_MODEL_PROVIDER

Selects the model provider. Supported values: OPENAI, GEMINI, LITELLM.

VIRTANA_AI_API_KEY

API key for the selected provider. Replaces the former OPENAI_API_KEY variable.

VIRTANA_AI_INFERENCE_ENDPOINT

Inference endpoint URL. Leave blank for OpenAI or Gemini. For a self-hosted LiteLLM deployment, set the LiteLLM endpoint URL, for example https://litellm.example.com.



Create the Helm input file

The Helm input file supplies the configuration values that the upgrade uses. Create a file named global-view-values.yaml with the following content, and change the values to match your environment as described in the comments:

global:
  controlplane:
    ingress:
      annotations:
        nginx.ingress.kubernetes.io/ssl-redirect: "false"
        nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
  postgresql:
    storage:
      size: 50Gi
  environment: app
  secret_source: valuesfile
  storageClass: &defaultStorageClass ""
  dockerRegistryCredentials:
    DOCKER_SERVER: "https://index.docker.io/v2/"
    DOCKER_USERNAME: "username"
    DOCKER_PASSWORD: "password"
  keycloak:
    hostname: <KEYCLOAK_HOSTNAME>
    adminUser: "vpadmin"
    adminPassword: "xxxxxxx"
  public_dns_host_name: <global_view_hostname>
  public_dns_host_am_suffix: -oc-<global_view_hostname>
  organization_details:
    organization_name: "<TENANT_NAME>"
    first_name: "John"
    last_name: "Doe"
    contact_email: "xxxx.xxxx@domain.com"
  create_tls_selfsigned_certs: true
  affinity: &affinity {}
  nodeSelector: &nodeSelector {}
  tolerations: &tolerations []

cp-configs:
  smtp:
    smtpHost: smtp.gmail.com
    smtpPort: "587"
    smtpUsername: ""
    smtpPassword: ""
    smtpFromEmail: "noreplies@virtana.com"
    smtpTlsInsecureSkipVerify: "false"

growthbook:
  ingress:
    enabled: true
    annotations:
      nginx.ingress.kubernetes.io/cors-allow-origin: "https://<GROWTH_BOOK_HOSTNAME>"
    appOriginName: <GROWTH_BOOK_HOSTNAME>
    apiHostName: <GROWTH_BOOK_API_HOSTNAME>
  affinity: *affinity
  nodeSelector: *nodeSelector
  tolerations: *tolerations

cp-mongodb:
  affinity: *affinity
  nodeSelector: *nodeSelector
  tolerations: *tolerations
  migration:
    enabled: false
  persistence:
    size: 50Gi

seaweedfs:
  allInOne:
    data:
      type: persistentVolumeClaim
      size: 20Gi
      storageClass: *defaultStorageClass
    nodeSelector: ""
    affinity: ""
    tolerations: ""

redis:
  persistentVolumeClaim:
    size: 50Gi
  resources:
    requests:
      cpu: 100m
      memory: 256Mi
    limits:
      cpu: 500m
      memory: 256Mi

strimzi-kafka-operator:
  controller:
    persistence:
      size: 50Gi

cloud-native-postgresql-cluster:
  affinity: *affinity

cp-metrics-service:
  victoria-metrics-single:
    rbac:
      create: true
      namespaced: true
    server:
      persistentVolume:
        storageClassName: *defaultStorageClass
        size: 16Gi

alerts-service:
  solrdb:
    enabled: false
    persistent_ebs:
      spec:
        resources:
          requests:
            storage: 100Gi
  solr:
    enabled: true
    migration:
      enabled: true
      storageSize: "50Gi"
      resources:
        requests:
          cpu: 100m
          memory: 1Gi
        limits:
          cpu: 500m
          memory: 1Gi
    persistence:
      size: 50Gi
    zookeeper:
      persistence:
        size: 20Gi

The following table describes the fields in the global configuration block:

Field

Description

Default value

global.controlplane.ingress.annotations

Controls the behavior of the NGINX Ingress for the control plane.

nginx.ingress.kubernetes.io/ssl-redirect

Controls automatic HTTP-to-HTTPS redirection.

false

nginx.ingress.kubernetes.io/force-ssl-redirect

When enabled, forces all incoming traffic to be served over HTTPS.

false

global.postgresql

Configures the PostgreSQL database that backs the platform.

postgresql.migration.enabled

Controls whether database migration jobs run automatically. Keep this value set to false when you upgrade to 2026.6.1.

false

postgresql.storage.size

Size of the persistent volume for PostgreSQL.

50Gi

global.environment

Deployment environment name or type.

app

global.secret_source

Specifies where secrets come from. Supported values: valuesfile, none.

valuesfile

global.storageClass

Default Kubernetes StorageClass for persistent volume claims (PVCs). If blank, the cluster default StorageClass is used.

""

global.dockerRegistryCredentials

Credentials used to pull container images from a Docker registry.

DOCKER_SERVER (private registry)

URL of your private registry. Use this when you deploy in an air-gapped environment.

https://index.docker.io/v2/

DOCKER_USERNAME

Registry username.

"username"

DOCKER_PASSWORD

Registry password.

"password"

DOCKER_SERVERS (Docker Hub)

List of servers used when you pull images directly from Docker Hub. Don't change the list.

"https://index.docker.io/v2/", "https://dhi.io/"

global.keycloak

Integrates the platform with a Keycloak identity provider.

keycloak.hostname

Public hostname where Keycloak is accessible.

<KEYCLOAK_HOSTNAME>

keycloak.adminUser, keycloak.adminPassword

Credentials for the Keycloak admin account that configures realms, clients, and users.

vpadmin / <password>

global.public_dns_host_name

Main DNS name for the Global View UI.

<global_view_hostname>

global.public_dns_host_am_suffix

Suffix used to construct additional hostnames for auxiliary services.

-oc-<global_view_hostname>

global.organization_details

Metadata about the tenant or organization.

organization_name

Tenant or company name.

<TENANT_NAME>

first_name, last_name

Primary contact person.

John / Doe

contact_email

Contact email for notifications and support.

xxxx.xxxx@domain.com

global.create_tls_selfsigned_certs

Controls TLS certificate handling.

true

affinity

Kubernetes pod affinity and anti-affinity rules. An empty value ({}) lets pods schedule anywhere.

{}

nodeSelector

Maps pods to nodes by label. An empty value ({}) applies no node constraints.

{}

tolerations

Allows pods to schedule onto tainted nodes. An empty value ([]) applies no tolerations.

[]

The SMTP configuration block sets the mail server that Global View uses to send notification emails. Add the following block under cp-configs in global-view-values.yaml:

cp-configs:
  smtp:
    smtpHost: smtp.gmail.com
    smtpPort: "587"
    smtpUsername: ""
    smtpPassword: ""
    smtpFromEmail: "noreplies@virtana.com"
    smtpTlsInsecureSkipVerify: "false"

The following table describes the SMTP configuration fields:

Field

Description

Default value

smtpHost

SMTP server address.

smtp.gmail.com

smtpPort

SMTP port.

"587"

smtpUsername, smtpPassword

Authentication credentials for the SMTP server.

""

smtpFromEmail

Sender address for outgoing notification emails.

"noreplies@virtana.com"

smtpTlsInsecureSkipVerify

When set to false, verifies TLS certificates.

"false"

The GrowthBook configuration block sets the ingress, hostnames, and scheduling rules for the GrowthBook feature-flag service. Add the following block to global-view-values.yaml:

growthbook:
  ingress:
    enabled: true
    annotations:
      nginx.ingress.kubernetes.io/cors-allow-origin: "https://<GROWTH_BOOK_HOSTNAME>"
    appOriginName: <GROWTH_BOOK_HOSTNAME>
    apiHostName: <GROWTH_BOOK_API_HOSTNAME>
  affinity: *affinity
  nodeSelector: *nodeSelector
  tolerations: *tolerations

The following table describes the GrowthBook configuration fields:

Field

Description

Default value

cors-allow-origin

Restricts browser CORS requests to the GrowthBook UI hostname.

https://<GROWTH_BOOK_HOSTNAME>

appOriginName

Hostname for the GrowthBook web UI.

<GROWTH_BOOK_HOSTNAME>

apiHostName

Hostname for the GrowthBook API endpoint.

<GROWTH_BOOK_API_HOSTNAME>

The storage and infrastructure block configures MongoDB, object storage, Redis, Kafka, PostgreSQL, metrics, and alerts. In 2026.6.1, SeaweedFS replaces MinIO as the object storage backend, so the minio block is removed. Add the following block to global-view-values.yaml:

cp-mongodb:
  affinity: *affinity
  nodeSelector: *nodeSelector
  tolerations: *tolerations
  migration:
    enabled: false
  persistence:
    size: 50Gi

seaweedfs:
  image:
    registry: <REGISTRY_NAME>
  allInOne:
    data:
      type: persistentVolumeClaim
      size: 20Gi
      storageClass: *defaultStorageClass
    nodeSelector: *nodeSelector
    affinity: *affinity
    tolerations: *tolerations

redis:
  persistentVolumeClaim:
    existingPersistentVolumeClaim: "redis-data-controlplane-infra-redis-master-0"

strimzi-kafka-operator:
  controller:
    persistence:
      size: 50Gi

cloud-native-postgresql-cluster:
  affinity: *affinity

cp-metrics-service:
  victoria-metrics-single:
    rbac:
      create: true
      namespaced: true
    server:
      size: 100Gi

alerts-service:
  solrdb:
    enabled: true
    persistent_ebs:
      spec:
        resources:
          requests:
            storage: 100Gi
  solr:
    enabled: false
    persistence:
      size: 50Gi
    zookeeper:
      persistence:
        size: 20Gi

The following table describes the storage and infrastructure fields:

Field

Description

Default value

cp-mongodb.migration.enabled

Controls whether MongoDB data migrations run.

false

cp-mongodb.persistence.size

MongoDB storage for control plane documents.

50Gi

seaweedfs.allInOne.data.size

Object storage for files and artifacts. SeaweedFS replaces MinIO in 2026.6.1.

20Gi

seaweedfs.image.registry

Image registry for SeaweedFS. Set this for private-registry deployments.

<REGISTRY_NAME>

redis.persistentVolumeClaim.existingPersistentVolumeClaim

Reuses the existing Redis PVC from the prior installation to preserve data during the upgrade.

strimzi-kafka-operator.controller.persistence.size

Storage for the Strimzi Kafka operator controller state.

50Gi

cp-metrics-service.victoria-metrics-single.server.size

Time-series metrics database size. RBAC is namespaced.

100Gi

alerts-service.solrdb.enabled

Enables the SolrDB component.

true

alerts-service.solrdb.persistent_ebs...storage

EBS-backed Solr database for alert indexing.

100Gi

alerts-service.solr.enabled

Enables the in-chart Solr deployment.

false

alerts-service.solr.persistence.size

Disk size for Solr.

50Gi

alerts-service.solr.zookeeper.persistence.size

ZooKeeper persistence volume size for the Solr coordination service.

20Gi

Note

For an upgrade, Redis references an existingPersistentVolumeClaim instead of creating new storage. This preserves data continuity from the previous Redis deployment.

Note

SeaweedFS replaces MinIO in 2026.6.1. Remove all MinIO configuration from global-view-values.yaml. Existing MinIO data is migrated automatically during the upgrade. If you don't provide a SeaweedFS block, Global View deploys SeaweedFS with default settings.

The global.dockerRegistryCredentials section in global-view-values.yaml takes one of two forms, depending on how your cluster reaches the container images.

For a private registry in an air-gapped environment, specify a single registry server:

dockerRegistryCredentials:
  DOCKER_SERVER: "https://index.docker.io/v2/"
  DOCKER_USERNAME: "username"
  DOCKER_PASSWORD: "password"

For direct access to Docker Hub, specify one or more registry servers:

dockerRegistryCredentials:
  DOCKER_USERNAME: "username"
  DOCKER_PASSWORD: "password"
  DOCKER_SERVERS:
    - "https://index.docker.io/v2/"
    - "https://dhi.io/"

A private container registry override is needed only when you want to use your own container image registry instead of the official Virtana Docker registry. To use your own registry, create a file named global-view-image-registry.yaml and replace every occurrence of <REGISTRY_NAME> with your registry:

global:
  ## Replace all occurrences of <REGISTRY_NAME> in this file with your custom image registry
  image_registry: <REGISTRY_NAME>   ## For Virtana images
  imageRegistry: <REGISTRY_NAME>    ## For open source images

growthbook:
  image:
    repository: <REGISTRY_NAME>/growthbook

redis:
  image:
    repository: <REGISTRY_NAME>/redis

cloudnative-pg:
  image:
    repository: <REGISTRY_NAME>/cloudnative-pg

cloud-native-postgresql-cluster:
  image:
    registry: <REGISTRY_NAME>

strimzi-kafka-operator:
  defaultImageRegistry: <REGISTRY_NAME>

seaweedfs:
  image:
    registry: <REGISTRY_NAME>

cp-mongodb:
  image:
    registry: <REGISTRY_NAME>

cp-metrics-service:
  victoria-metrics-single:
    server:
      image:
        repository: <REGISTRY_NAME>/victoria-metrics

alerts-service:
  solr:
    image:
      registry: <REGISTRY_NAME>
    migration:
      image:
        registry: <REGISTRY_NAME>
    zookeeper:
      image:
        registry: <REGISTRY_NAME>

When you use a private container registry, add -f global-view-image-registry.yaml \ to each of the helm upgrade --install commands in Deploying Global View.

To deploy Global View on an OpenShift Kubernetes cluster, you must set the security contexts correctly. On OpenShift, the IDs you set for runAsUser, runAsGroup, and fsGroup must fall within the range that the target OpenShift cluster allows.

Add the following values to global-view-values.yaml and replace <user_id>, <group_id>, and <fsgroup_id> with values that your OpenShift cluster allows:

redis:
  securityContext:
    runAsUser: <user_id>
    runAsGroup: <group_id>
    fsGroup: <fsgroup_id>

strimzi-kafka-operator:
  podSecurityContext:
    fsGroup: <fsgroup_id>

  securityContext:
    runAsUser: <user_id>
    runAsGroup: <group_id>

cp-mongodb:
  securityContext:
    runAsUser: <user_id>
    runAsGroup: <group_id>
  podSecurityContext:
    fsGroup: <fsgroup_id>

cloudnative-pg:
  containerSecurityContext:
    runAsUser: <user_id>
    runAsGroup: <group_id>

  podSecurityContext:
    fsGroup: <fsgroup_id>

alerts-service:
  solr:
    securityContext:
      runAsUser: <user_id>
      runAsGroup: <group_id>
    podSecurityContext:
      fsGroup: <fsgroup_id>

    zookeeper:
      securityContext:
        runAsUser: <user_id>
        runAsGroup: <group_id>
      podSecurityContext:
        fsGroup: <fsgroup_id>

    migration:
      securityContext:
        runAsUser: <user_id>
        runAsGroup: <group_id>
      podSecurityContext:
        fsGroup: <fsgroup_id>

Private container registry override (optional)

Create a file named global-view-image-registry.yaml to pull images from your own container image registry instead of Virtana's official Docker registry. For the full list of override values, see Overriding the private container registry.

Note

When you build global-view-image-registry.yaml for 2026.6.1, apply these changes: remove the minio block, set the SeaweedFS image registry through seaweedfs.image.registry in global-view-values.yaml, and change the Redis image repository from redis to dhi-redis.

Deploy Global View

In this step, you apply the prepared Helm values and image registry overrides to roll out the upgraded Global View stack to your Kubernetes or OpenShift cluster. The deployment runs in three phases — CRDs, infrastructure modules, and service modules, so that custom resources, storage, messaging, and application services are created and upgraded in a controlled, dependency-aware order. All three phases use the virtana-repo/virtana-global-view Helm chart.

For the detailed deployment commands, see Deploying Global View.

Note

The Keycloak container image changes from quay.io/keycloak/keycloak:26.3 to dhi.io/keycloak:26 in 2026.6.1. Keycloak deploys from a separate chart in the keycloak namespace. Apply the Keycloak image update during the same maintenance window as the Global View upgrade.

Verify the upgrade

To confirm that Global View is accessible after the upgrade, complete the following steps:

  1. Open your web browser and go to https://<global_view_hostname>/ui. Replace <global_view_hostname> with the hostname you defined during configuration.

  2. Sign in with the organization email address and the password you created during registration.

    When the UI loads and sign-in succeeds, the upgrade is complete.

  3. Open the alerts view and confirm that your alerts data appears. Alerts data confirms that the SolrCloud migration restored your data successfully.