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

‘Sichern’ bedeutet, dass Benutzer auf die von ihnen benötigten Daten zugreifen können, sei es schreibgeschützt oder schreibgeschützt. Gleichzeitig werden keine Daten an Dritte weitergegeben’s nicht berechtigt, es zu sehen. Sicherheit täuscht: Sie können denken, Sie hätten alles geschützt, um später herauszufinden, dass es Lücken gibt. Das Entwerfen in Sicherheit vom Beginn eines Projekts an ist viel einfacher als der Versuch, es später nachzurüsten.

‘Belastbar’ bedeutet, dass Ihre Dienste Ausfälle innerhalb der Infrastruktur tolerieren. Ein Fehler kann ein Server-Festplattencontroller sein, der nicht mehr auf Festplatten zugreifen kann, sodass die Daten nicht mehr erreichbar sind. Möglicherweise liegt der Fehler auch an einem Netzwerkswitch, mit dem zwei oder mehr Systeme nicht mehr miteinander kommunizieren können. In diesem Zusammenhang ist a “der Punkt des Versagens” oder SPOF ist ein Fehler, der die Verfügbarkeit des Dienstes beeinträchtigt. Bei einer ausfallsicheren Infrastruktur handelt es sich um eine Infrastruktur ohne SPOFs.

‘Skalierbar’ beschreibt die Fähigkeit von Systemen, mit Nachfragespitzen angemessen umzugehen. Sie bestimmt auch, wie leicht Änderungen an Systemen vorgenommen werden können. Sie können beispielsweise einen neuen Benutzer hinzufügen, die Speicherkapazität erhöhen oder eine Infrastruktur von Amazon Web Services in Google Cloud verschieben – oder sogar intern verschieben.

Sobald sich Ihre Infrastruktur über einen Server hinaus ausdehnt, gibt es zahlreiche Möglichkeiten, die Sicherheit, Ausfallsicherheit und Skalierbarkeit zu erhöhen. Wir’Sehen Sie sich an, wie diese Probleme traditionell gelöst wurden und welche neuen Technologien zur Verfügung stehen, die das Gesicht des Big Application Computing verändern.

Um was zu verstehen’Heute ist es möglich’Es ist hilfreich zu sehen, wie Technologieprojekte traditionell umgesetzt wurden. Früher, also vor mehr als zehn Jahren, kauften oder leasten Unternehmen Hardware, um alle Komponenten ihrer Anwendungen auszuführen. Selbst relativ einfache Anwendungen wie eine WordPress-Website enthalten mehrere Komponenten. Im Falle von WordPress wird eine MySQL-Datenbank zusammen mit einem Webserver wie Apache und einer Möglichkeit zum Umgang mit PHP-Code benötigt. So dass sie’d einen Server bauen, Apache, PHP und MySQL einrichten, WordPress installieren und loslegen’d gehen.

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

Mangelnde Ausfallsicherheit bedeutete, dass ein erhebliches Problem auf dem Server zu einem Dienstausfall führen würde. Ein katastrophaler Ausfall würde eindeutig bedeuten, dass keine Website vorhanden ist, aber es gab auch keinen Platz, um planmäßige Wartungsarbeiten durchzuführen, ohne die Website zu beeinträchtigen. Selbst die Installation und Aktivierung eines routinemäßigen Sicherheitsupdates für Apache würde einige Sekunden dauern’ Ausfall der Website.

Das Resilienzproblem wurde weitgehend durch Bauen gelöst ‘Hochverfügbarkeits-Cluster’. Das Prinzip war, dass zwei Server die Website ausführen, die so konfiguriert waren, dass der Ausfall eines der beiden Server fehlschlug’Dies führt nicht dazu, dass die Website nicht erreichbar ist. Der bereitgestellte Dienst war ausfallsicher, auch wenn die einzelnen Server dies nicht waren.

Abstrakte Wolken

Ein Teil der Kraft von Kubernetes ist die Abstraktion, die es bietet. Von einem Entwickler’In dieser Perspektive entwickeln sie die Anwendung so, dass sie in einem Docker-Container ausgeführt wird. Docker nicht’Es ist mir egal, ob es’Läuft unter Windows, Linux oder einem anderen Betriebssystem. Derselbe Docker-Container kann dem Entwickler entnommen werden’s MacBook und laufen unter Kubernetes ohne Änderungen.

