![]() |
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:
- SSH Key Zugang vom Bastion Host auf alle Knoten einrichten
- Ansible und Git auf dem Bastion Host installieren
- Klonen des Kubespray Repository
- Vorbereiten der Inventory Dateien für Kubespray
- 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
