Kubernetes - die Wolke zähmen

Wenn Sie Linux zur Bereitstellung von Diensten für ein Unternehmen verwenden möchten, müssen diese Dienste sicher, belastbar und skalierbar sein. Schöne Worte, aber was meinen wir damit?

"Sicher" bedeutet, dass Benutzer auf die Daten zugreifen können, die sie benötigen, sei es schreibgeschützt oder schreibgeschützt. Gleichzeitig werden keine Daten einer Partei zugänglich gemacht, die nicht berechtigt ist, sie zu sehen. Sicherheit täuscht: Sie können denken, Sie haben alles geschützt, um später herauszufinden, dass es Löcher gibt. Das Entwerfen in Sicherheit von Beginn eines Projekts an ist viel einfacher als der Versuch, es später nachzurüsten.

"Ausfallsicher" bedeutet, dass Ihre Dienste Fehler in der Infrastruktur tolerieren. Ein Fehler kann ein Server-Festplattencontroller sein, der nicht mehr auf Festplatten zugreifen kann und die Daten nicht mehr erreichbar macht. Oder der Fehler ist möglicherweise ein Netzwerk-Switch, mit dem zwei oder mehr Systeme nicht mehr miteinander kommunizieren können. In diesem Zusammenhang ist ein „Single Point of Failure“ oder SPOF ein Fehler, der sich nachteilig auf die Verfügbarkeit von Diensten auswirkt. Eine ausfallsichere Infrastruktur ist eine ohne SPOFs.

"Skalierbar" beschreibt die Fähigkeit von Systemen, Nachfragespitzen angemessen zu handhaben. Es bestimmt auch, wie einfach Änderungen an Systemen vorgenommen werden können. Fügen Sie beispielsweise einen neuen Benutzer hinzu, erhöhen Sie die Speicherkapazität oder verschieben Sie eine Infrastruktur von Amazon Web Services in die Google Cloud - oder verschieben Sie sie sogar intern.

Sobald Ihre Infrastruktur über einen Server hinaus erweitert wird, gibt es viele Möglichkeiten, die Sicherheit, Ausfallsicherheit und Skalierbarkeit zu erhöhen. Wir werden uns ansehen, wie diese Probleme traditionell gelöst wurden und welche neuen Technologien verfügbar sind, die das Gesicht des Big Application Computing verändern.

Holen Sie sich mehr Linux!

Genießen Sie, was Sie lesen? Willst du mehr Linux und Open Source? Wir können buchstäblich liefern! Abonnieren Sie das Linux-Format noch heute zu einem günstigen Preis. Sie können Druckausgaben, digitale Ausgaben oder warum nicht beides bekommen? Wir liefern weltweit gegen eine einfache Jahresgebühr an Ihre Haustür. Machen Sie Ihr Leben besser und einfacher, abonnieren Sie jetzt!

Um zu verstehen, was heute möglich ist, ist es hilfreich zu sehen, wie Technologieprojekte traditionell umgesetzt wurden. Früher - also vor mehr als 10 Jahren - kauften oder mieteten Unternehmen Hardware, um alle Komponenten ihrer Anwendungen auszuführen. Selbst relativ einfache Anwendungen wie eine WordPress-Website bestehen aus mehreren Komponenten. Im Fall von WordPress wird eine MySQL-Datenbank zusammen mit einem Webserver wie Apache und einer Möglichkeit zum Umgang mit PHP-Code benötigt. Also würden sie einen Server bauen, Apache, PHP und MySQL einrichten, WordPress installieren und loslegen.

Im Großen und Ganzen hat das funktioniert. Es hat gut genug funktioniert, dass es heute noch eine große Anzahl von Servern gibt, die genau so konfiguriert sind. Aber es war nicht perfekt und zwei der größeren Probleme waren Ausfallsicherheit und Skalierbarkeit.

Mangelnde Ausfallsicherheit führte dazu, dass jedes signifikante Problem auf dem Server zu einem Dienstausfall führen würde. Ein katastrophaler Ausfall würde natürlich keine Website bedeuten, aber es gab auch keinen Raum für die Durchführung geplanter Wartungsarbeiten, ohne die Website zu beeinträchtigen. Selbst die Installation und Aktivierung eines routinemäßigen Sicherheitsupdates für Apache würde einen Ausfall der Website für einige Sekunden erfordern.

Das Resilienzproblem wurde größtenteils durch den Aufbau von „Hochverfügbarkeitsclustern“ gelöst. Das Prinzip bestand darin, zwei Server auf der Website auszuführen, die so konfiguriert waren, dass der Ausfall eines Servers nicht zum Ausfall der Website führte. Der bereitgestellte Dienst war auch dann stabil, wenn dies bei den einzelnen Servern nicht der Fall war.

