Supported versions:
Unsupported versions:
Starting in version 1.8, Apigee hybrid offers a new feature to manage the ingress gateway for your hybrid installation, Apigee ingress gateway. Anthos Service Mesh is no longer a prerequisite for hybrid installation. With Apigee ingress gateway, Apigee will stop supplying routing configuration to Anthos Service Mesh. After the upgrade, you have to migrate the traffic to the new Apigee ingress gateway before you can start using the feature.
Apigee uses a small subset of Anthos Service Mesh features for the ingress gateway. Starting with hybrid version 1.8 Apigee hybrid includes an ingress gateway which is installed and upgraded as part of Apigee hybrid upgrades. Therefore you do not need to build expertise around Anthos Service Mesh to install, upgrade, and manage Apigee hybrid. Issues around ingress gateway versions and compatibility with Apigee hybrid releases are handled automatically.
Two scenarios for migrating are:
Before switching to a new Ingress for Apigee, drain all the traffic to another cluster or region from the cluster you are migrating. This will give you time to test if the new Apigee ingress gateway is working as expected. Then shift the traffic back to the upgraded cluster.
During the upgrade Apigee will bring up the new ingress gateway with an IP address you specify. You can then test if the new Apigee ingress gateway is working as expected, and then shift traffic to the new ingress. There might be downtime during this upgrade.
When upgrading Apigee hybrid to version 1.8, you must configure Apigee ingress gateway in your overrides file. After upgrading, you control which type of ingress gateway your clusters will use by directing the A or CNAME records at your registrar to the IP address for Apigee ingress gateway or for Anthos Service Mesh.
The procedures for upgrading Apigee hybrid are organized in the following sections:
These upgrade instructions assume you have Apigee hybrid version 1.7.x or an earlier patch release of version 1.8.x installed and wish to upgrade it to version 1.8.8. If you are updating from an earlier version see the instructions for Upgrading Apigee hybrid to version 1.7.
If you prefer to continue using Anthos Service Mesh, you must ensure that Anthos Service Mesh is upgraded to a supported version. See the Supported platforms table for supported versions of Anthos Service Mesh.
apigeectl. If needed, change directory
into your apigeectl directory and define the variable with the following command:
export APIGEECTL_HOME=$PWD
echo $APIGEECTL_HOMEexport APIGEECTL_HOME=$PWD
echo $APIGEECTL_HOMEset APIGEECTL_HOME=%CD%
echo %APIGEECTL_HOME%$APIGEECTL_HOME/ directory. For example:
tar -czvf $APIGEECTL_HOME/../apigeectl-v1.7-backup.tar.gz $APIGEECTL_HOMEOptional: If you plan to use Cloud trace and you have not
already performed this step on your hybrid v1.7 installation, ensure your service
account for your Apigee runtime services has the Cloud Trace Agent Google role.
(roles/cloudtrace.agent).
For production environments, this is usually the apigee-runtime service account. For
non-production environments, this is usually the apigee-non-prod service account.
You can add the role in the Cloud console > IAM & Admin > Service accounts UI or with the following commands:
gcloud iam service-accounts list --filter "apigee-runtime"
If it matches the pattern apigee-runtime@$ORG_NAME.iam.gserviceaccount.com,
you can use that pattern in the next step.
gcloud iam service-accounts list --filter "apigee-non-prod"
If it matches the pattern apigee-non-prod@$ORG_NAME.iam.gserviceaccount.com,
you can use that pattern in the next step.
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/cloudtrace.agent"gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/cloudtrace.agent"gcloud projects add-iam-policy-binding hybrid-example-project \
--member="serviceAccount:apigee-runtime@hybrid-example-project.iam.gserviceaccount.com" \
--role="roles/cloudtrace.agent"Where: $PROJECT_ID is the name of the Google Cloud project where Apigee hybrid is installed.
To install Apigee ingress gateway as part of the upgrade. You need to add the
following
ingressGateways property to your overrides file.
ingressGateways:
- name: INGRESS_NAME
replicaCountMin: REPLICAS_MIN
replicaCountMax: REPLICAS_MAX
resources:
requests:
cpu: CPU_COUNT_REQ
memory: MEMORY_REQ
limits:
cpu: CPU_COUNT_LIMIT
memory: MEMORY_LIMIT
svcAnnotations: # optional. See Known issue 243599452.
SVC_ANNOTATIONS_KEY: SVC_ANNOTATIONS_VALUE
svcLoadBalancerIP: SVC_LOAD_BALANCER_IP # optional
ingressGateways:
- name: prod1
replicaCountMin: 2
replicaCountMax: 100
resources:
requests:
cpu: 1
memory: 1Gi
limits:
cpu: 2
memory: 2Gi
See ingressGateways[].name
in the Configuration property reference
ingressGateways[].replicaCountMin and
ingressGateways[].replicaCountMax in the Configuration property reference.
For more information and default settings, see
ingressGateways[].resources.requests.cpu
and
ingressGateways[].resources.requests.memory
in the Configuration property reference.
For more information and default settings, see
ingressGateways[].resources.limits.cpu
and
ingressGateways[].resources.limits.memory
in the Configuration property reference.
This is a key-value pair that provides annotations for your default ingress service. Annotations are used by your cloud platform to help configure your hybrid installation, for example setting the loadbalancer type to either internal or external. For example:
ingressGateways:
svcAnnotations:
networking.gke.io/load-balancer-type: "Internal"Annotations vary from platform to platform. Refer to your platform documentation for required and suggested annotations.
SeeingressGateways[].svcAnnotations
in the Configuration property reference.If you do not have a static IP address allocated for your load balancer, leave this property out of your overrides file.
SeeingressGateways[].svcLoadBalancerIP in the Configuration property reference.
Add the following properties to your overrides.yaml file to enable new features in
hybrid v1.8. These features are optional.
apigee-udca.
If you are using different service accounts for UDCA in different environments,
be aware that it will now use the service account specified at the org level in your overrides
file with udca:serviceAccountPath, instead of the ones specified at the env level
with envs:udca:serviceAccountPath.
Apigee hybrid v 1.8 supports environment-scoped UDCA. To keep per-environment UDCA, set
orgScopedUDCA: false.
See orgScopedUDCA in the Configuration
properties reference.
validateOrg to require strict validation that the Apigee organization and
environment are active and work with the Google Cloud Platform project specified in your
overrides file.
validateOrg: true
apigeectl executable file is located):
cd $APIGEECTL_HOME/..
Download the release package for your operating system using the following command. Be sure to select your platform in the following table:
Linux 64 bit:
curl -LO \ https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.8.8/apigeectl_linux_64.tar.gz
Mac 64 bit:
curl -LO \ https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.8.8/apigeectl_mac_64.tar.gz
Windows 64 bit:
curl -LO ^ https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.8.8/apigeectl_windows_64.zip
apigeectl/ directory to a backup directory name. For example:
mv $APIGEECTL_HOME/ $APIGEECTL_HOME-v1.7/
mv $APIGEECTL_HOME/ $APIGEECTL_HOME-v1.7/
rename %APIGEECTL_HOME% %APIGEECTL_HOME%-v1.7
Extract the downloaded gzip file contents into your hybrid base directory.
The hybrid base directory is the directory where the renamed apigeectl-v1.7 directory is located:
tar xvzf filename.tar.gz -C ./
tar xvzf filename.tar.gz -C ./
tar xvzf filename.zip -C ./
The tar contents are, by default, expanded into a directory with the version and platform in
its name. For example: ./apigeectl_1.8.8-xxxxxxx_linux_64. Rename that directory
to apigeectl using the following command:
mv apigeectl_1.8.8-xxxxxxx_linux_64 apigeectl
mv apigeectl_1.8.8-xxxxxxx_mac_64 apigeectl
rename apigeectl_1.8.8-xxxxxxx_windows_64 apigeectl
apigeectl directory:
cd ./apigeectl
This directory is the apigeectl home directory. It is where
the apigeectl executable command is located.
$APIGEECTL_HOME for the directory
in your file system where the apigeectl utility is installed. If needed, change directory
into your apigeectl directory and define the variable with the following command:
export APIGEECTL_HOME=$PWD
echo $APIGEECTL_HOME
export APIGEECTL_HOME=$PWD
echo $APIGEECTL_HOME
set APIGEECTL_HOME=%CD%
echo %APIGEECTL_HOME%
apigeectl with the version command:
./apigeectl version
Version: 1.8.8
hybrid-base-directory/hybrid-files directory. The hybrid-files
directory is where configuration files such as the overrides file, certs, and service accounts
are located. For example:
cd $APIGEECTL_HOME/../hybrid-files
kubectl is set to the correct context using the following command.
The current context should be set to the cluster in which you are upgrading Apigee hybrid.
kubectl config get-contexts | grep \*
hybrid-files directory:
$APIGEECTL_HOME. These links allow you to run the newly installed apigeectl command from inside the
hybrid-files directory:
ln -nfs$APIGEECTL_HOME/tools toolsln -nfs$APIGEECTL_HOME/config configln -nfs$APIGEECTL_HOME/templates templatesln -nfs$APIGEECTL_HOME/plugins plugins
ls -l | grep ^l
${APIGEECTL_HOME}/apigeectl init -f OVERRIDES_FILE --dry-run=client
Where OVERRIDES_FILE is the name of your overrides file, for example ./overrides/overrides.yaml.
$APIGEECTL_HOME/apigeectl init -f OVERRIDES_FILE
$APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
On success, the output says: All containers ready.
As a further check, you can also run this command to check ApigeeDataStore status:
kubectl describe apigeeds -n apigee
In the output, look for State: running.
apply command using the --dry-run
flag:
$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --dry-run=client
For production environments you should upgrade each hybrid component individually, and check the status of the upgraded component before proceeding to the next component.
hybrid-files directory.$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --datastore
$APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
Proceed to the next step only when the pods are ready.
$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --telemetry
$APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --redis
$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --org
$APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --env ENV_NAME
$APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
Where ENV_NAME is the name of the environment you are upgrading.
$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --all-envs
$APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
virtualhosts components and check completion:
$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --settings virtualhosts
$APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
In most non-production, demo, or experimental environments, you can apply the overrides to all components at once. If your non-production environment is large and complex or closely mimics a production environment, you may want to use the instructions for upgrading production environments.
hybrid-files directory.$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE
$APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
Upgrade your Kubernetes platform to the versions supported by hybrid 1.8. Follow your platform's documentation if you need help.
(1) On Anthos versions 1.8, 1.9, and 1.10,
follow the instructions in these documents to avoid conflict with
cert-manager:
cert-manager when upgrading to version 1.8.2 or above.
cert-manager when upgrading to version 1.9.0 or 1.9.1.
cert-manager installation.
(2) Support available with Apigee hybrid version 1.7.2 and newer.
(3) The official EOL dates for Apigee hybrid versions 1.8 and older have been reached. Regular monthly patches are no longer available. These releases are no longer officially supported except for customers with explicit and official exceptions for continued support. Other customers must upgrade.
(4)Anthos on Bare Metal and VMWare versions 1.12 and earlier are out of support. See the Anthos on Bare Metal Version Support Policy and the Anthos clusters on VMware versions.
(5)Anthos on Bare Metal and VMWare requires ASM 1.14 or later. We recommend that you upgrade to hybrid v1.8 and switch to Apigee ingress gateway which no longer requires you to install ASM on your hybrid cluster.
(6) Support available with Apigee hybrid version 1.8.4 and newer.
(7) Attached clusters are not required for Apigee hybrid v1.8 and newer using Apigee ingressgateway..
(8) Not supported with Apigee hybrid version 1.8.4 and newer.
(9) Support available with Apigee hybrid version 1.7.6 and newer.
(10) Not supported with Apigee hybrid version 1.8.5 and newer.
(11) ASM is automatically installed with Apigee hybrid 1.9 and newer.
(12) Support available with Apigee hybrid version 1.9.2 and newer.
(13) Anthos clusters on AWS (Multi-Cloud) version numbers now reflect the Kubernetes versions. See Anthos version and upgrade support for version details and recommended patches.
For Apigee hybrid versions 1.7.x and older, you must use Anthos attached clusters if you want to run Apigee hybrid in a multi-cloud context on Elastic Kubernetes Service (EKS), Azure Kubernetes Service (AKS), or another supported third-party Kubernetes service provider. Cluster attachment allows Google to measure the usage of Anthos Service Mesh (ASM). Registering the third-party cluster is optional. Register only if you wish to view the attached cluster in the Google Cloud console. For more information, see Attach third-party Kubernetes clusters to Google Cloud.
For Apigee hybrid version 1.8.x, Anthos attached clusters are required if you are using Anthos Service Mesh for your ingress gateway. If you are using Apigee ingress gateway, Anthos attached clusters are optional.
To switch your traffic to Apigee ingress gateway:
kubectl get svc -n apigee -l app=apigee-ingressgateway
Your output should look something like:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE apigee-ingressgateway-prod-hybrid-37a39bd LoadBalancer 192.0.2.123 233.252.0.123 15021:32049/TCP,80:31624/TCP,443:30723/TCP 16h
Perform the procedures using the Anthos Service Mesh documentation appropriate for your platform:
The instructions to install and configure Anthos Service Mesh are different depending on your platform. The platforms are divided into the following categories:
The sequence for upgrading to Anthos Service Mesh version 1.17.8 for your hybrid installation is as follows:
istiod revision to an environment variable:
export DELETE_REV=$(kubectl get deploy -n istio-system -l app=istiod -o jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}')
echo $DELETE_REV
Your output should look something like 1.16
overlay.yaml file or verify that your existing
overlay.yaml contains the following contents:
apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: components: ingressGateways: - name: istio-ingressgateway enabled: true k8s: nodeSelector: # default node selector, if different or not using node selectors, change accordingly. cloud.google.com/gke-nodepool: apigee-runtime resources: requests: cpu: 1000m service: type: LoadBalancer loadBalancerIP: STATIC_IP # If you do not have a reserved static IP, leave this out. ports: - name: http-status-port port: 15021 - name: http2 port: 80 targetPort: 8080 - name: https port: 443 targetPort: 8443 meshConfig: accessLogFormat: '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
istiod:
kubectl get pod -n istio-system -L istio.io/rev
The output from the command is similar to the following.
NAME READY STATUS RESTARTS AGE REV
istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-lrzpz 1/1 Running 0 68m 1.16.7-asm
istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-r76kr 1/1 Running 0 68m 1.16.7-asm
istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-1178-1
istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-wm68b 1/1 Running 0 27s asm-1178-1
In the output, under the REV column, note the value of the revision
label for the new version. In this example, the value is
asm-1178-1
export UPGRADE_REV="REVISION_LABEL"
istio-system namespace and remove the
istio-injection label (if it exists) with the following command.
kubectl label namespace istio-system istio.io/rev=$UPGRADE_REV istio-injection- --overwrite
If you see "istio-injection not found" in the output, you can
ignore it. That means that the namespace didn't previously have the
istio-injection label. Because auto-injection fails if a
namespace has both the istio-injection and the revision label,
all kubectl label commands in the Anthos Service Mesh
documentation include removing the istio-injection label.
kubectl rollout restart deployment -n istio-system
asmcli. DIR_PATH environment variable. This is the same directory you
specified in the
Upgrade
with optional features procedure.
export DIR_PATH=OUTPUT_DIR
#!/bin/bash
set -ex
if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then
kubectl apply -f ${DIR_PATH}/asm/istio/istiod-service.yaml
kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete deploy -l app=istio-ingressgateway-connectors,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete ValidatingWebhookConfiguration -l app=istiod,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete MutatingWebhookConfiguration -l app=sidecar-injector,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete IstioOperator installed-state-${DELETE_REV} -n istio-system --ignore-not-found=true
fi
These instructions cover upgrading Anthos Service Mesh on:
The sequence for upgrading to Anthos Service Mesh version 1.17.8 for your hybrid installation is as follows:
istiod revision to an environment variable:
export DELETE_REV=$(kubectl get deploy -n istio-system -l app=istiod -o jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}')
echo $DELETE_REV
Your output should look something like 1.16
overlay.yaml file or verify that your existing
overlay.yaml contains the following contents:
apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: components: ingressGateways: - name: istio-ingressgateway enabled: true k8s: nodeSelector: # default node selector, if different or not using node selectors, change accordingly. cloud.google.com/gke-nodepool: apigee-runtime resources: requests: cpu: 1000m service: type: LoadBalancer loadBalancerIP: STATIC_IP # If you do not have a reserved static IP, leave this out. ports: - name: http-status-port port: 15021 - name: http2 port: 80 targetPort: 8080 - name: https port: 443 targetPort: 8443 values: gateways: istio-ingressgateway: runAsRoot: true meshConfig: accessLogFormat: '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
istiod:
kubectl get pod -n istio-system -L istio.io/rev
The output from the command is similar to the following.
NAME READY STATUS RESTARTS AGE REV
istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-lrzpz 1/1 Running 0 68m 1.16.7-asm
istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-r76kr 1/1 Running 0 68m 1.16.7-asm
istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-1178-1
istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-wm68b 1/1 Running 0 27s asm-1178-1
In the output, under the REV column, note the value of the revision
label for the new version. In this example, the value is
asm-1178-1
export UPGRADE_REV="REVISION_LABEL"
istio-system namespace and remove the
istio-injection label (if it exists) with the following command.
kubectl label namespace istio-system istio.io/rev=$UPGRADE_REV istio-injection- --overwrite
If you see "istio-injection not found" in the output, you can
ignore it. That means that the namespace didn't previously have the
istio-injection label. Because auto-injection fails if a
namespace has both the istio-injection and the revision label,
all kubectl label commands in the Anthos Service Mesh
documentation include removing the istio-injection label.
kubectl rollout restart deployment -n istio-system
asmcli. DIR_PATH environment variable. This is the same directory you
specified in the
Upgrade
with optional features procedure.
export DIR_PATH=OUTPUT_DIR
#!/bin/bash
set -ex
if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then
kubectl apply -f ${DIR_PATH}/asm/istio/istiod-service.yaml
kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete deploy -l app=istio-ingressgateway-connectors,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete ValidatingWebhookConfiguration -l app=istiod,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete MutatingWebhookConfiguration -l app=sidecar-injector,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete IstioOperator installed-state-${DELETE_REV} -n istio-system --ignore-not-found=true
fi
In these instructions the process of upgrading Anthos Service Mesh (Anthos Service Mesh) version 1.17.8-asm.4-distroless on Anthos attached clusters is the same as performing a fresh install.
istiod revision to an environment variable:
export DELETE_REV=$(kubectl get deploy -n istio-system -l app=istiod -o jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}')
echo $DELETE_REV
Your output should look something like 1.16
curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-linux-amd64.tar.gz
curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-linux-amd64.tar.gz.1.sig
openssl dgst -verify /dev/stdin -signature 1.17.8-asm.4-distroless-linux-amd64.tar.gz.1.sig 1.17.8-asm.4-distroless.tar.gz <<'EOF'
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
-----END PUBLIC KEY-----
EOFtar xzf 1.17.8-asm.4-distroless-linux-amd64.tar.gz
The command creates an installation directory in your current working directory named
1.17.8-asm.4-distroless that contains:
samples directory.istioctl command-line tool that you use to install Anthos Service
Mesh is in the bin directory.manifests/profiles directory.cd 1.17.8-asm.4-distroless
/bin directory to your PATH:
export PATH=$PWD/bin:$PATH
curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-osx.tar.gz
curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-osx.tar.gz.1.sig
openssl dgst -sha256 -verify /dev/stdin -signature 1.17.8-asm.4-distroless-osx.tar.gz.1.sig 1.17.8-asm.4-distroless.tar.gz <<'EOF'
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
-----END PUBLIC KEY-----
EOFtar xzf 1.17.8-asm.4-distroless-osx.tar.gz
The command creates an installation directory in your current working directory named
1.17.8-asm.4-distroless that contains:
samples directory.istioctl command-line tool that you use to install Anthos Service
Mesh is in the bin directory.manifests/profiles directory.cd 1.17.8-asm.4-distroless
/bin directory to your PATH:
export PATH=$PWD/bin:$PATH
curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-win.zip
curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-win.zip.1.sig
openssl dgst -verify - -signature 1.17.8-asm.4-distroless-win.zip.1.sig 1.17.8-asm.4-distroless.win.zip <<'EOF'
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
-----END PUBLIC KEY-----
EOFtar xzf 1.17.8-asm.4-distroless-win.zip
The command creates an installation directory in your current working directory named
1.17.8-asm.4-distroless that contains:
samples directory.istioctl command-line tool that you use to install Anthos Service
Mesh is in the bin directory.manifests\profiles directory.cd 1.17.8-asm.4-distroless
set PATH=%CD%\bin:%PATH%
istioctl:
istioctl version
kubectl create namespace istio-system
overlay.yaml file or create a new one with the following contents:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
accessLogFile: /dev/stdout
enableTracing: true
accessLogFormat:
'{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
components:
ingressGateways:
- name: istio-ingressgateway
enabled: true
k8s:
service:
type: LoadBalancer
ports:
- name: status-port
port: 15021
targetPort: 15021
- name: http2
port: 80
targetPort: 8080
- name: https
port: 443
targetPort: 8443
istioctl using the asm-multicloud profile:
istioctl install \
--set profile=asm-multicloud \
--set revision="asm-1178-1" \
--filename overlay.yamlYour output should look something like:
kubectl get pods -n istio-system NAME READY STATUS RESTARTS AGE istio-ingressgateway-88b6fd976-flgp2 1/1 Running 0 3m13s istio-ingressgateway-88b6fd976-p5dl9 1/1 Running 0 2m57s istiod-asm-1178-1-798ffb964-2ls88 1/1 Running 0 3m21s istiod-asm-1178-1-798ffb964-fnj8c 1/1 Running 1 3m21s
The --set revision argument adds a revision label in the format
istio.io/rev=asm-1178-1 to istiod. The revision label is used by the
automatic sidecar injector webhook to associate injected sidecars with a particular istiod
revision. To enable sidecar auto-injection for a namespace, you must label it with a revision
that matches the label on istiod.
kubectl get svc -n istio-system
Your output should look something like:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 172.200.48.52 34.74.177.168 15021:30479/TCP,80:30030/TCP,443:32200/TCP,15012:32297/TCP,15443:30244/TCP 3m35s istiod ClusterIP 172.200.18.133 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 4m46s istiod-asm-1178-1 ClusterIP 172.200.63.220 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 3m43s
istiod:
kubectl get pod -n istio-system -L istio.io/rev
The output from the command is similar to the following.
NAME READY STATUS RESTARTS AGE REV
istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-lrzpz 1/1 Running 0 68m 1.16.7-asm
istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-r76kr 1/1 Running 0 68m 1.16.7-asm
istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-1178-1
istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-wm68b 1/1 Running 0 27s asm-1178-1
In the output, under the REV column, note the value of the revision
label for the new version. In this example, the value is
asm-1178-1
export UPGRADE_REV="REVISION_LABEL"
istio-system namespace and remove the
istio-injection label (if it exists) with the following command.
kubectl label namespace istio-system istio.io/rev=$UPGRADE_REV istio-injection- --overwrite
If you see "istio-injection not found" in the output, you can
ignore it. That means that the namespace didn't previously have the
istio-injection label. Because auto-injection fails if a
namespace has both the istio-injection and the revision label,
all kubectl label commands in the Anthos Service Mesh
documentation include removing the istio-injection label.
kubectl rollout restart deployment -n istio-system
asmcli.
#!/bin/bash
set -ex
if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then
kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete deploy -l app=istio-ingressgateway-connectors,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete ValidatingWebhookConfiguration -l app=istiod,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete MutatingWebhookConfiguration -l app=sidecar-injector,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete IstioOperator installed-state-${DELETE_REV} -n istio-system --ignore-not-found=true
fi
In these instructions the process of upgrading Anthos Service Mesh (Anthos Service Mesh) version 1.17.8-asm.4-distroless on Anthos attached clusters is the same as performing a fresh install.
istiod revision to an environment variable:
export DELETE_REV=$(kubectl get deploy -n istio-system -l app=istiod -o jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}')
echo $DELETE_REV
Your output should look something like 1.16
anyuid security context constraint (SCC) to the istio-system with the
following OpenShift CLI (oc) command:
oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-linux-amd64.tar.gz
curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-linux-amd64.tar.gz.1.sig
openssl dgst -verify /dev/stdin -signature 1.17.8-asm.4-distroless-linux-amd64.tar.gz.1.sig 1.17.8-asm.4-distroless.tar.gz <<'EOF'
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
-----END PUBLIC KEY-----
EOFtar xzf 1.17.8-asm.4-distroless-linux-amd64.tar.gz
The command creates an installation directory in your current working directory named
1.17.8-asm.4-distroless that contains:
samples directory.istioctl command-line tool that you use to install Anthos Service
Mesh is in the bin directory.manifests/profiles directory.cd 1.17.8-asm.4-distroless
/bin directory to your PATH:
export PATH=$PWD/bin:$PATH
anyuid security context constraint (SCC) to the istio-system with the
following OpenShift CLI (oc) command:
oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-osx.tar.gz
curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-osx.tar.gz.1.sig
openssl dgst -sha256 -verify /dev/stdin -signature 1.17.8-asm.4-distroless-osx.tar.gz.1.sig 1.17.8-asm.4-distroless.tar.gz <<'EOF'
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
-----END PUBLIC KEY-----
EOFtar xzf 1.17.8-asm.4-distroless-osx.tar.gz
The command creates an installation directory in your current working directory named
1.17.8-asm.4-distroless that contains:
samples directory.istioctl command-line tool that you use to install Anthos Service
Mesh is in the bin directory.manifests/profiles directory.cd 1.17.8-asm.4-distroless
/bin directory to your PATH:
export PATH=$PWD/bin:$PATH
anyuid security context constraint (SCC) to the istio-system with the
following OpenShift CLI (oc) command:
oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-win.zip
curl -LO https://storage.googleapis.com/gke-release/asm/1.17.8-asm.4-distroless-win.zip.1.sig
openssl dgst -verify - -signature 1.17.8-asm.4-distroless-win.zip.1.sig 1.17.8-asm.4-distroless.win.zip <<'EOF'
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
-----END PUBLIC KEY-----
EOFtar xzf 1.17.8-asm.4-distroless-win.zip
The command creates an installation directory in your current working directory named
1.17.8-asm.4-distroless that contains:
samples directory.istioctl command-line tool that you use to install Anthos Service
Mesh is in the bin directory.manifests\profiles directory.cd 1.17.8-asm.4-distroless
set PATH=%CD%\bin:%PATH%
istioctl:
istioctl version
kubectl create namespace istio-system
When you install Anthos Service Mesh, you set a revision label on istiod. You need to set the same
revision on the validating webhook.
istiod-service.yaml with the following contents:
apiVersion: v1 kind: Service metadata: name: istiod namespace: istio-system labels: istio.io/rev: asm-1178-1 app: istiod istio: pilot release: istio spec: ports: - port: 15010 name: grpc-xds # plaintext protocol: TCP - port: 15012 name: https-dns # mTLS with k8s-signed cert protocol: TCP - port: 443 name: https-webhook # validation and injection targetPort: 15017 protocol: TCP - port: 15014 name: http-monitoring # prometheus stats protocol: TCP selector: app: istiod istio.io/rev: asm-1178-1 meshConfig: accessLogFormat: '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
kubectl to apply the validating webhook configuration:
kubectl apply -f istiod-service.yaml
kubectl get svc -n istio-system
The response should look similar to:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istiod ClusterIP 172.200.18.133 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 22s
overlay.yaml file or create a new one with the following contents:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
accessLogFile: /dev/stdout
enableTracing: true
accessLogFormat:
'{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
components:
ingressGateways:
- name: istio-ingressgateway
enabled: true
k8s:
service:
type: LoadBalancer
ports:
- name: status-port
port: 15021
targetPort: 15021
- name: http2
port: 80
targetPort: 8080
- name: https
port: 443
targetPort: 8443
istioctl using the asm-multicloud profile:
istioctl install \
--set profile=asm-multicloud \
--set revision="asm-1178-1" \
--filename overlayfile.yamlYour output should look something like:
kubectl get pods -n istio-system NAME READY STATUS RESTARTS AGE istio-ingressgateway-88b6fd976-flgp2 1/1 Running 0 3m13s istio-ingressgateway-88b6fd976-p5dl9 1/1 Running 0 2m57s istiod-asm-1178-1-798ffb964-2ls88 1/1 Running 0 3m21s istiod-asm-1178-1-798ffb964-fnj8c 1/1 Running 1 3m21s
The --set revision argument adds a revision label in the format
istio.io/rev=1.6.11-asm.1 to istiod. The revision label is used by the
automatic sidecar injector webhook to associate injected sidecars with a particular istiod
revision. To enable sidecar auto-injection for a namespace, you must label it with a revision
that matches the label on istiod.
kubectl get svc -n istio-system
Your output should look something like:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 172.200.48.52 34.74.177.168 15021:30479/TCP,80:30030/TCP,443:32200/TCP,15012:32297/TCP,15443:30244/TCP 3m35s istiod ClusterIP 172.200.18.133 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 4m46s istiod-asm-1178-1 ClusterIP 172.200.63.220 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 3m43s
istiod:
kubectl get pod -n istio-system -L istio.io/rev
The output from the command is similar to the following.
NAME READY STATUS RESTARTS AGE REV
istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-lrzpz 1/1 Running 0 68m 1.16.7-asm
istiod-asm-Cloud Service Mesh 1.17.8-asm.4-67998f4b55-r76kr 1/1 Running 0 68m 1.16.7-asm
istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-1178-1
istiod-Cloud Service Mesh 1.16.7-asm.1-1-5cd96f88f6-wm68b 1/1 Running 0 27s asm-1178-1
In the output, under the REV column, note the value of the revision
label for the new version. In this example, the value is
asm-1178-1
export UPGRADE_REV="REVISION_LABEL"
istio-system namespace and remove the
istio-injection label (if it exists) with the following command.
kubectl label namespace istio-system istio.io/rev=$UPGRADE_REV istio-injection- --overwrite
If you see "istio-injection not found" in the output, you can
ignore it. That means that the namespace didn't previously have the
istio-injection label. Because auto-injection fails if a
namespace has both the istio-injection and the revision label,
all kubectl label commands in the Anthos Service Mesh
documentation include removing the istio-injection label.
kubectl rollout restart deployment -n istio-system
asmcli.
#!/bin/bash
set -ex
if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then
kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete deploy -l app=istio-ingressgateway-connectors,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete ValidatingWebhookConfiguration -l app=istiod,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete MutatingWebhookConfiguration -l app=sidecar-injector,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-${DELETE_REV} -n istio-system --ignore-not-found=true
kubectl delete IstioOperator installed-state-${DELETE_REV} -n istio-system --ignore-not-found=true
fi
Follow these steps to roll back a previous upgrade:
apigee:
kubectl delete job -n NAMESPACE \
$(kubectl get job -n NAMESPACE \
-o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')apigee-system namespace:
kubectl delete job -n apigee-system \
$(kubectl get job -n apigee-system \
-o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')APIGEECTL_HOME variable to point to the directory that contains the previous
version of apigeectl. For example:
export APIGEECTL_HOME=PATH_TO_PREVIOUS_APIGEECTL_DIRECTORY
overrides file:
ingressGateways and all its properties.virtualhosts.selector.app to the previous value,
for example:
virtualhosts:
- name: my-env-group
selector:
app: istio-ingressgatewayao.args.disableIstioConfigInAPIServer.apigeectl apply, check the status of your pods, and then run
apigeectl init. Be sure to use the original overrides file for the version you
wish to roll back to:
apigeectl apply:
$APIGEECTL_HOME/apigeectl apply -f ORIGINAL_OVERRIDES_FILE
Where ORIGINAL_OVERRIDES_FILE is relative path and filename of the overrides
file for your previous version hybrid installation, for example,
./overrides/overrides1.7.yaml.
kubectl -n NAMESPACE get pods
Where NAMESPACE is your Apigee hybrid namespace.
apigeeds:
kubectl describe apigeeds -n apigee
Your output should look something like:
Status:
Cassandra Data Replication:
Cassandra Pod Ips:
10.8.2.204
Cassandra Ready Replicas: 1
Components:
Cassandra:
Last Successfully Released Version:
Revision: v1-f8aa9a82b9f69613
Version: v1
Replicas:
Available: 1
Ready: 1
Total: 1
Updated: 1
State: running
Scaling:
In Progress: false
Operation:
Requested Replicas: 0
State: running
Proceed to the next step only when the apigeeds pod is running.
apigeectl apply -f ORIGINAL_OVERRIDES_FILE --dry-run=client --print-yaml --env ENV_NAME 2>/dev/null |grep "runtime:" -A 25 -B 1| grep "autoScaler" -A 2
Your output should look something like:
autoScaler:
minReplicas: 2
maxReplicas: 10kubectl -n apigee-system delete deploy apigee-controller-managerapigeectl init:
$APIGEECTL_HOME/apigeectl init -f ORIGINAL_OVERRIDES_FILEkubectl delete deployment -n NAMESPACE apigee-ingress-gateway-manager
Where NAMESPACE is your Apigee hybrid namespace.
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-07-23 UTC.