5 Minuten Lesezeit (1023 Worte)

Stein auf Stein: Die Stackable Data Platform (1/2)

Die effiziente Speicherung, Verarbeitung und Analyse großer Datenmengen sind essenzielle Bausteine in der Welt von Big Data. Sie ermöglichen nicht nur die Bewältigung der ständig wachsenden Datenflut, sondern auch die Gewinnung wertvoller Erkenntnisse, die Innovationen vorantreiben und fundierte Entscheidungsprozesse unterstützen. In einem Umfeld, in dem Daten als das neue Öl gelten, ist die Fähigkeit, diese Ressourcen optimal zu nutzen, von entscheidender Bedeutung für den Wettbewerbsvorteil und den langfristigen Erfolg von Unternehmen. Um den Einstieg zu erleichtern, ist es empfehlenswert, sich für eine vorkonfigurierte Big Data Distribution zu entscheiden, diese zu installieren und einzurichten. Die Alternative, selbst eine Hadoop-Installation durchzuführen und zu pflegen, ist oft sehr aufwändig und fehleranfällig.

Eine interessante Big Data Distribution ist die Stackable Data Platform (SDP). Diese Plattform unseres Partners basiert vollständig auf Open Source Software und kann somit auch kommerziell kostenfrei betrieben werden.

Die Vorteile der SDP sind die Integration von modernen Architekturen, wie Data Mesh und Lakehouse und die Tatsache, dass Stackable auf Kubernetes basiert. Somit kann es flexibel On-Premises aber auch in der Cloud betrieben werden.

Dieser Artikel soll bei der Installation der Stackable Data Platform (SDP) und der Einrichtung von Kubernetes als Teil der Plattform unterstützen. Der Aufbau der Infrastruktur soll in einem Unternehmensumfeld erfolgen, das großen Wert auf Datensicherheit und -hoheit legt und daher eine eigene IT-Infrastruktur (On-Premises) betreibt. In einem solchen Umfeld ist der Betrieb eines Web-Proxys eine gängige Praxis, die in diesem Zusammenhang ebenfalls berücksichtigt wird. Zu den bekannten Kubernetes-Distributionen zählen Minikube, K3s und Kind, die jeweils spezifische Anwendungsfälle und Vorteile bieten. Während Minikube und Kind vor allem für das Testen und lokale Entwicklungsumgebungen geeignet sind, bietet K3s eine leichtere und ressourcenschonendere Lösung für den produktiven Einsatz in einer On-Premises-Umgebung. Die Wahl ist hier jedoch auf Kubeadm gefallen, da es eine professionelle und flexible Lösung bietet, die sich strikt an die offiziellen Kubernetes-Spezifikationen hält. Es ermöglicht die einfache Installation und Konfiguration eines reinen Kubernetes-Clusters ohne zusätzliche Abstraktionen, was maximale Kompatibilität und Kontrolle gewährleistet.

Anmerkungen:

  • Die Anleitung ist für RHEL-kompatible Linux-Distributionen ausgelegt und getestet.
  • Die komplette Installation kann mit dem angehängten Ansible Playbook durchgeführt werden. Die einzelnen Schritte werden hier im Artikel erläutert.
  • Das Ansible Playbook kann zwischen Debian- und RHEL-kompatiblen Distributionen unterscheiden, ist aber nur für RHEL getestet.
Um mit der Installation eines Kubernetes Clusters beginnen zu können, müssen einige Voraussetzungen umgesetzt werden.

DNS

Eine wichtige Voraussetzung ist eine funktionierende DNS-Auflösung innerhalb des Clusters. Falls kein passender DNS-Service existiert, müssen alle Server in der /etc/hosts-Datei der beteiligten Server eingetragen werden. Im Playbook findet sich eine Beispiel-Liste in den Settings in Zeile 9 und 10.

Zusätzlich muss der eigene Hostname auf jedem Host entsprechend gesetzt werden:

hostnamectl set-hostname kube-control

IP-Forwarding

Kubernetes setzt für die Netzwerkkommunikation auf Technologien wie iptables und IP-Forwarding. Daher ist es erforderlich, diese Funktionen in Ihrem System zu aktivieren, um eine reibungslose Netzwerkkommunikation innerhalb des Kubernetes Clusters sicherzustellen. Außerdem sollen Pakete, die an eine Netzwerkbrücke geschickt werden, auch an iptables gesendet werden. Diese Einstellung wird wie folgt vorgenommen: 

cat /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-iptables  	= 1
net.bridge.bridge-nf-call-ip6tables 	= 1
net.ipv4.ip_forward                 	= 1 

Swap

Swap darf nicht aktiviert sein, weshalb Swap-Einträge in der /etc/fstab gelöscht und deaktiviert werden müssen:

 swapoff -a

Modules

