Continue from part 1
It’s recommended to change all Pi’s password also run ssh-copy-id [email protected]
to enable SSH public key login.
There are lots of steps to prepare before kubeadm
is installed, so I made this ansible
repository to simplify this repeating process. Please see here. The ansible role will do the following tasks:
- set host name, update /etc/hosts file
- enable network bridge
- disable swap, kubeadm doesn’t like it!
- set timezone. You may want to change it to yours
- install docker community edition
- install kubeadm
- use iptables-legacy (Reference here)
Just to emphasise at this moment Raspbian has iptables
1.8, a new strain used to be called netfilter tables
or nftables
. The original iptables
is renamed to iptables-legacy
. You can use my ansible
role to use iptables-legacy
or do it with:
# update-alternatives --set iptables /usr/sbin/iptables-legacy # update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy # update-alternatives --set arptables /usr/sbin/arptables-legacy # update-alternatives --set ebtables /usr/sbin/ebtables-legacy
This is absolutely necessary because current CNI implementations only work with the legacy iptables
.
Once the ansible
playbook finishes successfully, kubeadm
is ready for some action to set up the kubernetes master node, aka. control plane
# the following command is to be run in the master node # I prefer to use `flannel` as the CNI(container network interface) because it's lightweight comparing to others like weave.net. So the CIDR is to be set as follow $ sudo kubeadm init --pod-network-cidr 10.244.0.0/16
Then as the kubeadm
finishes it will give some instructions to continue. First thing is to copy the admin.conf
so kubectl
command can authenticate with the control plane. Also save the kubeadm join 192.168.1.80:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx
instruction as it will be needed later
$ sudo cp -i /etc/kubernetes/admin.conf ~/.kube/config $ kubectl get node ... $ kubectl get pods ...
The coredns
pods will be at pending state, this is expected. After the CNI is installed this will be fixed automatically. Next step is to install a CNI, in my case it’s flannel
.
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml
In a few minutes the flannel
and coredns
pods should be in available state. The run the join command saved earlier on other Pi nodes
kubeadm join 192.168.1.80:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx
And back to the master node, you should be able to see the new work node in the output
$ kubectl get nodes
TBC
One response to “Kubernetes at Home on Raspberry Pi 4, Part 2”
[…] from part 2, this is mostly about installing ingress controller. In short, an ingress controller is like a […]