2020-11-08 19:51:42 +01:00
# ARM64
2024-08-03 05:34:23 +02:00
Typhoon supports Kubernetes clusters with ARM64 controller or worker nodes on several platforms:
2022-10-14 05:49:01 +02:00
* AWS with Fedora CoreOS or Flatcar Linux
* Azure with Flatcar Linux
2020-11-08 19:51:42 +01:00
2024-08-03 05:34:23 +02:00
## AWS
2020-11-08 19:51:42 +01:00
2022-10-14 05:49:01 +02:00
Create a cluster on AWS with ARM64 controller and worker nodes. Container workloads must be `arm64` compatible and use `arm64` (or multi-arch) container images.
2020-11-08 19:51:42 +01:00
2022-01-14 21:52:45 +01:00
=== "Fedora CoreOS Cluster (arm64)"
```tf
module "gravitas" {
2024-09-20 23:43:39 +02:00
source = "git::https://github.com/poseidon/typhoon//aws/fedora-coreos/kubernetes?ref=v1.31.1"
2022-01-14 21:52:45 +01:00
# AWS
cluster_name = "gravitas"
dns_zone = "aws.example.com"
dns_zone_id = "Z3PAABBCFAKEC0"
2024-08-03 05:34:23 +02:00
# instances
2022-01-14 21:52:45 +01:00
controller_type = "t4g.small"
2024-08-03 05:34:23 +02:00
controller_arch = "arm64"
worker_count = 2
2022-01-14 21:52:45 +01:00
worker_type = "t4g.small"
2024-08-03 05:34:23 +02:00
worker_arch = "arm64"
worker_price = "0.0168"
# configuration
ssh_authorized_key = "ssh-ed25519 AAAAB3Nz..."
2022-01-14 21:52:45 +01:00
}
```
=== "Flatcar Linux Cluster (arm64)"
```tf
module "gravitas" {
2024-09-20 23:43:39 +02:00
source = "git::https://github.com/poseidon/typhoon//aws/flatcar-linux/kubernetes?ref=v1.31.1"
2022-01-14 21:52:45 +01:00
# AWS
cluster_name = "gravitas"
dns_zone = "aws.example.com"
dns_zone_id = "Z3PAABBCFAKEC0"
2024-08-03 05:34:23 +02:00
# instances
2022-01-14 21:52:45 +01:00
controller_type = "t4g.small"
2024-08-03 05:34:23 +02:00
controller_arch = "arm64"
worker_count = 2
2022-01-14 21:52:45 +01:00
worker_type = "t4g.small"
2024-08-03 05:34:23 +02:00
worker_arch = "arm64"
worker_price = "0.0168"
# configuration
ssh_authorized_key = "ssh-ed25519 AAAAB3Nz..."
2022-01-14 21:52:45 +01:00
}
```
2020-11-08 19:51:42 +01:00
2022-01-14 18:59:11 +01:00
Verify the cluster has only arm64 (`aarch64`) nodes. For Flatcar Linux, describe nodes.
2020-11-08 19:51:42 +01:00
```
$ kubectl get nodes -o wide
2022-01-14 18:59:11 +01:00
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
2024-09-20 23:43:39 +02:00
ip-10-0-21-119 Ready < none > 77s v1.31.1 10.0.21.119 < none > Fedora CoreOS 35.20211215.3.0 5.15.7-200.fc35.aarch64 containerd://1.5.8
ip-10-0-32-166 Ready < none > 80s v1.31.1 10.0.32.166 < none > Fedora CoreOS 35.20211215.3.0 5.15.7-200.fc35.aarch64 containerd://1.5.8
ip-10-0-5-79 Ready < none > 77s v1.31.1 10.0.5.79 < none > Fedora CoreOS 35.20211215.3.0 5.15.7-200.fc35.aarch64 containerd://1.5.8
2020-11-08 19:51:42 +01:00
```
2024-08-03 05:34:23 +02:00
## Azure
Create a cluster on Azure with ARM64 controller and worker nodes. Container workloads must be `arm64` compatible and use `arm64` (or multi-arch) container images.
```tf
module "ramius" {
2024-09-20 23:43:39 +02:00
source = "git::https://github.com/poseidon/typhoon//azure/flatcar-linux/kubernetes?ref=v1.31.1"
2024-08-03 05:34:23 +02:00
# Azure
cluster_name = "ramius"
location = "centralus"
dns_zone = "azure.example.com"
dns_zone_group = "example-group"
# instances
controller_arch = "arm64"
controller_type = "Standard_B2pls_v5"
worker_count = 2
controller_arch = "arm64"
worker_type = "Standard_D2pls_v5"
# configuration
ssh_authorized_key = "ssh-rsa AAAAB3Nz..."
}
```
2020-11-08 19:51:42 +01:00
## Hybrid
2024-08-03 05:34:23 +02:00
Create a hybrid/mixed arch cluster by defining a cluster where [worker pool(s) ](worker-pools.md#aws ) have a different instance type architecture than controllers or other workers. Taints are added to aid in scheduling.
Here's an AWS example,
2020-11-08 19:51:42 +01:00
2022-01-14 21:52:45 +01:00
=== "FCOS Cluster"
2020-11-08 19:51:42 +01:00
```tf
module "gravitas" {
2024-09-20 23:43:39 +02:00
source = "git::https://github.com/poseidon/typhoon//aws/fedora-coreos/kubernetes?ref=v1.31.1"
2020-11-08 19:51:42 +01:00
# AWS
cluster_name = "gravitas"
dns_zone = "aws.example.com"
dns_zone_id = "Z3PAABBCFAKEC0"
2024-08-03 05:34:23 +02:00
# instances
2020-11-08 19:51:42 +01:00
worker_count = 2
2024-08-03 05:34:23 +02:00
worker_arch = "arm64"
worker_type = "t4g.medium"
2020-11-08 19:51:42 +01:00
worker_price = "0.021"
2024-08-03 05:34:23 +02:00
# configuration
2020-11-08 19:51:42 +01:00
daemonset_tolerations = ["arch"] # important
2024-08-03 05:34:23 +02:00
networking = "cilium"
ssh_authorized_key = "ssh-ed25519 AAAAB3Nz..."
2020-11-08 19:51:42 +01:00
}
```
2022-01-14 21:52:45 +01:00
=== "Flatcar Cluster"
```tf
module "gravitas" {
2024-09-20 23:43:39 +02:00
source = "git::https://github.com/poseidon/typhoon//aws/flatcar-linux/kubernetes?ref=v1.31.1"
2022-01-14 21:52:45 +01:00
# AWS
cluster_name = "gravitas"
dns_zone = "aws.example.com"
dns_zone_id = "Z3PAABBCFAKEC0"
2024-08-03 05:34:23 +02:00
# instances
2022-01-14 21:52:45 +01:00
worker_count = 2
2024-08-03 05:34:23 +02:00
worker_arch = "arm64"
worker_type = "t4g.medium"
2022-01-14 21:52:45 +01:00
worker_price = "0.021"
2024-08-03 05:34:23 +02:00
# configuration
2022-01-14 21:52:45 +01:00
daemonset_tolerations = ["arch"] # important
2024-08-03 05:34:23 +02:00
networking = "cilium"
ssh_authorized_key = "ssh-ed25519 AAAAB3Nz..."
2022-01-14 21:52:45 +01:00
}
```
=== "FCOS ARM64 Workers"
2020-11-08 19:51:42 +01:00
```tf
module "gravitas-arm64" {
2024-09-20 23:43:39 +02:00
source = "git::https://github.com/poseidon/typhoon//aws/fedora-coreos/kubernetes/workers?ref=v1.31.1"
2020-11-08 19:51:42 +01:00
# AWS
vpc_id = module.gravitas.vpc_id
subnet_ids = module.gravitas.subnet_ids
security_groups = module.gravitas.worker_security_groups
2024-08-03 05:34:23 +02:00
# instances
arch = "arm64"
instance_type = "t4g.small"
spot_price = "0.0168"
2020-11-08 19:51:42 +01:00
# configuration
name = "gravitas-arm64"
kubeconfig = module.gravitas.kubeconfig
2024-08-03 05:34:23 +02:00
node_taints = ["arch=arm64:NoSchedule"]
2020-11-08 19:51:42 +01:00
ssh_authorized_key = var.ssh_authorized_key
}
```
2022-01-14 21:52:45 +01:00
=== "Flatcar ARM64 Workers"
```tf
module "gravitas-arm64" {
2024-09-20 23:43:39 +02:00
source = "git::https://github.com/poseidon/typhoon//aws/flatcar-linux/kubernetes/workers?ref=v1.31.1"
2022-01-14 21:52:45 +01:00
# AWS
vpc_id = module.gravitas.vpc_id
subnet_ids = module.gravitas.subnet_ids
security_groups = module.gravitas.worker_security_groups
2024-08-03 05:34:23 +02:00
# instances
arch = "arm64"
instance_type = "t4g.small"
spot_price = "0.0168"
2022-01-14 21:52:45 +01:00
# configuration
name = "gravitas-arm64"
kubeconfig = module.gravitas.kubeconfig
2024-08-03 05:34:23 +02:00
node_taints = ["arch=arm64:NoSchedule"]
2022-01-14 21:52:45 +01:00
ssh_authorized_key = var.ssh_authorized_key
}
```
2020-11-08 19:51:42 +01:00
Verify amd64 (x86_64) and arm64 (aarch64) nodes are present.
```
$ kubectl get nodes -o wide
2022-01-14 21:52:45 +01:00
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
2024-09-20 23:43:39 +02:00
ip-10-0-1-73 Ready < none > 111m v1.31.1 10.0.1.73 < none > Fedora CoreOS 35.20211215.3.0 5.15.7-200.fc35.x86_64 containerd://1.5.8
ip-10-0-22-79... Ready < none > 111m v1.31.1 10.0.22.79 < none > Flatcar Container Linux by Kinvolk 3033.2.0 (Oklo) 5.10.84-flatcar containerd://1.5.8
ip-10-0-24-130 Ready < none > 111m v1.31.1 10.0.24.130 < none > Fedora CoreOS 35.20211215.3.0 5.15.7-200.fc35.x86_64 containerd://1.5.8
ip-10-0-39-19 Ready < none > 111m v1.31.1 10.0.39.19 < none > Fedora CoreOS 35.20211215.3.0 5.15.7-200.fc35.x86_64 containerd://1.5.8
2020-11-08 19:51:42 +01:00
```
2022-10-14 05:49:01 +02:00