Die Kubernetes-Installation selbst kann eine einzelne Maschine sein. Natürlich haben viele der Vorteile von Kubernetes gewonnen’Nicht verfügbar: Es erfolgt keine automatische Skalierung. Dort’s ein offensichtlicher einzelner Punkt des Ausfalls und so weiter. Als Proof-of-Concept in einer Testumgebung funktioniert es jedoch.

Wenn du einmal’Wenn Sie für die Produktion bereit sind, können Sie sie im eigenen Unternehmen oder auf 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 hilfreich sind, aber keine von ihnen sind strenge Anforderungen. Wenn Sie zwischen Google, Amazon und Ihrer eigenen Infrastruktur wechseln möchten, richten Sie Kubernetes ein und wechseln Sie. 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 bedeutender Schritt für den Reifegrad und die Benutzerfreundlichkeit von IT-Infrastrukturen.

Der Slashdot-Effekt

Das Skalierbarkeitsproblem ist etwas kniffliger. Lassen’s sagen, dass Ihre WordPress-Site 1.000 Besucher pro Monat bekommt. Eines Tages wird Ihr Geschäft im Radio 4 oder im Frühstücksfernsehen erwähnt. Plötzlich bekommst du mehr als einen Monat’Besucher in 20 Minuten. Wir’hab alle geschichten von websites gehört ‘abstürzt’, und das’s typisch warum: mangelnde Skalierbarkeit.

Die beiden Server, die zur Ausfallsicherheit beigetragen haben, könnten eine höhere Arbeitslast bewältigen als ein Server allein, aber das auch’ist immer noch begrenzt. Sie’Ich bezahlte zu 100 Prozent für zwei Server und die meiste Zeit funktionierten beide einwandfrei. Es’Es ist wahrscheinlich, dass nur einer Ihre Site betreibt. Dann erwähnt John Humphrys Ihr Unternehmen bei Today und Sie’D brauchen 10 Server, um die Last zu bewältigen – aber nur für ein paar Stunden.

Die bessere Lösung sowohl für das Problem der Ausfallsicherheit als auch der 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, und wenn die Arbeitslast auf Ihren Webserverinstanzen durch Herrn Humphrys rapide 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 ist es?

Obwohl die Cloud-Lösung wesentlich flexibler ist als der herkömmliche Standalone-Server, gibt es immer noch Probleme. Das Aktualisieren aller laufenden Cloud-Instanzen ist nicht möglich’t unkompliziert. Die Entwicklung für die Cloud hat auch Herausforderungen: Der Laptop, den Ihre Entwickler verwenden, ähnelt möglicherweise der Cloud-Instanz, ist es aber’ist nicht dasselbe. Wenn Sie sich zu AWS verpflichten, ist die Migration zu Google Cloud ein komplexes Unterfangen. Angenommen, Sie ziehen aus irgendeinem Grund einfach an’Sie möchten Ihren Computer 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 Ihren Entwicklern ausgeführt werden’ Laptops werden auf die gleiche Weise wie auf Ihren Cloud-Instanzen ausgeführt, die Verwaltung einer Containerflotte wird jedoch mit zunehmender Anzahl von Containern immer schwieriger.

Die Antwort lautet Container-Orchestrierung. Dies ist eine deutliche Verschiebung des Fokus. Zuvor stellten wir sicher, dass genügend Server vorhanden waren, ob physisch oder virtuell, um sicherzustellen, dass wir die Arbeitslast bedienen können. Verwendung der Cloud-Anbieter’ Autoscaling hat geholfen, aber wir haben uns immer noch mit Instanzen beschäftigt. 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 legen fest, 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’s eine Übersicht über Jenkins, das zum Erstellen und Bereitstellen einer Java-Anwendung verwendet wird

(Bildnachweis: Zukunft)

Kubernete werden

