k8s+Docker-Cluster-Integration und -Konstruktion (Vollversion)

1. Einführung in die Kubernetes-Reihe

1. Hintergrundeinführung

  Cloud Computing entwickelt sich rasant

  • IaaS

    • PaaS

      • SaaS

  Die Docker-Technologie schreitet sprunghaft voran

  • Einmal erstellen, überall ausführen

    • Container sind schnell und leicht

      • vollständige ökologische Umgebung

2. Was ist Kubernetes?

  Erstens handelt es sich um eine neue führende Lösung für verteilte Architektur auf Basis der Container-Technologie. Kubernetes (k8s) ist Googles Open-Source-Container-Cluster-Management-System (Google-intern: Borg). Basierend auf der Docker-Technologie bietet es eine Reihe vollständiger Funktionen wie Bereitstellung und Betrieb, Ressourcenplanung, Serviceerkennung und dynamische Skalierung für Containeranwendungen, wodurch die Verwaltung großer Containercluster komfortabler wird.

  Kubernetes ist eine vollständige verteilte Systemunterstützungsplattform mit vollständigen Clusterverwaltungsfunktionen, mehrstufigen Sicherheitsschutz- und Zugriffsmechanismen, mandantenfähigen Anwendungsunterstützungsfunktionen, transparenten Dienstregistrierungs- und Erkennungsmechanismen, integrierten intelligenten Lastausgleichsfunktionen sowie leistungsstarker Fehlererkennung und Selbstverwaltung -Heilungsfunktionen, fortlaufende Service-Upgrades und Online-Erweiterungsfunktionen, skalierbare automatische Ressourcenplanungsmechanismen und Ressourcenkontingentverwaltungsfunktionen mit mehreren Granularitäten. Gleichzeitig bietet Kubernetes umfassende Verwaltungstools, die alle Aspekte abdecken, einschließlich Entwicklung, Bereitstellungstests sowie Betriebs- und Wartungsüberwachung.

In Kubernetes stellt der Dienst den Kern der verteilten Clusterarchitektur dar. Ein Dienstobjekt weist die folgenden Schlüsselmerkmale auf:

Einen eindeutigen Namen haben

Verfügen Sie über eine virtuelle IP (Cluster-IP, Service-IP oder VIP) und eine Portnummer

Kann bestimmte Remote-Service-Funktionen verkörpern

wird einer Reihe von Containeranwendungen zugeordnet, die diese Dienstfunktion bereitstellen

  Die Dienstprozesse des Dienstes stellen derzeit externe Dienste basierend auf der Socket-Kommunikation bereit, z. B. Redis, Memcache, MySQL, Webserver oder einen bestimmten TCP-Serverprozess, der ein bestimmtes Geschäft implementiert. Obwohl ein Dienst normalerweise aus mehreren verwandten Dienstprozessen besteht, die Dienste bereitstellen. Jeder Dienstprozess verfügt über einen unabhängigen Endpunkt-Zugriffspunkt (IP + Port), aber Kubernetes ermöglicht es uns, über den Dienst eine Verbindung zum angegebenen Dienst herzustellen. Mit dem transparenten Lastausgleichs- und Fehlerwiederherstellungsmechanismus von Kubernetes hat es keine Auswirkungen auf unsere normalen Dienstaufrufe, unabhängig davon, wie viele Dienstprozesse es im Backend gibt oder ob ein Dienstprozess aufgrund eines Fehlers auf anderen Maschinen erneut bereitgestellt wird. Noch wichtiger ist, dass sich der Dienst selbst nach seiner Erstellung nicht ändert, was bedeutet, dass wir uns im Kubernetes-Cluster keine Gedanken über Änderungen an der IP-Adresse des Dienstes machen müssen.

  Container bieten leistungsstarke Isolationsfunktionen. Es ist notwendig, die Gruppe von Prozessen, die Dienste bereitstellen, im Container zu isolieren. Zu diesem Zweck hat Kubernetes das Pod-Objekt entworfen, um jeden Dienstprozess in den entsprechenden Pod zu packen und ihn so zu einem Container zu machen, der im Pod ausgeführt wird. Um die Assoziationsverwaltung zwischen Dienst und Pod einzurichten, fügt Kubernetes jedem Pod eine Bezeichnung hinzu. Beispielsweise wird ein Pod, auf dem MySQL ausgeführt wird, mit name=mysql gekennzeichnet, ein Pod, auf dem PHP ausgeführt wird, mit name=php und dann der entsprechende Dienst ist beschriftet Definieren Sie den Label-Selektor Label Selector, der das Problem der Zuordnung zwischen Dienst und Pod geschickt lösen kann.

  In Bezug auf die Clusterverwaltung unterteilt Kubernetes die Maschinen im Cluster in einen Masterknoten und eine Gruppe von Arbeitsknotenknoten. Unter ihnen führt der Masterknoten eine Reihe von Prozessen im Zusammenhang mit der Clusterverwaltung, Kube-Apiserver und Kube-Controller-Manager aus und Kube-Scheduler. Diese Prozesse realisieren die Verwaltungsfunktionen des gesamten Clusters, wie Ressourcenverwaltung, Pod-Planung, elastische Skalierung, Sicherheitskontrolle, Systemüberwachung und Fehlerkorrektur, und werden alle automatisch abgeschlossen. Der Knoten dient als Arbeitsknoten im Cluster und führt echte Anwendungen aus. Die kleinste laufende Einheit, die von Kubernetes auf dem Knoten verwaltet wird, ist der Pod. Der Knoten führt die Kubelet- und Kube-Proxy-Dienstprozesse von Kubernetes aus. Diese Dienstprozesse sind für die Erstellung, den Start, die Überwachung, den Neustart und die Zerstörung von Pods sowie die Implementierung von Lastausgleichsdiensten im Softwaremodus verantwortlich.

  Im Kubernetes-Cluster werden die beiden Hauptprobleme der Serviceerweiterung und -aktualisierung in herkömmlichen IT-Systemen gelöst. Sie müssen lediglich einen Replikationscontroller (RC) für den Pod erstellen, der mit dem Dienst verknüpft ist, der erweitert werden muss, und Probleme wie Erweiterungen und nachfolgende Upgrades des Dienstes können problemlos gelöst werden. Fügen Sie die folgenden drei Schlüsselinformationen in eine RC-Definitionsdatei ein.

