ENV_RELEASE_NAME and ENV_GROUP_RELEASE_NAME are names used to keep track of
installation and upgrades of the apigee-env and apigee-virtualhost charts. Helm release names must be unique within
your Apigee hybrid installation. If your environment name is unique, this can be the same as
ENV_NAME. However, if you have the same name for your environment and environment
group, make sure to enter a unique Helm release name for each. For example, if both are named
dev you could use something like dev-env-release and
dev-envgroup-release.
You can see a list of release names with the helm list command:
helm list -n APIGEE_NAMESPACE
.
Verify there are no pods remaining in the Apigee namespaces:
kubectl get pods -n APIGEE_NAMESPACE
Set the context to other existing regions and make sure the cassandra datacenter is removed
from the existing ring. The output should not show the removed data center details.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-26 UTC."],[],[],null,["# Decommission a hybrid region\n\nThis guide explains the procedure to decommission a region in a multi region environment.\n| Please ensure there is no live traffic going to the region you plan to delete.\n\nDecommission a hybrid region\n----------------------------\n\n1. Set the kubernetes contexts to the region that needs to be decommissioned.\n List your current contexts to see the context name for each cluster:\n\n ```\n kubectl config get-contexts\n ```\n\n\n Set the context to the cluster and region you want to decommission: \n\n ```\n kubectl config use-context CONTEXT_NAME\n ```\n\n\n Where \u003cvar translate=\"no\"\u003eCONTEXT_NAME\u003c/var\u003e is the context name for the cluster and region.\n\n\n For example: \n\n kubectl config get-contexts\n CURRENT NAME CLUSTER AUTHINFO NAMESPACE\n gke_example-org-1_us-central1_example-cluster-1 gke_example-org-1_us-central1_example-cluster-1 gke_example-org-1_us-central1_example-cluster-1 apigee\n * gke_example-org-1_us-central1_example-cluster-2 gke_example-org-1_us-central1_example-cluster-2 gke_example-org-1_us-central1_example-cluster-2 apigee\n gke_example-org-1_us-west1_example-cluster-2 gke_example-org-1_us-west1_example-cluster-2 gke_example-org-1_us-west1_example-cluster-2 apigee\n\n kubectl config use-context gke_example-org-1_us-west1_example-cluster-2\n\n2. Validate all the pods in the region are in a running or completed state: \n\n ```\n kubectl get pods -n APIGEE_NAMESPACE\n ```\n | **Note:** You can use any namespace. `apigee` is the default namespace. Be sure to replace `APIGEE_NAMESPACE` with the name of your namespace in the following commands.\n3. Validate the release of components using helm: \n\n ```\n helm -n APIGEE_NAMESPACE list\n ```\n\n For example: \n\n helm -n apigee list\n NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION\n datastore apigee 2 2024-03-29 17:08:07.917848253 +0000 UTC\tdeployed apigee-datastore-1.12.0 1.12.0\n ingress-manager apigee 2 2024-03-29 17:21:02.917333616 +0000 UTC\tdeployed apigee-ingress-manager-1.12.0 1.12.0\n redis apigee 2 2024-03-29 17:19:51.143728084 +0000 UTC\tdeployed apigee-redis-1.12.0 1.12.0\n telemetry apigee 2 2024-03-29 17:16:09.883885403 +0000 UTC\tdeployed apigee-telemetry-1.12.0 1.12.0\n exampleor apigee 2 2024-03-29 17:21:50.899855344 +0000 UTC\tdeployed apigee-org-1.12.0 1.12.0\n\n4. Validate the status of the Cassandra cluster. List the cassandra pods:\n\n ```\n kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra\n ```\n\n For example: \n\n kubectl get pods -n apigee -l app=apigee-cassandra\n NAME READY STATUS RESTARTS AGE\n apigee-cassandra-default-0 1/1 Running 0 2h\n apigee-cassandra-default-1 1/1 Running 0 2h\n apigee-cassandra-default-2 1/1 Running 0 2h\n apigee-cassandra-default-3 1/1 Running 0 16m\n apigee-cassandra-default-4 1/1 Running 0 14m\n apigee-cassandra-default-5 1/1 Running 0 13m\n apigee-cassandra-default-6 1/1 Running 0 9m\n apigee-cassandra-default-7 1/1 Running 0 9m\n apigee-cassandra-default-8 1/1 Running 0 8m\n\n5. Delete the Apigee instance in the context you just selected: Delete the components one at a time.\n\n | **Note:** In the following `helm delete` commands, the names given for the compnents are the release names, the names specified for the component when they were installed. For example, if you installed the datastore component with the helm command `helm install `**datastore**` apigee-datastore`, the release name for the component is `datastore`. If you used different release names when installing the components, specify those names when deleting them.\n |\n |\n For example: `helm -n `\u003cvar translate=\"no\"\u003eAPIGEE_NAMESPACE\u003c/var\u003e` delete my-datastore-region-1` \n\n ```\n helm -n APIGEE_NAMESPACE delete datastore\n ``` \n\n ```\n helm -n APIGEE_NAMESPACE delete telemetry\n ``` \n\n ```\n helm -n APIGEE_NAMESPACE delete ingress-manager\n ``` \n\n ```\n helm -n APIGEE_NAMESPACE delete redis\n ``` \n\n ```\n helm -n APIGEE_NAMESPACE delete ORG_NAME\n ```\n\n Repeat the following command for every environment: \n\n ```\n helm -n APIGEE_NAMESPACE delete ENV_RELEASE_NAME\n ```\n\n Repeat the following command for every environment group: \n\n ```\n helm -n APIGEE_NAMESPACE delete ENV_GROUP_RELEASE_NAME\n ``` \n\n ```\n helm -n APIGEE_NAMESPACE delete operator\n ```\n\n \u003cvar translate=\"no\"\u003eENV_RELEASE_NAME\u003c/var\u003e and \u003cvar translate=\"no\"\u003eENV_GROUP_RELEASE_NAME\u003c/var\u003e are names used to keep track of\n installation and upgrades of the `apigee-env` and `apigee-virtualhost` charts. Helm release names must be unique within\n your Apigee hybrid installation. If your environment name is unique, this can be the same as\n \u003cvar translate=\"no\"\u003eENV_NAME\u003c/var\u003e. However, if you have the same name for your environment and environment\n group, make sure to enter a unique Helm release name for each. For example, if both are named\n `dev` you could use something like `dev-env-release` and\n `dev-envgroup-release`.\n\n You can see a list of release names with the `helm list` command: \n\n ```\n helm list -n APIGEE_NAMESPACE\n ```\n .\n\n \u003cbr /\u003e\n\n6. Verify there are no pods remaining in the Apigee namespaces: \n\n ```\n kubectl get pods -n APIGEE_NAMESPACE\n ```\n7. Set the context to other existing regions and make sure the cassandra datacenter is removed from the existing ring. The output should not show the removed data center details. \n\n ```\n kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE -- nodetool -u JMX_USER -pw JMX_PASSWORD status\n ```\n| **Note:** If the entries of the deleted datacenter are still present in the Cassandra **nodetool** output, see [Stale references to deleted secondary region pods in Cassandra cluster](../../api-platform/troubleshoot/playbooks/cassandra/cassandra-pods-not-starting-secondary-region#stale-ref-deleted-region)."]]