Kubernetes (ku-ber-net-eez) ist heute das führende Container-Orchestrierungs-Tool und stammt von Google. Wenn jemand weiß, wie man große IT-Infrastrukturen betreibt, ist dies bei Google der Fall. Der Ursprung von Kubernetes ist Borg, ein internes Google-Projekt, das’s noch verwendet, um die meisten Google auszuführen’s Anwendungen, einschließlich Suchmaschine, Google Mail, Google Maps und mehr. Borg war ein Geheimnis, bis Google 2015 eine Veröffentlichung darüber veröffentlichte, aber die Veröffentlichung machte deutlich, dass Borg die Hauptinspiration für Kubernetes war.

Borg ist ein System, das Rechenressourcen in Google verwaltet’s Rechenzentren und hält Google’s produktive und sonstige Anwendungen, die trotz Hardwarefehlern, Erschöpfung der Ressourcen oder anderer Probleme, die ansonsten zu einem Ausfall geführt haben könnten, ausgeführt werden. Dies geschieht durch sorgfältiges Überwachen der Tausenden von Knoten, aus denen ein Borg besteht “Zelle” und die Container, die auf ihnen laufen, und Starten oder Stoppen von Containern nach Bedarf als Reaktion auf Probleme oder Schwankungen der Ladung.

Kubernetes selbst wurde aus Google geboren’s GIFEE (‘Google’s Infrastruktur für alle anderen’) Initiative und wurde entwickelt, um eine freundlichere Version von Borg zu sein, 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 stellt Ihnen ein System zur Verfügung “erklären” Ihre containerisierten Anwendungen und Dienste, und es stellt sicher, 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 Laständerungen Schritt zu halten, und bei Bedarf sogar den gesamten Cluster skalieren. Dein Programm’s Komponenten don’Ich muss nicht einmal wissen, wo sie sind’re running: Kubernetes stellt Anwendungen interne Namensdienste zur Verfügung, mit denen sie eine Verbindung herstellen können “wp_mysql” und automatisch mit der richtigen Ressource verbunden werden.’

Das Endergebnis ist eine Plattform, mit der Sie Ihre Anwendungen auf jeder Infrastruktur ausführen können, von einem einzelnen Computer über ein lokales Rack mit Systemen bis hin zu Cloud-basierten Flotten virtueller Maschinen, die auf allen wichtigen Cloud-Anbietern mit denselben Containern ausgeführt werden und Konfiguration. Kubernetes ist anbieterunabhängig: Führen Sie es aus, wo immer Sie möchten.

Kubernetes ist ein leistungsfähiges und notwendigerweise komplexes Werkzeug. Bevor wir uns einen Überblick verschaffen, müssen wir einige Begriffe einführen, die in Kubernetes verwendet werden. Container führen wie oben beschrieben einzelne Anwendungen aus und sind in Pods gruppiert. Ein Pod ist eine Gruppe eng verbundener Container, die zusammen auf demselben Host bereitgestellt werden und einige Ressourcen gemeinsam nutzen. Die Container innerhalb eines Pods arbeiten als Team: Sie’Sie können verwandte Funktionen ausführen, z. B. einen Anwendungscontainer und einen Protokollierungscontainer mit spezifischen Einstellungen für die Anwendung.

Eine Übersicht über Kubernetes mit dem Master, auf dem die Schlüsselkomponenten und zwei Knoten ausgeführt werden. Beachten Sie, dass die Master-Komponenten in der Praxis möglicherweise auf mehrere Systeme aufgeteilt sind

(Bildnachweis: Zukunft)

Die vier Hauptkomponenten von Kubernetes 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 dem Scheduler, Administratoren über Befehlszeilen- oder webbasierte Dashboards und containerisierten Anwendungen. Es validiert Anfragen und aktualisiert die in etcd gespeicherten Daten.

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

Der Controller-Manager überwacht den Status des Clusters und versucht, die Pods über den API-Server nach Bedarf 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 – in der Regel mithilfe von Docker – und Kube-Proxy, der das Netzwerkproxying und den Lastenausgleich innerhalb des Clusters verwaltet.