Abstrakte Wolken

Ein Teil der Kraft von Kubernetes ist die Abstraktion, die es bietet. Aus Entwicklersicht entwickeln sie die Anwendung für die Ausführung in einem Docker-Container. Docker ist es egal, ob es unter Windows, Linux oder einem anderen Betriebssystem ausgeführt wird. Derselbe Docker-Container kann aus dem MacBook des Entwicklers entnommen und ohne Änderungen unter Kubernetes ausgeführt werden.

Die Kubernetes-Installation selbst kann eine einzelne Maschine sein. Natürlich werden viele Vorteile von Kubernetes nicht verfügbar sein: Es wird keine automatische Skalierung geben. Es gibt einen offensichtlichen Fehlerpunkt und so weiter. Als Proof of Concept in einer Testumgebung funktioniert es jedoch.

Sobald Sie für die Produktion bereit sind, können Sie es intern oder bei einem Cloud-Anbieter wie AWS oder Google Cloud ausführen. Die Cloud-Anbieter verfügen über einige integrierte Dienste, die beim Ausführen von Kubernetes helfen, aber keine davon sind harte Anforderungen. Wenn Sie zwischen Google, Amazon und Ihrer eigenen Infrastruktur wechseln möchten, richten Sie Kubernetes ein und wechseln zwischen. Keine Ihrer Anwendungen muss sich in irgendeiner Weise ändern.

Und wo ist Linux? Kubernetes läuft unter Linux, aber das Betriebssystem ist für die Anwendungen unsichtbar. Dies ist ein wichtiger Schritt für die Reife und Benutzerfreundlichkeit von IT-Infrastrukturen.

Der Slashdot-Effekt

Das Problem der Skalierbarkeit ist etwas schwieriger. Nehmen wir an, Ihre WordPress-Site verzeichnet monatlich 1.000 Besucher. Eines Tages wird Ihr Unternehmen im Radio 4 oder im Frühstücksfernsehen erwähnt. Plötzlich erhalten Sie in 20 Minuten Besucher im Wert von mehr als einem Monat. Wir haben alle gehört, dass Websites abstürzen, und das ist in der Regel der Grund: mangelnde Skalierbarkeit.

Die beiden Server, die zur Ausfallsicherheit beigetragen haben, konnten eine höhere Arbeitslast bewältigen als ein Server allein, aber das ist immer noch begrenzt. Sie würden zu 100 Prozent für zwei Server bezahlen, und die meiste Zeit funktionierten beide einwandfrei. Es ist wahrscheinlich, dass nur eine Person Ihre Website betreiben kann. Dann erwähnt John Humphrys Ihr Unternehmen am heutigen Tag und Sie benötigen 10 Server, um die Last zu bewältigen - allerdings nur für einige Stunden.

Die bessere Lösung für das Problem der Ausfallsicherheit und Skalierbarkeit war Cloud Computing. Richten Sie eine oder zwei Serverinstanzen - die kleinen Server, auf denen Ihre Anwendungen ausgeführt werden - in Amazon Web Services (AWS) oder Google Cloud ein. Wenn eine der Instanzen aus irgendeinem Grund fehlschlägt, wird sie automatisch neu gestartet. Richten Sie die automatische Skalierung korrekt ein. Wenn die Arbeitslast auf Ihren Webserverinstanzen durch Mr Humphrys schnell ansteigt, werden automatisch zusätzliche Serverinstanzen gestartet, um die Arbeitslast zu teilen. Später, wenn die Zinsen nachlassen, werden diese zusätzlichen Instanzen gestoppt und Sie zahlen nur für das, was Sie verwenden. Perfekt… oder doch?

Die Cloud-Lösung ist zwar viel flexibler als der herkömmliche Standalone-Server, es gibt jedoch immer noch Probleme. Das Aktualisieren aller laufenden Cloud-Instanzen ist nicht einfach. Das Entwickeln für die Cloud ist ebenfalls mit Herausforderungen verbunden: Der von Ihren Entwicklern verwendete Laptop ähnelt möglicherweise der Cloud-Instanz, ist jedoch nicht identisch. Wenn Sie sich für AWS entscheiden, ist die Migration auf Google Cloud ein komplexes Unterfangen. Angenommen, Sie möchten Ihren Computer aus irgendeinem Grund einfach nicht an Amazon, Google oder Microsoft übergeben.