Definition des Ziel-Pods

Die Anzahl der Replikate, die der Ziel-Pod ausführen muss (Replikate)

Das zu überwachende Ziel-Pod-Label (Label)

  Nach der Erstellung des RC filtert Kubernetes die entsprechenden Pod-Instanzen anhand des im RC definierten Labels heraus und überwacht deren Status und Menge in Echtzeit. Wenn die Anzahl der Instanzen geringer ist als die definierte Anzahl von Replikaten, wird basierend darauf eine Instanz erstellt die im RC definierte Pod-Vorlage. Der neue Pod wird dann für den entsprechenden Knoten eingeplant, um mit der Ausführung zu beginnen, bis die Anzahl der Pod-Instanzen das vorgegebene Ziel erreicht. Dieser Prozess ist vollständig automatisiert.

  

 Vorteile von Kubernetes:

  • Container-Orchestrierung

  • Leicht

  • Open Source

  • Elastische Skalierung

  • Lastverteilung

3. Kernkonzepte von Kubernetes

3.1、Meister

  Der Verwaltungsknoten des k8s-Clusters ist für die Verwaltung des Clusters und die Bereitstellung des Zugriffs auf die Ressourcendaten des Clusters verantwortlich. Verfügen Sie über den Etcd-Speicherdienst (optional), führen Sie den API-Server-Prozess, den Controller-Manager-Dienstprozess und den Scheduler-Dienstprozess aus und verknüpfen Sie den Arbeitsknoten Node.

  • Der Kubernetes-API-Server stellt den Schlüsseldienstprozess der HTTP-Rest-Schnittstelle bereit und ist der einzige Einstiegspunkt für Vorgänge wie das Hinzufügen, Löschen, Ändern und Abfragen aller Ressourcen in Kubernetes. Es ist auch der Eintrittsprozess der Clustersteuerung;

  • Kubernetes Controller Manager ist das automatisierte Kontrollzentrum für alle Kubernetes-Ressourcenobjekte;

  • Kubernetes Schedule ist der Prozess, der für die Ressourcenplanung (Pod-Planung) verantwortlich ist.

3.2、Knoten

  Knoten ist der Dienstknoten (auch Agent oder Minion genannt), der Pod in der Kubernetes-Clusterarchitektur ausführt. Der Knoten ist die Einheit des Kubernetes-Clusterbetriebs. Er wird zum Hosten des Betriebs des zugewiesenen Pods verwendet und ist der Host, auf dem der Pod ausgeführt wird. Es ist mit dem Master-Verwaltungsknoten verknüpft und verfügt über Namen, IP und Systemressourceninformationen.

  • Führen Sie den Docker Engine-Dienst aus

  • Daemon kunelet

  • Load-Balancer-Kube-Proxy

