Wenn Sie anfangen, immer mehr Kubernetes-Services zu erstellen, werden die anfangs einfachen Aufgaben komplizierter. Zum Beispiel können Entwicklerteams keine Dienste oder Deployments mit demselben Namen erstellen. Wenn Sie Tausende von Pods haben, wird allein das Auflisten viel Zeit in Anspruch nehmen, ganz zu schweigen von der ordnungsgemĂ€Ăen Verwaltung. Und das ist nur die Spitze des Eisbergs.
Lassen Sie uns betrachten, wie Namespaces die Verwaltung von Kubernetes-Ressourcen erleichtern. Was ist also ein Namespace? Ein Namespace kann als virtueller Cluster innerhalb Ihres Kubernetes-Clusters angesehen werden. Sie können mehrere voneinander isolierte Namespaces innerhalb eines einzigen Kubernetes-Clusters haben. Diese können Ihnen und Ihren Teams wirklich bei der Organisation, Sicherheit und sogar der Systemleistung helfen.

In den meisten Kubernetes-Distributionen kommt der Cluster "out of the box" mit einem Namespace namens âdefaultâ. Es gibt tatsĂ€chlich drei Namespaces, mit denen Kubernetes arbeitet: default, kube-system und kube-public. Der Kube-public wird derzeit nicht sehr hĂ€ufig genutzt.

Es ist eine gute Idee, den Namespace kube nicht anzufassen, insbesondere in einem so verwalteten System wie Google Kubernetes Engine. Es verwendet den Namespace âdefaultâ als Ort, an dem Ihre Dienste und Anwendungen erstellt werden. Es gibt dort absolut nichts Besonderes, auĂer dass Kubernetes âout of the boxâ darauf eingestellt ist und Sie ihn nicht löschen können. Dies ist ideal fĂŒr den Einstieg und Systeme mit geringer Leistung, aber ich wĂŒrde nicht empfehlen, den Default-Namespace in groĂen Produktionssystemen zu verwenden. In letzterem Fall kann ein Entwicklerteam leicht den Code eines anderen Teams ĂŒberschreiben und die Arbeit des anderen Teams stören, ohne es zu merken.
Daher sollten Sie mehrere Namespaces erstellen und diese zur Segmentierung Ihrer Dienste in verwaltbare Einheiten nutzen. Ein Namespace kann mit einem einzigen Befehl erstellt werden. Wenn Sie einen Namespace mit dem Namen test erstellen möchten, verwenden Sie den Befehl $ kubectl create namespace test oder erstellen Sie einfach eine YAML-Datei und verwenden Sie sie wie jede andere Kubernetes-Ressource.

Alle Namespaces können mit dem Befehl $ kubectl get namespace angezeigt werden.

Nach der AusfĂŒhrung sehen Sie drei integrierte Namespaces und einen neuen Namespace mit dem Namen âtestâ. Betrachten wir eine einfache YAML-Datei, die zur Erstellung eines Pods bestimmt ist. Dabei fĂ€llt auf, dass es keine ErwĂ€hnung des Namespaces gibt.

Wenn Sie kubectl verwenden, um diese Datei auszufĂŒhren, wird ein Modul mypod im aktuellen aktiven Namespace erstellt. Dies wird der Standardnamespace sein, bis Sie ihn Ă€ndern. Es gibt zwei Möglichkeiten, Kubernetes anzugeben, in welchem Namespace Sie Ihre Ressource erstellen möchten. Die erste Möglichkeit ist die Verwendung des Namespace-Flags bei der Erstellung der Ressource.

Die zweite Möglichkeit besteht darin, den Namespace in der YAML-Deklaration anzugeben.

Wenn Sie den Namespace in YAML angeben, wird die Ressource immer in diesem Namespace erstellt. Wenn Sie versuchen, einen anderen Namespace mit dem Namespace-Flag zu verwenden, schlĂ€gt der Befehl fehl. Wenn Sie jetzt versuchen, Ihren Pod zu finden, werden Sie damit kein GlĂŒck haben.

