Kubernetes ist eine Open-Source-Plattform zum Verwalten von Containeranwendungen in einer Gruppe von physischen oder virtuellen Maschinen. Die ursprüngliche Inspiration für Kubernetes war das Borg -System von Google. Borg ist ein Cluster -Management -System, das Hunderttausende von Jobs und Anwendungen in massiven Google -Rechenzentren behandelt. Kubernetes sollte eine freundlichere Version des Cluster -Managementsystems sein, die jeder verwenden konnte.
Die Popularität von Containern im Softwareentwicklungsprozess macht auch Kubernetes populär. Im alten Softwareentwicklungsprozess wurden Anwendungen auf physischen Host -Maschinen bereitgestellt. Entwickler, die an verschiedenen Komponenten der Anwendung arbeiten, die zur Aufrechterhaltung einer zusammenhängenden Umgebung erforderlich ist. Operation und IT -Personal, die zum sorgfältigen Verwalten von Ausführungsfähigkeiten, Konfigurationen und Bibliotheken erforderlich sind. Verschiedene Komponenten der Anwendung könnten während des Integrationsprozesses auf Konflikte stoßen. Außerdem war der Prozess anfällig für menschliche Fehler und Missverständnisse.
Virtuelle Maschinen (VM) haben dazu beigetragen. Aber es war immer noch schwierig, Anwendungen zu verwalten. Auch VMs sind teuer zu pflegen. Container veränderten die Landschaft. Bei Containern war es für Entwickler möglich, an verschiedenen Komponenten derselben Software zu arbeiten, um separate Umgebungen zu verwalten. Behälter sind leicht, kostengünstig und schnell. Diese Vorteile führten zu der Idee, Software mithilfe von Microservices zu entwickeln, bei denen jeder Container eine bestimmte Aufgabe für die Anwendung dient.
Mit dem Anstieg des Containergebrauchs ist Kubernetes zu einem wirksamen Tool geworden, um Anwendungen über Cluster hinweg zu planen und auszuführen. Als Plattform kann es Entwickler von der Last des Umgangs mit allen Arten von Maschinen freigeben. Anstatt für host-zentrierte Infrastrukturen mit physischen oder virtuellen Maschinenüberlegungen zu entwerfen, können Entwickler mit der Entwicklung von Container-zentrierten Infrastrukturen beginnen. Kubernetes liefert die erforderliche Abstraktionsebene.
Teil 1: Konzepte
Masterkomponenten sind die Steuerungsdienste für den Cluster. Diese Komponenten behandeln globale Entscheidungen und Ereignisse. Jeder Knoten im Cluster kann sie ausführen. Die Zuweisung bestimmter Knoten zu diesen Komponenten wird jedoch als gute Praxis angesehen.
Kube-Apiserver
Der Kube-Apiserver dient der Kubernetes-API. Kubernetes -API implementiert eine erholsame Schnittstelle. Es funktioniert als Brücke zwischen verschiedenen Kubernetes -Komponenten wie Pods, Diensten, Replikationscontrollern und anderen. Es ist verantwortlich für die Konsistenz der Kommunikation zwischen dem ETCD -Geschäft und den bereitgestellten Containern.
etcd
Die ETCD ist für die Speicherung aller Kubernetes -Clusterdaten verantwortlich. Das ETCD -Projekt wurde vom CoreOS -Team entwickelt. Es handelt sich um einen leichten, verteilten Schlüsselwertgeschäft, in dem die HTTP/JSON-API verwendet wird. Knoten im Cluster können Konfigurationsdaten aus dem ETCD verwenden, um Dienste zu entdecken und sich von fehlgeschlagenen Zuständen wiederherzustellen. Aufgrund der Bedeutung der Daten sollte usw. ordnungsgemäß gesichert werden.
Kube-Controller-Manager
Der Kube-Controller-Manager führt verschiedene Controller aus, um verschiedene Dienste anzubieten. Zum Beispiel haben Knotencontroller fehlgeschlagene Knoten und Replikationscontroller wiederhergestellt. Jeder Controller wird als separater Thread ausgeführt und hängt von den ETCD -Informationen ab, um ihre Aufgaben auszuführen.
Cloud-Controller-Manager
Der Cloud-Controller-Manager bietet Cloud-spezifische Controller. Es kann im Kube-Controller-Manager deaktiviert werden. Der Cloud-Controller-Manager wurde vom Kern getrennt, damit der Kubernetes-Kern unabhängig vom Cloud-Anbieter-spezifischen Code entwickelt wird. In der Vergangenheit verursachten die Abhängigkeiten Probleme.
Kube-Scheduler
Der Kube-Scheduler ist für die Verteilung der Arbeitsbelastung verantwortlich. Es verfolgt die Ressourcenanforderungen und weist Knoten für neu erstellte Pods zu Knoten zu. Es kümmert sich auch um die Qualität der Serviceanforderungen.
Addons
Addons sind Pods und Dienste, die zur Implementierung von Clusterfunktionen verwendet werden. Benutzer können den Add-On-Manager verwenden, um Addons zu erstellen und zu verwalten. Einige wichtige und nützliche Addons sind DNS, Web UI (Dashboard), Container-Ressourcenüberwachung und Protokollierung auf Clusterebene.
Eine Arbeitermaschine in Kubernetes wird als Knoten bezeichnet. Knotenkomponenten sind in jedem Knoten vorhanden und verarbeiten verschiedene Aspekte der Workload.
Kuberett
Der KuBelet -Service an jedem Knoten ist der primäre Agent. Es verfolgt die dem Knoten zugewiesenen Schoten über Apiserver oder lokale Konfigurationsdatei. Es kommuniziert mit den Masterkomponenten, um Arbeitsanfragen herauszufinden und den Status seines Knotens zu melden.
Kube-Proxy
Die Kube-Proxy ist ein kleiner Proxy-Service für jeden Knoten, um das Subnetze für ein einzelnes Host zu bewältigen. Es kann rudimentäre Lastausgleich für TCP und UDP durchführen.
Docker
Kubernetes hängen hauptsächlich davon ab, dass Docker Container ausführen kann. Es ist in der Lage, Anwendungen aus Docker -Bildern zu erstellen.
rkt
Kubernetes unterstützt auch RKT -Container. Die Unterstützung ist derzeit experimentell.
Aufsicht
Mit dem Supervisford können Kubelets und Docker -Container überwacht und gesteuert werden.
fließend
Der Fluentd ist ein Deamon zur Bereitstellung einer Protokollierung auf Custerebene.
Kubernetes Workloads können wie folgt definiert werden:
Schoten
Ein Pod ist eine grundlegende Einheit in der Kubernetes -Arbeitsbelastung. Container werden Hosts nicht einzeln zugeordnet. Gruppen von Containern, die im Allgemeinen einer Anwendung gehören. Natürlich kann ein Pod nur einen Behälter enthalten. Dies ist im Allgemeinen häufiger in Kubernetes. Container werden jedoch basierend auf Ressourcen- und Anwendungsanforderungen zusammengefasst. Die Gruppierung soll die Ressourcenfreigabe optimieren.
Controller
Controller wie Replikate -Sets, Replikationscontroller, Bereitstellungen, staatliche Sets, Müllsammlung und Cron -Jobs helfen bei der Verwaltung von Kubernetes Workloads. Replikationscontroller verwalten die Anzahl der Pods. Es startet und endet in Pods, um die korrekte Anzahl von Pods zu verwalten. Der Bereitstellungscontroller hilft bei der Änderung von Schoten und Bereitstellungsobjekten, um den gewünschten Bereitstellungszustand zu erreichen.
Dienstleistungen
Kubernetes -Pods werden regelmäßig erstellt und zerstört. Es ist also schwierig, sie über IP -Adressen im Auge zu behalten. Die dynamische Natur der Schoten macht es ihnen schwer, miteinander zu kommunizieren. Ein Dienst arbeitet als Abstraktion. Es bietet die Richtlinie, um einen logischen Satz von Schoten zu erreichen. In Kubernetes ist ein Dienst ein Rastobjekt. Services vereinfachen das Containerdesign.
Etiketten
Etiketten sind eine leistungsstarke Möglichkeit, Gruppen von Arbeitskomponenten zu verfolgen und zu verwalten. Etiketten sind Schlüsselwertpaare, die als willkürliche Tags funktionieren, um die feinere Kontrolle über verschiedene Funktionen des Systems zu erlangen.
Teil 2: Praktisches Projekt
Minikube ist ein Binärer, das einen einzelnen Kubernetes -Cluster auf einer lokalen Maschine einstellt. In diesem Projekt ein Knoten.Die JS -Anwendung wird in ein Docker -Containerbild verwandelt und das Bild wird auf Minikube ausgeführt.
Installation von Minikube, Kubectl, Hypervisor, Nodejs und Docker
Sie können das Befehlszeilentool Kubectl unter Mac OS X, Linux und Windows mit verschiedenen Hypervisoren installieren. Die Anweisungen für verschiedene Betriebssysteme finden Sie hier. Außerdem benötigen Sie NodeJs, die auf Ihrem Computer installiert sind, um die Beispiel für die HelloWorld -Anwendung auszuführen. Sie können Docker hier installieren.
Einen Cluster starten
Verwenden Sie den folgenden Befehl, um einen Cluster zu starten:
$ minikube starten lokaler kubernetes v1.7.5 Cluster… VM starten… Minikube ISO 106 herunterladen.36 MB / 106.36 MB [===========================================] 100.00% 0s Erhalten Sie VM IP -Adresse… Verschieben von Dateien in Cluster… Einrichten von Zertifikaten… eine Verbindung zu Cluster… KubeConfig einrichten… Starten von Clusterkomponenten… Kubectl ist jetzt für die Verwendung des Cluster konfiguriert.
Verwenden Sie den folgenden Befehl, um festzustellen, ob der Cluster ordnungsgemäß ausgeführt wird:
$ kubectl cluster-info kubernetes master läuft unter https: // 192.168.99.100: 8443
Anwendungsbild erstellen
Erstellen wir einen Server.JS -Datei mit dem folgenden Inhalt:
var http = required ('http'); |
var Handersquest = Funktion (Anfrage, Antwort) |
Konsole.Log ('Empfangsanforderung für URL:' + Anfrage.URL); |
Antwort.WritHead (200); |
Antwort.Ende ('Hallo Welt!'); |
; |
var www = http.CreateServer (Handlersquest); |
www.Hören Sie (8080); |
Sie können den folgenden Befehl ausführen:
$ Node Server.JS
Und überprüfen Sie, ob der Server auf http: // localhost: 8080 ausgeführt wird. Sie sollten „Hallo Welt sehen!”Text auf der Webseite.
Konvertieren Sie in Docker -Container
Im selben Verzeichnis wie Server.JS Erstellen Sie eine Datei Dockerfile mit folgenden Text:
Vom Knoten: 6.9.2 |
8080 entdecken |
Server kopieren.JS . |
CMD -Knotenserver.JS |
Die DockerFile erstellt ein Bild, das vom Knoten startet: 6.9.2 Bild auf dem Docker -Hub.
Wir möchten die Docker -Bilder lokal ausführen. Der folgende Befehl fordert Docker also mit, dass er Minikube Deamon für den Docker -Bildspeicher verwenden soll:
$ eval $ (minikube docker-env)
Sie können Eval $ (Minikube Docker -env -u) verwenden, um es wieder in den Standard zu ändern.
Erstellen wir nun das Docker -Bild:
$ docker Build -t My -Node: v1 . Senden von Build -Kontext an Docker Daemon 3.072KB Schritt 1: From Knoten: 6.9.2 6.9.2: Pulling from library/node 75a822cd7888: Pull complete 57de64c72267: Pull complete 4306be1e8943: Pull complete 871436ab7225: Pull complete 0110c26a367a: Pull complete 1f04fe713f1b: Pull complete ac7c0b5fb553: Pull complete Digest: sha256:2e95be60faf429d6c97d928c762cb36f1940f4456ce4bd33fbdc34de94a5e043 Status: Downloaded newer image for node:6.9.2 ---> FAAADB4AAF9B SCHRITT 2: LAUFEN 8080 ---> DA7D251B3FD5 ---> 881F9FB69B2C Entfernen Sie Intermediate Container DA7D251B3FD5 Schritt 3: Server kopieren.JS . ---> 0ACF61D9E75E Entfernen Sie Zwischenbehälter 3A4025539CF6 Schritt 4: CMD -Knotenserver.JS ---> Laufen in 8AA9A4CBD723 ---> 41445E5C48FE RELANDIEREN VERMETIEREN Container 8AA9A4CBD723 erfolgreich gebaut 41445e5C48Fe
Im Cluster bereitstellen
Um My-Node zu bereitstellen: V1, führen Sie den folgenden Befehl aus:
$ kubectl run my-node --image = my-node: v1 --port = 8080 Bereitstellung "my-node" erstellt
Es erstellt einen Pod auf dem Cluster. Wir können die POD -Status mit den folgenden Befehlen überprüfen:
$ kubectl Holen Sie sich Bereitstellungsname gewünscht aktuelle aktuelle verfügbare Age My-Node 1 1 1 1 34s
$ kubectl Get Pods Name Ready Status Neustarts Alter My-Node-276881918-Qth5s 1/1 Laufen 0 1M
$ kubectl Get Ereignisse Lastseen FirstSeen Countname Art SubObject Type Grund Quelle Meldung 32m 32m 1 Minikube-Knoten Normaler Startkube-Proxy, Minikube Startkube-Proxy. 32m 32 m 1 Minikube -Knoten Normaler Startkuberett, Minikube -Startkuberett. 32m 32m 2 minikube Node Normal NodeHasSufficientDisk kubelet, minikube Node minikube status is now: NodeHasSufficientDisk 32m 32m 2 minikube Node Normal NodeHasSufficientMemory kubelet, minikube Node minikube status is now: NodeHasSufficientMemory 32m 32m 2 minikube Node Normal NodeHasNoDiskPressure kubelet, minikube Node minikube status is now: NodeHasNoDiskPressure 32m 32m 1 minikube Node Normal NodeAllocatableEnforced kubelet, minikube Updated Node Allocatable limit across pods 32m 32m 1 minikube Node Normal RegisteredNode controllermanager Node minikube event: Registered Node minikube in NodeController 32m 32m 1 minikube Node Normal NodeReady kubelet, minikube Node minikube status is now: NODEREADY 6M 6m 1 Minikube -Knoten Normal registrierte Node ControllerManager -Knoten Minikube Ereignis: Registrierter Knoten Minikube in NodeController 5m 5m 1 Minikube -Knoten Normaler Startkuberet,MINIKUME INTOR KUBELT. 5m 5m 1 minikube Node Normal NodeAllocatableEnforced kubelet, minikube Updated Node Allocatable limit across pods 5m 5m 1 minikube Node Normal NodeHasSufficientDisk kubelet, minikube Node minikube status is now: NodeHasSufficientDisk 5m 5m 1 minikube Node Normal NodeHasSufficientMemory kubelet, minikube Node minikube status is now: NodeHasSufficientMemory 5m 5m 1 minikube Node Normal NodeHasNoDiskPressure kubelet, minikube Node minikube status is now: NodeHasNoDiskPressure 5m 5m 1 minikube Node Normal NodeNotReady kubelet, minikube Node minikube status is now: NodeNotReady 5m 5m 1 minikube Node Normal Starting kube-proxy, minikube Starting kube-proxy. 5m 5m 1 Minikube-Knoten Normaler Nodeady Kuberelett, Minikube-Knoten Minikube-Status jetzt: Nodeadyeready 2m 2 m 1 My-Node-27681918-Qth5s Pod Normal geplant geplant, Standard-Scheduler, erfolgreich zugewiesene My-Node-27681918-Qth5S, um Minikube 2m 2m 1-Node 1-Node 1-Node 1-Node 1-Nod 1-Node 1-Node zugewiesen zu werden, mym 1-nod -276881918-Qth5s Pod Normal erfolgreicher Mountvolume Kuberelet, Minikube Mountvolume.Setup gelang dem Volumen "Default-Token-R5PL1" 2M 2 m 1 My-Node-276881918-Qth5S POD-Spezifikation.Container My-Node Normal gezogene Kuberelet, Minikube-Containerbild "My-Node: v1" bereits auf Maschine 2m 2m 1 My-Node-276881918-Qth5s Pod Spec vorhanden.Container My-Node Normal erstellt Kuberelet, Minikube erstellte Container 2M 2m 1 My-Node-276881918-Qth5s Pod Spec Spec.containersmy-node Normal Started kubelet, minikube Started container 2m 2m 1 my-node-276881918 ReplicaSet Normal SuccessfulCreate replicaset-controller Created pod: my-node-276881918-qth5s 2m 2m 1 my-node Deployment Normal ScalingReplicaSet deployment-controller Scaled UP Replica Set My-Node-276881918
Einen Dienst erstellen
Ein Pod ist unzugänglich. Sie müssen einen Dienst schaffen, um den Pod für die Welt zugänglich zu machen. Der folgende Befehl sollte den erforderlichen Dienst erstellen:
$ kubectl expose Deployment my-node --Type = LoadBalancer Service "My-Node" exponiert
Sie können den Servicestatus wie diesen überprüfen:
$ kubectl Get Services Name Cluster-IP External-IP-Port (en) Alter Kubernetes 10.0.0.1443/TCP 34m My-Node 10.0.0.213 8080: 31460/TCP 31s
Wenn Sie den folgenden Befehl verwenden, wird der Dienst in einem Webbrowser geöffnet:
$ Minikube Service My-Node Öffnen Kubernetes Service Standard/My-Node im Standardbrowser…
Sie können überprüfen, was in Ihrem Pod mit dem Befehl "Protokolle" - Kubectl -Protokolle [nameOfthepod] - vorhanden ist.
$ kubectl Protokolle My-Node-276881918-Qth5S empfangene Anforderung für URL: / empfangene Anfrage für URL: / Favicon.ICO
In den obigen Protokollen werden die Anforderungen an den Server angezeigt.JS -Anwendung, die auf dem Cluster ausgeführt wird.
Aufräumen
Sie können den Dienst und den Pod mit den folgenden Befehlen löschen:
$ kubectl löschen Service My-Node Service "my-node" gelöscht $ kubectl löschen Bereitstellung My-Node [/Code] Bereitstellung "My-Node" gelöscht
Sie können den Minikube stoppen:
$ minikube stoppen Sie den lokalen Kubernetes -Cluster an ... Maschine gestoppt.
Kubernetes ist ein riesiges System mit groß angelegten Fähigkeiten. Kubernetes -Dokumentation ist der beste Ort, um sich über diese leistungsstarke Technologie zu informieren.
Weiteres Studium:
Kubernetes -Dokumentation: https: // kubernetes.io/docs