Best Practices von Kubernetes. Zuordnung externer Dienste

Best Practices von Kubernetes. Erstellen kleiner Container
Best Practices für Kubernetes. Kubernetes-Organisation mit dem Kubernetes
Best Practices-Namespace. Kubernetes-Lebensfähigkeitstest mit Bereitschafts- und Lebendigkeitstests Kubernetes
Best Practices. Festlegen von Abfragen und Ressourcenbeschränkungen
Best Practices für Kubernetes. Richtige Trennung von Terminate

Wenn Sie wie die meisten Menschen sind, verwenden Sie höchstwahrscheinlich Ressourcen, die außerhalb Ihres Clusters ausgeführt werden. Möglicherweise verwenden Sie die Taleo-API, um Textnachrichten zu senden oder Bilder mithilfe der Google Cloud Vision-API zu analysieren.

Wenn Sie denselben Endpunkt verwenden - den empfangsseitigen Anforderungsempfangspunkt in all Ihren Umgebungen und nicht vorhaben, Ihre Server an Kubernetes zu übertragen, ist es völlig normal, einen Endpunktdienst direkt in Ihrem Code zu haben. Es gibt jedoch viele andere Szenarien. In dieser Best Practices-Reihe von Kubernetes erfahren Sie, wie Sie mithilfe der in Kubernetes integrierten Mechanismen Dienste sowohl innerhalb als auch außerhalb des Clusters ermitteln.

Ein Beispiel für einen weit verbreiteten externen Dienst ist eine Datenbank, die außerhalb eines Kubernetes-Clusters ausgeführt wird. Im Gegensatz zu Cloud-Datenbanken wie dem Google Cloud Data Store oder Google Cloud Spanner, die einen Endpunkt für alle Zugriffsarten verwenden, verfügen die meisten Datenbanken über separate Endpunkte für unterschiedliche Umstände.
Bei Best Practices für die Verwendung herkömmlicher Datenbanken wie MySQL und MongoDB müssen Sie normalerweise eine Verbindung zu verschiedenen Komponenten für verschiedene Umgebungen herstellen. Möglicherweise verfügen Sie über eine große Maschine für Produktionsdaten und eine kleinere Maschine für eine Testumgebung. Jeder von ihnen hat seine eigene IP-Adresse oder seinen eigenen Domainnamen, aber Sie möchten Ihren Code wahrscheinlich nicht ändern, wenn Sie von einer Umgebung in eine andere wechseln. Anstatt diese Adressen fest zu codieren, können Sie den integrierten Kubernetes-Dienst verwenden, um externe DNS-basierte Dienste auf dieselbe Weise wie für native Kubernetes-Dienste zu ermitteln.



Angenommen, Sie führen die MongoDB-Datenbank in der Google Compute Engine aus. Sie werden in dieser hybriden Welt stecken bleiben, bis Sie es schaffen, sie auf einen Cluster zu übertragen.

Glücklicherweise können Sie statische Dienste von Kubernetes verwenden, um Ihr Leben ein wenig einfacher zu gestalten. In diesem Beispiel habe ich mit dem Google Cloud Launcher einen MongoDB-Server erstellt. Da es im selben Netzwerk (oder Kubernetes VPC-Cluster) erstellt wurde, wird auf es über eine leistungsstarke interne IP-Adresse zugegriffen.



Dies ist die Standardeinstellung in Google Cloud, sodass Sie nichts konfigurieren müssen. Nachdem Sie eine IP-Adresse haben, müssen Sie zunächst einen Dienst erstellen. Möglicherweise stellen Sie fest, dass für diesen Dienst keine Herdauswahl vorhanden ist. Das heißt, wir haben einen Dienst erstellt, der nicht weiß, wohin er Datenverkehr senden soll. Auf diese Weise können Sie manuell ein Endpunktobjekt erstellen, das Datenverkehr von diesem Dienst empfängt.



Das folgende Codebeispiel zeigt, dass die Endpunkte die IP-Adresse für die Datenbank unter Verwendung des gleichen Mongonamens wie der Dienst bestimmen.



Kubernetes verwendet alle IP-Adressen, um die Endpunkte so zu finden, als wären sie normale Kubernetes-Pods. Jetzt können Sie über eine einfache Verbindungszeichenfolge mit dem oben genannten Namen mongodb: // mongo auf die Datenbank zugreifen. Es ist jedoch überhaupt nicht erforderlich, IP-Adressen in Ihrem Code zu verwenden.

Wenn sich die IP-Adressen in Zukunft ändern, können Sie die Endpunkte einfach mit der neuen IP-Adresse aktualisieren, und Ihre Anwendungen müssen nicht weiter geändert werden.