Container haben sich als Mittel herauskristallisiert, um Anwendungen mit all ihren Abhängigkeiten in einem einzigen Paket zusammenzufassen, das überall ausgeführt werden kann. Container wie Docker können auf den Laptops Ihrer Entwickler genauso ausgeführt werden wie auf Ihren Cloud-Instanzen. Die Verwaltung einer Containerflotte wird jedoch mit zunehmender Anzahl von Containern immer schwieriger.

Die Antwort lautet Container Orchestration. Dies ist eine signifikante Verschiebung des Fokus. Zuvor haben wir sichergestellt, dass wir über genügend physische oder virtuelle Server verfügen, um die Arbeitslast bedienen zu können. Die automatische Skalierung der Cloud-Anbieter hat geholfen, aber wir haben uns immer noch mit Instanzen befasst. Wir mussten Load Balancer, Firewalls, Datenspeicher und mehr manuell konfigurieren. Mit der Container-Orchestrierung wird all das (und noch viel mehr) erledigt. Wir spezifizieren die Ergebnisse, die wir benötigen, und unsere Container-Orchestrierungs-Tools erfüllen unsere Anforderungen. Wir geben an, was wir tun möchten und nicht, wie wir es tun möchten.

Kontinuierliche Integration und kontinuierliche Bereitstellung können mit Kubernetes gut funktionieren. Hier ist eine Übersicht über Jenkins, die zum Erstellen und Bereitstellen einer Java-Anwendung verwendet werden

Werde ein Kubernete

Kubernetes (ku-ber-net-eez) ist heute das führende Container-Orchestrierungs-Tool und stammt von Google. Wenn jemand weiß, wie man riesige IT-Infrastrukturen betreibt, tut dies Google. Der Ursprung von Kubernetes ist Borg, ein internes Google-Projekt, mit dem die meisten Google-Anwendungen ausgeführt werden, darunter Suchmaschine, Google Mail, Google Maps und mehr. Borg war ein Geheimnis, bis Google 2015 ein Papier darüber veröffentlichte, aber das Papier machte sehr deutlich, dass Borg die Hauptinspiration hinter Kubernetes war.

Borg ist ein System, das Rechenressourcen in den Rechenzentren von Google verwaltet und die Anwendungen von Google sowohl in der Produktion als auch auf andere Weise trotz Hardwarefehlern, Ressourcenerschöpfung oder anderen Problemen, die ansonsten zu einem Ausfall geführt haben könnten, am Laufen hält. Dazu werden die Tausenden von Knoten, aus denen eine Borg-Zelle besteht, und die darauf laufenden Container sorgfältig überwacht und Container nach Bedarf als Reaktion auf Probleme oder Lastschwankungen gestartet oder gestoppt.

Kubernetes selbst entstand aus der GIFEE-Initiative von Google ("Googles Infrastruktur für alle anderen") und wurde als freundlichere Version von Borg entwickelt, die außerhalb von Google nützlich sein könnte. Es wurde der Linux Foundation im Jahr 2015 durch die Gründung der Cloud Native Computing Foundation (CNCF) gespendet.

Kubernetes bietet ein System, mit dem Sie Ihre containerisierten Anwendungen und Dienste „deklarieren“ und sicherstellen, dass Ihre Anwendungen gemäß diesen Deklarationen ausgeführt werden. Wenn Ihre Programme externe Ressourcen wie Speicher oder Load Balancer benötigen, kann Kubernetes diese automatisch bereitstellen. Es kann Ihre Anwendungen vergrößern oder verkleinern, um mit Änderungen der Last Schritt zu halten, und bei Bedarf sogar Ihren gesamten Cluster skalieren. Die Komponenten Ihres Programms müssen nicht einmal wissen, wo sie ausgeführt werden: Kubernetes stellt Anwendungen interne Namensdienste zur Verfügung, damit sie eine Verbindung zu "wp_mysql" herstellen und automatisch mit der richtigen Ressource verbunden werden können. "

Das Endergebnis ist eine Plattform, mit der Sie Ihre Anwendungen auf jeder Infrastruktur ausführen können, von einer einzelnen Maschine über ein lokales System-Rack bis hin zu Cloud-basierten Flotten virtueller Maschinen, die auf einem großen Cloud-Anbieter ausgeführt werden und alle dieselben Container verwenden und Konfiguration. Kubernetes ist anbieterunabhängig: Führen Sie es aus, wo immer Sie möchten.