Jeder Node-Knoten führt die folgenden Schlüsselprozesse aus

kubelet: Verantwortlich für Aufgaben wie das Erstellen, Starten und Stoppen von Containern für Pods

kube-proxy: eine wichtige Komponente, die den Kommunikations- und Lastausgleichsmechanismus des Kubernetes-Dienstes implementiert

Docker Engine (Docker): Docker-Engine, verantwortlich für die Erstellung und Verwaltung nativer Container

  Knotenknoten können während des Betriebs dynamisch zum Kubernetes-Cluster hinzugefügt werden. Standardmäßig registriert sich Kubelet beim Master. Dies ist auch die von Kubernetes empfohlene Knotenverwaltungsmethode. Der Kubelet-Prozess meldet regelmäßig seine eigenen Informationen an den Master, z Betriebssystem, Docker-Version, CPU und Speicher sowie die ausgeführten Pods usw., damit der Master die Ressourcennutzung jedes Node-Knotens kennen und eine effiziente und ausgewogene Ressourcenplanungsstrategie implementieren kann.

3.3, Sub

Eine Kombination mehrerer zusammengehöriger Container, die auf Node-Knoten ausgeführt werden. Die im Pod enthaltenen Container werden auf demselben Host ausgeführt, verwenden denselben Netzwerk-Namespace, dieselbe IP-Adresse und denselben Port und können über localhost kommunizieren. Pod ist die kleinste Einheit für die Erstellung, Planung und Verwaltung von Kurbernetes. Es bietet ein höheres Abstraktionsniveau als Container und macht die Bereitstellung und Verwaltung flexibler. Ein Pod kann einen Container oder mehrere verwandte Container enthalten.

Eigentlich gibt es zwei Arten von Pods: gewöhnliche Pods und statische Pods. Letzteres ist etwas Besonderes. Es existiert nicht im etcd-Speicher von Kubernetes, sondern wird in einer bestimmten Datei auf einem bestimmten Knoten und nur auf diesem Knoten gespeichert . Sobald ein normaler Pod erstellt wurde, wird er im etcd-Speicher abgelegt und dann vom Kubernetes-Master für die Bindung an einen bestimmten Knoten eingeplant. Der Pod wird dann durch den Kubelet-Prozess auf dem in einer Reihe verwandter Docker instanziiert entsprechender Knoten. Der Container wird gestartet und gestartet. Wenn ein Container in einem Pod stoppt, erkennt Kubernetes standardmäßig dieses Problem automatisch und startet den Pod neu (startet alle Container im Pod neu). Wenn der Knoten, auf dem sich der Pod befindet, ausfällt , werden alle Pods auf diesem Knoten auf andere Knoten umgeplant.

3.4, Replikationscontroller

Replication Controller wird verwendet, um Pod-Kopien zu verwalten und sicherzustellen, dass im Cluster eine bestimmte Anzahl von Pod-Kopien vorhanden ist. Wenn die Anzahl der Replikate im Cluster größer als die angegebene Anzahl ist, werden überschüssige Container über der angegebenen Anzahl gestoppt. Andernfalls werden Container mit weniger als der angegebenen Anzahl gestartet, um sicherzustellen, dass die Anzahl unverändert bleibt. Der Replikationscontroller ist der Kern für die Realisierungelastischer Skalierung, dynamischer Erweiterung und rollierender Upgrades.

3.5、Service

Der Dienst definiert eine logische Sammlung von Pods und eine Strategie für den Zugriff auf die Sammlung und ist eine Abstraktion eines echten Dienstes. Der Dienst bietet einen einheitlichen Dienstzugriffseingang, Dienst-Proxy und Erkennungsmechanismus und ordnet mehrere Pods demselben Label zu. Benutzer müssen nicht wissen, wie der Hintergrund-Pod ausgeführt wird.

Probleme beim Zugriff auf den Dienst von externen Systemen

Zuerst müssen wir die drei IPs von Kubernetes verstehen.

  • Knoten-IP: Die IP-Adresse des Knotenknotens

  • Pod-IP: Die IP-Adresse des Pods

  • Cluster-IP: IP-Adresse des Dienstes  

    