Es müssen die Kernel-Module „overlay" und „br_netfilter" aktiviert sein, damit iptables überbrückte Pakete sehen kann. Dazu muss in /etc/sysctl.d/ eine *.conf-Datei erstellt werden, z. B.: 

cat /etc/sysctl.d/90-k8s.conf 
overlay 
br_netfilter 

Proxy Settings

Die systemweiten Proxy Settings kann man in der /etc/profile.d/proxy.sh speichern. Zu beachten ist, dass zusätzlich die Netzwerke für Kubernetes in der no_proxy gespeichert werden:

cat /etc/profile.d/proxy.sh 
export http_proxy=http://192.168.1.1:3128 
export https_proxy=http://192.168.1.1:3128 
export no_proxy=127.0.0.1,192.168.1.0/24,10.244.0.0/16,10.96.0.0/12 

Pakete installieren

Nun sind die Voraussetzungen erfüllt und man kann die grundlegenden Pakete installieren. Zuvor müssen jedoch die Repositories von Docker und Kubernetes installiert werden: 

dnf config-manager -y --add-repo / https://download.docker.com/linux/centos/docker-ce.repo 
 
cat /etc/yum.repos.d/k8s.repo 
[kubernetes] 
name=Kubernetes 
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/ 
enabled=1 
gpgcheck=1 
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.kexclude=kubelet kubeadm kubectl cri-tools kubernetes-cni 

yum install containerd kubectl kubeadm kubelet 

Für containerd kann eine Standardkonfiguration in /etc/containerd/config.toml erstellt werden. Wichtig ist, dass danach SystemdCgroup = true gesetzt wird. Damit wird der Systemd Cgroup Driver benutzt.

Mehr dazu siehe hier.

containerd config default >/etc/containerd/config.toml 
grep SystemdCgroup /etc/containerd/config.toml 
SystemdCgroup = true 

Damit containerd den Proxy kennt, muss folgende Datei erstellt werden und die neuen Konfigurationen in Systemd eingelesen werden: 

cat /etc/systemd/system/containerd.service.d/http-proxy.conf 
[Service] 
Environment=https_proxy=http://192.168.128.2:3128 
Environment=http_proxy=http://192.168.128.2:3128 
Environment=no_proxy=127.0.0.1,192.168.1.0/24,10.244.0.0/16,10.96.0.0/12 

Systemd muss die Konfigurationen neu einlesen und die Dienste für containerd/kubernetes müssen aktiviert und gestartet werden: 

systemctl daemon-reload 
systemctl enable containerd kubelet 
systemctl start containerd kubelet 

Kubernetes Cluster

Damit sind die Voraussetzungen erfüllt, und der Cluster kann initialisiert werden. Mit dem Schalter pod-network-cidr kann ein Netzwerkbereich festgelegt werden. Hier wurde die Standardeinstellung für das CNI flannel gewählt. 

kubeadm init --pod-network-cidr=10.244.0.0/16 
... 
Meldung für join 

Netzwerk CNI Plugin

Falls der Netzwerkbereich geändert wurde, muss das Manifest heruntergeladen und der Netzwerkbereich geändert werden.

Im Standardfall:

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

Local Path Plugin + Standard StorageClass

Damit Stackable funktionieren kann, muss ein Storage Provisioner lokalen Speicher bereitstellen. Dafür kann man das Rancher Plugin "local path provisioner" verwenden. Zusätzlich ist wichtig, diese StorageClass als Standard zu setzen. Die Stackable Demos verwenden die Standard StorageClass. 

kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.26/deploy/local-path-storage.yaml 
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' 

Um die Worker Nodes dem Cluster hinzuzufügen, kann man nun Folgendes auf den Nodes ausführen:

kubeadm join kube-controller:6443 --token asdf.uasdfasdfl2 --discovery-token-ca-cert-hash sha256:asdfasdfkljh3899alkejf92382lknda98u 

Mit „kubectl get workers" kann überprüft werden, ob die Worker Nodes erfolgreich dem Cluster hinzugefügt wurden.

kubectl get workers –o wide

Bis hier hat der Blogartikel die Voraussetzungen für Kubernetes mit kubeadm erläutert und hat eine Schritt-für-Schritt-Anleitung zur Installation von Kubernetes hinter einem Web-Proxy geboten.
Mit diesen durchgeführten Schritten sind alle Voraussetzungen vorhanden, um mit dem Deployment von Stackable zu beginnen. Dieses wird im zweiten Teil dieser Anleitung erklärt.

Wer bereits jetzt schon mehr Interesse am Aufbau einer Stackable Data Platform hat, kann uns gerne auf unser Stackable Grundlagen Seminar ansprechen.

Seminarempfehlung

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Montag, 18. November 2024

Sicherheitscode (Captcha)

×
Informiert bleiben!

Bei Updates im Blog, informieren wir per E-Mail.

Weitere Artikel in der Kategorie