Kubernetes ist ein mächtiges Werkzeug und notwendigerweise komplex. Bevor wir uns einen Überblick verschaffen, müssen wir einige Begriffe einführen, die in Kubernetes verwendet werden. Container führen einzelne Anwendungen aus, wie oben erläutert, und sind in Pods gruppiert. Ein Pod ist eine Gruppe eng miteinander verbundener Container, die zusammen auf demselben Host bereitgestellt werden und einige Ressourcen gemeinsam nutzen. Die Container in einem Pod arbeiten als Team: Sie führen verwandte Funktionen aus, z. B. einen Anwendungscontainer und einen Protokollcontainer mit spezifischen Einstellungen für die Anwendung.

Eine Übersicht über Kubernetes zeigt den Master, auf dem die Schlüsselkomponenten und zwei Knoten ausgeführt werden. Beachten Sie, dass in der Praxis die Hauptkomponenten auf mehrere Systeme aufgeteilt werden können

Vier wichtige Kubernetes-Komponenten sind der API-Server, der Scheduler, der Controller Manager und eine verteilte Konfigurationsdatenbank mit dem Namen etcd. Der API-Server ist das Herzstück von Kubernetes und fungiert als primärer Endpunkt für alle Verwaltungsanforderungen. Diese können von einer Vielzahl von Quellen generiert werden, einschließlich anderer Kubernetes-Komponenten, wie z. B. dem Scheduler, Administratoren über Befehlszeilen- oder webbasierte Dashboards und containerisierten Anwendungen. Es validiert Anforderungen und aktualisiert Daten, die in etcd gespeichert sind.

Der Scheduler bestimmt, auf welchen Knoten die verschiedenen Pods ausgeführt werden, und berücksichtigt dabei Einschränkungen wie Ressourcenanforderungen, Hardware- oder Softwareeinschränkungen, Arbeitslast, Fristen und mehr.

Der Controller Manager überwacht den Status des Clusters und versucht, Pods nach Bedarf über den API-Server zu starten oder zu stoppen, um den Cluster in den gewünschten Status zu versetzen. Es verwaltet auch einige interne Verbindungen und Sicherheitsfunktionen.

Jeder Knoten führt einen Kubelet-Prozess aus, der mit dem API-Server kommuniziert und Container verwaltet - im Allgemeinen mithilfe von Docker - und Kube-Proxy, der das Netzwerk-Proxy und den Lastausgleich innerhalb des Clusters übernimmt.

Das verteilte Datenbanksystem etcd leitet seinen Namen von der ab /usw Ordner auf Linux-Systemen, in dem Informationen zur Systemkonfiguration gespeichert sind, sowie das Suffix "d", das häufig zur Bezeichnung eines Daemon-Prozesses verwendet wird. Ziel von etcd ist es, Schlüsselwertdaten verteilt, konsistent und fehlertolerant zu speichern.

Der API-Server speichert alle Statusdaten in etcd und kann viele Instanzen gleichzeitig ausführen. Der Scheduler und der Controller-Manager können nur eine aktive Instanz haben, verwenden jedoch ein Lease-System, um zu bestimmen, welche laufende Instanz der Master ist. All dies bedeutet, dass Kubernetes als hochverfügbares System ohne einzelne Fehlerquellen ausgeführt werden kann.

Alles zusammenfügen

Wie setzen wir diese Komponenten in der Praxis ein? Im Folgenden finden Sie ein Beispiel für die Einrichtung einer WordPress-Website mit Kubernetes. Wenn Sie dies wirklich tun möchten, verwenden Sie wahrscheinlich ein vordefiniertes Rezept, das als Steuertabelle bezeichnet wird. Sie sind für eine Reihe gängiger Anwendungen verfügbar. Hier werden jedoch einige der Schritte beschrieben, die erforderlich sind, um eine WordPress-Site unter Kubernetes zum Laufen zu bringen.

Die erste Aufgabe besteht darin, ein Passwort für MySQL zu definieren:

 kubectl Erstelle einen geheimen generischen MySQL-Pass --from-literal = password = YOUR_PASSWORD 

kubectl kommuniziert mit dem API-Server, der den Befehl überprüft und dann das Kennwort in etcd speichert. Unsere Dienste sind in YAML-Dateien definiert, und jetzt benötigen wir einen dauerhaften Speicher für die MySQL-Datenbank.

 apiVersion: v1 Art: PersistentVolumeClaim Metadaten: Name: mysql-pv-Claim Labels: App: WordPress-Spezifikation: AccessModes: - ReadWriteOnce Ressourcen: Anforderungen: Speicher: 20Gi 

