Mixed arch kubernetes cluster

Ross Beazley
2 min readMar 2, 2019

My notes for running on Raspberry Pi 2 (32bit os), 3(64bit os) and amd64.

It probably wont make sense to you.

with reference to https://gist.github.com/elafargue/a822458ab1fe7849eff0a47bb512546f/,.

On the Pi;

Install hypriot OS (64) using the flash tool

boot it and then

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - && echo “deb http://apt.kubernetes.io/ kubernetes-xenial main” | sudo tee /etc/apt/sources.list.d/kubernetes.list && sudo apt-get update -q && sudo apt-get install -qy kubeadm=1.10.5-00 kubectl=1.10.5-00 kubelet=1.10.5-00

I use NFS for storage so install that also

apt-get install nfs-common

Something about disabling CNI on the master as shown here; sudo sed -i '/KUBELET_NETWORK_ARGS=/d' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

https://gist.github.com/elafargue/a822458ab1fe7849eff0a47bb512546f/

Initialise the cluster but you need to increase the time out on the API starting up, i run this as soon as the yaml files appear:

sudo sed -i 's/failureThreshold: 8/failureThreshold: 20/g' /etc/kubernetes/manifests/kube-apiserver.yaml && \
sudo sed -i 's/initialDelaySeconds: [0-9]\+/initialDelaySeconds: 360/' /etc/kubernetes/manifests/kube-apiserver.yaml

then multi arch the kube proxy as mentioned here

Next up is multi arch flannel, use flannels yaml from their github repo

I then label all the arm nodes with arch.family=arm so you can deploy 32bit to 64bit archs using a node selector of arch.family: arm

I also use an internal (to the cluster) insecure registry so need to open that up to docker by

/etc/docker/daemon.json
{
“experimental”: true,
“insecure-registries” : [
“registry:30000”
]
}

— — -

Update: Feb 2021 — I have been using K3S for ages now and works much better for my usecase. I recomend you use it over full blown kubernetes.

--

--