Upgrading Connectware Helm Charts to 3.0.0
How to upgrade your connectware and connectware-agent Helm charts from version 2.1.0 or later to version 3.0.0.
Chart versioning and Connectware versioning are now decoupled. This means that improvements to the Cybus Helm chart can be released independently of Connectware releases. The compatibility matrix shows which chart versions work with which Connectware versions. This makes it easy to plan upgrades for each type on its own schedule.
For a full list of new features and improvements in this release, see the changelog.
Switching to an OCI Registry
Starting with chart 3.0.0, charts are distributed via an OCI registry instead of a Helm chart repository.
Each chart version is now pulled directly by its exact version tag from an OCI registry, similar to how container images are handled. You do not have to manage a registered repo or run helm repo update before installing a new version anymore.
Especially for offline installations, this is a significant simplification: charts and container images can now be mirrored to the same registry, removing the need to host the chart separately. Use oci://repo.cybus.io as the registry. Make sure any proxies or network access rules allow traffic to that address.
Helm version 4 is required.
Before You Begin
Chart 3.0.0 restructures the values.yaml file for both the connectware chart and the connectware-agent chart. Many keys are renamed, several components have been moved from global.* into top-level blocks, and resource defaults have been reduced for most components.
This guide is split into two parts so that you can follow only the parts that apply to your installation:
Part A: changes to the
connectwarechartvalues.yamlfile.Part B: changes to the
connectware-agentchartvalues.yamlfile. Applies whether the agent chart runs standalone or as a subchart of theconnectwarechart.
Make sure to read the entire guide before you start. Some changes, such as security context overrides and protocol-mapper agent migration, require careful hand-merging to avoid stripping defaults or orphaning agents.
Prerequisites
A working installation of one or both of the following:
connectwareHelm chart versions 2.1.0 to 2.4.0connectware-agentHelm chart versions 2.1.0 to 2.4.0
Chart 2.1.0 is the minimum supported starting point. If you are on an older version, upgrade to 2.1.0 first.
Access to your current
values.yamlfile or files.Backups of your Connectware database, Persistent Volumes,
values.yamlfile or files, and all service commissioning files.Helm version 4 is installed on your system.
kubectl is installed on your system.
You know the name and namespace of your installations. See Obtaining the Name, Namespace, and Version of Your Installation.
Access to OCI registry
oci://repo.cybus.io, or the Helm charts copied locally.Kubernetes version >= 1.25: These new chart versions will not deploy on Kubernetes lower than 1.25.
A note on quoting strings
YAML interprets certain unquoted values as numbers, booleans, or dates. To avoid accidental type coercion, wrap string values in single or double quotes whenever they contain digits, punctuation, or look like a boolean. The examples in this guide follow this convention.
AI-Assisted Migration
You can migrate your values.yaml file using AI or manually. If you prefer the manual approach, skip this section and follow Part A and Part B instead. If you use the AI approach, it handles the key renames and structural moves in your values.yaml file. However, you still need to perform additional manual actions, as described below.
Upgrade Procedure
The procedure is divided into the following parts:
Part A — Connectware Chart Migration: Update the
connectwarechartvalues.yamlfile to match the new chart schema.Part B — Connectware-Agent Chart Migration: Update the
connectware-agentchartvalues.yamlfile. Applies to both standalone and subchart deployments.Running the Upgrade: Apply the updated values using
helm upgrade.Post-Upgrade Actions: Re-register protocol-mapper agents and review resource requests.
As part of this upgrade, you will need to fully stop Connectware and any standalone connectware-agent releases, since some of the changes cannot be done in a rolling restart.
Part A: Connectware Chart Migration
Apply the following changes to your connectware chart values.yaml file. If you only want to update the connectware-agent chart standalone, skip to Part B.
A1. License Values Changes
Why the Change?
Normalizing value names and capitalization to avoid future confusion.
What You Need to Do
A2. Image Version
Why the Change?
The value controls the container image tag used, not necessarily a version. It is now aligned with the Kubernetes convention.
What You Need to Do
A3. Security Contexts
Why the Change?
Security context values now use Override suffixes to signal that they replace the chart defaults rather than merge with them.
We renamed securityContext to podSecurityContextOverride, to be consistent and explicit in the naming.
Override values replace defaults, they do not merge
A partial override strips any default it does not redeclare. If you customized a security context, your migrated output must include both the new 3.0.0 defaults and your customizations, merged by hand.
The same rename applies to per-agent security contexts in the connectware-agent chart. See B3. Security Contexts.
Key Changes
A4. Storage to Persistence
Why the Change?
The storage key was renamed to persistence across the chart, and several storage-related keys were adjusted to use uppercase initialisms. This aligns the naming with common Kubernetes conventions and keeps it consistent across the chart.
The same rename applies to per-agent storage in the connectware-agent chart. See B4. Storage to Persistence.
What You Need to Do
A5. User Management to Authentication
Why the Change?
The user management section is not different from the authentication section, so to simplify, they have been merged. The admin user password format was also simplified from base64 to plain text, which follows a common theme: literal Helm values take plain-text values. Base64 encoding is not a security measure to keep values secret. For more secure operations, use Helm values which take references to existing Kubernetes Secrets, in this case global.authentication.adminUser.existingSecret. The initial admin password has no effect during an upgrade, since it will never override an existing admin user.
The mTLS configuration block was removed a few versions back, since mTLS is now always enabled. If you still have it in your values.yaml, now is a good chance to remove it.
What You Need to Do
A6. Other Global Value Changes
Why the Change?
Some global values are no longer needed, the MetalLB address pool configuration moved to the ingress service annotations, and the ingress DNS names key was renamed to use the uppercase initialism.
What You Need to Do
A7. Components Moved Out of global
Why the Change?
Component configuration blocks were lifted out of global.* to their own top-level keys to follow Helm best practices and avoid confusion with subcharts being introduced into the connectware chart.
The "connectware" Deployment used the global.ingress section. The name of the Deployment and the name of the section were confusing, so they were both renamed. The Deployment is now named "connectware-ingress" and uses the matching Helm value section connectwareIngress. This conveys more clearly that this is an ingress proxy for Connectware, and has nothing to do with a Kubernetes Ingress. Instead it is exposed using a LoadBalancer Service by default.
What You Need to Do
A8. Resources Moved to Per-Component
Why the Change?
The global.podResources.* block has been removed. Resource limits and requests are now configured directly on each component. Default requests have also been reduced for most components.
If your current values.yaml file does not set global.podResources, your workloads will receive the new, lower default requests after the upgrade. Set the old values explicitly if your workload requires them.
What You Need to Do
A9. CybusMQ Broker Value Changes
Why the Change?
Beyond the storage rename covered in A4 and the top-level move covered in A7, several CybusMQ broker keys were renamed or retyped.
What You Need to Do
A10. Auth-Server Default Replicas
Why the Change?
The default for authServer.replicas changed from 1 to 2 to improve availability.
What You Need to Do
A11. Reserved MFA Environment Variables
Why the Change?
Chart 3.0.0 introduces dedicated Helm values for the MFA issuer and label: global.authentication.mfa.issuer and global.authentication.mfa.label. Because the chart now sets these on the auth-server itself, the matching environment variables CYBUS_MFA_ISSUER and CYBUS_MFA_LABEL are reserved and stripped from any authServer.env list. Setting them via env no longer has any effect.
What You Need to Do
A12. Workload Label Rename
Why the Change?
Workloads created by the connectware chart no longer carry the short app=<component> label. The chart now uses the standard Kubernetes recommended label app.kubernetes.io/name=<component> instead. This aligns the chart with Kubernetes recommended labels and matches what the connectware-agent chart already uses.
What You Need to Do
A13. Ingress Service Ports for TCP IngressRoutes
Why the Change?
The connectware LoadBalancer Service is now fully configurable through connectwareIngress.service.ports. The new default port list only contains the core Connectware ports. The ports 40000 to 40009, which were previously exposed for Cybus::IngressRoute TCP resources, are no longer exposed unless you add them.
What You Need to Do
A14. NATS Metrics Path Change
Why the Change?
The intermediate prometheus block under NATS metrics is gone. The exporter sidecar configuration (enabled, resources) and the ServiceMonitor configuration now live directly under nats.metrics.
What You Need to Do
Part B: Connectware-Agent Chart Migration
Chart 3.0.0 removes built-in agent orchestration from the connectware chart and replaces it with the connectware-agent chart, embedded as a subchart. The following steps cover both migrating agents from the old connectware chart and updating existing subchart installations.
After the upgrade, you must re-register any agents that were scheduled with the connectware chart. See Post-Upgrade Actions.
Apply the following changes to your connectware-agent or connectware chart values. Not all sections apply to both deployment modes. Check the table below before working through them. Sections with mode-specific examples use Standalone and Subchart tabs:
Standalone:
connectware-agentinstalled as its own Helm release, keys are at the root of itsvalues.yaml. See Installing Connectware Agents Using the Connectware-Agent Helm Chart.Subchart:
connectware-agentembedded in theconnectwarechart, keys are nested underconnectwareAgent.*. See Deploying Agents with Your Connectware Installation.
B1. Protocol-Mapper Agents Structure
Why the Change?
Chart 3.0.0 replaces the built-in agent templates under global.protocolMapperAgents with the connectware-agent subchart. Subchart users now configure agents through connectwareAgent.* instead of global.*, and gain access to the protocolMapperAgentDefaults mechanism that standalone connectware-agent Helm chart already uses.
Standalone connectware-agent users are not affected by this restructuring. The per-key renames in B2 through B6 still apply, but the overall protocolMapperAgents / protocolMapperAgentDefaults layout is unchanged.
What You Need to Do
This section applies to subchart users only. Move global.protocolMapperAgents to connectwareAgent.protocolMapperAgents. The connectwareAgent.protocolMapperAgentDefaults block is now available for values shared across agents.
Connectware treats migrated agents as new entities after the upgrade. After the Helm upgrade completes, you must de-register the old agents and register the new ones. See Post-Upgrade Actions.
Promoting Shared Values to protocolMapperAgentDefaults
Optional but recommended when you have multiple agents. Override precedence is: schema defaults, then protocolMapperAgentDefaults, then per-agent entry. Each agent entry then only needs its name plus its overrides. For full semantics, see Configuration Principles for the connectware-agent Helm Chart.
A subset of keys also inherits from the parent connectware chart's global.* values when not set on the agent or its defaults. This applies to security contexts, image values other than image.name, podPriorityClassName, nodeSelector, and tolerations. The effective precedence in that case is: schema defaults, then inherited global.* values from the connectware chart, then protocolMapperAgentDefaults, then per-agent entry.
To promote shared values:
Identify values that are identical across every agent, such as
env,connectwareHost,tls.ca,mTLS.enabled,persistence.storageClassName, andresources.Move those values into
protocolMapperAgentDefaults.Leave only the per-agent overrides plus
namein eachprotocolMapperAgentsentry.
Some keys are always agent-specific and have no default counterpart: name, mTLS.keyPair, and existingAgentPasswordSecret. Keep them on the agent entry.
Simple Example (Two Agents, Shared env)
Before
After (shared env promoted)
Advanced Example (Shared CA, Security Context, and Storage Class)
Agents share env, tls.ca.cert, storageClassName, and containerSecurityContext, but differ in storageSize.
Before
After
In this example, containerSecurityContext matches the 3.0.0 default, so the block was dropped entirely. If your block had only partially overridden the default, you would merge it by hand as described in B3. Security Contexts.
B2. Image Version
Why the Change?
The value controls the container image tag used, not necessarily a version. It is now aligned with the Kubernetes convention, matching the rename in A2. Image Version.
What You Need to Do
This section applies to standalone connectware-agent users only. Subchart users were previously unable to control image settings for agents. They can now use the values provided by the connectware-agent subchart, or let the chart fall back on the global connectware chart image tag in global.image.tag , which is already covered by A2. Image Version.
B3. Security Contexts
Why the Change?
Per-agent security context keys were renamed to use Override suffixes, matching the convention introduced in A3. Security Contexts.
Override values replace defaults, they do not merge
A partial override strips any default it does not redeclare. If you customized a per-agent security context, your migrated output must include both the new 3.0.0 defaults (listed in A3) and your customizations, merged by hand.
What You Need to Do
Per agent, in each entry under protocolMapperAgents:
securityContext→podSecurityContextOverridecontainerSecurityContext→containerSecurityContextOverride
You can also use the protocolMapperAgentDefaults.podSecurityContextOverride and protocolMapperAgentDefaults.containerSecurityContextOverride block to set security context for all agents.
If your source security context block exactly matches the 3.0.0 defaults from A3, drop the block instead of emitting an override.
Before
After
Before
After
B4. Storage to Persistence
Why the Change?
Per-agent storage keys of the connectware chart were folded into a persistence block by migrating to the connectware-agent chart as a subchart, matching the rename in A4. Storage to Persistence. You can also use the connectwareAgent.protocolMapperAgentDefaults.persistence block to set persistence for all agents.
What You Need to Do
Per agent, in each entry under protocolMapperAgents:
storageSize
persistence.size
storageClassName
persistence.storageClassName
No changes are required when upgrading a standalone connectware-agent installation.
Before
After
B5. TLS CA Configuration Renames
Why the Change?
The key holding the CA certificate body was renamed to reflect that it accepts a full certificate chain. The legacy mTLS.caChain.* path is also gone — previously it was kept for backwards compatibility and is now removed. Move all CA configuration under tls.ca.*.
What You Need to Do
Per agent, in each entry under protocolMapperAgents, and in protocolMapperAgentDefaults if you use it:
tls.ca.cert
tls.ca.certChain
mTLS.caChain.cert
tls.ca.certChain
mTLS.caChain.existingConfigMap
tls.ca.existingConfigMap
Before
After
Before
After
B6. Reserved Environment Variables
Why the Change?
Chart 3.0.0 strips a fixed set of environment variables from any user-supplied env list before they reach the agent pod. These names are reserved for the chart to set internally, so that agent identity, connectivity, and security cannot be silently misconfigured. Previously, user overrides could be applied or ignored; now they are always filtered. Use the Helm values we provide if you previously set one of these environment variables.
What You Need to Do
Remove the following names from every env list, including each entry under protocolMapperAgents and protocolMapperAgentDefaults if you use it:
CYBUS_AGENT_MODECYBUS_AGENT_NAMECYBUS_HOSTNAME_INGRESSCYBUS_PROTOCOL_MAPPER_PASSWORDCYBUS_USE_MUTUAL_TLSAny name starting with
CYBUS_DATAPLANE_Any name starting with
CYBUS_STREAMSERVER_
Custom variables you set through env are unaffected. Only the names above and the two prefixes are filtered.
Before
Reserved name CYBUS_AGENT_MODE listed alongside a custom variable:
After
Reserved name removed, custom variable kept:
Before
Reserved name CYBUS_AGENT_MODE listed alongside a custom variable:
After
Reserved name removed, custom variable kept:
B7. Resource Defaults
Why the Change?
Chart 3.0.0 halves the default CPU and memory requests and removes the default limits for protocol-mapper agents, matching the change made for connectware chart components in A8. Resources Moved to Per-Component. Additionally, for agents orchestrated using the connectware chart, the compute resource requests and limits need to be moved to the Helm values provided by the connectware-agent chart.
requests.cpu
2000m
1000m
requests.memory
2000Mi
1000Mi
limits.cpu
2000m
not set
limits.memory
2000Mi
not set
The same reasoning applies as in A8. Resources Moved to Per-Component: lower defaults do not reflect lower resource requirements, and running without limits in production is not recommended.
This affects both standalone and subchart deployments. If your values.yaml file does not set agent resources, your agents will receive the new, lower default requests and no default limits after the upgrade. Set the old values explicitly if your workloads require them.
What You Need to Do
If you set per-agent or protocolMapperAgentDefaults resources directly in standalone mode, your values carry over unchanged.
Subchart users only: if you previously set global.podResources.distributedProtocolMapper in the connectware chart, migrate it to connectwareAgent.protocolMapperAgentDefaults.resources as described in A8. Resources Moved to Per-Component.
If you relied on the chart-level defaults, decide whether to keep the previous values or adopt the new defaults. To keep the previous behavior, set the old chart 2.x defaults explicitly on each agent or on protocolMapperAgentDefaults.
Before
values.yaml contained a default of 2000m / 2000Mi for both requests and limits.
After
Set the previous values explicitly if you relied on these compute resource defaults:
Before
values.yaml of the connectware chart had compute resources in the global.podResources.distributedProtocolMapper block.
After
Move any values you set to connectwareAgent.protocolMapperAgentDefaults.resources and set the previous default values explicitly if you relied on these compute resources:
B8. Cluster Resource Name Changes
Why the Change?
Chart 3.0.0 replaces the helper that builds Kubernetes resource names for protocol-mapper agents. Most installations are unaffected, but a few naming patterns produce a different result on upgrade.
The patterns that produce a different name in chart 3.0.0:
The release name
connectware. The duplicated prefixconnectware-connectware-agent-<agent>collapses toconnectware-agent-<agent>. Affects every agent under that release. If you have used the nameconnectwarefor aconnectware-agentchart installation, set thefullNameOverrideHelm value toconnectware-connectware-agent.Long combined release-plus-agent names. The new helper truncates the combined name at 52 characters with a fixed split between chart and agent name, instead of the old 63-character single truncation. Names that previously hit the old limit truncate differently.
StatefulSet selectors are immutable in Kubernetes
If any of the patterns above apply to your installation, helm upgrade fails on the rename and the existing PersistentVolumeClaims are orphaned. Detect this before upgrading.
If none of these patterns apply to your release name or agent names, you do not need to take any action for this section. Continue to Running the Upgrade.
Detecting Renames Before You Upgrade
Use the helm-diff plugin to compare the rendered output of the new chart version against the cluster state before applying the upgrade.
Substitute the following placeholders:
${NAMESPACE}: the namespace of the installation.${INSTALLATION_NAME}: the name of the Helm release.<values.yaml>: the path to the migratedvalues.yamlfile.
If the diff shows a StatefulSet, Service, or PersistentVolumeClaim renaming for any agent, stop and contact support before continuing. Resolving the rename requires deleting the old resources by hand, recreating them under the new name, and migrating data from the orphaned PVCs.
Complete Before-and-After Examples
Use these as a reference for the overall output shape.
Connectware Chart
Connectware-Agent Chart
Before (chart 2.1.0 values)
After (chart 3.0.0 values)
Before (chart 2.1.0 values)
After (chart 3.0.0 values)
Running the Upgrade
After migrating your values.yaml file or files, run the Helm upgrade.
Verifying Your Backups
Make sure you have backups of the following before running the upgrade:
All Kubernetes PersistentVolumes that Connectware uses
Your Connectware database. See Backing Up the Connectware Database.
Your
values.yamlfile or filesAll service commissioning files
Running the Helm Upgrade
Follow the steps for the chart you are upgrading.
Some changes in this release cannot be applied through a rolling restart, so you must fully stop Connectware before running the upgrade.
1. Shutting Down Connectware
Delete all workload controllers:
2. Running the Helm Upgrade
This applies to standalone deployments only. If you run the agent chart as a subchart of the connectware chart, the connectware chart upgrade already covers it.
Chart 3.0.0 includes changes that cannot be applied through a rolling restart, so you must fully stop the agents before upgrading. PersistentVolumeClaims are not deleted with their StatefulSets, so agent data is preserved.
1. Shutting Down the Agents
Delete the agent StatefulSets:
2. Running the Helm Upgrade
Substitute the following placeholders:
${NAMESPACE}: the namespace of the installation.${INSTALLATION_NAME}: the name of the Helm release.<values.yaml>: the path to the migratedvalues.yamlfile.
Monitoring the Upgrade
Monitor pod status while the upgrade runs.
Each pod passes through the following stages: Terminating, Pending, PodInitializing, ContainerCreating, Init:x/x, and finally Running. The upgrade is complete when all pods report Running and show the same number on both sides of the slash in the READY column.
See Verifying the Connectware Upgrade for additional details on how to monitor the upgrade.
Post-Upgrade Actions
Two tasks remain before your deployment is fully operational: re-registering migrated agents and reviewing resource usage.
Last updated
Was this helpful?

