Kubernetes Cluster mit Kubespray

Hier geht es zum passenden Video Tutorial: https://youtu.be/NyHJ8k5CRVg

Minikube ist schön und gut um Kubernetes Pods und Deployments zu entwickeln und lokal zu testen. Aber wie kann man denn nun einen richtigen Kubernetes Cluster im eigenen Rechenzentrum installieren?

Das geht natürlich auf die harte Tour oder auch über die Installation mit kubeadm. Vor Allem die erste Variante ist aber sehr aufwändig und auch fehleranfällig.

Besonders leicht von der Hand geht die Installation mit kubespray. Das ist eine, auf Ansible basierende Lösung, die einen Kubernetes Cluster mit bestimmten, vorher festgelegten Parametern erstellt.

Als Ausgangssituation solltest du folgendes System haben:

  • Mindestens 3 Hosts, auf denen Kubernetes laufen soll (2x Master, 1x Worker)
  • Einen Bastion Host, von dem aus Ansible ausgeführt wird

Die Hosts können natürlich virtuelle Maschinen sein.

Um einen Cluster mit kubespray zu erstellen, gehst Du so vor:

  1. SSH Key Zugang vom Bastion Host auf alle Knoten einrichten
  2. Ansible und Git auf dem Bastion Host installieren
  3. Klonen des Kubespray Repository
  4. Vorbereiten der Inventory Dateien für Kubespray
  5. Ansible Playbook ausführen

SSH Key Zugang einrichten

Dazu wird auf dem Bastion Host zunächst ein SSH Keypair erzeugt:

ssh-keygen

Hier können die Standardwerte bestätigt werden und es sollte auch kein Kennwort für den Key vergeben werden. Danach befindet sich der private und öffentliche Schlüssel unter ~/.ssh/id_rsa und ~/.ssh/id_rsa.pub.

Nun muss der öffentliche Schlüssel in id_rsa.pub auf alle Knoten verteilt werden. Dazu wird auf jedem Knoten eine Datei ~/.ssh/authorized_keys angelegt, falls noch nicht vorhanden. Der Inhalt aus id_rsa.pub kann einfach hineinkopiert werden.

Anschließend sollte der SSH Zugang ohne Kennwort, mit dem Key vom Bastion Host auf alle anderen Knoten einmal getestet werden.

Ansible und Git auf dem Bastion Host installieren

Um Ansible auf einem CentOS 7 Server zu installieren, muss das entsprechende Repository aktiviert werden.

sudo yum install centos-release-ansible-29.noarch

Anschließend kann Ansible installiert werden.

sudo yum install ansible.noarch

Ebenso kann Git installiert werden.

sudo yum install git.x86_64

Danach muss auch python-pip installiert werden.

sudo yum install python3-pip

Klonen des kubespray Repository

Jetzt muss das Git Repository von kubespray geklont werden. Dazu den Link von der GitHub Seite kopieren, oder direkt folgendes ausführen:

git clone https://github.com/kubernetes-sigs/kubespray.git

Installation vorbereiten

Wenn das fertig ist, navigieren wir in das Directory:

cd kubespray

Danach müssen wir die Voraussetzungen für die Ansible Kubernetes Installation mit kubespray installiert werden.

sudo pip3 install -r requirements.txt

Anschließend kopieren wir das Beispiel Inventory in ein neuen Inventory, was wir „mycluster“ nennen.

cp -rfp inventory/sample inventory/mycluster

Jetzt erstellen wir das Inventory, entsprechend unserer Host IP Adressen.

declare -a IPS=(10.90.1.11 10.90.1.12 10.90.1.13 10.90.1.14 10.90.1.15)
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

Jetzt müssen wir noch einen Wert in der „inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml“ ändern, wenn wir CentOS 7 Hosts benutzen.

vi inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml

Wir suchen nach dem Eintrag „kube_proxy_mode: ipvs“ und ändern diesen in

kube_proxy_mode: iptables

Cluster installieren

Jetzt kann es mit der Cluster Installation losgehen. Wir führen das Ansible Playbook vom Bastion Host aus.

ansible-playbook -i inventory/mycluster/hosts.yaml --become cluster.yml

Danach sollte das Playbook durchlaufen. Das kann durchaus bis zu 45 Minuten dauern. Je nachdem wie viele Hosts konfiguriert sind und wie schnell die Hardware ist.

Kubernetes Cluster verwalten

Damit wir den Cluster mit kubectl verwalten können, müssen wir das config file einstellen. Dazu verbinden wir uns auf den ersten master, in meinem Fall „node-11“ und kopieren die Kubernetes Config in „~/.kube/config“

sudo cat /etc/kubernetes/admin.conf >> ~/.kube/config

Danach können wir den Cluster über kubectl verwalten.

kubectl get nodes
kubectl get pod -n kube-system

Hinterlasse einen Kommentar