Rancher: Kubernetes in 5 Minuten auf Bare Metal

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:

Abb. 1


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
########################################################## #Global # ########################################################## global log 127.0.0.1 local0 notice maxconn 2000 user haproxy group haproxy tune.ssl.default-dh-param 2048 defaults log global mode http option httplog option dontlognull retries 3 option redispatch timeout connect 5000 timeout client 10000 timeout server 10000 option forwardfor option http-server-close ########################################################## #TCP # ########################################################## #    API  Kubernetes listen kube-api-tls bind *:6443 mode tcp option tcplog server VM-Master-Cluster Master:6443 ########################################################## #HTTP/HTTPS - Frontend and backend # ########################################################## #      "  ", frontend  backend. frontend http-in bind *:80 acl network_allowed src -f /path/allowed-ip #     IP.     . http-request deny if !network_allowed #       IP  . reqadd X-Forwarded-Proto:\ http mode http option httpclose acl is_haproxy hdr_end(host) -i haproxy.domain.ru acl is_rancher hdr_end(host) -i rancher.domain.ru acl is_kubernetes hdr_end(host) -i kubernetes.domain.ru use_backend kubernetes if is_kubernetes use_backend rancher if is_rancher use_backend haproxy if is_haproxy frontend https-in bind *:443 ssl crt-list /path/crt-list #    .        . acl network_allowed src -f /path/allowed-ip http-request deny if !network_allowed reqadd X-Forwarded-Proto:\ https acl is_rancher hdr_end(host) -i rancher.etraction.ru acl is_kubernetes hdr_end(host) -i kubernetes.etraction.ru use_backend kubernetes if is_kubernetes { ssl_fc_sni kubernetes.domain.ru } use_backend rancher if is_rancher { ssl_fc_sni rancher.domain.ru } # Backend  haProxy.    . backend haproxy stats enable stats uri /haproxy?stats stats realm Strictly\ Private stats auth login:passwd cookie SERVERID insert nocache indirect #  , , backend   dashboard rancher  kubernetes. backend rancher acl network_allowed src -f /path/allowed-ip http-request deny if !network_allowed mode http redirect scheme https if !{ ssl_fc } server master master:443 check ssl verify none backend kubernetes acl network_allowed src -f /path/allowed-ip http-request deny if !network_allowed mode http balance leastconn redirect scheme https if !{ ssl_fc } server master master:9090 check ssl verify none 


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.

Abb.2


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.

Abb.3


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:

Abb. 4


Klicken Sie direkt auf den Projektnamen, um zur Workload-Systemsteuerung zu gelangen. Hier werden wir diskutieren, wie man einen einfachen Service erstellt.

Abb.5


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:

Abb.6


Ü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:

Abb. 7


PS
Das 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.

Source: https://habr.com/ru/post/de418691/


All Articles