In this section, you prepare a production-ready Arm64 Google Kubernetes Engine (GKE) cluster for GitOps with Argo CD.
This cluster is designed for:
You must have:
Update the system packages and install dependencies:
sudo zypper refresh
sudo zypper update -y
sudo zypper install -y curl git tar gzip
Install the kubectl command-line tool for interacting with Kubernetes clusters:
curl -LO https://dl.k8s.io/release/v1.30.1/bin/linux/arm64/kubectl
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
Confirm that kubectl is installed and accessible in your PATH:
kubectl version --client
The output is similar to:
Client Version: v1.30.1
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Install Python 3.11:
sudo zypper install -y python311
which python3.11
The Google Cloud SDK is required to create and manage GKE clusters.
Download and extract the SDK package:
wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-460.0.0-linux-arm.tar.gz
tar -xvf google-cloud-sdk-460.0.0-linux-arm.tar.gz
Run the installation script to set up gcloud:
./google-cloud-sdk/install.sh
After installation completes, exit the terminal and reconnect via SSH to apply the PATH changes:
exit
Authenticate and configure the Google Cloud CLI:
gcloud init
During initialization, select Login with a new account. You’ll be prompted to authenticate using your browser and receive an auth code to copy back. Select the project you want to use and choose default settings when unsure.
Retrieve the list of project IDs:
gcloud projects list
The output is similar to:
PROJECT_ID NAME PROJECT_NUMBER
imperial-time-463411-q5 My First Project 662694175852
Note the PROJECT_ID for use in the next step.
Ensure the correct GCP project is selected:
gcloud config set project <YOUR_PROJECT_ID>
Replace <YOUR_PROJECT_ID> with your actual project ID from the previous step.
gcloud components install gke-gcloud-auth-plugin
Enable the required API for GKE:
gcloud services enable \
compute.googleapis.com \
container.googleapis.com
Create a Kubernetes cluster to host Argo CD deployments:
gcloud container clusters create argocd-arm-cluster \
--zone us-central1-a \
--machine-type c4a-standard-4 \
--num-nodes 2 \
--release-channel regular \
--workload-pool=$(gcloud config get-value project).svc.id.goog \
--enable-ip-alias
Fetch cluster credentials:
gcloud container clusters get-credentials argocd-arm-cluster --zone us-central1-a
Confirm Kubernetes access:
kubectl get nodes
The output is similar to:
NAME STATUS ROLES AGE VERSION
gke-argocd-arm-cluster-default-pool-301523aa-6t7f Ready <none> 3h11m v1.33.5-gke.2072000
gke-argocd-arm-cluster-default-pool-301523aa-cczh Ready <none> 3h11m v1.33.5-gke.2072000
All nodes should be in Ready state, and the Kubernetes control plane should be accessible.
kubectl get nodes -o jsonpath='{.items[*].status.nodeInfo.architecture}'
The output is similar to:
arm64 arm64
Remove the taint on the nodes to ensure proper scheduling on Arm64 VMs. For each node starting with gke, run the following taint command.
The required “-” at the end is important for the taint command to work correctly.
For example, using the node IDs in the output above:
kubectl taint nodes gke-argocd-arm-cluster-default-pool-301523aa-6t7f kubernetes.io/arch=arm64:NoSchedule-
kubectl taint nodes gke-argocd-arm-cluster-default-pool-301523aa-cczh kubernetes.io/arch=arm64:NoSchedule-
Replace the node names with your actual node names from the previous command output.
The output is similar to:
node/gke-argocd-arm-cluster-default-pool-c090f2b1-48t7 untainted
You’ve successfully prepared a production-ready Arm64 GKE environment by installing and configuring the Google Cloud SDK, creating an Arm-based (Axion) GKE cluster, connecting kubectl to the cluster, and verifying cluster access and node architecture. Your Kubernetes environment is now ready to support GitOps workflows.
In the next section, you’ll install Argo CD on the GKE cluster, expose the Argo CD server for external browser access, install and configure the Argo CD CLI, and verify connectivity between the CLI, browser UI, and cluster.