Das passiert, weil alle Befehle auĂerhalb des aktuellen aktiven Namespaces ausgefĂŒhrt werden. Um Ihren Pod zu finden, mĂŒssen Sie das Namespace-Flag verwenden, aber das wird schnell mĂŒhsam, insbesondere wenn Sie Entwickler in einer Gruppe sind, die ihren eigenen Namespace verwendet und dieses Flag nicht fĂŒr jeden einzelnen Befehl verwenden möchte. Lassen Sie uns sehen, wie wir das beheben können.

Out of the box trĂ€gt Ihr aktiver Namespace den Namen default. Wenn Sie keinen Namespace im YAML der Ressource angeben, verwenden alle Kubernetes-Befehle diesen aktiven default namespace. Leider kann der Versuch, den aktiven Namespace mit kubectl zu verwalten, fehlschlagen. Es gibt jedoch ein sehr gutes Tool namens Kubens, das diesen Prozess erheblich vereinfacht. Wenn Sie den Befehl kubens ausfĂŒhren, sehen Sie alle Namespaces mit dem hervorgehobenen aktiven Namespace.

Um den aktiven Namespace auf den Namespace test umzuschalten, fĂŒhren Sie einfach den Befehl $ kubens test aus. Wenn Sie danach erneut den Befehl $ kubens eingeben, sehen Sie, dass jetzt der neue aktive Namespace â test â hervorgehoben ist.

Das bedeutet, dass Sie kein Namespace-Flag benötigen, um das Pod im Namespace test zu sehen.

So sind die Namespaces untereinander verborgen, aber nicht isoliert. Ein Dienst aus einem Namespace kann relativ einfach mit einem Dienst in einem anderen Namespace kommunizieren, was hĂ€ufig sehr nĂŒtzlich ist. Die Möglichkeit zur Kommunikation zwischen verschiedenen Namespaces bedeutet, dass der Dienst Ihrer Entwickler mit dem Dienst eines anderen Entwicklungsteams in einem anderen Namespace interagieren kann.
In der Regel, wenn Ihre Anwendung auf einen Kubernetes-Dienst zugreifen möchte, nutzen Sie den integrierten DNS-Dienst zur Entdeckung und geben einfach den Namen des Dienstes an. Dabei können Sie jedoch einen Dienst mit demselben Namen in mehreren Namespaces erstellen, was nicht zulÀssig ist.

GlĂŒcklicherweise ist dies leicht zu umgehen, indem Sie die voll ausgeschriebene Form der DNS-Adresse verwenden. Dienste in Kubernetes exponieren ihre Endpunkte unter Verwendung einer gemeinsamen DNS-Vorlage. Das sieht ungefĂ€hr so aus:

In der Regel benötigen Sie einfach den Namen des Dienstes, und DNS ermittelt automatisch die vollstÀndige Adresse.

Wenn Sie jedoch auf einen Dienst in einem anderen Namespace zugreifen mĂŒssen, verwenden Sie einfach den Dienstnamen plus den Namespace-Namen:
![]()
Wenn Sie beispielsweise auf die Datenbank des Dienstes im Test-Namespace zugreifen möchten, können Sie die Adresse database.test verwenden.

Wenn Sie hingegen auf die Datenbank des Dienstes im Prod-Namespace zugreifen möchten, verwenden Sie database.prod.

Wenn Sie wirklich isolieren und den Zugriff auf einen Namespace einschrĂ€nken möchten, ermöglicht Kubernetes dies durch die Kubernetes Network Policies. DarĂŒber werde ich in der nĂ€chsten Folge sprechen.
Ich bekomme hÀufig die Frage, wie viele Namespaces erstellt werden sollen und zu welchem Zweck. Was ist also ein verwalteter Datenausschnitt?
Wenn Sie zu viele NamensrĂ€ume erstellen, stehen sie Ihnen einfach im Weg. Sind es jedoch zu wenige, verlieren Sie alle Vorteile einer solchen Lösung. Ich denke, es gibt vier grundlegende Phasen, die jedes Unternehmen bei der Erstellung seiner Organisationsstruktur durchlĂ€uft. Je nach Entwicklungsphase, in der sich Ihr Projekt oder Unternehmen befindet, können Sie die entsprechende Strategie zur Erstellung von NamensrĂ€umen ĂŒbernehmen.
Stellen Sie sich vor, Sie sind Teil eines kleinen Teams, das an der Entwicklung von 5-10 Mikrodiensten arbeitet und Sie können alle Entwickler problemlos in einem Raum versammeln. In dieser Situation macht es Sinn, alle Prod-Dienste im Namensraum 'default' zu starten. NatĂŒrlich können Sie fĂŒr mehr Spielraum auch 2 NamensrĂ€ume verwenden â getrennt fĂŒr Prod und Dev. Wahrscheinlich testen Sie Ihre Entwicklung auf einem lokalen Computer mit etwas wie Minikube.
Angenommen, die Bedingungen haben sich geĂ€ndert und jetzt haben Sie ein schnell wachsendes Team, das gleichzeitig an mehr als 10 Mikrodiensten arbeitet. Der Zeitpunkt kommt, an dem Sie mehrere Cluster oder NamensrĂ€ume verwenden mĂŒssen, getrennt fĂŒr Prod und Dev. Sie können das Team in mehrere Untergruppen aufteilen, sodass jede ihre eigenen Mikrodienste hat und jedes dieser Teams seinen eigenen Namensraum auswĂ€hlen kann, um den Entwicklungs- und Veröffentlichungsprozess zu erleichtern.