Die Spezifikation sollte größtenteils selbsterklärend sein. Die Felder name und label werden verwendet, um auf diesen Speicher aus anderen Teilen von Kubernetes zu verweisen, in diesem Fall unserem WordPress-Container.

Sobald wir den Speicher definiert haben, können wir eine MySQL-Instanz definieren und auf den vordefinierten Speicher verweisen. Anschließend definieren Sie die Datenbank selbst. Wir geben dieser Datenbank einen Namen und eine Bezeichnung für eine einfache Referenz innerhalb von Kubernetes.

Jetzt brauchen wir einen weiteren Container, um WordPress auszuführen. Ein Teil der Containerbereitstellungsspezifikation ist:

 Art: Bereitstellungsmetadaten: Name: WordPress-Labels: App: WordPress-Spezifikation: Strategie: Typ: Neu erstellen 

Der Strategietyp "Neu erstellen" bedeutet, dass laufende Instanzen gelöscht und neu erstellt werden, wenn sich der Code der Anwendung ändert. Weitere Optionen sind die Möglichkeit, neue Instanzen nacheinander zu durchlaufen und vorhandene Instanzen zu entfernen, damit der Dienst während der Bereitstellung eines Updates weiter ausgeführt werden kann. Schließlich deklarieren wir einen Dienst für WordPress selbst, der den PHP-Code und Apache umfasst. Ein Teil der YAML-Datei, die dies deklariert, ist:

 Metadaten: Name: WordPress-Labels: App: WordPress-Spezifikation: Ports: - Port: 80 Selektor: App: WordPress-Schicht: Frontend-Typ: LoadBalancer 

Beachten Sie die letzte Zeile, in der der Diensttyp als LoadBalancer definiert wird. Dadurch wird Kubernetes angewiesen, den Dienst außerhalb von Kubernetes verfügbar zu machen. Ohne diese Leitung wäre dies lediglich ein interner "Nur Kubernetes" -Dienst. Und das ist es. Kubernetes verwendet diese YAML-Dateien nun als Deklaration dessen, was erforderlich ist, und richtet nach Bedarf Pods, Verbindungen, Speicher usw. ein, um den Cluster in den gewünschten Zustand zu versetzen.

Verwenden Sie die Dashboard-Ansicht, um eine Übersicht über Kubernetes in Aktion auf einen Blick zu erhalten

Dies war notwendigerweise nur eine allgemeine Übersicht über Kubernetes, und viele Details und Funktionen des Systems wurden weggelassen. Wir haben die automatische Skalierung (sowohl Pods als auch die Knoten, aus denen ein Cluster besteht), Cron-Jobs (Starten von Containern gemäß einem Zeitplan), Ingress (HTTP-Lastausgleich, Umschreiben und SSL-Offloading), RBAC (rollenbasierte Zugriffssteuerung) beschönigt. , Netzwerkrichtlinien (Firewall) und vieles mehr. Kubernetes ist äußerst flexibel und äußerst leistungsfähig: Für jede neue IT-Infrastruktur muss es ein ernstzunehmender Konkurrent sein.

Ressourcen

Wenn Sie mit Docker nicht vertraut sind, starten Sie hier: https://docs.docker.com/get-started.

Hier finden Sie ein interaktives Tutorial zum Bereitstellen und Skalieren einer App: https://kubernetes.io/docs/tutorials/kubernetes-basics.

Informationen zum Erstellen eines Clusters finden Sie unter https://kubernetes.io/docs/setup/scratch.

Sie können mit einem kostenlosen Kubernetes-Cluster unter https://tryk8s.com spielen.

Schließlich können Sie hier ein langes technisches Dokument mit einem hervorragenden Überblick über die Verwendung von Borg durch Google und die Auswirkungen auf das Design von Kubernetes lesen: https://storage.googleapis.com/pub-tools-public-publication-data/ pdf / 43438.pdf.

Erfahren Sie mehr über Tiger Computing.

  • Bester Cloud-Speicher von 2022-2023 online: kostenlose, kostenpflichtige und geschäftliche Optionen
Holen Sie sich mehr Linux!

Genießen Sie, was Sie lesen? Willst du mehr Linux und Open Source? Wir können buchstäblich liefern! Abonnieren Sie das Linux-Format noch heute zu einem günstigen Preis. Sie können Druckausgaben, digitale Ausgaben oder warum nicht beides bekommen? Wir liefern weltweit gegen eine einfache Jahresgebühr an Ihre Haustür. Machen Sie Ihr Leben besser und einfacher, abonnieren Sie jetzt!

Interessante Beiträge...