After the installation phase, we can set up our mini-cluster (https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/). To do this, simply run the command on the control-plane (for the moment without arguments)
$ kubeadm init . . . # At the end of the procedure, an output similar to this will appear Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a Pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: /docs/concepts/cluster-administration/addons/ You can now join any number of machines by running the following on each node as root: kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
The output shown above gives us 3 information:
- offers commands to allow us to work without administrator privileges;
- warns us that we will have to use a Pod network;
- gives us the key, which is advisable to keep somewhere, which we will have to use on worker nodes to insert them into the cluster.
To remove administrator privileges, simply follow the simple steps in the previous output. As for the second point in the list, there are multiple CNI (Container Network Interfaces) to generate our Pod network. Here we use Calico (official guide here), but obviously there are valid alternatives listed at the address shown in the command above (we report the link here). So let's run the command (check the version)
$ kubectl apply -f https://docs.projectcalico.org/v3.17/manifests/calico.yaml
Now let's finally expand our cluster by adding worker nodes. Let's connect to the nodes via SSH and take administrator privileges. Now we paste the command, saved previously, returned to us by kubeadm init
$ kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
To retrieve the token later, type the command
$ kubeadm token create --print-join-command
Finally, as verification of the worker(s) hooking, we return to the control plane and use
$ kubectl get nodes NAME STATUS ROLES AGE VERSION mycentos-0.novalocal Ready master 30h v1.19.2 mycentos-1.novalocal Ready <none> 25h v1.19.2 mycentos-2.novalocal Ready <none> 24h v1.19.2
The output should list the nodes that are part of the cluster.
Upgrading kubeadm clusters
To update the cluster, follow the instructions in the official guide, that explains how to upgrade a Kubernetes cluster created with kubeadm. The upgrade workflow at high level is the following:
- upgrade the primary control plane node;
- upgrade additional control plane nodes, if any;
- upgrade worker nodes.