Zunächst einmal ist die Knoten-IP die IP-Adresse der physischen Netzwerkkarte des Knotens im Kubernetes-Cluster. Alle Server, die zu diesem Netzwerk gehören, können direkt über dieses Netzwerk kommunizieren. Dies zeigt auch, dass Knoten außerhalb des Kubernetes-Clusters über die Knoten-IP kommunizieren müssen, wenn sie auf einen Knoten oder TCP/IP-Dienst innerhalb des Kubernetes-Clusters zugreifen.

Zweitens ist die Pod-IP die IP-Adresse jedes Pods. Sie wird von der Docker Engine basierend auf dem IP-Adresssegment der Docker0-Bridge zugewiesen. Normalerweise handelt es sich um ein virtuelles Netzwerk der zweiten Schicht.

Schließlich ist Cluster-IP eine virtuelle IP, ähnelt aber aus folgenden Gründen eher einem gefälschten IP-Netzwerk:

Die Cluster-IP wirkt sich nur auf das Kubernetes-Dienstobjekt aus und wird von Kubernetes verwaltet und IP-Adressen zugewiesen

Die Cluster-IP kann nicht gepingt werden, da sie kein „Entitätsnetzwerkobjekt“ hat, auf das sie antworten kann

Cluster-IP kann nur mit Service-Port kombiniert werden, um einen bestimmten Kommunikationsport zu bilden. Cluster-IP allein bietet keine Kommunikationsbasis und gehört zu einem geschlossenen Raum wie dem Kubernetes-Cluster.

Innerhalb des Kubernetes-Clusters verwendet die Kommunikation zwischen dem Node-IP-Netzwerk, dem Pod-IP-Netzwerk und dem Cluster-IP-Netzwerk eine spezielle Programmier-Routing-Regel, die von Kubernetes selbst entwickelt wurde.

3.6, Etikett

Jedes API-Objekt in Kubernetes wird durch Label identifiziert. Das Wesentliche von Label ist eine Reihe von Schlüssel/Wert-Paaren, wobei der Schlüssel und der Wert vom Benutzer angegeben werden. Beschriftungen können an verschiedene Ressourcenobjekte wie Knoten, Pod, Service, RC usw. angehängt werden. Ein Ressourcenobjekt kann eine beliebige Anzahl von Beschriftungen definieren, und dieselbe Beschriftung kann einer beliebigen Anzahl von Ressourcenobjekten hinzugefügt werden. Das Etikett stellt die Grundlage für den Betrieb des Replikationscontrollers und des Dienstes dar. Die beiden sind über das Etikett mit dem Pod verknüpft, der auf dem Knoten ausgeführt wird.

Wir können mehrdimensionale Verwaltungsfunktionen für die Ressourcengruppierung implementieren, indem wir ein oder mehrere verschiedene Labels mit bestimmten Ressourcenobjekten bündeln, sodass Ressourcenzuweisung, Planung, Konfiguration und andere Verwaltungsaufgaben flexibel und bequem durchgeführt werden können.

Versions-Tags: "release":"stable","release":"canary"......

Umgebungs-Tags: "environment":"dev","environment":"qa", "environment":"Produktion"

Schema-Tags: "tier":"frontend","tier":"backend","tier":"middleware"

Partitionsbezeichnung: „Partition“: „KundeA“, „Partition“: „KundeB“

Qualitätskontroll-Tags: "track":"täglich", "track":"wöchentlich"

Label entspricht dem uns bekannten Label. Das Definieren eines Labels für ein Ressourcenobjekt entspricht dem Vergeben eines Labels. Anschließend können Sie Ressourcenobjekte mit bestimmten Labels über den Label-Selektor (Label-Selektor) abfragen und filtern. Kubernetes verwendet dies Dies Die Methode implementiert einen einfachen und universellen Objektabfragemechanismus ähnlich wie SQL.

Die wichtigen Verwendungsszenarien von Label Selector in Kubernetes sind wie folgt:

Der kube-Controller-Prozess filtert die Anzahl der zu überwachenden Pod-Kopien, indem er einen Label Selector für das Ressourcenobjekt RC definiert und so einen vollautomatischen Steuerungsprozess erreicht, bei dem die Anzahl der Kopien immer den erwarteten Einstellungen entspricht.

 Der Kube-Proxy-Prozess wählt den entsprechenden Pod über den Label Selector des Dienstes aus und erstellt automatisch eine Routing-Tabelle für die Anforderungsweiterleitung für jeden Dienst an den entsprechenden Pod, wodurch ein intelligenter Lastausgleich des Dienstes erreicht wird.

 Durch die Definition spezifischer Labels für bestimmte Knoten und die Verwendung der Label-Scheduling-Strategie Nodeselector in der Pod-Definitionsdatei kann der Kuber-Scheduler-Prozess die Funktion „gerichtete Planung“ des Pods implementieren

