{"id":91199,"date":"2020-08-10T01:42:03","date_gmt":"2020-08-09T23:42:03","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov"},"modified":"2020-08-10T01:42:03","modified_gmt":"2020-08-09T23:42:03","slug":"kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","title":{"rendered":"Kubernetes bei DomClick: wie man ruhig schlafen kann, w\u00e4hrend man einen Cluster mit 1000 Microservices verwaltet","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ich hei\u00dfe Viktor Jagofarov und bin der technische Entwicklungsleiter des Kubernetes-Platforms bei DomKlick im Ops-Team (Betrieb). Ich m\u00f6chte \u00fcber die Struktur unserer Dev  Ops-Prozesse, die Besonderheiten des Betriebs eines der gr\u00f6\u00dften k8s-Cluster in Russland sowie \u00fcber die DevOps\/SRE-Praktiken berichten, die unser Team anwendet.<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes bei DomClick: wie man ruhig schlafen kann, w\u00e4hrend man einen Cluster mit 1000 Microservices verwaltet\" src=\"\/wp-content\/uploads\/2020\/08\/6c908104c734b36cc7a960fbe4d65e3f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Ops-Team<\/h4>\n<p>\nMomentan besteht unser Ops-Team aus 15 Personen. Drei von ihnen sind f\u00fcr das B\u00fcro verantwortlich, zwei arbeiten in einer anderen Zeitzone und sind auch nachts verf\u00fcgbar. So ist immer jemand aus dem Ops-Team am Monitor und bereit, auf Vorf\u00e4lle jeder Komplexit\u00e4t zu reagieren. Wir haben keinen Nachtdienst, was unser psychisches Wohlbefinden erh\u00e4lt und allen erm\u00f6glicht, gut zu schlafen und ihre Freizeit nicht nur am Computer zu verbringen.<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes bei DomClick: wie man ruhig schlafen kann, w\u00e4hrend man einen Cluster mit 1000 Microservices verwaltet\" src=\"\/wp-content\/uploads\/2020\/08\/47051db273f116df376e64bad67c6f37.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie Kompetenzen sind vielf\u00e4ltig: Netzwerkspezialisten, DBA, ELK-Stack-Experten, Kubernetes-Admins\/Entwickler, Monitoring- und Virtualisierungsspezialisten, Hardware-Spezialisten usw. Alle sind vereint durch eins \u2014 jeder kann in gewissem Ma\u00dfe jeden ersetzen: zum Beispiel neue Knoten in das k8s-Cluster einf\u00fcgen, PostgreSQL aktualisieren, einen CI\/CD-Pipeline + Ansible schreiben, etwas auf Python\/Bash\/Go automatisieren oder Hardware im Rechenzentrum anschlie\u00dfen. Starke Kompetenzen in einem Bereich hindern nicht daran, in einen anderen Bereich zu wechseln und sich dort weiterzuentwickeln. Zum Beispiel habe ich in dem Unternehmen als PostgreSQL-Spezialist angefangen und jetzt liegt mein Hauptverantwortungsbereich bei Kubernetes-Clustern. In unserem Team wird pers\u00f6nliches Wachstum stets gef\u00f6rdert, und der Teamgeist ist stark ausgepr\u00e4gt.<\/p>\n<p>\u00dcbrigens, wir sind auf der Suche nach neuen Talenten. Die Anforderungen an die Kandidaten sind ziemlich standardisiert. F\u00fcr mich pers\u00f6nlich ist es wichtig, dass die Person ins Team passt, konfliktscheu ist, aber auch in der Lage ist, ihre Meinung zu vertreten, bereit ist, sich weiterzuentwickeln und keine Angst hat, Neues auszuprobieren und eigene Ideen einzubringen. Zudem sind Kenntnisse in Skriptprogrammiersprachen, grundlegendes Wissen \u00fcber Linux und Englisch erforderlich. Englisch ist notwendig, damit die Person im Falle eines Problems schnell eine L\u00f6sung \u00fcber Google finden kann, und zwar in 10 Sekunden, nicht in 10 Minuten. Fachleute mit tiefem Wissen \u00fcber Linux sind derzeit sehr schwer zu finden: Lustig, aber zwei von drei Kandidaten k\u00f6nnen nicht auf die Frage \u201eWas ist Load Average? Woraus setzt es sich zusammen?\u201c antworten, und die Frage \u201eWie sammle ich einen Core-Dump aus einem C-Programm?\u201c wird als etwas Aussergew\u00f6hnliches betrachtet\u2026 oder aus der Welt der Supermenschen\u2026 oder Dinosaurier. Damit m\u00fcssen wir leben, da Menschen oft andere Kompetenzen viel st\u00e4rker entwickelt haben, und \u201eLinux\u201c werden wir ihnen beibringen. Die Antwort auf die Frage \u201eWarum muss ein DevOps-Ingenieur das alles in der modernen Welt der Clouds wissen?\u201c w\u00fcrde den Rahmen dieses Artikels sprengen, aber in drei Worten: es ist alles notwendig.<\/p>\n<h4>Team Tools<\/h4>\n<p>\nDas Team Tools spielt eine wesentliche Rolle in der Automatisierung. Ihre Hauptaufgabe ist die Erstellung benutzerfreundlicher grafischer und CLI-Tools f\u00fcr Entwickler. Zum Beispiel erm\u00f6glicht unser internes Tool Confer mit nur wenigen Mausklicks, eine Anwendung in Kubernetes bereitzustellen, ihre Ressourcen zu konfigurieren, Schl\u00fcssel aus dem Vault und so weiter. Fr\u00fcher hatten wir Jenkins + Helm 2, aber wir mussten ein eigenes Tool entwickeln, um Copy-Paste zu vermeiden und Einheitlichkeit im Software-Lebenszyklus zu schaffen.<\/p>\n<p>Das Team Ops schreibt keine Pipelines f\u00fcr Entwickler, kann sie aber bei allen Fragen zur Erstellung beraten (manche verwenden immer noch Helm 3).<\/p>\n<h4>DevOps<\/h4>\n<p>\nWas DevOps angeht, sehen wir es so:<\/p>\n<p>Die Dev-Teams schreiben Code und setzen diesen \u00fcber Confer in dev -&gt; qa\/stage -&gt; prod um. Die Verantwortung daf\u00fcr, dass der Code nicht ruckelt und keine Fehler produziert, liegt bei den Dev- und Ops-Teams. Tags\u00fcber sollte zuerst der diensthabende Mitarbeiter des Ops-Teams auf Vorf\u00e4lle mit seiner Anwendung reagieren, und abends sowie nachts sollte der diensthabende Administrator (Ops) den diensthabenden Entwickler wecken, wenn er sicher wei\u00df, dass das Problem nicht in der Infrastruktur liegt. Alle Metriken und Alarme im Monitoring erscheinen automatisch oder halbautomatisch.<\/p>\n<p>Der Verantwortungsbereich von Ops beginnt mit dem Rollout der Anwendung in die Produktion, aber die Verantwortung von Dev endet damit nicht \u2014 wir arbeiten gemeinsam und sitzen im gleichen Boot.<\/p>\n<p>Entwickler beraten die Administratoren, wenn Hilfe beim Schreiben des Administrationsmikrosystems ben\u00f6tigt wird (zum Beispiel Go-Backend + HTML5), und die Administratoren beraten die Entwickler bei Infrastrukturfragen oder Fragen zu k8s.<\/p>\n<p>\u00dcbrigens haben wir \u00fcberhaupt kein Monolith, nur Mikrodienste. Ihre Anzahl schwankt derzeit zwischen 900 und 1000 im Produktions-k8s-Cluster, wenn man nach der Anzahl misst. <i>deployments<\/i>Die Anzahl der Pods schwankt zwischen 1700 und 2000. Momentan gibt es etwa 2000 Pods im Produktionscluster.<\/p>\n<p>Ich kann die genauen Zahlen nicht nennen, da wir nicht ben\u00f6tigte Mikrodienste beobachten und sie halbautomatisch entfernen. Dabei hilft uns <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Nastradamus\/useless-operator\">useless-operator<\/a><\/noindex>, was Ressourcen und Geld erheblich spart.<\/p>\n<h2> Ressourcenverwaltung <\/h2>\n<p><\/p>\n<h4> \u00dcberwachung <\/h4>\n<p>\nEin Grundpfeiler beim Betrieb eines gro\u00dfen Clusters ist ein gut aufgebautes und informatives Monitoring. Wir haben bisher keine universelle L\u00f6sung gefunden, die 100 % aller Anforderungen an das Monitoring abdeckt, daher erstellen wir regelm\u00e4\u00dfig verschiedene kundenspezifische L\u00f6sungen in diesem Bereich.<\/p>\n<ul>\n<li><b>Zabbix<\/b>Das gute alte Monitoring, das in erster Linie daf\u00fcr gedacht ist, den allgemeinen Zustand der Infrastruktur zu \u00fcberwachen. Es sagt uns, wann ein Knoten aufgrund von CPU, Speicher, Festplatten, Netzwerk usw. ausf\u00e4llt. Nichts \u00dcbernat\u00fcrliches, aber wir haben auch ein separates DaemonSet mit Agenten, mit denen wir zum Beispiel den Zustand von DNS im Cluster \u00fcberwachen: wir suchen nach st\u00f6renden Pods von coredns und \u00fcberpr\u00fcfen die Erreichbarkeit externer Hosts. Man k\u00f6nnte sich fragen, warum wir uns daf\u00fcr die M\u00fche machen, aber bei gro\u00dfen Datenmengen ist diese Komponente ein ernsthafter Ausfallpunkt. Ich habe bereits <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/495450\/\">beschrieben.<\/a><\/noindex>, wie ich mit der DNS-Leistung im Cluster gek\u00e4mpft habe.<\/li>\n<li><b>Prometheus Operator<\/b>. Eine Reihe verschiedener Exporteure gibt einen gro\u00dfen \u00dcberblick \u00fcber alle Komponenten des Clusters. Anschlie\u00dfend visualisieren wir all dies auf gro\u00dfen Dashboards in Grafana und verwenden alertmanager f\u00fcr Benachrichtigungen.\n<\/li>\n<\/ul>\n<p>\nEin weiteres n\u00fctzliches Werkzeug f\u00fcr uns war <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Nastradamus\/list-ingress\">list-ingress<\/a><\/noindex>. Wir haben es geschrieben, nachdem wir mehrmals auf die Situation gesto\u00dfen sind, in der ein Team mit seinen Ingress-Pfaden das andere Team \u00fcberlappt, was zu 50x-Fehlern f\u00fchrte. Jetzt \u00fcberpr\u00fcfen die Entwickler vor dem Deployment in die Produktion, dass sie niemanden st\u00f6ren, und f\u00fcr mein Team ist es ein gutes Werkzeug zur ersten Diagnose von Ingress-Problemen. Lustig ist, dass es urspr\u00fcnglich f\u00fcr Administratoren geschrieben wurde und ziemlich \u201egrobschl\u00e4chtig\u201c aussah, aber nachdem das Tool bei den Entwicklungsteams beliebt wurde, hat es sich stark ver\u00e4ndert und sieht nicht mehr aus wie \u201eein Admin hat ein Web-Interface f\u00fcr Administratoren gemacht\u201c. Bald werden wir von diesem Tool absehen und solche Situationen werden noch vor dem Rollout der Pipeline validiert.<\/p>\n<h4>Die Ressourcen der Teams im \u201eKube\u201c<\/h4>\n<p>\nBevor wir mit den Beispielen beginnen, ist es wichtig zu erkl\u00e4ren, wie wir die Ressourcenverteilung f\u00fcr <i>Mikroservices<\/i>.<\/p>\n<p>verstehen k\u00f6nnen, welche Teams und in welchen Mengen ihre <i>Ressourcen<\/i> (CPU, RAM, lokaler SSD) verwenden, weisen wir jedem Team seinen eigenen <i>Namespace<\/i> in \u201eKube\u201c und beschr\u00e4nken dessen maximale Kapazit\u00e4ten bez\u00fcglich CPU, RAM und Festplatte, nachdem wir die Bed\u00fcrfnisse der Teams besprochen haben. Folglich blockiert ein Team im Allgemeinen nicht das gesamte Cluster f\u00fcr das Deployment, indem es sich Tausende von Kernen und Terabytes von RAM reserviert. Zugriffsrechte im Namespace werden \u00fcber AD vergeben (wir verwenden RBAC). Namespaces und deren Limits werden \u00fcber einen Pull-Request im GIT-Repository hinzugef\u00fcgt und anschlie\u00dfend wird alles automatisch \u00fcber die Ansible-Pipeline ausgerollt.<\/p>\n<p>Beispiel f\u00fcr die Zuweisung von Ressourcen an ein Team:<\/p>\n<pre><code class=\"go\">namespaces:\n\n  chat-team:\n    pods: 23\n    limits:\n      cpu: 11\n      memory: 20Gi\n    requests:\n      cpu: 11\n      memory: 20Gi\n<\/code><\/pre>\n<p><\/p>\n<h4>Requests und Limits<\/h4>\n<p>\nIm \u201eKube\u201c <i>Request<\/i> \u2014 das ist die Menge an garantiert reservierten Ressourcen f\u00fcr <i>Pod<\/i> (eine oder mehrere Docker-Container) im Cluster. Limit \u2013 das ist ein nicht garantierter H\u00f6chstwert. Oft sieht man in den Grafiken, dass ein Team sich zu viele Requests f\u00fcr all seine Anwendungen gegeben hat und die Anwendung nicht in \u201eKube\u201c deployen kann, da alle Requests innerhalb ihres Namespaces bereits \u201eausgegeben\u201c sind.<\/p>\n<p>Der richtige Weg aus einer solchen Situation: die tats\u00e4chliche Ressourcennutzung beobachten und mit der angeforderten Menge (Request) vergleichen.<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes bei DomClick: wie man ruhig schlafen kann, w\u00e4hrend man einen Cluster mit 1000 Microservices verwaltet\" src=\"\/wp-content\/uploads\/2020\/08\/417373d4421064f28d57a03b6bb5bf94.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Kubernetes bei DomClick: wie man ruhig schlafen kann, w\u00e4hrend man einen Cluster mit 1000 Microservices verwaltet\" src=\"\/wp-content\/uploads\/2020\/08\/3168ad6dc8b159059b21e1177e145376.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAuf den obigen Screenshots ist zu sehen, dass die \u201eangeforderten\u201c (Requested) CPUs der tats\u00e4chlichen Anzahl von Threads angen\u00e4hert werden, w\u00e4hrend die Limits die Anzahl der tats\u00e4chlichen CPU-Threads \u00fcberschreiten k\u00f6nnen =)<\/p>\n<p>Lassen Sie uns nun einen Namespace (ich habe den Namespace kube-system gew\u00e4hlt \u2013 den Systemnamespace f\u00fcr die Komponenten von \u201eKube\u201c) im Detail betrachten und das Verh\u00e4ltnis von tats\u00e4chlich verwendetem CPU-Zeit und Speicher zu den angeforderten Ressourcen analysieren:<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes bei DomClick: wie man ruhig schlafen kann, w\u00e4hrend man einen Cluster mit 1000 Microservices verwaltet\" src=\"\/wp-content\/uploads\/2020\/08\/ed6160de5397b8cd39cbae172d4bb872.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEs ist offensichtlich, dass viel mehr Speicher und CPU f\u00fcr systemnahe Dienste reserviert ist, als tats\u00e4chlich genutzt wird. Im Falle von kube-system ist dies jedoch gerechtfertigt: es kam vor, dass der Nginx Ingress Controller oder nodelocaldns in Spitzenzeiten die CPU auslasteten und viel RAM beanspruchten, daher ist ein solcher Puffer hier sinnvoll. Au\u00dferdem k\u00f6nnen wir uns nicht auf die Grafiken der letzten 3 Stunden verlassen: Es w\u00e4re w\u00fcnschenswert, historische Metriken \u00fcber einen l\u00e4ngeren Zeitraum zu sehen.<\/p>\n<p>Ein System von \"Empfehlungen\" wurde entwickelt. Beispielsweise kann man hier sehen, welche Ressourcen besser \u201eLimits\u201c (maximale erlaubte Obergrenze) angehoben werden sollten, um \u201eThrottling\u201c zu vermeiden: der Moment, wenn bereits CPU oder Speicher in dem ihm zugewiesenen Zeitquantum verbraucht wurden und darauf warten, \"entfroren\" zu werden:<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes bei DomClick: wie man ruhig schlafen kann, w\u00e4hrend man einen Cluster mit 1000 Microservices verwaltet\" src=\"\/wp-content\/uploads\/2020\/08\/f23aece10a585e6847bcacfe947031d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUnd hier sind Pods, die ihre Anspr\u00fcche z\u00fcgeln sollten:<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes bei DomClick: wie man ruhig schlafen kann, w\u00e4hrend man einen Cluster mit 1000 Microservices verwaltet\" src=\"\/wp-content\/uploads\/2020\/08\/1ec9996ce6355aeba603008d51aac209.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00dcber <i>Throttling<\/i> + \u00dcber das Monitoring von Ressourcen k\u00f6nnte man nicht nur einen Artikel schreiben, daher stellt gerne Fragen in den Kommentaren. In wenigen Worten kann ich sagen, dass die Automatisierung solcher Metriken eine ziemlich komplizierte Aufgabe ist und viel Zeit sowie Geschicklichkeit mit \u201eWindow\u201c-Funktionen und \u201eCTEs\u201c in Prometheus \/ VictoriaMetrics erfordert (diese Begriffe sind in Anf\u00fchrungszeichen gesetzt, da es in PromQL kaum etwas Vergleichbares gibt und man aufw\u00e4ndige Abfragen, die mehrere Bildschirme f\u00fcllen, konstruieren und optimieren muss).<\/p>\n<p>Insgesamt haben Entwickler Werkzeuge zum Monitoring ihrer Namespaces in \u201eKube\u201c, und sie k\u00f6nnen selbst entscheiden, wo und wann bei welchen Anwendungen Ressourcen \u201everknappen\u201c werden k\u00f6nnen, w\u00e4hrend andere Pods die gesamte CPU f\u00fcr die ganze Nacht abbekommen k\u00f6nnen.<\/p>\n<h4>Methodologien<\/h4>\n<p>\nIm Unternehmen, wie es derzeit <i>modern<\/i>, halten wir uns an DevOps- und <i>SRE<\/i>-Praxis. Wenn das Unternehmen 1000 Mikrodienste hat, etwa 350 Entwickler und 15 Administratoren f\u00fcr die gesamte Infrastruktur, muss man \u201emodern\u201c sein: hinter all diesen \u201eBuzzwords\u201c verbirgt sich ein dringender Bedarf an Automatisierung aller Prozesse, und Admins sollten kein Flaschenhals im Prozess sein.<\/p>\n<p>Als Ops bieten wir verschiedene Metriken und Dashboards f\u00fcr Entwickler an, die mit der Reaktionsgeschwindigkeit der Dienste und deren Fehlern zusammenh\u00e4ngen.<\/p>\n<p>Wir verwenden solche Methodologien wie: <noindex><a rel=\"nofollow\" href=\"https:\/\/thenewstack.io\/monitoring-microservices-red-method\/\">RED<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/usemethod.html\">USE<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/forepaas\/distributed-monitoring-101-the-four-golden-signals-305bbbc33d35\">Golden Signals<\/a><\/noindex>, indem wir sie zusammenf\u00fchren. Wir versuchen, die Anzahl der Dashboards zu minimieren, sodass auf einen Blick klar ist, welcher Dienst gerade degradiert (zum Beispiel Antwortcodes pro Sekunde, Antwortzeiten im 99. Perzentil) usw. Sobald neue Metriken f\u00fcr die allgemeinen Dashboards ben\u00f6tigt werden, zeichnen wir sie sofort und f\u00fcgen sie hinzu.<\/p>\n<p><i>Ich habe seit einem Monat keine Diagramme mehr erstellt. Das ist wahrscheinlich ein gutes Zeichen: Das bedeutet, dass die meisten \"W\u00fcnsche\" bereits umgesetzt wurden. Fr\u00fcher habe ich wenigstens einmal am Tag ein neues Diagramm gezeichnet.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes bei DomClick: wie man ruhig schlafen kann, w\u00e4hrend man einen Cluster mit 1000 Microservices verwaltet\" src=\"\/wp-content\/uploads\/2020\/08\/574f1b4d2be78fb779f1771bffac51dd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Kubernetes bei DomClick: wie man ruhig schlafen kann, w\u00e4hrend man einen Cluster mit 1000 Microservices verwaltet\" src=\"\/wp-content\/uploads\/2020\/08\/6ab2aa05f912839b14bdbcf84faaeb3a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDas Ergebnis ist wertvoll, weil die Entwickler nun ziemlich selten zu den Admins mit Fragen kommen wie \"Wo kann ich eine bestimmte Metrik einsehen?\"<\/p>\n<p>Einf\u00fchrung <i>Service Mesh<\/i> steht vor der T\u00fcr und wird allen das Leben erheblich erleichtern. Die Kollegen aus dem Tools-Bereich sind bereits nahe daran, das abstrakte \u201eIstio f\u00fcr gesunde Menschen\u201c einzuf\u00fchren: Der Lebenszyklus jeder HTTP(s)-Anfrage wird im Monitoring sichtbar sein, und es wird immer m\u00f6glich sein zu verstehen, \u201ean welchem Punkt alles kaputt gegangen ist\u201c bei der Interaktion zwischen Diensten (und nicht nur). Abonnieren Sie die Neuigkeiten des Unternehmens Hub von DomClick. =)<\/p>\n<h2>Unterst\u00fctzung der Kubernetes-Infrastruktur<\/h2>\n<p>\nHistorisch gesehen verwenden wir eine gepatchte Version <i>Kubespray<\/i> \u2014 Ansible-Rolle zum Bereitstellen, Erweitern und Aktualisieren von Kubernetes. Irgendwann wurde die Unterst\u00fctzung f\u00fcr non-kubeadm-Installationen aus dem Hauptzweig entfernt, und ein \u00dcbergangsprozess zu kubeadm wurde nicht vorgeschlagen. Infolgedessen hat die Firma Southbridge ihren Fork erstellt (mit Unterst\u00fctzung f\u00fcr kubeadm und schnellem Fix von kritischen Problemen). <\/p>\n<p>Der Prozess der Aktualisierung aller k8s-Cluster sieht folgenderma\u00dfen aus:<\/p>\n<ul>\n<li>Wir nehmen <i>Kubespray<\/i> von Southbridge, vergleichen mit unserem Branch, mergen.<\/li>\n<li>Wir rollen das Update aus in <i>Stress<\/i>-\u201eKube\u201c.<\/li>\n<li>Wir rollen das Update auf eine Node aus (in Ansible hei\u00dft das \u201eserial: 1\u201c) in <i>Dev<\/i>-\u201eKube\u201c.<\/li>\n<li>Aktualisieren <i>Prod<\/i> am Samstagabend eine Node f\u00fcr eine Node.<\/li>\n<\/ul>\n<p>\nIn Zukunft haben wir geplant, <i>Kubespray<\/i> durch etwas Schnelleres zu ersetzen und auf <i>kubeadm<\/i>.<\/p>\n<p>Wir haben insgesamt drei \u201eKubes\u201c: Stress, Dev und Prod. Wir planen, einen weiteren zu starten (<i>Hot Standby<\/i>) Prod-\u201eKube\u201c im zweiten Rechenzentrum. <i>Stress<\/i> und <i>Dev<\/i> leben in \u201eVirtuellen Maschinen\u201c (oVirt f\u00fcr Stress und VMWare Cloud f\u00fcr Dev). <i>Prod<\/i>-\u201eKube\u201c l\u00e4uft auf \u201enacktem Metall\u201c: es sind identische Nodes mit 32 CPU-Threads, 64-128 GB RAM und 300 GB SSD RAID 10 \u2014 insgesamt sind es 50 St\u00fcck. Drei \u201ed\u00fcnne\u201c Nodes sind f\u00fcr \u201eMeister\u201c <i>Prod<\/i>-\u201eKubes\u201c reserviert: 16 GB RAM, 12 CPU-Threads.<\/p>\n<p>F\u00fcr die Produktion ziehen wir es vor, \u201enacktes Metall\u201c zu verwenden und vermeiden unn\u00f6tige Schichten wie <i>OpenStack<\/i>: wir brauchen keine \u201elautstarken Nachbarn\u201c und CPU <i>Steal Time<\/i>. Und die Komplexit\u00e4t der Verwaltung steigt nahezu doppelt, wenn es sich um In-House OpenStack handelt.<\/p>\n<p>F\u00fcr die CI\/CD von \u00abKubovye\u00bb und anderen Infrastrukturkomponenten verwenden wir einen separaten GIT-Server, Helm 3 (wir sind ziemlich schmerzhaft von Helm 2 umgestiegen, sind aber sehr erfreut \u00fcber die Option <i>atomic<\/i>), Jenkins, Ansible und Docker. Wir lieben Feature-Branches und das Deployment in verschiedene Umgebungen aus einem einzigen Repository.<\/p>\n<h3>Fazit<\/h3>\n<p><img decoding=\"async\" alt=\"Kubernetes bei DomClick: wie man ruhig schlafen kann, w\u00e4hrend man einen Cluster mit 1000 Microservices verwaltet\" src=\"\/wp-content\/uploads\/2020\/08\/34ddcd1f275c63c1ad821218d16b5abb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSo sieht der DevOps-Prozess bei der Firma DomClick aus Sicht eines Betriebstechnikers allgemein aus. Der Artikel ist weniger technisch geworden, als ich erwartet hatte: Daher, folgen Sie den Neuigkeiten von DomClick auf Habr: Es wird mehr \u201ehardcore\u201c Artikel \u00fcber Kubernetes und nicht nur das geben.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/501122\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f). \u042f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 Dev &lt;-&gt; Ops, \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 k8s-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e DevOps\/SRE-\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 Ops \u0412 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91200,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91199","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f).\" \/>\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\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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\udd47Kubernetes \u0432 \u0414\u043e\u043c\u041a\u043b\u0438\u043a: \u043a\u0430\u043a \u0441\u043f\u0430\u0442\u044c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u043d\u0430 1000 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f).\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov\" \/>\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-08-09T23:42:03+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-09T23:42:03+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 bei DomClick: Wie man ruhig schlafen kann, w\u00e4hrend man einen Cluster mit 1000 Mikrodiensten verwaltet | ProHoster","description":"Mein Name ist Viktor Yagofarov, und ich entwickle die Kubernetes-Plattform bei DomClick in der Position des technischen Leiters der Entwicklung im Ops-Team (Betrieb).","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","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\udd47Kubernetes \u0432 \u0414\u043e\u043c\u041a\u043b\u0438\u043a: \u043a\u0430\u043a \u0441\u043f\u0430\u0442\u044c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u043d\u0430 1000 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 | ProHoster","og:description":"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u042f\u0433\u043e\u0444\u0430\u0440\u043e\u0432, \u0438 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0414\u043e\u043c\u041a\u043b\u0438\u043a \u0432 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Ops (\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f).","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kubernetes-v-domklik-kak-spat-spokojno-upravlyaya-klasterom-na-1000-mikroservisov","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-08-09T23:42:03+00:00","article:modified_time":"2020-08-09T23:42:03+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91199","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 12:32:23","updated":"2022-09-28 06:43:59","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/91199","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=91199"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/91199\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/91200"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=91199"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=91199"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=91199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}