# Arm on Autopilot


[Arm was made available in Preview on Google Cloud](https://cloud.google.com/blog/products/compute/tau-t2a-is-first-compute-engine-vm-on-an-arm-chip), and [GKE Autopilot](https://cloud.google.com/blog/products/containers-kubernetes/gke-supports-new-arm-based-tau-t2a-vms) today! As this is an early stage Preview, there’s a few details to pay attention to if you want to try it out, like the version, regions and quota. I put together this quickstart for trying out Arm in Autopilot today.

Arm nodes are available in 3 regions, so be sure to use one from this list:

- us-central
- europe-west4
- asia-southeast1

You’ll also need to create a cluster with a version greater than `1.24.1-gke.1400`. This version isn’t the default today, even in the Rapid channel, so you’ll need to create a cluster at a specific version. The following command works at the time of writing, but in the future (once the patch version has been retired), you’ll need to [specify a currently valid version](/k8s/creating-an-autopilot-cluster-at-a-specific-version/) newer than that one.

```shell
CLUSTER_NAME=autopilot-arm
REGION=us-central1
VERSION=1.24
gcloud container clusters create-auto $CLUSTER_NAME \
    --release-channel "rapid" --region $REGION \
    --cluster-version $VERSION
```

During the preview, the price is discounted by 100% (meaning it’s currently free), so it’s a great time to try it out and explore. Just don’t go [mining crypto](https://support.google.com/cloud/answer/7002354?hl=en#zippy=%2Cwhy-was-my-project-flagged-for-cryptocurrency-mining).

With your Arm-capable cluster created, deploy an Arm workload like this example from the [Autopilot docs](https://cloud.google.com/kubernetes-engine/docs/how-to/autopilot-arm-workloads#example-arm-request). You need to specify 2 node selectors, the compute class (an Autopilot-specific label), and the architecture (a well-known label).

```yaml {hl_lines=[15, 16, 17]}
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-arm
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-arm
  template:
    metadata:
      labels:
        app: nginx-arm
    spec:
      nodeSelector:
        cloud.google.com/compute-class: Scale-Out
        kubernetes.io/arch: arm64
      containers:
      - name: nginx-arm
        image: nginx
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi
```

[arm.yaml](https://github.com/WilliamDenniss/autopilot-examples/blob/master/arm/arm.yaml)

Be aware that Arm nodes today have fairly limited quota compared to other machine families (I was able to provision 18 node cores in us-central1 on the default quota), but it should be enough to give it a try and to start developing some Arm workloads. For now, the best advice on GCP would be to build [multi-arch images](https://cloud.google.com/kubernetes-engine/docs/how-to/build-multi-arch-for-arm) so you can fall back to x86 when needed.

If you run into problems, like Pending Arm Pods that never schedule, review the [troubleshooting guide](https://cloud.google.com/kubernetes-engine/docs/troubleshooting/troubleshooting-arm-workloads). In brief, check your event log for clues (`kubectl get events -w`), and verify that you have the right a) region (from the list of 3), b) GKE version (it must be equal to or higher than `1.24.1-gke.1400` precisely!), and c) enough [quota](https://console.cloud.google.com/iam-admin/quotas) (look for any that are close to 100% used).

Next up: [building your own Arm images using Cloud Build](/k8s/building-arm-images-with-cloud-build/).