4. Kubernetes-Architektur und -Komponenten

- Dienstgruppierung, kleiner Cluster, Multi-Cluster

- Dienstgruppierung, großer Cluster, einzelner Cluster

4.1. Kubernetes-Komponenten:

Die Kubernetes-Master-Steuerungskomponente plant und verwaltet das gesamte System (Cluster), einschließlich der folgenden Komponenten:

4.1.1、Kubernetes-API-Server

Als Eingang zum Kubernetes-System kapselt es die Hinzufügungs-, Lösch-, Änderungs- und Abfragevorgänge von Kernobjekten und stellt sie externen Kunden und internen Komponenten in Form einer RESTful-API-Schnittstelle zur Verfügung. Die gepflegten REST-Objekte werden in Etcd beibehalten und gespeichert.

4.1.2.Kubernetes-Planer

    Führen Sie die Knotenauswahl (d. h. Zuweisung von Maschinen) für den neu erstellten Pod durch und übernehmen Sie die Verantwortung für die Ressourcenplanung des Clusters. Die Komponenten sind abnehmbar und können problemlos durch andere Scheduler ersetzt werden.

4.1.3.Kubernetes-Controller

    Verantwortlich für die Ausführung verschiedener Controller. Es wurden viele Controller bereitgestellt, um den normalen Betrieb von Kubernetes sicherzustellen.

4.1.4. Replikationscontroller

    Verwalten und warten Sie den Replikationscontroller, ordnen Sie den Replikationscontroller und die Pods zu und stellen Sie sicher, dass die vom Replikationscontroller definierte Anzahl der Replikate mit der tatsächlichen Anzahl der ausgeführten Pods übereinstimmt.

4.1.5. Knotencontroller

    Verwalten und warten Sie den Knoten, überprüfen Sie regelmäßig den Zustand des Knotens und identifizieren Sie (ausgefallene | nicht ausgefallene) Knoten.

4.1.6. Namespace-Controller

    Verwalten und pflegen Sie den Namespace und bereinigen Sie regelmäßig ungültige Namespaces, einschließlich API-Objekten unter Namespaces wie Pods, Diensten usw.

4.1.7. Service-Controller

    Verwalten und pflegen Sie den Service, stellen Sie Lasten und Service-Agenten bereit.

4.1.8.EndPoints Controller

    Verwalten und warten Sie Endpunkte, verknüpfen Sie Dienste und Pods, erstellen Sie Endpunkte als Backend des Dienstes und aktualisieren Sie Endpunkte in Echtzeit, wenn sich Pods ändern.

4.1.9. Dienstkonto-Controller

    Verwalten und pflegen Sie das Dienstkonto, erstellen Sie ein Standarddienstkonto für jeden Namespace und erstellen Sie ein Dienstkontogeheimnis für das Dienstkonto.

4.1.10. Persistenter Lautstärkeregler

    Verwalten und pflegen Sie das Persistent Volume und den Persistent Volume Claim, weisen Sie ein Persistent Volume für die Bindung an den neuen Persistent Volume Claim zu und führen Sie die Bereinigung und Wiederverwertung des freigegebenen Persistent Volume durch.

4.1.11. Daemon-Set-Controller

    Verwalten und warten Sie das Daemon-Set, das für die Erstellung des Daemon-Pods und die Sicherstellung der normalen Ausführung des Daemon-Pods auf dem angegebenen Knoten verantwortlich ist.

4.1.12. Bereitstellungscontroller

    Verwalten und warten Sie die Bereitstellung, ordnen Sie den Bereitstellungs- und Replikationscontroller zu und stellen Sie sicher, dass die angegebene Anzahl von Pods ausgeführt wird. Wenn die Bereitstellung aktualisiert wird, steuern Sie die Aktualisierungen des Replikationscontrollers und des Pods.

4.1.13.Job-Controller

    Verwalten und pflegen Sie Jobs, erstellen Sie einmalige Aufgaben-Pods für Jod und stellen Sie sicher, dass die durch den Job angegebene Anzahl von Aufgaben abgeschlossen wird.