Das etcd-verteilte Datenbanksystem leitet seinen Namen von dem ab /etc Ordner auf Linux-Systemen, in dem die Systemkonfigurationsinformationen sowie das Suffix gespeichert werden ‘d’, Wird oft verwendet, um einen Daemon-Prozess zu kennzeichnen. Die Ziele von etcd sind die verteilte, konsistente und fehlertolerante Speicherung von Schlüsselwertdaten.

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 Leasing-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 zusammen

Wie setzen wir diese Komponenten in der Praxis ein? Das Folgende ist ein Beispiel für die Einrichtung einer WordPress-Website mit Kubernetes. Wenn du das wirklich machen wolltest, dann du’d Verwenden Sie wahrscheinlich ein vordefiniertes Rezept, das als Steuerdiagramm bezeichnet wird. Sie sind für eine Reihe von gängigen Anwendungen verfügbar, aber hier haben wir’Sehen Sie sich einige der Schritte an, die erforderlich sind, um eine WordPress-Site auf 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 validiert und das Kennwort dann in etcd speichert. Unsere Dienste sind in YAML-Dateien definiert, und jetzt benötigen wir dauerhaften Speicher für die MySQL-Datenbank.

apiVersion: v1kind: PersistentVolumeClaimmetadata: name: mysql-pv-claimlabels: app: wordpressspec: accessModes: – ReadWriteOnceresources: request: storage: 20Gi

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

Sobald wir’Wenn Sie den Speicher definiert haben, können Sie eine MySQL-Instanz definieren, die auf den vordefinierten Speicher verweist. Das’s gefolgt von der Definition der Datenbank selbst. Wir geben dieser Datenbank einen Namen und eine Bezeichnung, damit sie in Kubernetes leicht zu finden ist.

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

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

Der Strategietyp “Neu erstellen” Wenn sich der Code der Anwendung ändert, werden ausgeführte Instanzen gelöscht und neu erstellt. Zu den weiteren Optionen gehört die Möglichkeit, neue Instanzen nacheinander ein- und auszuschalten, 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 enthält. Ein Teil der YAML-Datei, die dies deklariert, ist:

metadaten: name: wordpresslabels: app: wordpressspec: ports: – port: 80selector: app: wordpresstier: frontendtype: LoadBalancer

Beachten Sie die letzte Zeile, in der der Diensttyp als LoadBalancer definiert ist. Das weist Kubernetes an, den Dienst außerhalb von Kubernetes verfügbar zu machen. Ohne diese Linie wäre dies nur eine interne “Nur Kubernetes” Bedienung. Und das’sitzen. Kubernetes verwendet diese YAML-Dateien nun als Deklaration der erforderlichen Daten und richtet nach Bedarf Pods, Verbindungen, Speicher usw. ein, um den Cluster in den zu übertragen “erwünscht” Zustand.

Verwenden Sie die Dashboard-Ansicht, um auf einen Blick eine Zusammenfassung der Kubernetes in Aktion zu erhalten

(Bildnachweis: Notwasserung)

Dies war notwendigerweise nur ein allgemeiner Überblick über Kubernetes, und viele Details und Funktionen des Systems wurden weggelassen. Wir’Autoscaling (sowohl Pods als auch die Knoten, aus denen ein Cluster besteht), Cron-Jobs (Starten von Containern nach einem Zeitplan), Ingress (HTTP-Lastausgleich, Neuschreiben und SSL-Abladen), RBAC (rollenbasierte Zugriffskontrollen) und Netzwerk wurden überarbeitet Richtlinien (Firewalling) und vieles mehr. Kubernetes ist äußerst flexibel und leistungsstark: Für jede neue IT-Infrastruktur muss es sich um einen ernsthaften Konkurrenten handeln.

Ressourcen

Wenn du’Docker-Start ist hier nicht bekannt: https://docs.docker.com/get-started.

Dort’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 ein langes technisches Dokument mit einem hervorragenden Überblick über Google durchgehen’s Verwendung von Borg und wie sich dies auf das Design von Kubernetes ausgewirkt hat: https://storage.googleapis.com/pub-tools-public-publication-data/pdf/43438.pdf.

Erfahren Sie mehr über Tiger Computing.

  • Bester Cloud-Speicher von 2019 online: kostenlose, kostenpflichtige und geschäftliche Optionen