ninog - Fotolia
So setzen Sie in Kubernetes etcd für Cluster-Speicher ein
Etcd ist ein leichtgewichtiger Key-Value-Speicher, auf den jeder Knoten in einem Kubernetes-Cluster zugreifen kann. Erfahren Sie, wie Sie es in Kubernetes verwenden.
Eine der wichtigsten Komponenten von Kubernetes ist etcd, ein Key-Value-Speicher, dessen Hauptaufgabe darin besteht, Clusterdaten zu speichern. Wenn Sie mit Kubernetes arbeiten, ist es wichtig zu verstehen, wie etcd funktioniert und wie man es innerhalb eines Kubernetes-Clusters verwendet.
Etcd (ausgesprochen ett-sie-die) ist ein Open-Source-Schlüsselwertspeicher, der Daten in einer Vielzahl von Situationen speichert. Ein Key-Value-Store ist ein nicht-relationaler Datenbanktyp. Key-Value-Stores wie etcd speichern eine Vielzahl von Schlüsseln, denen jeweils ein Wert zugeordnet ist, statt die komplexe Tabellen- und Zeilenstruktur einer herkömmlichen Datenbank.
Etcd ist effizient, zuverlässig und schnell. Es funktioniert gut in verteilten Umgebungen, in denen die Instanz des Schlüsselwertspeichers auf einem anderen Server läuft als die Anwendungen und Dienste, deren Konfigurationsdaten im Schlüsselwertspeicher gespeichert sind.
Herkunft des Namens Etcd
Etcd heißt so, weil es eine ähnliche Funktion wie das Verzeichnis /etc auf Linux-Systemen erfüllt. In Linux befinden sich die meisten Konfigurationsdateien und installierten Anwendungen in verschiedenen Unterverzeichnissen und Dateien unter /etc. In ähnlicher Weise befinden sich in Kubernetes die Cluster-Konfigurationsdaten zusammen mit den Daten, die den Cluster-Status verfolgen, im etcd-Schlüsselwertspeicher.
Etcd ist im Wesentlichen eine verteilte Version von /etc. Anders als das Verzeichnis /etc, das Daten für einen einzelnen Server speichert, funktioniert etcd in verteilten Umgebungen – daher das d (wie in distributed) in etcd.
Wie funktioniert etcd in Kubernetes?
Da etcd ursprünglich nicht für Kubernetes entwickelt wurde, gibt es eine Vielzahl von Anwendungsfällen, die nicht nur Kubernetes betreffen. Tatsächlich ist etcd sogar älter als Kubernetes.
Umgekehrt verwendet Kubernetes etcd seit Anbeginn zum Speichern von Cluster-Daten. Etcd bietet einen hochverfügbaren Key-Value-Speicher für die Informationen, die Kubernetes für die Verwaltung von Knoten, Pods und Diensten benötigt.
Es gibt zwei Möglichkeiten, etcd in Kubernetes einzusetzen: auf Control-Plane-Knoten oder in dedizierten Clustern.
Etcd auf Control-Plane-Knoten
Der einfachste Ansatz – und der, den die meisten Kubernetes-Umgebungen standardmäßig verwenden – ist, eine etcd-Instanz auf jedem Control-Plane-Knoten innerhalb eines Clusters auszuführen.
Obwohl dieser Ansatz einfach einzurichten ist, ist er nicht sehr zuverlässig: Wenn ein Control-Plane-Knoten ausfällt, funktioniert auch etcd nicht mehr. Im schlimmsten Fall kann eine Beschädigung des Dateisystems oder ein Hardwareausfall auf dem Control-Plane-Knoten die etcd-Daten dauerhaft beschädigen oder löschen.
Dedizierter etcd-Cluster
Der zweite Ansatz ist, etcd-Instanzen in einem Cluster als Teil der Kubernetes-Umgebung auszuführen und die Cluster-Daten darin zu speichern.
Starten Sie einen etcd-Cluster mit einem einzelnen Knoten mit einem Befehl wie dem folgenden:
--etcd-servers=$PRIVATE_IP:2379
Starten Sie anschließend den Kubernetes-API-Server mit dem folgenden Flag und passen Sie die Netzwerkportkonfiguration nach Bedarf an:
--etcd-servers=$PRIVATE_IP:2379
Dies ist nur zu Testzwecken sinnvoll, da ein etcd-Clusters mit nur einem Knoten die gleichen Zuverlässigkeitsrisiken birgt wie das direkte Ausführen von etcd auf den Knoten der Steuerungsebene.
Um eine höhere Verfügbarkeit zu erreichen, führen Sie ein Cluster mit mehreren Knoten mit dem folgenden Befehl aus:
etcd --listen-client-
urls=http://$IP1:2379,http://$IP2:2379,http://$IP3:2379,http://$IP4:2379,http://$I
P5:2379 --advertise-client-
urls=http://$IP1:2379,http://$IP2:2379,http://$IP3:2379,http://$IP4:2379,http://$I
P5:2379
Starten Sie dann den Kubernetes-API-Server mit einem entsprechenden --etcd-Flag:
--etcd-servers=$IP1:2379,$IP2:2379,$IP3:2379,$IP4:2379,$IP5:2379
Für komplexere Einsatzszenarien von etcd-Clustern empfiehlt sich ein Kubernetes-Operator wie Etcd Cluster Operator. Operatoren vereinfachen den Bereitstellungsprozess und ermöglichen benutzerdefinierte etcd-Cluster-Konfigurationen, die keine Anpassung der Befehlszeilenargumente erfordern.
Sichern von etcd
Durch das Sichern von etcd stellen Sie sicher, dass die in etcd gespeicherten Daten bei einem Ausfall verfügbar bleiben. Backups lassen Sie außerdem im Falle eines Konfigurationsfehlers oder eines Sicherheitsvorfalls einen stabilen oder sicheren Zustand des Clusters wiederherstellen.
Um etcd zu sichern, verbinden Sie sich zunächst mit Ihrer etcd-Instanz. Sie können dies von Ihren Kubernetes-Kontrollebene-Knoten aus tun, wenn Sie etcd dort ausführen. Wenn Sie einen etcd-Cluster innerhalb von Kubernetes betreiben, verbinden Sie sich mit den Knoten, die das Cluster hosten, oder mit dem Dienstprogramm etcdctl und dem Argument --endpoints http://hostname:port.
Sobald Sie verbunden sind, sichern Sie etcd mit dem Befehl etcdctl snapshot:
etcdctl snapshot save snapshot_location.db --cert
/etc/kubernetes/pki/etcd/server.crt --cacert
/etc/kubernetes/pki/etcd/ca.crt --key
/etc/kubernetes/pki/etcd/server.key
Um etcd aus einem Snapshot wiederherzustellen, verwenden Sie den Befehl etcdctl snapshot restore snapshot.db.