Supported versions:
Unsupported versions:
This topic discusses how to add a second Apigee hybrid organization (org) to an existing Kubernetes cluster. In this multi-org configuration, both orgs use and share the same Cassandra ring. Each org can have multiple environments and environment groups configured.
A multi-org per cluster configuration is supported with the following limitations. Until these limitations are mitigated, we do not recommend that you use this configuration:
kubectl commands. However, they are not sent to the correct
Cloud project through Cloud Logging.This section describes how Apigee Support handles existing multi-org clusters and recommendations for future deployments:
Before continuing, note the following:
To create the additional org, follow the steps in Part 1: Project and org setup.
In the following steps, you will create a new overrides file and configure it for the
new org. An overrides.yaml file can only support one org's information. Therefore,
you must create a new overrides.yaml file and apply it to the existing Kubernetes
cluster.
.key and
.pem) in your certs directory. If you need to create them again, you
can follow the instructions in Create TLS
certificates.overrides.yaml to a new file to use as a starting point
for configuring your new org. For
example: new-overrides.yaml.org: "new-org-name" instanceID: "instance-id" ## Must match the instanceID of your existing org. multiOrgCluster: true ## Enables exporting metrics for this org to the Google Cloud Project named with gcp:projectID k8sCluster: name: "existing-cluster-name" region: "existing-cluster-analytics-region" gcp: projectID: "new-project-id" name: "new-project-id" region: "new-project-default-location" namespace: namespace ## must be the same for both new and existing orgs virtualhosts: - name: new-environment-group-name sslCertPath: ./certs/cert-file-name # .crt or .pem sslKeyPath: ./certs/key-file-name # .key envs: - name: new-environment-name serviceAccountPaths: runtime: ./new-service-accounts-directory/new-project-id-apigee-runtime.json synchronizer: ./new-service-accounts-directory/new-project-id-apigee-synchronizer.json udca: ./new-service-accounts-directory/new-project-id-apigee-udca.json connectAgent: serviceAccountPath: ./new-service-accounts-directory/new-project-id-apigee-mart.json mart: serviceAccountPath: ./new-service-accounts-directory/new-project-id-apigee-mart.json metrics: serviceAccountPath: ./new-service-accounts-directory/new-project-id-apigee-metrics.json watcher: serviceAccountPath: ./new-service-accounts-directory/new-project-id-apigee-watcher.json
The following table describes each of the property values that you must provide in the overrides file. For more information, see Configuration property reference.
| Variable | Description |
|---|---|
| new-org-name | The name of your new org. |
| instance-id | All orgs in this cluster must have the same instance ID. Therefore this must match the
instanceID entry in the overrides file for your original org.
|
| existing-cluster-name | The name of the cluster you are adding this org to. It
must match the k8sCluster.name entry in the overrides file for your original
cluster. |
| existing-cluster-analytics-region | The region where the original cluster is
provisioned. It must match the k8sCluster.region entry in the overrides file
for your original cluster. |
| new-project-id | The project ID of your new project. The project ID and org name are the same. |
| new-project-default-location | The analytics region you specified when you created the new org. It does not have to be the same as the region for the existing org. |
| namespace | All orgs in the cluster must share the same namespace. Be sure to use the same namespace
that was used for the original org. The namespace for most installations is apigee.
|
| new-environment-group-name | The new environment group you created for the new org. |
| cert-file-name and key-file-name |
The TLS cert and key files for the cluster that you checked or created in step 1 in this section. |
| new-environment-name | The name of the environment you created for the new org. |
| new-service-accounts-directory | The directory where the service account key files you created for the new org are located. |
Apply the new org configuration to your cluster:
helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace apigee \ --atomic \ -f OVERRIDES_FILE.yaml \ --dry-run=server
helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace apigee \ --atomic \ -f NEW_OVERRIDES_FILE.yaml
helm upgrade ENV_NAME apigee-env/ \ --install \ --namespace apigee \ --atomic \ --set env=ENV_NAME \ -f overrides.yaml \ --dry-run=server
helm upgrade ENV_NAME apigee-env/ \ --install \ --namespace apigee \ --atomic \ --set env=ENV_NAME \ -f overrides.yaml
helm upgrade NEW_ENV_GROUP_NAME apigee-virtualhost/ \ --install \ --namespace apigee \ --atomic \ --set envgroup=NEW_ENV_GROUP_NAME \ -f overrides.yaml \ --dry-run=server
helm upgrade NEW_ENV_GROUP_NAME apigee-virtualhost/ \ --install \ --namespace apigee \ --atomic \ --set envgroup=NEW_ENV_GROUP_NAME \ -f overrides.yaml
multiOrgCluster disabled. Use the following steps to enable multi-org
telemetry for each org in your cluster:
helm delete telemetry
overrides.yaml file for your existing org.
multiOrgCluster: true
Perform a dry-run first:
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace apigee \ --atomic \ -f FIRST_OVERRIDES_FILE.yaml \ --dry-run=server
If the dry-run is successful, apply the changes and install the Telemetry component:
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace apigee \ --atomic \ -f FIRST_OVERRIDES_FILE.yaml
overrides.yaml file for each new org.
multiOrgCluster: true
Perform a dry-run first:
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace apigee \ --atomic \ -f NEW_OVERRIDES_FILE.yaml \ --dry-run=server
If the dry-run is successful, apply the changes and install the Telemetry component:
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace apigee \ --atomic \ -f NEW_OVERRIDES_FILE.yaml
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2026-06-09 UTC.