WĂ€hrend jedes Teammitglied ein VerstĂ€ndnis dafĂŒr entwickelt, wie das System insgesamt funktioniert, wird es immer schwieriger, jede Ănderung mit allen anderen Entwicklern abzustimmen. Es wird zunehmend komplizierter, den gesamten Stack auf Ihrem lokalen Computer zum Laufen zu bringen.
In groĂen Unternehmen wissen die Entwickler oft ĂŒberhaupt nicht, wer an was konkret arbeitet. Teams kommunizieren ĂŒber ServicevertrĂ€ge oder verwenden eine Service-Mesh-Technologie, die ĂŒber dem Netzwerk eine Abstraktionsebene wie das Konfigurationstool Istio hinzufĂŒgt. Es ist schlichtweg unmöglich, den gesamten Stack lokal zu starten. Ich empfehle dringend, in Kubernetes eine kontinuierliche Bereitstellungsplattform (CD) wie Spinnaker zu verwenden. Damit kommt der Zeitpunkt, an dem jedes Team definitiv seinen eigenen Namensraum benötigt. Jedes Team kann sogar mehrere NamensrĂ€ume fĂŒr die Entwicklungs- und Produktionsumgebung auswĂ€hlen.
SchlieĂlich gibt es groĂe Unternehmensunternehmen, in denen eine Entwicklergruppe nicht einmal von der Existenz anderer Gruppen weiĂ. Ein solches Unternehmen kann sogar externe Entwickler einstellen, die ĂŒber gut dokumentierte APIs interagieren. In jeder dieser Gruppen gibt es mehrere Teams und mehrere Mikrodienste. In diesem Fall ist es notwendig, alle Tools zu nutzen, von denen ich zuvor gesprochen habe.

Programmierer sollten Dienste nicht manuell bereitstellen und sollten keinen Zugriff auf NamensrÀume haben, die sie nicht betreffen. An diesem Punkt ist es sinnvoll, mehrere Cluster zu haben, um den «Sprengradius» schlecht konfigurierter Anwendungen zu verringern, sowie um die Abrechnungs- und Ressourcenmanagementprozesse zu vereinfachen.
So ermöglicht die richtige Nutzung von NamensrÀumen durch Ihre Organisation, Kubernetes verwaltbarer, kontrollierbarer, sicherer und flexibler zu gestalten.

Ein wenig Werbung đ
Danke, dass Sie bei uns bleiben. Gefallen Ihnen unsere Artikel? Möchten Sie mehr interessante Inhalte sehen? UnterstĂŒtzen Sie uns, indem Sie eine Bestellung aufgeben oder uns Freunden empfehlen, , ein einzigartiges Ăquivalent zu Einsteigerservern, das wir fĂŒr Sie entwickelt haben: (es sind Optionen mit RAID1 und RAID10 bis zu 24 Kernen und bis zu 40GB DDR4 verfĂŒgbar).
Dell R730xd ist im Equinix Tier IV Rechenzentrum in Amsterdam doppelt so gĂŒnstig? Nur bei uns in den Niederlanden! Dell R420 â 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB â ab $99! Lesen Sie, wie
Quelle: habr.com
