{"id":96965,"date":"2020-10-15T14:42:53","date_gmt":"2020-10-15T12:42:53","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019"},"modified":"2020-10-15T14:42:53","modified_gmt":"2020-10-15T12:42:53","slug":"operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019","title":{"rendered":"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/56e002c7408c4708e39ece867f84171e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die Pr\u00e4sentation befasst sich mit praktischen Aspekten der Entwicklung von Operatoren in Kubernetes, der Architekturplanung und den grundlegenden Funktionsprinzipien.<\/p>\n<p><\/p>\n<p>Im ersten Teil der Pr\u00e4sentation werden wir folgende Themen behandeln:<\/p>\n<p><\/p>\n<ul>\n<li>Was ist ein Operator in Kubernetes und wof\u00fcr wird er ben\u00f6tigt;<\/li>\n<li>Wie der Operator das Management komplexer Systeme vereinfacht;<\/li>\n<li>Was der Operator kann und was nicht.<\/li>\n<\/ul>\n<p><\/p>\n<p>Anschlie\u00dfend werden wir das interne Design des Operators besprechen. Wir betrachten die Architektur und das Funktionieren des Operators Schritt f\u00fcr Schritt. Detaillierte Betrachtung von:<\/p>\n<p><\/p>\n<ul>\n<li>der Interaktion zwischen dem Operator und Kubernetes;<\/li>\n<li>welche Funktionen der Operator \u00fcbernimmt und was er an Kubernetes delegiert.<\/li>\n<\/ul>\n<p><\/p>\n<p>Wir betrachten das Management von Shards und Datenbank-Replikaten in Kubernetes.<br \/>\nDann diskutieren wir Fragen der Datenspeicherung:<\/p>\n<p><\/p>\n<ul>\n<li>Wie man mit Persistent Storage aus der Perspektive des Operators arbeitet;<\/li>\n<li>Die Fallstricke der Nutzung von Local Storage.<\/li>\n<\/ul>\n<p><\/p>\n<p>Im abschlie\u00dfenden Teil der Pr\u00e4sentation werden wir praktische Anwendungsbeispiele betrachten <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Altinity\/clickhouse-operator\">clickhouse-operator<\/a><\/noindex> mit Amazon oder Google Cloud Service. Die Pr\u00e4sentation basiert auf der Entwicklung und den Betriebserfahrungen eines Operators f\u00fcr ClickHouse.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Video:<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"z2aARjKDg4w\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/z2aARjKDg4w\/hqdefault.jpg\" alt=\"Video abspielen\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>Mein Name ist Vladislav Klimenko. Heute m\u00f6chte ich \u00fcber unsere Erfahrungen mit der Entwicklung und dem Betrieb eines Operators sprechen, speziell \u00fcber einen Operator zur Verwaltung von Datenbankclustern. Am Beispiel <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Altinity\/clickhouse-operator\">ClickHouse-Operator<\/a><\/noindex> f\u00fcr die Verwaltung des ClickHouse-Clusters.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cc297a3edb3b2a5e30d0dc2725de4011.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Warum sind wir in der Lage, \u00fcber den Operator und ClickHouse zu berichten?<\/p>\n<p><\/p>\n<ul>\n<li>Wir unterst\u00fctzen und entwickeln ClickHouse weiter. <\/li>\n<li>Derzeit bem\u00fchen wir uns, schrittweise unseren Beitrag zur Entwicklung von ClickHouse zu leisten. Wir sind die zweitgr\u00f6\u00dfte Entit\u00e4t nach Yandex, was die Anzahl der durchgef\u00fchrten \u00c4nderungen in ClickHouse betrifft. <\/li>\n<li>Wir planen zus\u00e4tzliche Projekte f\u00fcr das \u00d6kosystem von ClickHouse. <\/li>\n<\/ul>\n<p><\/p>\n<p>\u00dcber eines dieser Projekte m\u00f6chte ich sprechen. Es geht um den ClickHouse-Operator f\u00fcr Kubernetes. <\/p>\n<p><\/p>\n<p>In meinem Vortrag m\u00f6chte ich zwei Themen ansprechen: <\/p>\n<p><\/p>\n<ul>\n<li>Das erste Thema ist, wie unser Operator zur Verwaltung von ClickHouse-Datenbanken in Kubernetes funktioniert. <\/li>\n<li>Das zweite Thema betrifft, wie jeder Operator funktioniert, d.h. wie er mit Kubernetes interagiert. <\/li>\n<\/ul>\n<p><\/p>\n<p>Diese beiden Fragen werden sich w\u00e4hrend meines gesamten Vortrags \u00fcberschneiden. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4cc9790e18e70ae1ccde2cf39ef4ef00.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wer k\u00f6nnte daran interessiert sein, zuzuh\u00f6ren, was ich zu sagen versuche?<\/p>\n<p><\/p>\n<ul>\n<li>Am meisten interessiert sein werden diejenigen, die Operatoren betreiben. <\/li>\n<li>Oder an diejenigen, die ihren eigenen erstellen m\u00f6chten, um zu verstehen, wie es intern funktioniert, wie der Betreiber mit Kubernetes interagiert und welche Fallstricke auftreten k\u00f6nnen. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/07545f7a0171b610697c519d4aa9cd43.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Um das, was wir heute besprechen werden, besser zu verstehen, w\u00e4re es hilfreich zu wissen, wie Kubernetes funktioniert und \u00fcber grundlegendes Wissen in Cloud-Technologien zu verf\u00fcgen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/eff56cc3e83fde3d3e64d73d41b07417.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was ist ClickHouse? Es ist eine spaltenorientierte Datenbank, die sich auf die Online-Verarbeitung analytischer Anfragen spezialisiert hat. Und sie ist vollst\u00e4ndig Open Source. <\/p>\n<p><\/p>\n<p>Dabei ist es wichtig, nur zwei Dinge zu wissen. Erstens, es handelt sich um eine Datenbank, weshalb das, was ich erz\u00e4hlen werde, praktisch auf jede Datenbank anwendbar ist. Und zweitens, dass die Datenbank ClickHouse sehr gut skalierbar ist und praktisch lineare Skalierbarkeit bietet. Der Zustand des Clusters ist daher f\u00fcr ClickHouse nat\u00fcrlich. Und es interessiert uns am meisten, zu besprechen, wie man einen ClickHouse-Cluster in Kubernetes verwaltet.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5eb1ff5026c492117bf2467b10de7053.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Warum ist er dort notwendig? Warum k\u00f6nnen wir ihn nicht weiterhin eigenst\u00e4ndig betreiben? Die Antworten sind teilweise technischer Natur und teilweise organisatorischer Art. <\/p>\n<p><\/p>\n<ul>\n<li>In der Praxis begegnen wir immer h\u00e4ufiger der Situation, dass in gro\u00dfen Unternehmen bereits fast alle Komponenten in Kubernetes integriert sind. Die Datenbanken sind jedoch noch au\u00dfen vor. <\/li>\n<li>Immer h\u00e4ufiger stellt sich die Frage: 'Kann man das auch intern integrieren?'. Daher bem\u00fchen sich gro\u00dfe Unternehmen um eine maximale Vereinheitlichung des Managements, um ihre Datenspeicher schnell verwalten zu k\u00f6nnen. <\/li>\n<li>Dies ist besonders hilfreich, wenn die maximale Wiederholbarkeit an einem neuen Standort erforderlich ist, d. h. maximale Portabilit\u00e4t.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/99312e74bd7ed4031128c7ec872f6a68.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wie einfach oder kompliziert ist das? Nat\u00fcrlich kann man es manuell durchf\u00fchren. Allerdings ist es nicht so einfach, da sich die Komplexit\u00e4t des Kubernetes-Managements mit den speziellen Anforderungen von ClickHouse \u00fcberschneidet. Dadurch entsteht eine gewisse Aggregation. <\/p>\n<p><\/p>\n<p>Insgesamt ergibt sich daraus ein recht umfangreicher Technologie-Stack, dessen Verwaltung zunehmend komplex wird, da Kubernetes t\u00e4gliche Betriebsfragen mit sich bringt und ClickHouse ebenso spezifische Anforderungen an den t\u00e4glichen Betrieb stellt. Besonders, wenn wir mehrere ClickHouse-Instanzen betreiben und st\u00e4ndig mit ihnen arbeiten m\u00fcssen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/ca10b805b2744d1a5283f96b0ac1cc11.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bei ClickHouse gibt es bei der dynamischen Konfiguration eine Vielzahl von Fragen, die eine st\u00e4ndige Belastung f\u00fcr die DevOps-Teams darstellen.<\/p>\n<p><\/p>\n<ul>\n<li>Wenn wir etwas in ClickHouse \u00e4ndern m\u00f6chten, etwa eine Replik oder einen Shard hinzuf\u00fcgen, m\u00fcssen wir das Konfigurationsmanagement durchf\u00fchren. <\/li>\n<li>Anschlie\u00dfend muss das Datenmodell angepasst werden, da ClickHouse eine spezielle Art des Shardings verwendet. Hierbei ist es notwendig, das Datenmodell und die Konfigurationen aufzuteilen. <\/li>\n<li>Es muss ein Monitoring eingerichtet werden. <\/li>\n<li>Das Sammeln von Logs f\u00fcr neue Shards und neue Replikate ist erforderlich. <\/li>\n<li>Man muss sich um die Wiederherstellung k\u00fcmmern.<\/li>\n<li>Und um den Neustart. <\/li>\n<\/ul>\n<p><\/p>\n<p>Das sind allt\u00e4gliche Aufgaben, deren Durchf\u00fchrung in der Verwaltung gern erleichtert werden w\u00fcrde.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2461e861ca1d2f2344ead9decf85a97e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kubernetes unterst\u00fctzt dabei gut, aber vor allem in grundlegenden Systemaufgaben. <\/p>\n<p><\/p>\n<p>Kubernetes erleichtert und automatisiert solche Vorg\u00e4nge wie:<\/p>\n<p><\/p>\n<ul>\n<li>Wiederherstellung.<\/li>\n<li>Neustart. <\/li>\n<li>Management des Speichersystems.<\/li>\n<\/ul>\n<p><\/p>\n<p>Das ist positiv und in die richtige Richtung, jedoch hat es keine umfassende Vorstellung davon, wie ein Datenbankcluster betrieben wird. <\/p>\n<p><\/p>\n<p>Wir w\u00fcnschen uns mehr, wir m\u00f6chten, dass unsere gesamte Datenbank in Kubernetes l\u00e4uft.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6564e9f29d5d518925c8593bca978345.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Man w\u00fcnscht sich etwas wie einen gro\u00dfen, magischen roten Knopf, auf den man dr\u00fcckt, und sofort wird ein Cluster eingerichtet und \u00fcber den gesamten Lebenszyklus hinweg betreut, um die t\u00e4glichen Herausforderungen zu bew\u00e4ltigen. ClickHouse-Cluster in Kubernetes.<\/p>\n<p><\/p>\n<p>Wir haben versucht, eine L\u00f6sung zu schaffen, die die Arbeit erleichtert. Dies ist der ClickHouse-Operator f\u00fcr Kubernetes von Altinity.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4ff80c6fc59069ec900d545096ad978d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ein Operator ist ein Programm, dessen Hauptaufgabe es ist, andere Programme zu verwalten, also fungiert es als Manager. <\/p>\n<p><\/p>\n<p>Es enth\u00e4lt Verhaltensmuster, die man als kodifiziertes Wissen \u00fcber das Fachgebiet bezeichnen kann. <\/p>\n<p><\/p>\n<p>Sein Hauptzweck besteht darin, das Leben von DevOps zu erleichtern und Mikromanagement zu reduzieren, damit DevOps in h\u00f6heren Begriffen denken kann, anstatt sich mit der manuellen Anpassung aller Details zu besch\u00e4ftigen. <\/p>\n<p><\/p>\n<p>Der Operator ist also ein hilfreicher Roboter, der sich mit Mikroaufgaben auseinandersetzt und DevOps unterst\u00fctzt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0824a1fa710e8c4f45406aa7f596b977.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Warum ist ein Operator notwendig? Besonders gut bew\u00e4hrt er sich in zwei Bereichen:<\/p>\n<p><\/p>\n<ul>\n<li>Wenn ein Spezialist f\u00fcr ClickHouse nicht gen\u00fcgend Erfahrung hat, aber ClickHouse dennoch einsetzen muss, erleichtert der Operator die Nutzung und erm\u00f6glicht den Betrieb eines komplex konfigurierten ClickHouse-Clusters, ohne sich intensiv mit den internen Abl\u00e4ufen auseinanderzusetzen. Man gibt ihm einfach hochrangige Aufgaben, und es funktioniert. <\/li>\n<li>Die zweite Aufgabe, in der er sich besonders gut zeigt, ist die Automatisierung einer gro\u00dfen Anzahl typischer Aufgaben. Er entlastet die Systemadministratoren von Kleinstaufgaben. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f1cb11156d57f560d0b6c82700ac6ff8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das braucht man besonders entweder f\u00fcr Einsteiger oder f\u00fcr diejenigen, die viel Automatisierung durchf\u00fchren m\u00fcssen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/128e7d9ff1ce0c535f98be66aedb1060.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was unterscheidet also den auf Operatoren basierenden Ansatz von anderen Systemen? Es gibt ja Helm. Das hilft ebenfalls beim Aufsetzen von ClickHouse, man kann Helm-Charts zeichnen, die sogar einen ganzen ClickHouse-Cluster einrichten. Wo liegt also der Unterschied zwischen dem Operator und z.B. Helm?<\/p>\n<p><\/p>\n<p>Der grundlegende Unterschied besteht darin, dass Helm ein Paketmanagement-System ist, w\u00e4hrend der Operator dar\u00fcber hinausgeht. Er umfasst den gesamten Lebenszyklus des Systems. Es geht nicht nur um die Installation, sondern um t\u00e4gliche Aufgaben wie Skalierung, Sharding und alles, was im Lebenszyklus erledigt werden muss (einschlie\u00dflich der Deinstallation, falls erforderlich) \u2013 all dies wird durch den Operator gesteuert. Sein Ziel ist es, den gesamten Lebenszyklus der Software zu automatisieren und zu verwalten. Das ist das fundamentale Unterscheidungsmerkmal zu anderen L\u00f6sungen, die zur Verf\u00fcgung stehen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e26b57c8caf8437f683d7afbfa127ebd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das war der einf\u00fchrende Teil, lassen Sie uns fortfahren. <\/p>\n<p><\/p>\n<p>Wie bauen wir unseren Operator? Wir versuchen, den Cluster von ClickHouse als eine einzige Ressource zu verwalten. <\/p>\n<p><\/p>\n<p>Auf der linken Seite sehen wir die Eingaben. Dies ist YAML mit der Spezifikation des Clusters, die klassisch \u00fcber kubectl an Kubernetes \u00fcbergeben wird. Dort erfasst der Operator dies, vollbringt seine Magie. Und am Ende erhalten wir ein solches Schema. Das ist die Implementierung von ClickHouse in Kubernetes.<\/p>\n<p><\/p>\n<p>Wir werden uns weiterhin langsam anschauen, wie der Operator funktioniert und welche typischen Aufgaben gel\u00f6st werden k\u00f6nnen. Wir konzentrieren uns auf typische Aufgaben, da wir nur begrenzte Zeit haben. Es wird nicht alles behandelt, was der Operator leisten kann. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/b40401931b58988058419d4495dbb1bb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lassen Sie uns von der Praxis ausgehen. Unser Projekt ist vollst\u00e4ndig Open Source, daher k\u00f6nnen Sie auf GitHub sehen, wie es funktioniert. Wenn Sie einfach starten m\u00f6chten, k\u00f6nnen Sie mit dem Quick Start Guide beginnen.<\/p>\n<p><\/p>\n<p>Wenn Sie detailliert einsteigen m\u00f6chten, bem\u00fchen wir uns, die Dokumentation in einem angemessenen Zustand zu halten. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9414d7c3aa94b6ad999e150f0ac25a97.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lassen Sie uns mit einer praktischen Aufgabe beginnen. Die erste Aufgabe, mit der wir beginnen m\u00f6chten, besteht darin, das erste Beispiel irgendwie auszuf\u00fchren. Wie k\u00f6nnen wir mit Hilfe des Operators ClickHouse starten, selbst wenn wir nicht genau wissen, wie er funktioniert? Wir schreiben ein Manifest, da die gesamte Kommunikation mit k8s \u00fcber Manifeste erfolgt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3e97cd235827460693ed95fb3598d31d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hier ist ein solches komplexes Manifest. Was rot hervorgehoben ist, sind die Punkte, auf die Sie achten sollten. Wir bitten den Operator, ein Cluster mit dem Namen demo zu erstellen.<\/p>\n<p><\/p>\n<p>Das sind vorl\u00e4ufig die grundlegenden Beispiele. Storage wird noch nicht beschrieben, aber wir werden sp\u00e4ter darauf zur\u00fcckkommen. Im Moment beobachten wir die Entwicklung des Clusters.<\/p>\n<p><\/p>\n<p>Wir haben dieses Manifest erstellt. Wir f\u00fcttern es unserem Operator. Er hat gearbeitet, hat seine Magie wirken lassen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/502e64fbe6ed7d04b2aecb7d51abc7f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Schauen wir in die Konsole. Drei Komponenten wecken unser Interesse \u2013 das sind der Pod, zwei Services und der StatefulSet.<\/p>\n<p><\/p>\n<p>Der Operator hat gearbeitet, und wir k\u00f6nnen sehen, was genau er erstellt hat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/67faf120e21e5113680ccff9c71b00f1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Er erstellt ungef\u00e4hr ein solches Schema. Wir haben ein StatefulSet, einen Pod, einen ConfigMap f\u00fcr jede Replica und einen ConfigMap f\u00fcr das gesamte Cluster. Unbedingt ben\u00f6tigt werden die Services als Eingabepunkte in das Cluster. <\/p>\n<p><\/p>\n<p>Die Services sind der zentrale Load Balancer Service und ggf. kann man auch f\u00fcr jede Replica, f\u00fcr jedes Shard einen weiteren hinzuf\u00fcgen. <\/p>\n<p><\/p>\n<p>So sieht unser Basis-Cluster ungef\u00e4hr aus. Es besteht aus einer einzigen Node. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f235ada45ee58b517c0e041f795ae122.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lass uns weitermachen, wir werden es komplizierter gestalten. Das Cluster muss ge-shardet werden.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/992836a00434c64fb4616c1c4cc4df97.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Unsere Aufgaben wachsen, die Dynamik beginnt. Wir m\u00f6chten ein Shard hinzuf\u00fcgen. Wir verfolgen die Entwicklung. Wir \u00e4ndern unsere Spezifikation und geben an, dass wir zwei Shards wollen. <\/p>\n<p><\/p>\n<p>Das ist dieselbe Datei, die sich dynamisch mit dem Wachstum des Systems weiterentwickelt. Storage ist noch nicht vorhanden, das wird sp\u00e4ter behandelt; das ist ein separates Thema.<\/p>\n<p><\/p>\n<p>Wir f\u00fcttern den YAML-Operator und sehen, was dabei herauskommt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8ddb5845cae160098470208f51b5da7c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der Betreiber hat nachgedacht und die folgenden Entit\u00e4ten erstellt. Wir haben bereits zwei Pods, drei Services und pl\u00f6tzlich zwei StatefulSets. Warum zwei StatefulSets?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/26eb734ff1a195de2ceaab842b472ee4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>So sah das Diagramm aus \u2013 das war unser urspr\u00fcnglicher Zustand, als wir nur einen Pod hatten.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/657838b0d378121fdd66ad3ff8168600.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nun sieht es so aus. Bisher ist alles einfach, es hat sich einfach verdoppelt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f039a7046f1c56fbdad6b5a26a519b10.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und warum gibt es jetzt zwei StatefulSets? Hier m\u00fcssen wir einen Moment innehalten und besprechen, wie in Kubernetes die Pods verwaltet werden.<\/p>\n<p><\/p>\n<p>Es gibt ein Objekt namens StatefulSet, das es erm\u00f6glicht, eine Gruppe von Pods aus einer Vorlage zu erstellen. Der entscheidende Faktor hier ist das Template. In einem einzigen StatefulSet k\u00f6nnen mehrere Pods aus derselben Vorlage gestartet werden. Der zentrale Satz hier ist 'viele Pods aus einer Vorlage'.<\/p>\n<p><\/p>\n<p>Es gab einen gro\u00dfen Anreiz, den gesamten Cluster in einem einzigen StatefulSet zu verpacken. Das wird funktionieren, da gibt es keine Probleme. Aber es gibt einen Haken. Wenn wir einen heterogenen Cluster aufbauen wollen, d.h. aus mehreren Versionen von ClickHouse, beginnen die Probleme. Ja, ein StatefulSet kann ein Rolling Update durchf\u00fchren, ja, dort k\u00f6nnen neue Versionen implementiert werden, und es muss erkl\u00e4rt werden, dass nicht mehr als eine bestimmte Anzahl von Nodes gleichzeitig aktualisiert werden sollte.<\/p>\n<p><\/p>\n<p>Wenn wir die Aufgabe extrapolieren und sagen, dass wir einen vollst\u00e4ndig heterogenen Cluster erstellen m\u00f6chten, und dabei nicht von einer alten Version auf eine neue mittels eines Rolling Updates wechseln wollen, sondern einfach einen heterogenen Cluster mit verschiedenen ClickHouse-Versionen und unterschiedlichen Speicherarten aufbauen m\u00f6chten, k\u00f6nnen wir beispielsweise einige Replikate auf separaten, langsameren Disks erstellen. Wir wollen einen komplett heterogenen Cluster aufbauen. Da StatefulSet jedoch eine standardisierte L\u00f6sung aus einer Vorlage erstellt, haben wir keinen Spielraum f\u00fcr diese Konstruktion. <\/p>\n<p><\/p>\n<p>Nach einigem \u00dcberlegen haben wir beschlossen, es auf diese Weise zu tun. Jedes unserer Replikate hat sein eigenes StatefulSet. Dieses Vorgehen hat einige Nachteile, aber in der Praxis kapselt es alles vollst\u00e4ndig durch den Operator. Dar\u00fcber hinaus gibt es zahlreiche Vorteile. Wir k\u00f6nnen den Cluster genau so gestalten, wie wir ihn m\u00f6chten, zum Beispiel v\u00f6llig heterogen. Daher werden wir in dem Cluster, der zwei Shards mit jeweils einer Replikat hat, zwei StatefulSets und zwei Pods haben, und zwar aus den zuvor genannten Gr\u00fcnden, um einen heterogenen Cluster zu erm\u00f6glichen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4b7ae92a545f9bb6cc5f0136df87207f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kommen wir zu praktischen Aufgaben. In unserem Cluster m\u00fcssen wir die Benutzer einrichten, d.h. wir m\u00fcssen einige Konfigurationen f\u00fcr ClickHouse in Kubernetes vornehmen. Der Operator bietet daf\u00fcr alle M\u00f6glichkeiten. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6a65aa78293c0b40230cf24efc58e55a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir k\u00f6nnen direkt im YAML schreiben, was wir m\u00f6chten. Alle Konfigurationsoptionen werden direkt aus diesem YAML in die ClickHouse-Konfigurationen abgebildet, die dann im gesamten Cluster verteilt werden.<\/p>\n<p><\/p>\n<p>Man kann auch so schreiben. Das ist nur ein Beispiel. Das Passwort kann verschl\u00fcsselt werden. Es werden alle Konfigurationsoptionen von ClickHouse unterst\u00fctzt. Hier ist nur ein Beispiel. <\/p>\n<p><\/p>\n<p>Die Clusterkonfiguration wird als ConfigMap verteilt. In der Praxis erfolgt das Update der ConfigMap nicht sofort, daher dauert der Prozess der Konfigurationseinf\u00fchrung bei gro\u00dfen Clustern eine gewisse Zeit. Aber es ist sehr praktisch in der Anwendung.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2e42d19d7a558e3b8d4bbb51fe5bd08b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir machen die Aufgabe komplexer. Der Cluster entwickelt sich weiter. Wir m\u00f6chten Daten replizieren. D.h. wir haben bereits zwei Shards mit je einem Replica, die Benutzer sind eingerichtet. Wir wachsen und m\u00f6chten uns mit der Replikation besch\u00e4ftigen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4c97e5e6ca9cb66d3a94fb8cfe610186.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was ben\u00f6tigen wir f\u00fcr die Replikation? <\/p>\n<p><\/p>\n<p>Wir ben\u00f6tigen ZooKeeper. In ClickHouse wird die Replikation unter Verwendung von ZooKeeper aufgebaut. ZooKeeper ist erforderlich, damit verschiedene ClickHouse-Replikate einen Konsens dar\u00fcber haben, welche Datenbl\u00f6cke in welchem ClickHouse vorhanden sind. <\/p>\n<p><\/p>\n<p>Es kann jeder ZooKeeper verwendet werden. Wenn das Unternehmen einen externen ZooKeeper hat, kann dieser genutzt werden. Ansonsten kann einer aus unserem Repository installiert werden. Es gibt einen Installer, der alles vereinfacht. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6cc40951a19b982abf578836edf569d3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das Systeminteraktionsschema sieht folgenderma\u00dfen aus. Wir haben Kubernetes als Plattform. Darauf l\u00e4uft der ClickHouse-Operator. ZooKeeper habe ich hier skizziert. Der Operator interagiert sowohl mit ClickHouse als auch mit ZooKeeper. Das bedeutet, es findet eine Interaktion statt. <\/p>\n<p><\/p>\n<p>All dies ist notwendig, damit ClickHouse erfolgreich Daten in k8s repliziert.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4fc37aee850acd20517fa3d7562f0165.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Schauen wir uns jetzt die eigentliche Aufgabe an, wie das Manifest f\u00fcr die Replikation aussehen wird.<\/p>\n<p><\/p>\n<p>Wir f\u00fcgen unserem Manifest zwei Abschnitte hinzu. Der erste ist, wo wir ZooKeeper beziehen, der sowohl innerhalb von Kubernetes als auch extern sein kann. Das ist einfach eine Beschreibung. Und wir bestellen Replikate. Das hei\u00dft, wir m\u00f6chten zwei Replikate. In der Summe sollten wir 4 Pods erhalten. An den Speicher erinnern wir uns, er wird etwas sp\u00e4ter zur\u00fcckkommen. Speicher - das ist eine eigene Geschichte. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/afb8c974d0587a4ad87d6ba36bbe5e3b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es war so.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/909ffd258dbce718ddf529a1a753de6f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es wird so. Replica werden hinzugef\u00fcgt. Die vierte passte nicht rein, aber wir glauben, dass es dort viele geben k\u00f6nnte. Und daneben wird ZooKeeper hinzugef\u00fcgt. Die Diagramme werden komplexer. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c33b37fc7fc72f51276e5e98b9ec2134.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jetzt ist es an der Zeit, die n\u00e4chste Aufgabe hinzuzuf\u00fcgen. Wir werden Persistent Storage hinzuf\u00fcgen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f28d14901a713eca413a52ec6ea21ac5.jpeg\" style=\"display:block;margin: 0 auto;\" \/>F\u00fcr den Persistent Storage haben wir verschiedene Ausf\u00fchrungsvarianten.<\/p>\n<p><\/p>\n<p>Wenn wir in einem Cloud-Anbieter ausgef\u00fchrt werden, beispielsweise mit Amazon oder Google, gibt es eine gro\u00dfe Versuchung, Cloud-Speicher zu nutzen. Das ist sehr praktisch und gut. <\/p>\n<p><\/p>\n<p>Es gibt eine zweite Option. Das ist f\u00fcr den lokalen Speicher, wenn wir lokale Festplatten in jedem Node haben. Diese Option ist viel komplizierter umzusetzen, bietet aber daf\u00fcr eine h\u00f6here Leistung. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/483ee5c08b62e987620bf54fd32a44b4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lassen Sie uns ansehen, was wir in Bezug auf Cloud-Speicher haben.<\/p>\n<p><\/p>\n<p>Es gibt Vorteile. Es ist sehr einfach zu konfigurieren. Wir bestellen einfach bei dem Cloud-Anbieter, geben ihm die Bitte, uns Speicher mit bestimmter Kapazit\u00e4t und Klasse zur Verf\u00fcgung zu stellen. Die Klassen werden von den Anbietern selbst festgelegt. <\/p>\n<p><\/p>\n<p>Es gibt jedoch auch einen Nachteil. F\u00fcr manche ist das kein kritischer Nachteil. Nat\u00fcrlich k\u00f6nnen dort einige Leistungseinbu\u00dfen auftreten. Es ist sehr bequem im Betrieb, zuverl\u00e4ssig, aber es gibt potenzielle Leistungseinbu\u00dfen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8e82430b64477f91640078ff4eacb47e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Da ClickHouse besonders auf Leistung ausgelegt ist, k\u00f6nnte man sogar sagen, dass es alles herausholt, was m\u00f6glich ist. Daher versuchen viele Kunden, die maximal m\u00f6gliche Leistung herauszuholen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8638fe37b848a98ce8326218d368baa3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Um das Maximum herauszuholen, ben\u00f6tigen wir lokalen Speicher.<\/p>\n<p><\/p>\n<p>Kubernetes bietet drei Abstraktionen f\u00fcr die Verwendung von lokalem Speicher in Kubernetes. Diese sind: <\/p>\n<p><\/p>\n<ul>\n<li>EmptyDir<\/li>\n<li>HostPath.<\/li>\n<li>Lokal<\/li>\n<\/ul>\n<p><\/p>\n<p>Schauen wir uns an, wie sie sich unterscheiden und was sie gemeinsam haben. <\/p>\n<p><\/p>\n<p>Zun\u00e4chst einmal haben wir in allen drei Ans\u00e4tzen Speicher \u2013 das sind lokale Festplatten, die sich auf demselben physikalischen K8s-Knoten befinden. Aber es gibt einige Unterschiede.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/79afb620a0c9a1552b47240b405fedc9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Beginnen wir mit dem einfachsten, d.h. mit emptyDir. Was ist das praktisch? Hierbei bitten wir in unserer Spezifikation das Containerisierungssystem (meistens Docker), uns Zugriff auf einen Ordner auf der lokalen Festplatte zu gew\u00e4hren.<\/p>\n<p><\/p>\n<p>In der Praxis erstellt Docker irgendwo intern einen tempor\u00e4ren Ordner, nennt ihn mit einem langen Hash und gew\u00e4hrt Zugriff auf ihn. <\/p>\n<p><\/p>\n<p>Wie wird das hinsichtlich der Leistung funktionieren? Es wird mit der Geschwindigkeit der lokalen Festplatte arbeiten, d.h. es gibt vollen Zugriff auf die eigene Festplatte. <\/p>\n<p><\/p>\n<p>Allerdings hat diese L\u00f6sung einen Nachteil. Persistent ist in diesem Fall ziemlich fragw\u00fcrdig. Bei der ersten Bewegung von Docker mit Containern geht Persistent verloren. Wenn Kubernetes aus irgendeinem Grund dieses Pod auf eine andere Festplatte verschieben m\u00f6chte, gehen die Daten verloren. <\/p>\n<p><\/p>\n<p>Dieser Ansatz eignet sich gut f\u00fcr Tests, da er bereits eine akzeptable Geschwindigkeit zeigt, jedoch ist diese Option f\u00fcr etwas Ernsthaftes nicht geeignet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0b60f80fc9ea0e2c1820021bcd9e1382.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Daher gibt es einen zweiten Ansatz: hostPath. Wenn wir die vorherige Folie und diese betrachten, sehen wir nur einen Unterschied. Der Ordner ist direkt von Docker auf den Kubernetes-Knoten verschoben. Hier ist es etwas einfacher. Wir geben direkt den Pfad im lokalen Dateisystem an, wo wir unsere Daten speichern m\u00f6chten. <\/p>\n<p><\/p>\n<p>Dieser Ansatz hat seine Vorteile. Es handelt sich bereits um ein echtes Persistent, und zwar das klassische. Unsere Daten werden an einer bestimmten Adresse auf der Festplatte gespeichert. <\/p>\n<p><\/p>\n<p>Es gibt auch Nachteile. Dazu geh\u00f6rt die Komplexit\u00e4t der Verwaltung. Unser Kubernetes k\u00f6nnte Pods auf einen anderen physischen Knoten verschieben wollen. Hier kommt DevOps ins Spiel. Er muss dem gesamten System klar machen, dass diese Pods nur auf Knoten verschoben werden k\u00f6nnen, auf denen du \u00fcber diese Pfade etwas montiert hast, und nicht mehr als einen Knoten auf einmal. Das ist ziemlich kompliziert. <\/p>\n<p><\/p>\n<p>Speziell f\u00fcr diese Zwecke haben wir in unserem Unternehmen Vorlagen erstellt, um diese Komplexit\u00e4t zu verbergen. So k\u00f6nnte man einfach sagen: \"Ich m\u00f6chte, dass auf jedem physischen Knoten ein ClickHouse-Instanz und auf diesem bestimmten Pfad besteht.\" <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9f64c19bccc8b187d6af112eda896b25.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aber dieses Bed\u00fcrfnis haben nicht nur wir, daher verstehen die Herren von Kubernetes auch, dass die Menschen Zugriff auf physische Datentr\u00e4ger w\u00fcnschen, weshalb sie eine dritte Ebene bieten.<\/p>\n<p><\/p>\n<p>Es wird lokal genannt. Der Unterschied zum vorherigen Slide ist praktisch keiner. Eher musste man fr\u00fcher manuell eingreifen, da wir diese Pods nicht von Knoten zu Knoten verschieben konnten, weil sie auf einem bestimmten Pfad mit der lokalen physikalischen Festplatte verbunden sein mussten. Jetzt sind all dieses Wissen im Kubernetes selbst inkapsuliert. So wird die Konfiguration viel einfacher.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/140c43be34dd7015c0bf4cfd0a0bb384.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenden wir uns nun unserer praktischen Aufgabe zu. Wir kehren zum YAML-Template zur\u00fcck. Hier haben wir echten Storage. Wir sind zu diesem Thema zur\u00fcckgekehrt. Wir definieren das klassische VolumeClaim-Template wie in k8s und beschreiben, welchen Storage wir ben\u00f6tigen.<\/p>\n<p><\/p>\n<p>Nach diesem Schritt wird k8s Storage anfordern und es uns im StatefulSet zuweisen. Am Ende steht es ClickHouse zur Verf\u00fcgung.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/960e666486ed09cebd83235d43f83970.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir hatten so ein Schema. Unser Persistent Storage war rot, was andeutete, dass wir es verbessern sollten. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a989df489e3a9fef6a4fbf7b93c489a6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und er wird gr\u00fcn. Jetzt ist das Schema des ClickHouse-Clusters auf k8s vollst\u00e4ndig finalisiert. Wir haben Shards, Replikate, ZooKeeper und es gibt echten Persistent Storage, der auf die eine oder andere Weise implementiert ist. Das Schema ist bereits vollst\u00e4ndig funktionsf\u00e4hig. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c409ee5da6309a67904394d968ed4906.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir leben weiter. Unser Cluster entwickelt sich. Und Alexey gibt sich M\u00fche und bringt eine neue Version von ClickHouse heraus.<\/p>\n<p><\/p>\n<p>Wir stehen vor einer praktischen Herausforderung: Die neue Version von ClickHouse auf unserem Cluster zu testen. Nat\u00fcrlich m\u00f6chten wir nicht das gesamte Cluster darauf aktualisieren, sondern irgendwo in einer Ecke eine einzelne Replik mit der neuen Version versehen, und vielleicht sogar mit zwei neuen Versionen gleichzeitig, da diese recht h\u00e4ufig ver\u00f6ffentlicht werden. <\/p>\n<p><\/p>\n<p>Was k\u00f6nnen wir dazu sagen?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/48ed52d393d977d0cfaa9320bd02ed1e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hier haben wir genau diese M\u00f6glichkeit. Es handelt sich um Pod-Vorlagen. Unser Operator erm\u00f6glicht es uns, einen heterogenen Cluster aufzubauen. Das hei\u00dft, wir k\u00f6nnen konfigurieren, angefangen bei einer Gruppe aller Replikate bis hin zu jeder einzelnen Replik, welche Version von ClickHouse und welche Storage-Version wir m\u00f6chten. Wir k\u00f6nnen den Cluster nach unseren Bed\u00fcrfnissen vollst\u00e4ndig konfigurieren. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4949ecd8119cb4ec0f4bad9bf27fa74e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ein wenig werden wir jetzt tiefer einsteigen. Zuvor haben wir dar\u00fcber gesprochen, wie der ClickHouse-Operator im Kontext von ClickHouse funktioniert.<\/p>\n<p><\/p>\n<p>Jetzt m\u00f6chte ich ein paar Worte dazu sagen, wie generell jeder Operator funktioniert und wie er mit K8s interagiert.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5ca9c2a23c54b2a81ac0a8bba88d5e65.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lassen Sie uns zun\u00e4chst die Interaktion mit K8s betrachten. Was passiert, wenn wir kubectl apply ausf\u00fchren? Unsere Objekte erscheinen \u00fcber die API in etcd. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4b9eaedeb0f34d10398ba0187f09fef9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Beispielsweise die grundlegenden Objekte von Kubernetes: Pod, StatefulSet, Service und so weiter. <\/p>\n<p><\/p>\n<p>Zun\u00e4chst passiert jedoch nichts Physisches. Diese Objekte m\u00fcssen im Cluster materialisiert werden. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3c49dc1b0067347d5fc415ef9b87642d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Daf\u00fcr kommt der Controller ins Spiel. Der Controller ist eine spezielle Komponente von k8s, die diese Beschreibungen materialisieren kann. Er wei\u00df, was physisch getan werden muss. Er wei\u00df, wie Container gestartet werden und was konfiguriert werden muss, damit der Server l\u00e4uft. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/d951eb0f7bacf519566b0ef6cf9bc100.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und er materialisiert unsere Objekte in K8s.<\/p>\n<p><\/p>\n<p>Aber wir m\u00f6chten nicht nur mit Pods und StatefulSets arbeiten, wir wollen eine ClickHouseInstallation erstellen, d. h. ein Objekt vom Typ ClickHouse, um es als Einheit zu verwalten. Momentan gibt es daf\u00fcr jedoch keine M\u00f6glichkeit. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/1594921ac5dd9384ce81ceae92f5cda9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aber k8s hat noch eine weitere n\u00fctzliche Funktion. Wir m\u00f6chten, dass wir irgendwo eine komplexe Entit\u00e4t haben, die aus Pods und StatefulSets unseren Cluster zusammenstellt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/04f86706f506fa91e365d45537dd9def.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was m\u00fcssen wir daf\u00fcr tun? Zun\u00e4chst tritt die Custom Resource Definition auf den Plan. Was ist das? Es ist eine Beschreibung f\u00fcr k8s, dass es einen weiteren Datentyp geben wird, dass wir zu Pods und StatefulSets ein benutzerdefiniertes Ressourcen hinzuf\u00fcgen m\u00f6chten, das komplexe Informationen enth\u00e4lt. Das ist die Beschreibung der Datenstruktur. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f02ae12ef3ab5db974234b14e38792ac.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir senden ihn ebenfalls \u00fcber kubectl apply dorthin. Kubernetes hat ihn begeistert \u00fcbernommen. <\/p>\n<p><\/p>\n<p>Jetzt haben wir im Speicher die M\u00f6glichkeit, ein benutzerdefiniertes Objekt mit dem Namen ClickHouseInstallation in etcd zu hinterlegen.<\/p>\n<p><\/p>\n<p>Aber bis jetzt wird nichts weiter geschehen. Das hei\u00dft, wenn wir jetzt eine YAML-Datei erstellen, die wir mit der Beschreibung von Shards, Replikaten usw. betrachtet haben, und sagen \u201ekubectl apply\u201c, dann wird Kubernetes sie akzeptieren, in etcd ablegen und sagen: \u201eGut, aber ich wei\u00df nicht, was ich damit machen soll. Ich wei\u00df nicht, wie ich ClickHouseInstallation verwalten soll.\u201c <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7c2f9f3f81b83c987a3bd72a881d0d91.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Deshalb brauchen wir jemanden, der Kubernetes hilft, diesen neuen Datentyp zu verwalten. Links haben wir den integrierten Kubernetes-Controller, der mit den Standard-Datentypen arbeitet. Rechts sollte ein benutzerdefinierter Controller erscheinen, der mit benutzerdefinierten Datentypen arbeiten kann. <\/p>\n<p><\/p>\n<p>Und anders genannt wird er Operator. Ich habe ihn hier absichtlich au\u00dferhalb von Kubernetes dargestellt, weil er auch au\u00dferhalb von K8s betrieben werden kann. In der Regel werden die meisten Operatoren nat\u00fcrlich innerhalb von Kubernetes ausgef\u00fchrt, aber nichts hindert ihn daran, drau\u00dfen zu stehen, weshalb er hier speziell nach au\u00dfen ger\u00fcckt ist. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7aa3a1b67d0def5ba752dff56baeebbf.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der benutzerdefinierte Controller, auch Operator genannt, interagiert \u00fcber die API mit Kubernetes. Er kann bereits mit der API kommunizieren und wei\u00df, wie er aus einer benutzerdefinierten Ressource ein komplexes Schema erstellen kann, das wir anstreben. Genau das ist die Aufgabe des Operators. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a5f773ddc3663f24d5379955da9c3037.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wie funktioniert der Operator? Werfen wir einen Blick auf die rechte Seite, um zu erfahren, wie er das macht. Lassen Sie uns entdecken, wie der Operator alles materialisiert und wie die Interaktion mit K8s anschlie\u00dfend verl\u00e4uft.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/08a8d8dbcb35117a0eb3320589c6ff8d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der Operator ist ein Programm, das ereignisorientiert arbeitet. Mithilfe der Kubernetes API abonniert der Operator Ereignisse. In der Kubernetes API gibt es Einstiegspunkte, an denen man sich auf Ereignisse abonnieren kann. Wenn sich etwas in K8s \u00e4ndert, sendet Kubernetes Ereignisse an alle Abonnenten, d.h. jeder, der auf diesen API-Punkt abonniert ist, erh\u00e4lt Benachrichtigungen.<\/p>\n<p><\/p>\n<p>Der Operator abonniert Ereignisse und muss darauf reagieren. Seine Aufgabe besteht darin, auf die auftretenden Ereignisse zu reagieren. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9f0664a4151e6e7f6f8575a3e54372e9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ereignisse werden durch bestimmte Updates generiert. Unser YAML-Dokument mit der Beschreibung ClickHouseInstallation wird \u00fcber kubectl apply in etcd \u00fcbertragen. Dort wird ein Ereignis ausgel\u00f6st, das schlie\u00dflich beim ClickHouse-Operator ankommt. Der Operator erh\u00e4lt diese Beschreibung und muss entsprechend handeln. Wenn ein Update f\u00fcr das Objekt ClickHouseInstallation kommt, ist es seine Aufgabe, das Cluster zu aktualisieren. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0952bdd391a72aa15bf66af4ce69f4af.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was macht er? Zun\u00e4chst einmal muss ein Aktionsplan erstellt werden, was wir mit diesem Update tun werden. Updates k\u00f6nnen sehr klein sein, d.h. in YAML geringf\u00fcgig, aber sie k\u00f6nnen erhebliche \u00c4nderungen im Cluster nach sich ziehen. Daher erstellt der Operator einen Plan und h\u00e4lt sich dann daran.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/79caaa43b6fd9f3e2eb1afe44ecb2df9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Er beginnt gem\u00e4\u00df diesem Plan, die Struktur intern zu entwickeln, um Pods und Dienste zu materialisieren, d.h. das zu tun, was seine Hauptaufgabe ist. Es ist wie der Aufbau eines ClickHouse-Clusters in Kubernetes.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e91576a26d6b758a68ae0b35cbe01897.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nun lassen Sie uns auf eine interessante Sache eingehen. Es handelt sich um die Aufteilung der Verantwortung zwischen Kubernetes und dem Operator, d.h. was Kubernetes tut, was der Operator tut und wie sie miteinander interagieren. <\/p>\n<p><\/p>\n<p>Kubernetes k\u00fcmmert sich um systemrelevante Aufgaben, also um den grundlegenden Satz von Objekten, die als systemisch interpretiert werden k\u00f6nnen. Kubernetes wei\u00df, wie man Pods startet, Container neustartet, Volumes einbindet und mit ConfigMaps umgeht \u2013 alles, was man als systemisch bezeichnen kann. <\/p>\n<p><\/p>\n<p>Operatoren agieren in spezifischen Anwendungsbereichen. Jeder Operator wird f\u00fcr seinen spezifischen Anwendungsbereich erstellt. Wir haben einen f\u00fcr ClickHouse entwickelt.<\/p>\n<p><\/p>\n<p>Der Operator interagiert genau in den Begriffen des Anwendungsbereichs, wie zum Beispiel eine Replik hinzuf\u00fcgen, ein Schema erstellen oder Monitoring einrichten. So entsteht eine klare Trennung.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9dc07d9c29d5dfd538343aadb751e4c0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Betrachten wir ein praktisches Beispiel, wie diese Trennung von Verantwortlichkeiten stattfindet, wenn wir die Aktion \u201eReplik hinzuf\u00fcgen\u201c ausf\u00fchren. <\/p>\n<p><\/p>\n<p>Der Operator erh\u00e4lt die Aufgabe \u2013 eine Replik hinzuzuf\u00fcgen. Was macht der Operator? Der Operator berechnet, dass ein neues StatefulSet erstellt werden muss, in dem bestimmte Vorlagen und Volume-Claims beschrieben sind. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7a31f2f76a3bdda87e4bccf0e04fe4a8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Er bereitet alles vor und leitet es an K8s weiter. Er erkl\u00e4rt, dass er eine ConfigMap, ein StatefulSet und ein Volume ben\u00f6tigt. Kubernetes f\u00fchrt dann die erforderlichen Schritte aus. Es materialisiert die grundlegenden Einheiten, mit denen es arbeitet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2be6892234cc12b056962265c13dba07.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und hier kommt erneut der ClickHouse-Operator ins Spiel. Er verf\u00fcgt bereits \u00fcber ein physisches Pod, auf dem etwas durchgef\u00fchrt werden kann. Der ClickHouse-Operator arbeitet erneut in Fachbegriffen. Das hei\u00dft, um eine Replik in den Cluster einzuf\u00fcgen, muss zun\u00e4chst das Datenschema, das in diesem Cluster vorhanden ist, konfiguriert werden. Zweitens muss diese Replik in die \u00dcberwachung aufgenommen werden, damit sie gut nachvollziehbar ist. Das richtet bereits der Operator ein. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/790616342b98b347fa67e0100754c8b6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Erst danach kommt der ClickHouse selbst ins Spiel, also eine weitere hochrangige Entit\u00e4t. Das ist die Datenbank. Sie hat ihre eigene Instanz und eine konfigurierte Replik, die bereit ist, in den Cluster aufgenommen zu werden.<\/p>\n<p><\/p>\n<p>Das ergibt eine lange Kette von Ausf\u00fchrungen und eine Verantwortungsteilung bei der Hinzuf\u00fcgung einer Replik.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5ec79cfa2b45fadbe25f4d9fe8d2ec5d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir setzen unsere praktischen Aufgaben fort. Wenn der Cluster bereits besteht, kann die Konfiguration migriert werden. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a52aee0d4350b8da00cdb4b525df80ad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir haben es so eingerichtet, dass bestehende XML, das ClickHouse versteht, nahtlos durchgereicht werden kann.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/91abb1d3b0a14f2118361403a74e14c1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es ist m\u00f6glich, ClickHouse fein abzustimmen. Wie gerade gesagt, ist zoned deployment genau das, wor\u00fcber ich bei der Erkl\u00e4rung von hostPath und Local Storage gesprochen habe. Es geht darum, zoned deployment richtig umzusetzen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/fde502f30223e04a918f4fd598c3dd9f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die n\u00e4chste praktische Aufgabe ist das Monitoring.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4e685fba7883075105c0164a778c51e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn sich unser Cluster \u00e4ndert, muss das Monitoring regelm\u00e4\u00dfig angepasst werden. <\/p>\n<p><\/p>\n<p>Lassen Sie uns das Schema betrachten. Die gr\u00fcnen Pfeile haben wir bereits besprochen. Nun sehen wir uns die roten Pfeile an. So m\u00f6chten wir unser Cluster \u00fcberwachen. Wie die Metriken aus dem ClickHouse-Cluster in Prometheus und dann in Grafana gelangen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/1210c1423f99d48a20e06e855bf48a72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was ist die Herausforderung beim Monitoring? Warum wird es als eine Art Errungenschaft bezeichnet? Die Schwierigkeit liegt in der Dynamik. Wenn wir einen statischen Cluster haben, kann das Monitoring einmalig eingerichtet werden und man muss sich nicht weiter darum k\u00fcmmern.<\/p>\n<p><\/p>\n<p>Aber wenn wir viele Cluster haben oder sich st\u00e4ndig etwas \u00e4ndert, ist der Prozess dynamisch. Sich st\u00e4ndig um die Neuanpassung des Monitorings zu k\u00fcmmern, verbraucht Ressourcen und Zeit \u2013 einfach gesagt, es ist sogar m\u00fchsam. Das muss automatisiert werden. Die Komplexit\u00e4t liegt also in der Dynamik des Prozesses. Und der Operator automatisiert das sehr gut. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/48a7264f1228671e0c483c8211a71eb3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wie hat sich unser Cluster entwickelt? Zu Beginn sah es so aus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8a8c7b6cd5562deb315368e1e8e1c976.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dann sah es so aus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/1a3e915fbadf3aa5f3b33d337f36e76e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Am Ende hat es sich zu diesem entwickelt. <\/p>\n<p><\/p>\n<p>Das Monitoring wird automatisch vom Operator durchgef\u00fchrt. Eine zentrale Anlaufstelle. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e079e65bf8deff43a81d8ffde938a709.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir werfen nur einen Blick auf das Grafana-Dashboard, um zu sehen, wie lebhaft das Innenleben unseres Clusters ist. <\/p>\n<p><\/p>\n<p>\u00dcbrigens wird das Grafana-Dashboard ebenfalls mit unserem Operator in den Quellcodes bereitgestellt. Man kann es einfach anschlie\u00dfen und nutzen. Dieses Screenshot haben unsere DevOps zur Verf\u00fcgung gestellt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4ad1c2899dd845d0ba4185bdf758468c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wohin m\u00f6chten wir als N\u00e4chstes gehen? Das ist:<\/p>\n<p><\/p>\n<ul>\n<li>Die Automatisierung der Testverfahren vorantreiben. Die Hauptaufgabe besteht in der automatisierten Pr\u00fcfung neuer Versionen. <\/li>\n<li>Au\u00dferdem m\u00f6chten wir die Integration mit ZooKeeper automatisieren. Geplant ist, sich mit dem ZooKeeper-Operator zu integrieren. Das bedeutet, dass ein Operator f\u00fcr ZooKeeper geschrieben wurde, und es w\u00e4re nur logisch, dass zwei Operatoren zur Schaffung einer benutzerfreundlicheren L\u00f6sung zusammenarbeiten. <\/li>\n<li>Wir m\u00f6chten komplexere Lebenszeichenpr\u00fcfungen implementieren. <\/li>\n<li>Ich habe in Gr\u00fcn hervorgehoben, dass wir beim Erben von Templates auf dem richtigen Weg sind \u2013 FERTIG, d. h. mit der n\u00e4chsten Ver\u00f6ffentlichung des Operators wird das Template-Erben verf\u00fcgbar sein. Dies ist ein leistungsstarkes Werkzeug, das es erm\u00f6glicht, komplexe Konfigurationen aus verschiedenen Teilen zusammenzustellen. <\/li>\n<li>Und wir streben die Automatisierung komplexer Aufgaben an. Eine der Hauptaufgaben ist das Re-Sharding. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f232c0aab389be5069e5c7886e265c01.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lassen Sie uns eine Zwischenbilanz ziehen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/62f7814994af0441ba5a82de4e9780d7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was erhalten wir am Ende? Und ist es sinnvoll oder nicht? Sollte man \u00fcberhaupt versuchen, eine Datenbank in Kubernetes zu integrieren und den Operator insgesamt sowie den Alitnity-Operator im Besonderen anzuwenden?<\/p>\n<p><\/p>\n<p>Am Ende erhalten wir:<\/p>\n<p><\/p>\n<ul>\n<li>Eine signifikante Vereinfachung und Automatisierung der Konfiguration, Bereitstellung und Wartung. <\/li>\n<li>Sofort integriertes Monitoring. <\/li>\n<li>Und sofort einsatzbereite, kodifizierte Vorlagen f\u00fcr komplexe Situationen. Aktionen wie das Hinzuf\u00fcgen einer Replik sind nicht mehr manuell erforderlich. Das \u00fcbernimmt der Operator. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/aebccd7a2dc55f14645f79f89f7b7458.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bleibt nur noch die letzte Frage. Wir haben bereits eine Datenbank in Kubernetes, Virtualisierung. Wie steht es um die Leistung dieser L\u00f6sung, insbesondere in Anbetracht der Tatsache, dass ClickHouse auf Leistung optimiert ist?<\/p>\n<p><\/p>\n<p>Die Antwort \u2013 alles in Ordnung! Ich werde nicht ins Detail gehen, das ist ein Thema f\u00fcr einen separaten Vortrag. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/ffc230941f0ae24926186db4d8d68ade.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aber es gibt ein Projekt namens TSBS. Was ist sein Hauptziel? Es ist ein Test f\u00fcr Datenbanken auf Leistung. Es versucht, \u00c4pfel mit \u00c4pfeln und Birnen mit Birnen zu vergleichen. <\/p>\n<p><\/p>\n<p>Wie funktioniert es? Es wird ein Datensatz generiert. Dieser Datensatz wird dann mit dem gleichen Test-Set auf verschiedenen Datenbanken durchlaufen. Jede Datenbank l\u00f6st eine Aufgabe auf ihre eigene Weise. Anschlie\u00dfend k\u00f6nnen die Ergebnisse verglichen werden. <\/p>\n<p><\/p>\n<p>Es unterst\u00fctzt bereits eine Vielzahl von Datenbanken. Ich habe drei Hauptdatenbanken hervorgehoben. Diese sind:<\/p>\n<p><\/p>\n<ul>\n<li>TimescaleDB.<\/li>\n<li>InfluxDB.<\/li>\n<li>ClickHouse.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5b4733534a4e6e36fb7788127adc6e86.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es wurde auch ein Vergleich mit einer \u00e4hnlichen L\u00f6sung durchgef\u00fchrt, und zwar mit RedShift. Der Vergleich fand bei Amazon statt. ClickHouse \u00fcbertrifft auch in dieser Hinsicht alle anderen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/44cc8dedc07a02fe1ed5aad3e17a579c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Welche Schlussfolgerungen kann ich aus dem, was ich erz\u00e4hlt habe, ziehen?<\/p>\n<p><\/p>\n<ul>\n<li>DB in Kubernetes ist m\u00f6glich. Wahrscheinlich kann man jede Datenbank verwenden, aber insgesamt sieht es so aus, als w\u00e4re es machbar. ClickHouse kann definitiv im Kubernetes-Umfeld unseres Operators betrieben werden. <\/li>\n<li>Der Operator hilft dabei, Prozesse zu automatisieren und vereinfacht das Leben erheblich.<\/li>\n<li>Die Leistung ist angemessen.<\/li>\n<li>Und wir glauben, dass es sinnvoll ist, dies zu verwenden. <\/li>\n<\/ul>\n<p><\/p>\n<p>Open Source \u2013 schlie\u00dfen Sie sich uns an!<\/p>\n<p><\/p>\n<p>Wie bereits erw\u00e4hnt, ist der Operator ein vollst\u00e4ndig Open-Source-Produkt, daher w\u00e4re es gro\u00dfartig, wenn m\u00f6glichst viele Menschen ihn nutzen w\u00fcrden. Schlie\u00dfen Sie sich uns an! Wir freuen uns auf Sie alle!<\/p>\n<p><\/p>\n<p>Vielen Dank an alle!<\/p>\n<p><\/p>\n<p>Fragen<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator in Kubernetes zur Verwaltung von DB-Clusters. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4afe8b10c4f103c2a9a295511e4eb69a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Vielen Dank f\u00fcr den Vortrag! Ich hei\u00dfe Anton und komme von SEMrush. Mich interessiert das Thema Logging. \u00dcber Monitoring h\u00f6rt man viel, aber \u00fcber Logging, wenn man den gesamten Cluster betrachtet, nicht so viel. Bei uns zum Beispiel haben wir einen Cluster auf Hardware hochgezogen. Wir nutzen zentrales Logging und sammeln die Daten mit Standardmitteln in einem gemeinsamen Repository. Von dort aus extrahieren wir die f\u00fcr uns interessanten Daten.<\/em> <\/p>\n<p><\/p>\n<p>Eine gute Frage, das hei\u00dft, Logging steht auf der To-Do-Liste. Unser Operator automatisiert das derzeit noch nicht. Das Projekt entwickelt sich noch, es ist noch recht jung. Wir erkennen die Notwendigkeit des Loggings. Dies ist ebenfalls ein sehr wichtiges Thema, das wahrscheinlich nicht weniger wichtig ist als Monitoring. Aber zuallererst stand Monitoring auf der Implementierungsliste. Logging wird kommen. Wir versuchen nat\u00fcrlich, alle Aspekte der Betriebsf\u00fchrung des Clusters zu automatisieren. Daher ist die Antwort: Leider kann der Operator dies aktuell nicht, aber es steht auf unserer Liste, wir werden das umsetzen. Wenn Sie Interesse haben, sich anzuschlie\u00dfen, dann senden Sie bitte einen Pull Request.<\/p>\n<p><\/p>\n<p><em>Hallo! Vielen Dank f\u00fcr den Bericht! Ich habe eine Standardfrage zu den Persistent Volumes. Wie bestimmt der Operator, auf welchem Knoten ein bestimmtes Laufwerk oder ein Verzeichnis gemountet ist, wenn wir mit diesem Operator eine Konfiguration erstellen? M\u00fcssen wir ihm im Voraus erkl\u00e4ren, dass unser ClickHouse bitte auf den Knoten platziert werden soll, auf denen sich das Laufwerk befindet?<\/em><\/p>\n<p><\/p>\n<p>Soweit ich das verstehe, ist diese Frage eine Fortsetzung des lokalen Speichers, insbesondere des Teils \u00fcber hostPath. Es geht darum, dem gesamten System zu erkl\u00e4ren, dass der Pod genau auf diesem Knoten ausgef\u00fchrt werden soll, auf dem wir ein physisch verbundenes Laufwerk haben, das an einem bestimmten Pfad gemountet ist. Das ist ein ganzes Thema, das ich nur sehr oberfl\u00e4chlich angeschnitten habe, da die Antwort recht umfangreich ist. <\/p>\n<p><\/p>\n<p>Kurz gesagt, das sieht so aus: Wir m\u00fcssen nat\u00fcrlich die Bereitstellung dieser Volumes vornehmen. Momentan gibt es im lokalen Speicher keine dynamische Bereitstellung, daher m\u00fcssen die DevOps die Festplatten, also diese Volumes, manuell partitionieren. Sie m\u00fcssen Kubernetes erkl\u00e4ren, dass es Persistent Volumes einer bestimmten Klasse geben wird, die sich auf bestimmten Knoten befinden. Anschlie\u00dfend muss Kubernetes erkl\u00e4rt werden, dass Pods, die eine bestimmte Klasse von lokalem Speicher ben\u00f6tigen, nur auf solchen Knoten geplant werden sollen. F\u00fcr diese Zwecke erm\u00f6glicht der Operator, einen bestimmten Label und eine Instanz pro Host zuzuweisen. Dadurch werden die Pods von Kubernetes nur auf Knoten gestartet, die den Anforderungen der Labels entsprechen, einfach gesagt. Die Administratoren weisen Labels zu und f\u00fchren die Bereitstellung der Festplatten manuell durch. So wird die Skalierung erm\u00f6glicht.<\/p>\n<p><\/p>\n<p>Der dritte Ansatz mit lokalem Speicher erleichtert dies ein wenig. Wie ich bereits betont habe, ist es eine m\u00fchsame Aufgabe, die jedoch letztendlich dazu beitr\u00e4gt, die maximale Leistung zu erzielen.<\/p>\n<p><\/p>\n<p><em>Ich habe eine zweite Frage dazu. Kubernetes wurde so konzipiert, dass es uns egal ist, ob wir einen Knoten verlieren oder nicht. Was sollten wir in diesem Fall tun, wenn wir den Knoten verloren haben, auf dem unser Shard l\u00e4uft?<\/em><\/p>\n<p><\/p>\n<p>Ja, Kubernetes wurde urspr\u00fcnglich so positioniert, dass unsere Pods wie Vieh behandelt werden, aber hier wird jede Festplatte wie ein Haustier betrachtet. Es gibt das Problem, dass wir diese nicht einfach wegwerfen k\u00f6nnen. Die Entwicklung von Kubernetes geht dahin, dass wir nicht vollst\u00e4ndig philosophisch damit umgehen k\u00f6nnen, als w\u00e4ren es Ressourcen, die wir jederzeit entsorgen k\u00f6nnen.<\/p>\n<p><\/p>\n<p>Nun zur praktischen Frage. Was tun, wenn ein Knoten verloren geht, auf dem die Festplatte war? Hier wird die Aufgabe auf einer h\u00f6heren Ebene gel\u00f6st. Bei ClickHouse haben wir Replikate, die auf einer h\u00f6heren Ebene arbeiten, also auf der Ebene von ClickHouse.<\/p>\n<p><\/p>\n<p>Wie sieht dieDisposition aus? DevOps ist daf\u00fcr verantwortlich, dass keine Daten verloren gehen. Er muss die Replikation richtig einstellen und darauf achten, dass die Replikation erfolgt. In der Replikation auf der Ebene von ClickHouse sollten die Daten dupliziert sein. Das ist nicht die Aufgabe des Betreibers. Und nicht die Aufgabe, die Kubernetes selbst l\u00f6st. Das geschieht auf der Ebene von ClickHouse.<\/p>\n<p><\/p>\n<p>Was tun, wenn Ihr Hardware-Knoten ausf\u00e4llt? In diesem Fall m\u00fcssen Sie einen zweiten Knoten aufbauen, richtig die Festplatte provisionieren und Labels anbringen. Danach erf\u00fcllt dieser Knoten die Anforderungen, sodass Kubernetes ein Pod-Instance darauf starten kann. Kubernetes wird ihn starten. Ihnen fehlen ja Pod-Kapazit\u00e4ten, um die definierte Anzahl zu erreichen. Der Knoten wird den Zyklus durchlaufen, den ich gezeigt habe. Auf der obersten Ebene wird ClickHouse erkennen, dass ein Replikat hinzugef\u00fcgt wurde, das noch leer ist, und die Daten beginnen m\u00fcssen, darauf \u00fcbertragen zu werden. Dieser Prozess ist noch unzureichend automatisiert. <\/p>\n<p><\/p>\n<p><em>Danke f\u00fcr den Vortrag! Wenn inkonsistente Ereignisse eintreten, der Operator abst\u00fcrzt und neu gestartet wird, w\u00e4hrend in diesem Moment Ereignisse eintreffen, wie gehen Sie damit um?<\/em><\/p>\n<p><\/p>\n<p>Was passiert, wenn der Operator abgest\u00fcrzt ist und neu gestartet wurde? <\/p>\n<p><\/p>\n<p><em>Ja. Und in diesem Moment sind Ereignisse eingetroffen.<\/em> <\/p>\n<p><\/p>\n<p>Die Aufgabe, was in diesem Fall zu tun ist, wird teilweise zwischen dem Operator und Kubernetes aufgeteilt. Kubernetes hat die F\u00e4higkeit, das aufgetretene Ereignis erneut abzuspielen. Es spielt es erneut ab. Die Aufgabe des Operators besteht jedoch darin, sicherzustellen, dass, wenn das Ereignisprotokoll wiederholt wird, diese Ereignisse idempotent sind. Und dass ein erneutes Eintreten des gleichen Ereignisses unser System nicht st\u00f6rt. Und unser Operator bew\u00e4ltigt diese Aufgabe. <\/p>\n<p><\/p>\n<p><em>Guten Tag! Vielen Dank f\u00fcr den Vortrag! Dmitry Zavyalov, Unternehmen<\/em> <em>Smedenova. Ist eine Anpassung des Operators mit haproxy geplant? Gibt es Interesse an einem anderen Load Balancer neben dem Standard, der intelligent ist und erkennt, dass dort tats\u00e4chlich ClickHouse l\u00e4uft.<\/em> <\/p>\n<p><\/p>\n<p>Sprechen Sie von Ingress?<\/p>\n<p><\/p>\n<p><em>Ja, Ingress durch haproxy ersetzen. In haproxy kann die Cluster-Topologie angegeben werden, wo sich die Replikate befinden.<\/em><\/p>\n<p><\/p>\n<p>Bisher haben wir dar\u00fcber noch nicht nachgedacht. Wenn Sie es ben\u00f6tigen und erkl\u00e4ren k\u00f6nnen, warum es notwendig ist, k\u00f6nnten wir es umsetzen, insbesondere wenn Sie teilnehmen m\u00f6chten. Wir w\u00fcrden das gerne in Betracht ziehen. Kurz gesagt \u2013 nein, derzeit haben wir diese Funktionalit\u00e4t nicht. Vielen Dank f\u00fcr den Hinweis, wir werden uns damit besch\u00e4ftigen. Und wenn Sie auch den Anwendungsfall erkl\u00e4ren und z.B. Issues auf GitHub erstellen, w\u00e4re das gro\u00dfartig.<\/p>\n<p><\/p>\n<p><em>Ist bereits vorhanden.<\/em><\/p>\n<p><\/p>\n<p>Gut. Wir sind offen f\u00fcr alle Vorschl\u00e4ge. Und haproxy wird auf die To-Do-Liste gesetzt. Die To-Do-Liste w\u00e4chst im Moment, statt sich zu verringern. Aber das ist gut, das zeigt, dass das Produkt nachgefragt wird.<\/p>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/523378\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0414\u043e\u043a\u043b\u0430\u0434 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432 Kubernetes, \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0435\u0433\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 Kubernetes \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d; \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438; \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442, \u0430 \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442. \u0414\u0430\u043b\u0435\u0435, \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":96966,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-96965","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0414\u043e\u043a\u043b\u0430\u0434 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432 Kubernetes, \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0435\u0433\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 Kubernetes \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d; \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438; \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442, \u0430 \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442. \u0414\u0430\u043b\u0435\u0435, \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 Kubernetes \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 \u0411\u0414. \u0412\u043b\u0430\u0434\u0438\u0441\u043b\u0430\u0432 \u041a\u043b\u0438\u043c\u0435\u043d\u043a\u043e (Altinity, 2019) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0414\u043e\u043a\u043b\u0430\u0434 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432 Kubernetes, \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0435\u0433\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 Kubernetes \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d; \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438; \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442, \u0430 \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442. \u0414\u0430\u043b\u0435\u0435, \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-10-15T12:42:53+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-15T12:42:53+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Kubernetes-Operator zur Verwaltung von Datenbank-Clustern. Vladislav Klimenko (Altinity, 2019) | ProHoster","description":"Der Vortrag behandelt praktische Aspekte der Entwicklung eines Operators in Kubernetes, die Gestaltung seiner Architektur und die grundlegenden Funktionsprinzipien. Im ersten Teil des Vortrags werden wir uns mit Folgendem befassen: Was ist ein Operator in Kubernetes und wozu dient er; wie der Operator das Management komplexer Systeme vereinfacht; was ein Operator kann und was nicht. Danach werden wir zur Diskussion \u00fcber die interne Struktur des Operators \u00fcbergehen. Wir werden die Architektur und Funktionsweise betrachten.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 Kubernetes \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 \u0411\u0414. \u0412\u043b\u0430\u0434\u0438\u0441\u043b\u0430\u0432 \u041a\u043b\u0438\u043c\u0435\u043d\u043a\u043e (Altinity, 2019) | ProHoster","og:description":"\u0414\u043e\u043a\u043b\u0430\u0434 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432 Kubernetes, \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0435\u0433\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 Kubernetes \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d; \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438; \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442, \u0430 \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442. \u0414\u0430\u043b\u0435\u0435, \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-15T12:42:53+00:00","article:modified_time":"2020-10-15T12:42:53+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"96965","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:29:25","updated":"2022-09-30 17:40:21"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/96965","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=96965"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/96965\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/96966"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=96965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=96965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=96965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}