Schnelles K8s Setup

Es werden ein paar Instanzen gebraucht, 3 Manager und 2 Nodes sind kein schlechter Start. Diese können quasi überall laufen. Hetzner Cloud ist günstig und eignet sich gut für diese Zwecke.

3 Manager vorbereiten:

apt update && apt upgrade -y
reboot
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
apt install docker.io kubeadm -y
swapoff -a
systemctl enable docker

Zur Vorbereitung der Nodes (später) die gleichen Kommandos verwenden

ACHTUNG Wenn zu einem späteren Zeitpunkt Nodes hinzugefügt werden sollen, mit kubectl get nodes prüfen welche Version installiert ist und auf den neuen Nodes die passenden Versionen installieren, bspw. mit: apt install kubeadm=1.14.2-00 kubelet=1.14.2-00 kubectl=1.14.2-00
Verfügbare Version kann mit apt-cache policy kubectl abgefragt werden.

Falls kein aktueller Token mehr zur Verfügung steht (kubeadm token list) einen neuen erzeugen: kubeadm token create –print-join-command

Load Balancer (haproxy) auf eigener Maschine aufsetzen:

apt update && apt upgrade -y
reboot
apt install haproxy -y
vi /etc/haproxy/haproxy.cfg

Unterhalb von default anhängen, IPs anpassen:

frontend kubernetes
bind 95.216.160.18:6443
option tcplog
mode tcp
default_backend kubernetes-master-nodes


backend kubernetes-master-nodes
mode tcp
balance roundrobin
option tcp-check
server k8s-master-0 116.203.181.115:6443 check fall 3 rise 2
server k8s-master-1 116.203.181.114:6443 check fall 3 rise 2
server k8s-master-2 116.203.181.111:6443 check fall 3 rise 2

Check vom ersten Master, ob haproxy funktioniert:

nc -v 95.216.160.18 6443

Auf erstem Master k8s-config.yml erstrellen:

vi k8s-config.yml

apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: stable
controlPlaneEndpoint: "95.216.160.18:6443"
networking:
  podSubnet: 10.143.0.0/16

IP und podSubnet anpassen!

K8s initiieren:

kubeadm init --config=k8s-config.yml --experimental-upload-certs

Rückgabe beachten!

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:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of the control-plane node running the following command on each as root:

  kubeadm join 95.216.160.18:6443 --token j7oge2.kfwxc8qpjiv2s8vz \
    --discovery-token-ca-cert-hash sha256:9bd7783eae8bf5ec566ef6bd2f9deeeb9e53e519bc3017cd662dcac162c7b342 \
    --experimental-control-plane --certificate-key 4e70eb5f5741c7cb9cd0fe97571da4d66a839c9447685b488eeca76c5c3ad4ae

Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --experimental-upload-certs" to reload certs afterward.

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 95.216.160.18:6443 --token j7oge2.kfwxc8qpjiv2s8vz \
    --discovery-token-ca-cert-hash sha256:9bd7783eae8bf5ec566ef6bd2f9deeeb9e53e519bc3017cd662dcac162c7b342

Zusätzliche Master (Control-Plane Nodes) nacheinander mit ausgegebenem Befehl aufnehmen.

Am besten auf allen Mastern noch:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

Nodes vorbereiten (s.o.) und aufnehmen:

kubeadm join 95.216.160.18:6443 --token j7oge2.kfwxc8qpjiv2s8vz \
    --discovery-token-ca-cert-hash sha256:9bd7783eae8bf5ec566ef6bd2f9deeeb9e53e519bc3017cd662dcac162c7b342

K8s Status checken, Machinen sollten da sein, aber noch nicht bereit (Netzwerk fehlt noch):

kubectl get nodes
NAME    STATUS     ROLES    AGE     VERSION
mgr1    NotReady   master   5m31s   v1.14.2
mgr2    NotReady   master   3m55s   v1.14.2
mgr3    NotReady   master   2m19s   v1.14.2
node1   NotReady   <none>   93s     v1.14.2
node2   NotReady   <none>   58s     v1.14.2

Netzwerk einbauen (in diesem Fall flannel):

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

K8s Nodes / Status sollte jetzt besser aussehen:

kubectl get nodes
NAME    STATUS   ROLES    AGE     VERSION
mgr1    Ready    master   10m     v1.14.2
mgr2    Ready    master   8m37s   v1.14.2
mgr3    Ready    master   7m1s    v1.14.2
node1   Ready    <none>   6m15s   v1.14.2
node2   Ready    <none>   5m40s   v1.14.2

Quellen:

https://kubernetes.io/docs/setup/independent/high-availability/

Install and Deploy Kubernetes on Ubuntu 18.04 LTS

https://blog.inkubate.io/install-and-configure-a-multi-master-kubernetes-cluster-with-kubeadm/

 

Related Post