4.1.14. Pod-Autoscaler-Controller

    Realisieren Sie die automatische Skalierung von Pods, rufen Sie regelmäßig Überwachungsdaten ab, führen Sie einen Richtlinienabgleich durch und führen Sie Pod-Skalierungsaktionen aus, wenn die Bedingungen erfüllt sind.

4.2、Kubernetes-Knoten

Kubernetes-Knoten führen Knoten aus und führen und verwalten Geschäftscontainer, einschließlich der folgenden Komponenten

4.2.1、Kubelet

Kubelet ist für die Verwaltung und Steuerung von Containern verantwortlich und empfängt Anforderungen zur Pod-Erstellung vom Kubernetes-API-Server, startet und stoppt Container, überwacht den Betriebsstatus von Containern und erstellt Berichte an den Kubernetes-API-Server.

4.2.2、Kubernetes-Proxy

Kubernetes Proxy ist für die Erstellung von Proxy-Diensten für Pods verantwortlich und ruft alle Dienstinformationen vom Kubernetes-API-Server ab und erstellt Proxy-Dienste basierend auf den Dienstinformationen, um die Weiterleitung und Weiterleitung von Anforderungen vom Dienst an den Pod zu implementieren und so eine virtuelle Kubernetes-Ebene zu realisieren Weiterleitungsnetzwerk.

4.3.3、Docker

Der Containerdienst muss auf Node ausgeführt werden

2. Praktische Praxis zum Aufbau einer Docker-Cluster-Umgebung auf Basis von Kubernetes

Kubernetes ist ein verteilter Cluster, der von Google auf Docker-Basis erstellt wurde und aus den folgenden Hauptkomponenten besteht

1、usw.:

Gemeinsam genutzte Hochverfügbarkeitsspeicherkonfiguration und Diensterkennung werden in Verbindung mit Flannel auf dem Knotencomputer verwendet, um Docker, der auf jedem Knoten ausgeführt wird, über unterschiedliche IP-Segmente zu ermöglichen. Das ultimative Ziel besteht darin, Docker-Containern, die auf verschiedenen Knoten ausgeführt werden, unterschiedliche IP-Segmente zu ermöglichen IP-Segmente. Eine IP-Adresse, die sich von jedem anderen Container unterscheidet (Docker-Container, der auf anderen Knoten ausgeführt wird).

2、Flanell:

Unterstützung der Netzwerkstruktur

3、zum Apiserver:

Unabhängig davon, ob die Steuerung direkt über kubectl oder über eine Remote-API erfolgt, muss sie über apiServer erfolgen

4、Kube-Controller-Manager:

Schleifensteuerung über Replikations-Controller, Endpunkt-Controller, Namespace-Controller und Serviceaccounts-Controller, interagieren mit kube-apiserver, um sicherzustellen, dass diese Controller funktionieren

5、Seien Sie ein Planer

Die Funktion des Kubernetes-Schedulers besteht darin, Pods gemäß einem bestimmten Planungsalgorithmus für bestimmte Arbeitsknoten (Knoten) zu planen. Dieser Vorgang wird auch als Bindung bezeichnet.

6、kubelet

Kubelet läuft auf dem Kubernetes-Knoten und ist der logische Nachfolger des Container-Agenten

7. Sei ein Stellvertreter

Kube-Proxy ist eine Komponente in Kubernetes, die auf Knotenknoten ausgeführt wird und die Rolle eines Dienst-Proxys spielt.

3. Bereiten Sie die Umgebung vor

1. Diagramm der Architekturtopologie

Fügen Sie hier eine Bildbeschreibung ein

2. Umgebungsplanung für zwei CentOS7-Systemmaschinen:

192.168.10.130: wird zur Installation des Kubernetes-Masters verwendet

192.168.10.131: wird als Kubernetes-Knoten (Knoten1) verwendet

Rollen-IP-Komponente
Master 192.168.10.130 etcd、kube-apiserver、kube-controller-manager、kube-scheduler
node01 192.168.10.131 Kubelet, Kube Proxy, Docker
node02 192.168.10.132 kubelet、kube-proxy、docker

3. Umgebungsbeschreibung

Betriebssystem: CentOS7

Kubernetes-Version: v1.8.3

Docker-Version: v17.09-ce

Alle verwenden die neueste stabile Version.

Schalten Sie Selinux aus.

