An der Kreuzung wird das Orchester
nicht verändert.
Nachdem ich Docker Swarm aufgrund seiner Pseudo-Einfachheit und konstanten Endbearbeitung, der nicht sehr bequemen Arbeit mit verteilten Dateisystemen, einer leicht feuchten Weboberfläche und der engen Funktionalität sowie der mangelnden Unterstützung der sofort einsatzbereiten GitLab-Integration völlig satt hatte, wurde die Bereitstellung beschlossen Ihr Kubernetes-Cluster auf Ihrer eigenen Hardware, nämlich durch Bereitstellung von Rancher Management Server 2.0.
Installationserfahrung, Fehlertoleranzschema, Arbeiten mit haProxy und zwei Dashboards unter der Katze:
Eingabedaten:Host Server HP Proliant DL320e Gen8 - 2 Stück
VM Ubuntu Server 16.04, 2 GB RAM, 2 vCPU, 20 GB Festplatte - 1 PC. auf jedem Host (VM-haProxy).
VM Ubuntu Server 16.04, 4 GB RAM, 4 vCPU, 40 GB Festplatte, 20 GB SSD - 3 Stk. auf jedem Host (VM - * - Cluster).
VM Ubuntu Server 16.04, 4 GB RAM, 4 vCPU, 100 GB Festplatte - 1 St. auf jedem Host (VM-NFS).
Netzwerkdiagramm:
Erste Schritte:VM-haProxy hat die Regeln für haProxy, fail2ban und iptables an Bord. Dient als Gateway für alle dahinter stehenden Maschinen. Wir haben zwei Gateways und alle Maschinen wechseln bei einem Verlust der Gateway-Kommunikation auf ihrem Host zu einem anderen.
Die Hauptaufgabe dieser Knoten (VM-haProxy) besteht darin, den Zugriff auf das Backend zu verteilen, die Ports auszugleichen, die Ports weiterzuleiten und Statistiken zu sammeln.
Meine Wahl fiel auf haProxy, ein enger fokussiertes Instrument in Bezug auf Ausgleich und Gesundheitskontrolle. Für all dies mag ich die Syntax von Konfigurationsanweisungen und arbeite mit IP-White- und Blacklists sowie mit Multi-Domain-SSL-Verbindungen.
HaProxy-Konfiguration:
haproxy.conf mit Kommentaren Wichtig: Alle Computer müssen sich anhand des Hostnamens „kennen“.
Puppet-Manifest add-host-entry.pp zum Hinzufügen von Hostnamen in / etc / hosts class host_entries { host { 'proxy01': ip => '10.10.10.11', } host { 'proxy02': ip => '10.10.10.12', } host { 'master': ip => '10.10.10.100', } host { 'node01': ip => '10.10.10.101', } host { 'node02': ip => '10.10.10.102', } host { 'node03': ip => '10.10.10.103', } host { 'node04': ip => '10.10.10.104', } host { 'node05': ip => '10.10.10.105', } host { 'nfs': ip => '10.10.10.200', } }
VM-Master-Cluster ist die Hauptsteuerungsmaschine. Es unterscheidet sich von anderen Knoten an Bord durch Puppet Master, GlusterFS Server, Rancher Server (Container), etcd (Container) und Control Manager (Container). Im Falle einer Trennung dieses Hosts funktionieren die Produktionsdienste weiterhin.
VM-Node-Cluster - Knoten, Arbeiter. Arbeitsmaschinen, deren Ressourcen in einer fehlertoleranten Umgebung zusammengefasst werden. Nichts Interessantes.
VM-NFS - NFS-Server (NFS-Kernel-Server). Die Hauptaufgabe besteht darin, Pufferplatz bereitzustellen. Speichert Konfigurationsdateien und alles. Speichert nichts Wichtiges. Sein Sturz kann beim Kaffeetrinken langsam korrigiert werden.
Wichtig: Alle Umgebungscomputer müssen an Bord sein: docker.io, nfs-common, gluster-server.
must-have-packages.pp Marionettenmanifest zur Installation der richtigen Software class musthave { package { 'docker.io': ensure => 'installed', } package { 'nfs-common': ensure => 'installed', } package { 'gluster-server': ensure => 'installed', } }
Ich werde die Installation von nfs-volume und die Konfiguration von GlusterFS nicht beschreiben, da es großzügig in großer Anzahl beschrieben wird.
Wenn Sie feststellen, dass die Spezifikationsbeschreibung SSD-Festplatten enthält, sind diese für den Betrieb des verteilten Gluster-Dateisystems vorbereitet. Erstellen Sie Partitionen und speichern Sie sie auf Hochgeschwindigkeitsfestplatten.
Hinweis Für die Ausführung eines Rancher ist keine spiegelähnliche Umgebung erforderlich. All dies ist meine Vision des Clusters und eine Beschreibung der Praktiken, denen ich folge.
Um Rancher auszuführen, reicht
ein Computer mit 4 CPU, 4 GB RAM und 10 GB Festplatte aus.
5 Minuten zu Rancher.
Auf VM-Master-Cluster machen wir:
sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
Verfügbarkeit prüfen:
curl -k https://localhost
Wenn Sie die API gesehen haben - ich gratuliere Ihnen genau auf halbem Weg.
Nachdem wir uns das Netzwerkdiagramm noch einmal angesehen haben, erinnern wir uns, dass wir über haProxy von außen arbeiten werden. In der Konfiguration, in der wir den Link
rancher.domain.ru veröffentlicht haben, legen Sie Ihr Passwort fest.
Die nächste Seite ist die Seite zur Erstellung von Kubernetes-Clustern.
Wählen Sie im Menü Clusteroptionen die Option Flanell. Ich habe nicht mit anderen Netzwerkanbietern zusammengearbeitet. Ich kann nicht raten.
Es ist zu beachten, dass wir die Kontrollkästchen etcd und Control Plane installiert haben. Der Checkbox-Worker ist nicht installiert, wenn Sie den Manager nicht im Worker-Modus verwenden möchten.
Wir arbeiten innerhalb des lokalen Netzwerks mit derselben Adresse auf der Netzwerkkarte, sodass in den Feldern Öffentliche und interne Adresse dieselbe IP angegeben ist.
Kopieren Sie den resultierenden Code oben und führen Sie ihn in der Konsole aus.
Nach einiger Zeit wird in der Weboberfläche eine Meldung zum Hinzufügen eines Knotens angezeigt. Und nach einiger Zeit starten Sie den Kubernetes-Cluster.
Um einen Worker hinzuzufügen, gehen Sie zum Bearbeiten des Clusters in der Rancher-Weboberfläche. Sie sehen dasselbe Menü, das den Verbindungsbefehl generiert.
Setzen Sie das Kontrollkästchen nur auf die Worker-Position, geben Sie die IP des zukünftigen Workers an, kopieren Sie den Befehl und führen Sie ihn in der Konsole des gewünschten Knotens aus.
Nach einer Weile erhöht sich die Clusterleistung ebenso wie die Anzahl der Knoten.
Installieren Sie das Kubernetes Dashboard:Gehen Sie zum Menü Projekte / Namespaces.
Nach der Installation sehen Sie, dass Namespaces, die sich auf Kubernetes beziehen, außerhalb von Projekten enthalten sind. Um mit diesen Namespaces vollständig arbeiten zu können, müssen sie im Projekt platziert werden.
Fügen Sie ein Projekt hinzu und benennen Sie es nach Ihren Wünschen. Verschieben Sie Namespaces (Cattle-System, Ingress-Nginx, Kube-Public, Kube-System) in das Projekt, das Sie über das Kontextmenü „Verschieben“ erstellt haben. Es sollte so sein:
Klicken Sie direkt auf den Projektnamen, um zur Workload-Systemsteuerung zu gelangen. Hier werden wir diskutieren, wie man einen einfachen Service erstellt.
Klicken Sie oben rechts auf "YAML importieren". Kopieren Sie den Inhalt
dieser Datei und fügen Sie ihn in das Textfeld des sich öffnenden Fensters ein. Wählen Sie den Namespace "kube-system" aus und klicken Sie auf "Importieren".
Nach einiger Zeit wird das Pod Kubernetes-Dashboard gestartet.
Gehen Sie zur Pod-Bearbeitung, öffnen Sie das Port-Publishing-Menü und stellen Sie die folgenden Werte ein:
Überprüfen Sie den Zugriff auf den Knoten, auf dem der Pod ausgeführt wird.
curl -k https://master:9090
Sehen Sie die Antwort? Die Veröffentlichung ist abgeschlossen, es bleibt der administrative Teil zu erreichen.
Auf der Hauptseite der Clusterverwaltung in Rancher finden Sie sehr praktische Tools wie kubectl - die Clusterverwaltungskonsole und Kubeconfig File - die Konfigurationsdatei mit der API-Adresse, ca.crt usw.
Wir gehen in kubectl und führen aus:
kubectl create serviceaccount cluster-admin-dashboard-sa kubectl create clusterrolebinding cluster-admin-dashboard-sa --clusterrole=cluster-admin --serviceaccount=default:cluster-admin-dashboard-sa
Wir haben ein Dienstkonto mit den höchsten Berechtigungen erstellt. Jetzt benötigen wir ein Token, um auf das Dashboard zugreifen zu können.
Finden Sie das Geheimnis des erstellten Kontos:
kubectl get secret | grep cluster-admin-dashboard-sa
Wir werden den Namen des Kontos mit einem bestimmten Hash am Ende sehen, ihn kopieren und ausführen:
kubectl describe secret cluster-admin-dashboard-sa-$( )
Wir erinnern uns erneut daran, dass alles erfolgreich über haProxy veröffentlicht wurde.
Wir folgen dem Link
kubernetes.domain.ru . Geben Sie den empfangenen Token ein.
Freut euch:
PSDas Gesamtergebnis Ich möchte Rancher für die Erstellung einer intuitiven Benutzeroberfläche, einer leicht implementierbaren Instanz, einer einfachen Dokumentation, der Fähigkeit zum schnellen Verschieben und der Skalierbarkeit auf Clusterebene danken. Vielleicht habe ich zu Beginn des Beitrags zu scharf gesprochen, dass Swarm die offensichtlichen Entwicklungstrends satt hatte, und mich irgendwie dazu gebracht habe, zur Seite zu starren und die langweilige Routine nicht zu beenden. Docker hat eine Ära der Entwicklung eingeleitet. Und dieses Projekt zu beurteilen ist sicherlich nichts für mich.