Was ist etcd?
etcd ist ein verteilter und konsistenter Key-Value-Store. Dieser bietet die Möglichkeit, einen zentralen, ausfallsicheren, fehlertoleranten und sicheren Speicherort für verteile Anwendungen anzubieten, bei denen sich immer wieder Informationen verändern. Dabei wurde etcd von dem CoreOS-Team entwickelt. etcd wurde –wie viele weitere Cloud Anwendungen– in Go geschrieben. Des Weiteren wird der Raft, ein Konsens-Algorithmus verwendet, um ein hochverfügbares repliziertes Protokoll verwalten zu können.
Der Name setzt sich dabei aus zwei Teilen zusammen. Der erste Teil etc steht für das zentrale Verzeichnis /etc
für
alle systemweiten Konfigurationsdateien innerhalb von GNU/Linux-Systemen. Während der zweite Teil, das d, die
Abkürzung für distributed ist.
Zugleich ist etcd sehr bekannt durch seine Funktion als primärer Datenspeicher von Kubernetes. Dort wird es zur Sicherung und Replizierung von Kubernetes-Clustern verwendet. Dies ist zum Beispiel ein Grund, warum etcd sehr zuverlässig bei der Konfiguration, sowie beim Management sein muss.
Kernpunkte von etcd
Durch etcd ergeben sich folgende Vorteile:
- simple: da es auf sehr gut definierte und benutzerorientierte API (gRPC) setzt, welche auf REST und JSON basieren
- sicher: es wird standardmässig automatisch auf eine Übertragung via SSL/TLS verwendet. Zusätzlich gibt es auch noch die Möglichkeit Client-Zertifikat-Authentifizierung zu nutzen
- schnell: Benchmarks bestätigen bis zu 10'000 Schreibvorgänge pro Sekunde
- zuverlässig: durch den Raft-Algorithms wird der Speicher immer korrekt verteilt
- replizierbar: da der gesamte Speicher auf jedem Knoten des Clusters verfügbar ist, ist dieser vollständig replizierbar
- hohe Verfügbarkeit: einzelne Fehlerquellen werden vermieden
- konsistent: über mehrere Hosts hinweg liefert jeder Lesevorgang den letzten Schreibvorgang.
Die Funktionsweise
Hier für muss man zunächst drei wichtige Begriffe im Zusammenhang mit der Verwaltung von Speichern kennen, nämlich
- Anführer (Leader),
- Wahlen (Elections)
- Zeiträume (Terms)
Bei etcd wird immer für einen bestimmten Zeitraum ein Anführer gewählt. Dieser ist anschliessend für alle Anfragen zuständig, welche die Zustimmung des Clusters erfordern. Alle Änderungen von gesicherten Daten brauchen dabei eine Zustimmung des Anführers. Sollte es sich aber um andere Anfragen handeln, welche keine Zustimmung benötigen, dann können diese auch von den anderen Mitgliedern beantwortet werden. Hier gehören beispielsweise Leseanfrage dazu. Sobald der Anführer einmal nicht antworten sollte, weil er ausgefallen ist, werden direkt Neuwahlen durchgeführt und ein neuer Anführer wird bestimmt. Die Neuwahlen werden durch die Timer der einzelnen Knoten eingeleitet. Denn dadurch wird entschieden, wie lange es dauert bis eine Neuwahl gefordert wird. Bei dieser Forderung stellt der Knoten auch sich selbst als Kandidat zur Verfügung. Diese Zeiten können sich je nach Knoten unterscheiden. Durch dieses Prinzip kann gewährleistet werden, dass es zu keinem Unterbruch des festgelegten Ablaufs kommt.
Sobald die Anfrage von dem Anführer akzeptiert wurde, wird durch etcd gewährleistet, dass die Informationen über den Anführer an die nachfolgenden Konten repliziert werden. Bestätigen diese den Empfang, kann der Anführer auch die Änderungen übernehmen. Diese Änderung kann aufgrund des Raft Algorithmus erst durch die Befragung und Mehrheit der Knoten durchgeführt werden. Einzelne Knoten können durch eine Verweigerung die Stabilität und Funktionsfähigkeit schützen und auch Folgeprobleme vermeiden. Um dieses Prinzip aufrechtzuerhalten, sollte man bei der Planung darauf achten, dass die Anzahl von Knoten immer ungerade ist und zusätzlich die Anzahl von 7 Stück nicht übersteigt.
etcd und Kubernetes
etcd kommt schon seit 2014 bei Kubernetes zum Einsatz. Dort dient die etcd-Datenbank als Speicher für Konfigurationsdateien, den Status sowie Metadaten. Durch etcd wird gewährleistet, dass alle aus dem Cluster die Daten lesen und schreiben können. Des Weiteren wird der Zustand des gesamten Systems überwacht. Sollte sich der gewünschte Zustand mit dem aktuellen Zustand unterscheiden, kann Kubernetes Änderungen vornehmen, damit dies behoben wird.
Grundlegende Befehle von etcd
Im nachfolgenden Teil, können Sie sehen, wie die grundlegenden Befehle ausgeführt werden. Hierfür benötigen sie
einen etcd Server und einen Client. Mit dem Befehl etcdctl
greifen Sie vom Client aus auf den Server zu.
Hinzufügen eines Wertes
Um einen Wert in Ihren Key-Value-Store hinzuzufügen, benötigen Sie folgendes Kommando.
|
|
Wenn der Befehl korrekt war und verarbeitet wurde, bekommen Sie ein OK
als Antwort zurück.
Einen Key Auslesen
Im Anschluss, wollen Sie natürlich überprüfen, ob dieser Wert auch korrekt hinzugefügt wurde. Dabei bekommt man den
Key, sowie die dazugehörige Value zurück. Möchte man aber nur die Value, gibt es die Option --print-value-only
.
|
|
|
|
Es gibt natürlich auch die Möglichkeit mehrere Keys auf einmal auszulesen. Um dies aufzuzeigen, gibt es bereits folgende Key-Value-Paare, welche ausgelesen werden soll:
|
|
Auch hier, können Sie ausschliesslich die Values auslesen, wenn dies bevorzugt wird. Des Weiteren müssen Sie hier beachten, dass myValue4 nicht ausgelesen wird. Stattdessen wird bis Value 4 gelesen.
|
|
Es gibt aber natürlich die Möglichkeit, mit einem Prefix zuarbeiten, mit dem Sie alle unsere Beispiele auslesen können.
|
|
Einen Key Löschen
Auch beim Löschen haben Sie die Möglichkeit, einzelne Key-Value-Paare zu löschen oder eine bestimmte Reihe. Nachdem Sie den Befehl ausgeführt haben, bekommen Sie die Anzahl der gelöschten Paare zurück.
|
|
Wollen Sie sicher gehen, dass Sie die richtigen Daten gelöscht haben, können Sie diese Ausgabe auch Befehlen mittels
--prev-kv
.
|
|
Nun können Sie auch noch die beiden letzten Paare löschen.
|
|
Überwachung
Mittels etcd können Sie auch einzelne Keys überwachen, ob diese sich ändern. Um dies nachzustellen, können Sie in einem Terminal den Befehl zum Überwachen eingeben.
|
|
Nun wechseln Sie in ein zweites Terminal-Fenster und ändern der Wert von dem Key myKey1.
|
|
Durch diese Änderung bekommen Sie im ersten Terminal-Fenster die Meldung einer Änderung.
|
|
Selbstverständlich können Sie aber nicht nur einzelne Werte überwachen, sondern auch eine ganze Reihe.
|
|
Ein weiterer Vorteil von etcd ist, dass Sie die Möglichkeit haben auch ältere Änderungen nachzuverfolgen.
|
|