Hinweis: Die von mir verwendete Version ist wie folgt:

Überprüfen Sie den Systemkern: uname -r zeigt das Ergebnis 3.10.0-229.el7.x86_64 an

Überprüfen Sie die Systemversion: cat /etc/centos-release

Ergebnisse anzeigen CentOS Linux Version 7.1.1503 (Core)

Überprüfen Sie die Systembitnummer: getconf LONG_BIT

Betriebssystem: CentOS Linux Version 7.1.1503 (Core)

Kubernetes-Version: v1.10.

Docker-Version: v17.05-ce

Etcd-Version: v3.34

Schalten Sie Selinux aus.

Bereitstellungsteil

4. Stellen Sie den Cluster bereit

1. Laden Sie das Binärpaket herunter

Kubernetes-Softwarepaket und ETCD

Sie können es von der offiziellen Download-Adresse herunterladen. Die Adresse lautet: Klicken Sie, um den Link zu öffnen. Die neueste Download-Version ist V1.10, die blockiert wird. Sie können sich auf Klicken, um den Link zu öffnen beziehen. Auf jeden Fall bin ich immer noch Legen Sie die Client-Binärdatei, die Server-Binärdatei und die Knoten-Binärdatei von V1.0 ab. Heruntergeladen. ETCD kann durch Klicken auf den Link heruntergeladen werden.

Zweck des Softwarepakets

kubernetes-server-linux-amd64.tar.gz

Die Version ist V1.10, einschließlich KUBE-APISERVER, KUBE-CONTROLLER-MANAGER, KUBE-SCHEDULE

Download-Adresse: kubernetes-server-linux-amd64.tar.gz_Kostenloser Hochgeschwindigkeits-Download | Baidu Netdisk – Unbegrenzte Freigabe

kubernetes-node-linux-amd64.tar.gz

Die Version ist V1.10, die KUBELET, KUBE-PROXY und KUBECTL enthält. Docker muss zuerst installiert werden.

Download-Adresse:kubernetes-node-linux-amd64.tar.gz_Kostenloser Hochgeschwindigkeits-Download | Baidu Netdisk – Unbegrenzte Freigabe

etcd-v3.3.4-linux-amd64.tar.gz

Die Version ist V3.34, Kubernetes Master erfordert ETCD-Datenspeicher

Download-Adresse:etcd-v3.3.4-linux-amd64.tar.gz_Kostenloser Hochgeschwindigkeits-Download | Baidu Netdisk – Unbegrenzte Freigabe

Docker

Version V1.17.05

2. Nachdem der Download abgeschlossen ist, laden Sie ihn auf den Server hoch

Laden Sie kubernetes-server-linux-amd64.tar.gz auf den Masterknoten hoch.

kubernetes-node-linux-amd64.tar.gz wird auf den Knoten hochgeladen.

Laden Sie etcd-v3.3.4-linux-amd64.tar.gz auf den Knotenknoten hoch

5. Schalten Sie die auf dem System ausgeführte Firewall und Selinux aus und legen Sie den Zeitzonen-Hostnamen fest

1. Wenn auf dem System eine Firewall aktiviert ist, führen Sie die folgenden Schritte aus, um die Firewall auszuschalten (alle Maschinen).

# systemctl firewalld stoppen # systemctl firewalld deaktivieren

2. Schließen Sie Selinux

vim /etc/sysconfig/selinux
Suchen und ändern Sie die folgenden Werte
SELINUX=deaktiviert
Führen Sie nach der Änderung den folgenden Befehl aus, damit die Änderung wirksam wird.
setenforce 0

3. Stellen Sie den Hostnamen master1 node1... jeweils auf die Zeitzone ein

Legen Sie die Zeitzone fest. Sowohl die Master- als auch die Knotenmaschine müssen ausgeführt werden, und die Zeit ist einheitlich

timedatectl set-timezone Asien/Shanghai

Legen Sie den Master-Hostnamen fest

hostnamectl set-hostname master

Legen Sie den Hostnamen des Knotens fest

hostnamectl set-hostname node #node wird angezeigt

6. Installation und Konfiguration der Master-Hostmaschine (d. h. Kubernetes-Server).

1. Installieren Sie etcd

ETCD ist ein verteiltes und konsistentes KV-Speichersystem für die gemeinsame Konfiguration und Diensterkennung. Es umfasst hauptsächlich Hinzufügung, Löschung, Änderung, Sicherheitsauthentifizierung, Clustering, Wahl, Transaktion, verteilte Sperre, Überwachungsmechanismus usw. und implementiert das RAFT-Protokoll. Sehr mächtig

