Using Arm-based Container-Optimized OS images

Starting with Milestone 101, Container-Optimized OS publishes Arm-based OS images. The images can be used to create Tau T2A VMs on Compute Engine. To learn more about what types of workloads work well with Tau T2A, see Workload Recommendations. To learn how you can run Arm workloads on Google Google Kubernetes Engine (GKE), see Arm workloads on GKE.

Viewing Arm-based images

Arm-based Container-Optimized OS images are hosted under the cos-cloud project with the prefix cos-arm64. You can also see all currently available releases on command line by running the following command:

gcloud compute images list --project cos-cloud --no-standard-images  --filter="name~'cos-arm64-*'"

The output is similar to the following:

NAME                             PROJECT    FAMILY             DEPRECATED  STATUS
cos-arm64-101-17162-40-5         cos-cloud  cos-arm64-101-lts              READY
cos-arm64-beta-101-17162-40-5    cos-cloud  cos-arm64-beta                 READY
cos-arm64-dev-105-17228-0-0      cos-cloud  cos-arm64-dev                  READY
cos-arm64-stable-101-17162-40-5  cos-cloud  cos-arm64-stable               READY

Arm-based Container-Optimized OS images share the same versioning scheme and LTS milestone lifecycle with x86-based images. There are also similar image families cos-arm64-dev, cos-arm64-beta, cos-arm64-stable and cos-arm64-[MILESTONE]-lts for Arm-based Container-Optimized OS images.

Differences between Arm and x86 images

The Arm-based and x86-based Container-Optimized OS images share the same source code, but the build and compile configurations are different. This means that an Arm-based Container-Optimized OS image might not be functionally identical with a x86-based Container-Optimized OS image even if they have the same version.

The following sections describe the differences between Arm-based and x86-based Container-Optimized OS images.


Container-Optimized OS Arm-based images have a separate kernel configuration that is different from x86-based images. The most noticeable difference is that Arm-based images use NVMe interface for storage instead of SCSI interface, and Google virtual NIC (gVNIC) for networking instead of Virtionet. The Container Threat Detection feature also doesn't work on Arm-based images.

Cloud Logging agent

Container-Optimized OS Arm-based images use fluent-bit as Cloud Logging agent and x86-based images use fluentd. You shouldn't see any difference if you only rely on the default logging configuration built into the OS images. However, if you have custom fluentd configurations, you might experience breakage when migrating workloads to Arm-based Container-Optimized OS images. For more information, see the Cloud Logging agent.

CIS compliance

Container-Optimized OS Arm-based images are not CIS compliant. The CIS Google Container-Optimized OS Benchmark was published with x86 in mind, which means that Arm-based images might not comply with all the benchmarks.

Automatic updates

Automatic updates are not supported on Container-Optimized OS Arm-based images.

GPU accelerators

Using graphics processing unit (GPU) hardware accelerators is not supported on Container-Optimized OS Arm-based images.

Creating instances with the create-with-container command

Container-Optimized OS Arm-based images don't support creating VM instances with the create-with-container command. You can use cloud-init to configure Arm-based instances if you want to start containers when instances are created.

Container images

Container-Optimized OS includes tools that download containers at runtime. The following table describes which containers are compatible with Arm-based images:

Container images Compatible with Arm-based images Yes No No No