Wenn Sie eine Datenbank verwenden, die auf einem Host eines Drittanbieters gehostet wird, haben Ihnen die Eigentümer des Hosts höchstwahrscheinlich einen einheitlichen Ressourcen-ID-URI für die Verbindung bereitgestellt. Wenn Sie also eine IP-Adresse erhalten haben, können Sie einfach die vorherige Methode verwenden. Dieses Beispiel zeigt, dass ich zwei MongoDB-Datenbanken auf dem mLab-Host gehostet habe.



Eine davon ist eine Datenbank mit Entwicklern, die andere ist eine Produktionsdatenbank. Die Verbindungszeichenfolgen für diese Datenbanken lauten wie folgt: mLab bietet Ihnen einen dynamischen URI und einen dynamischen Port. Wie Sie sehen können, sind sie unterschiedlich.



Um dies zu ignorieren, verwenden wir Kubernetes und stellen eine Verbindung zur Entwicklerdatenbank her. Sie können einen externen Kubernetes-Dienstnamen erstellen, der Ihnen einen statischen Dienst bereitstellt, der den Datenverkehr zum externen Dienst umleitet.



Dieser Dienst führt eine einfache CNAME-Umleitung auf Kernelebene durch, die nur minimale Auswirkungen auf die Leistung hat. Dank dessen können Sie eine einfachere Verbindungszeichenfolge verwenden.



Da der externe Name jedoch die CNAME-Umleitung verwendet, kann keine Portweiterleitung durchgeführt werden. Daher ist diese Lösung nur für statische Ports anwendbar und kann nicht mit dynamischen Ports verwendet werden. Die kostenlose kostenlose Stufe mLab stellt dem Benutzer jedoch standardmäßig eine dynamische Portnummer zur Verfügung, die Sie nicht ändern können. Dies bedeutet, dass Sie für dev und prod unterschiedliche Verbindungsbefehlszeilen benötigen. Die schlechte Nachricht ist, dass Sie die Portnummer fest codieren müssen. Wie bringt man die Portweiterleitung zum Laufen?

Der erste Schritt besteht darin, die IP-Adresse vom URI abzurufen. Wenn Sie den Befehl nslookup, hostname oder ping the URI ausführen, können Sie die IP-Adresse der Datenbank abrufen. Wenn der Dienst gleichzeitig mehrere IP-Adressen an Sie zurückgibt, können alle diese Adressen an den Endpunkten des Objekts verwendet werden.



Beachten Sie, dass sich URI-IPs ohne vorherige Ankündigung ändern können. Daher ist es sehr riskant, sie in Produkten zu verwenden. Mit dieser IP-Adresse können Sie eine Verbindung zu einer entfernten Datenbank herstellen, ohne einen Port anzugeben. Somit führt der Kubernetes-Dienst die Portweiterleitung ziemlich transparent durch.



Durch das Zuordnen oder Zuordnen externer Ressourcen zu internen Ressourcen können Sie diese Dienste in Zukunft flexibel innerhalb des Clusters nutzen und gleichzeitig den Aufwand für das Refactoring minimieren. Es erleichtert auch die Verwaltung und bietet Einblicke in die externen Services, die Ihr Unternehmen nutzt.

Wird sehr bald fortgesetzt ...


Ein bisschen Werbung :)


Vielen Dank für Ihren Aufenthalt bei uns. Gefällt dir unser Artikel? Möchten Sie weitere interessante Materialien sehen? Unterstützen Sie uns, indem Sie eine Bestellung aufgeben oder Ihren Freunden Cloud-basiertes VPS für Entwickler ab 4,99 US-Dollar empfehlen , ein einzigartiges Analogon von Einstiegsservern, das von uns für Sie erfunden wurde: Die ganze Wahrheit über VPS (KVM) E5-2697 v3 (6 Kerne) 10 GB DDR4 480 GB SSD 1 Gbit / s ab 19 $ oder wie teilt man den Server? (Optionen sind mit RAID1 und RAID10, bis zu 24 Kernen und bis zu 40 GB DDR4 verfügbar).

Dell R730xd 2-mal günstiger im Equinix Tier IV-Rechenzentrum in Amsterdam? Nur wir haben 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2,6 GHz 14C 64 GB DDR4 4 x 960 GB SSD 1 Gbit / s 100 TV von 199 US-Dollar in den Niederlanden!Dell R420 - 2x E5-2430 2,2 GHz 6C 128 GB DDR3 2x960 GB SSD 1 Gbit / s 100 TB - ab 99 US-Dollar! Lesen Sie mehr über den Aufbau eines Infrastrukturgebäudes. Klasse C mit Dell R730xd E5-2650 v4-Servern für 9.000 Euro für einen Cent?

All Articles