1.1. Entpacken Sie die Datei

etcd-v3.3.4-linux-amd64.tar.gz

1.2 Kopieren Sie die Datei in das angegebene Verzeichnis oder das aktuelle Verzeichnis, sie muss sich jedoch im bin-Verzeichnis befinden

Kopieren Sie etcd und etcdctl im Dekomprimierungsverzeichnis in das Verzeichnis /usr/local/bin oder erstellen Sie selbst ein bin-Verzeichnis und platzieren Sie dann etcd und etcdctl im erstellten bin-Verzeichnis.

cd /usr/local/bin/

1.3 Konfigurieren Sie die etcd-Konfigurationsdatei

Stellen Sie sicher, dass die aufgelisteten Elemente korrekt konfiguriert und nicht auskommentiert sind. Dies gilt für die folgenden Konfigurationen. 

[telecom@master ~]$ vim /etc/etcd/etcd.conf
ETCD_NAME="Standard"
ETCD_DATA_DIR="/var/lib/kubelet"
ETCD_LISTEN_PEER_URLS="http://192.168.10.130:2380"
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://127.0.0.1:2379,http://192.168.10.130:2379,http://192.168.10.130:4001"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.10.130:2380"
# Wenn Sie einen anderen ETCD_NAME (z. B. test) verwenden, legen Sie den ETCD_INITIAL_CLUSTER-Wert für diesen Namen fest, d. h. "test=http://..."
ETCD_INITIAL_CLUSTER="default=http://192.168.10.130:2380"
ETCD_INITIAL_CLUSTER_STATE="neu"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
ETCD_HEARTBEAT_INTERVAL=6000
ETCD_ELECTION_TIMEOUT=30000

1.4. Konfigurieren Sie systemctl

Erstellen Sie etcd.service im Verzeichnis /etc/systemd/system/. Wenn kein Systemverzeichnis vorhanden ist, erstellen Sie es einfach. Erstellen Sie zuerst die ETCD-Speicherverzeichnisadresse /home/chen/etcd/data und dann das ETCD-Konfigurationsdateiverzeichnis . /etc/etcd/, da wir die Standardkonfiguration von ETCD verwenden, sodass die Datei /etc/etcd/etcd.conf leer sein kann.

[telecom@master ~]$ vim /etc/systemd/system/etcd.service
[Einheit]
Beschreibung=etcd-Server
After=network.target
After=network-online.target
Wants=network-online.target
 
[Service]
#Type=einfach
Geben Sie=benachrichtigen ein
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/local/bin/etcd
[Installieren]
WantedBy=multi-user.target

1.5. Nach der Konfiguration. Führen Sie den Befehl aus

systemctl daemon-reload
systemctl aktiviert etcd.service
systemctl startet etcd.service
systemctl-Status etcd.service
systemctl stoppt etcd.service

Es sind Probleme aufgetreten

spawning /usr/local/bin/etcd: Kein Verzeichnis
Neu
mkdir -p /var/lib/kubelet
Ändern Sie /etc/systemd/system/etcd.service
Ändern Sie den Pfad in WorkingDirectory
[Service]
WorkingDirectory=/var/lib/kubelet
und in /etc/etcd/etcd.conf
neutral
ETCD_DATA_DIR="/var/lib/kubelet"
Führen Sie dann den obigen Befehl nach Bedarf aus und er wird erfolgreich sein.

1.6. Überprüfen Sie den etcd-Status

Bild

1.7. Überprüfen Sie, ob das Schreiben von Daten in etcd erfolgreich war, und führen Sie es aus

export ETCDCTL_API=3
  
etcdctl setzt Schlüssel „Wert“
    
etcdctl Schlüssel abrufen
例:[telecom@master ~]$ etcdctl set li "123"
 
123
[telecom@master ~]$ etcdctl get li

1.8. Umgebungsvariablen festlegen

vi /etc/profile
Export ETCDCTL_API=3 hinzufügen
Führen Sie die Quelle /etc/profile aus

Bild

Wenn ein Fehler gemeldet wird, verwenden Sie „journalctl -f -t etcd“ und „journalctl -u etcd“, um das Problem zu lokalisieren.

Bild

Supongo que te gusta

Origin blog.csdn.net/Isonion/article/details/132431860
Recomendado
Clasificación