Private Cloud für das Internet der Dinge



Grüße, Habr!

Wir, das Team von IT-Architekten von IBM, das sich mit der Erstellung und Vermarktung von Industrielösungen für verschiedene Branchen befasst. In unserer Freizeit erforschen wir neue Technologien, experimentieren und probieren die besten Praktiken aus.

In den letzten Jahren war das Thema Internet der Dinge sehr beliebt. Unsere Kunden fragen nach universellen Box-Lösungen und Plattformen, die sich lokal in ihrem Rechenzentrum befinden können. Vor allem wird erwartet, dass auf der Grundlage solcher "Boxen" alle neuen Dienste und Anwendungen sehr schnell oder eher sofort oder "gestern" entwickelt und gestartet werden sollten.

Wir fragten uns: "Was ist, wenn wir etwas Ähnliches für offene und öffentliche Technologien zusammenstellen?"

Wir haben bereits viel über die Verwendung von Docker- Containern und deren auf Kubernetes basierenden Verwaltungstools gesprochen und gezeigt. Bisher war jedoch nicht erkennbar, wie all diese fortschrittlichen Technologien im industriellen Maßstab für Geschäftsaufgaben eingesetzt werden können, insbesondere im Internet der Dinge. Füllen wir also diese Lücke. Das Konzept der Microservices sowie modische Ansätze für Entwicklung (DevOps), Integration und Bereitstellung von Anwendungen (CI / CD) werden als etwas andere Aufgabe betrachtet und für später reserviert.

In diesem Artikel möchten wir über die Vorbereitung und Installation einer der Schlüsselkomponenten sprechen - IBM Cloud Private (in der Tat die industrielle Baugruppe von Docker / Kubernetes und ein wenig mehr), die beim Erstellen einer lokalen Internet of Things-Plattform als bedingter Infrastrukturkern fungieren kann. Fragen Sie, warum er?

Weil wir offene und öffentliche Technologien versprochen haben (kostenlose Version für die Community und Unterstützung durch die Community): hub.docker.com/r/ibmcom/icp-inception

Übersicht über IBM Cloud Private


IBM Cloud Private (ICP) ist eine private Cloud-Plattform für die lokale Bereitstellung und den Betrieb. ICP ist eine integrierte Umgebung, mit der Sie lokale Anwendungen entwerfen, entwickeln, bereitstellen und verwalten können, die unter Berücksichtigung der Containerarchitektur erstellt wurden. Die ICP-Bereitstellung umfasst einen Kubernetes-basierten Orchestrator (K8s), einen lokalen Image-Speicher sowie eine Verwaltungskonsole und unterstützende Überwachungstools.

Was ist eine private oder private Cloud?


Eine private Cloud ist ein Cloud-Computing-Modell, das ausschließlich für eine Organisation ausgeführt wird, normalerweise auf ihrem Gebiet und ihren Ressourcen. Eine solche Cloud kann sowohl von eigenen Spezialisten als auch von Mitarbeitern Dritter verwaltet und gewartet werden. Eine ähnliche Plattform kann sowohl hinter als auch außerhalb der Firewall des Unternehmens gehostet werden. Eine private Cloud bietet die Vorteile einer öffentlichen Cloud, einschließlich schneller Bereitstellung und Skalierbarkeit sowie Benutzerfreundlichkeit, Verwaltung und Flexibilität. Gleichzeitig bietet die lokale Version eine bessere Kontrolle über das System, eine höhere Produktivität, genau vorhersehbare Kosten, erhöhte Sicherheitsanforderungen und flexible Verwaltungsfunktionen, abhängig von den Anforderungen des Unternehmens. Mit einer privaten Cloud können Sie sie direkt für bestimmte Geschäftsaufgaben und Kundensicherheitsanforderungen konfigurieren.

Bevor Sie mit der Installation von ICP fortfahren, definieren wir die Terminologie:

Hauptknoten
  • Überwacht und steuert den K8s-Cluster.
  • kubectl: Ein Befehlszeilentool zum Verwalten eines Clusters.
  • REST-API: Schnittstelle für die Interaktion mit Arbeitsknoten.
  • etcd: ist ein dauerhafter und erschwinglicher Keystore, der als K8-Sicherungsspeicher für alle Clusterdaten verwendet wird.
  • kube-scheduler: Diese Komponente überwacht neu erstellte Container (Pods), denen kein Knoten zugewiesen ist, und wählt einen Knoten aus, auf dem sie ausgeführt werden sollen.
  • Normalerweise sind 3 oder mehr Hauptknoten erforderlich, um einen stabilen Betrieb zu gewährleisten und Fehlertoleranz zu gewährleisten. In unserem Fall installieren wir zum Einsparen von Ressourcen alle erforderlichen ICP-Komponenten auf einem einzelnen dedizierten Server (Single Node).

Arbeitsknoten
  • Die Arbeitsmaschine in den K8s, früher als Minion bekannt. Dieser Knoten kann ein beliebiger Host sein, der Aufgaben vom Hauptknoten empfängt und auch den Prozess des Startens von Containern auf diesem Knoten steuert. Abhängig von den Clustereinstellungen kann der Arbeitsknoten entweder eine virtuelle Maschine oder ein physischer Server sein.
  • Die folgenden Komponenten können auf jedem Knoten ausgeführt werden:
  • kubelet: ist der Hauptdienst des Arbeitsknotens. Es überwacht die Container, die seinem Knoten zugewiesen wurden (entweder Apirusver für eine sichere Verbindung oder über eine lokale Konfigurationsdatei).
  • kube-proxy: Zeigt die in der K8s-API auf jedem Knoten definierten Dienste an, unterstützt Netzwerkregeln auf dem Host und leitet Verbindungen weiter.
  • Docker: Container-Start- und Verwaltungsumgebung.
  • Supervisord: Dies ist ein leichtes Überwachungs- und Kontrollsystem, mit dem Sie Kubelet und Docker am Laufen halten können.
  • fließend: Dies ist ein Dienst, der die Protokollierung auf Clusterebene sicherstellt.

Container
  • Eine Anwendung, die in einer isolierten Umgebung ausgeführt wird.
  • Die Menge der ausführbaren Prozesse und das gestartete Image des Programms.

Kokons (Schoten)
  • Ein Pod ist eine Gruppe von einem oder mehreren Docker-Containern mit einem gemeinsamen Speicher / Netzwerk und einer Spezifikation zum Ausführen von Containern auf einem Arbeitsknoten.
  • Jeder Pod hat seine eigene IP.
  • Pod teilt den PID-Namespace, das Netzwerk und den Hostnamen.

Replikationscontroller
  • Bietet Zugänglichkeit und Skalierbarkeit.
  • Verantwortlich für die Kontrolle der Anzahl der bereitgestellten Pods.
  • Verwendet eine Vorlage, die beschreibt, was jeder Pod enthalten soll.

Etiketten
  • Den K8-Ressourcen zugewiesene Metadaten, z. B. Container, Services.
  • Schlüssel-Wert-Paare, die zur Identifizierung an Objekte angehängt sind.
  • Diese Parameter sind kritisch, da sie auf einer Clusteranforderung für Ressourcen mit bestimmten Bezeichnungen basieren.

Dienstleistungen
  • Eine Sammlung von Containern, die als Endpunkt verfügbar gemacht werden.
  • Informationen zum Status der K8-Cluster- und Netzwerkeinstellungen, die für alle Arbeitsknoten gelten.
  • Bei korrekter Konfiguration werden die vom Replikationscontroller erstellten Pods automatisch als entsprechender Dienst registriert.

Geheime Informationen (Geheimnisse)
  • Vertrauliche Informationen, die von Containern gelesen oder verwendet werden sollen.
  • Spezielle Volumes des Festplattenlaufwerks werden automatisch bereitgestellt, damit die Container den Inhalt lesen können.
  • Jeder Eintrag hat einen eigenen Pfad.

Architektur


Im Folgenden finden Sie eine allgemeine ICP-Architektur, in der die Hauptkomponenten nach Haupt-, Arbeits- und Proxy-Knoten aufgelistet sind. Es ist erwähnenswert, dass in diesem Artikel der Schwerpunkt auf einer Kombination von Docker-Containern und der Kubernetes-Verwaltungsumgebung liegt. Diese Open Source-Komponenten sind für die ICP-Plattform von zentraler Bedeutung. Um jedoch vollständig mit ICP arbeiten zu können, benötigen Sie auch Kenntnisse über Helm, den Manager für die Verwaltung von Softwarepaketen. K8s wird zum Bereitstellen und Hosten von Anwendungsinstanzen verwendet, die in Helm-Schemas integriert sind, die sich wiederum auf Docker-Images beziehen. Helmschemata enthalten Informationen zu den Details Ihrer Anwendung, und Docker-Images enthalten alle Softwarepakete, die zum Ausführen Ihrer Anwendung erforderlich sind.



Für eine detaillierte Einführung in die Architektur und die Komponenten der ICP-Plattform können Sie den Dokumentationslink im IBM Knowledge Center verwenden .

Vorbereitung


Um die ICP-Installation in 20 bis 30 Minuten bequem abzuschließen, sind die folgenden Mindesthardwareressourcen und der Internetzugang erforderlich:
• Ein Host (physisch oder virtuell)
• CPU = 8 Kerne (oder virtuelle Kerne)
• RAM = 10 GB (möglicherweise sind bis zu 14 GB erforderlich)
• Festplatte = 40 GB (auf SSD wie immer schneller)
Hinweis: Wenn Sie etwas mehr Freizeit und etwas weniger Hardwareressourcen haben, können Sie ICP in 40-60 Minuten auf 1 virtuellen Core i5 und 10 GB RAM installieren.

Installation


Laden Sie Ubuntu herunter


Laden Sie die Ubuntu Server- Distributionsversion 16.04.05 herunter . Führen Sie eine Standardinstallation des Betriebssystems auf einer virtuellen oder physischen Maschine mit den oben genannten Eigenschaften durch.

IP-Adresse abrufen


Nachdem Sie den Installationsvorgang des Betriebssystems abgeschlossen haben, ermitteln Sie in der Befehlszeile die IP-Adresse Ihrer virtuellen Maschine mit dem folgenden Befehl:

ifconfig 

Sie müssen die Ethernet-IP-Adresse (inet addr) sowie Bcast und Mask schreiben / speichern. Diese Parameter werden nach Ausführung des entsprechenden Befehls angezeigt:

Abbildung 1. Ein Beispiel für den Befehl ifconfig

SSH-Verbindung


Wenn Sie beim Einrichten der virtuellen Maschine die Funktion „Einfache Installation“ verwendet haben, müssen Sie nach der vollständigen Installation von Ubuntu Server den OpenSSH-Server installieren. Sie können dies mit den folgenden Befehlen tun:

 apt install openssh-server sudo systemctl enable sshd 

Nachdem Sie die entsprechenden Befehle ausgeführt haben, können Sie über SSH eine Verbindung zur virtuellen Maschine herstellen. Je nach Betriebssystem können Sie verschiedene Verbindungsmethoden verwenden. Unter Windows können Sie das beliebte PuTTY- Tool verwenden. Unter MacOS können Sie den Befehl ssh im Terminal verwenden.


Abbildung 2. Verbindungsbeispiel über PuTTY für Windows

Der nächste Schritt besteht darin, ein Passwort für den Superuser (root) festzulegen:

 sudo -i passwd 


Abbildung 3. Festlegen eines neuen Kennworts für den Root-Benutzer

Aktualisierung der Netzwerkschnittstelle


Nachdem wir die Möglichkeit zur Verbindung über SSH konfiguriert und das Superuser-Kennwort aktualisiert haben, müssen wir die Netzwerkschnittstelle konfigurieren, um die statischen Netzwerkparameter zu ermitteln. Dies erfolgt mit folgendem Befehl:

 nano /etc/network/interfaces 

Wir aktualisieren die Einstellungen der Netzwerkschnittstelle (primäre Netzwerkschnittstelle) basierend auf den Informationen, die während des Befehls ifconfig erhalten wurden. Unser Beispiel sieht folgendermaßen aus:

 auto ens33 iface ens33 inet static address 192.168.175.7 netmask 255.255.255.0 network 192.168.175.0 broadcast 192.168.175.255 gateway 192.168.175.2 dns-nameservers 192.168.175.2 8.8.8.8 

Hinweis: Es ist wichtig, den DNS-Server korrekt anzugeben, da für die nachfolgende Installation von ICP-Komponenten ein Internetzugang erforderlich ist.


Abbildung 4. Konfigurieren der Netzwerkschnittstelle

Speichern Sie die aktualisierte Datei mit den folgenden Schritten: Strg + X, Ja, Eingabetaste.

Um die Anmeldung bei einer virtuellen Maschine mit Superuser-Berechtigungen (Root) zu vereinfachen, müssen Sie Änderungen an der SSH-Dienstkonfiguration vornehmen. Führen Sie dazu den folgenden Befehl aus:

 nano /etc/ssh/sshd_config 

Suchen Sie als Nächstes die Zugriffsberechtigungszeile und bearbeiten Sie sie entsprechend:

 PermitRootLogin yes 


Abbildung 5. Aktualisieren der SSH-Konfiguration

Speichern Sie die Datei wie im vorherigen Schritt: Strg + X, Ja, Eingabetaste.

Nachdem Sie alle Änderungen vorgenommen haben, um die neuen Parameter anzuwenden, ist es sinnvoll, die virtuelle Maschine vollständig neu zu starten oder die entsprechenden Dienste (Netzwerk und SSH) neu zu starten, z. B. mit den folgenden Befehlen:

 shutdown -r 0 

oder

 service <service_name> restart 

Nach dem Neustart des Computers müssen Sie sich erneut über SSH anmelden.

Komponentenaktualisierung


Aktualisieren Sie Ubuntu Server mit dem folgenden Befehl (der Befehl muss als root ausgeführt werden):

 apt update 

Hinweis: Wenn während des Updates ein Fehler auftritt: "Das Repository 'cdrom: // Ubuntu-Server 16.04.5 LTS _Xenial Xerus_ - Release amd64 (20180731) xenial Release' hat keine Release-Datei." Sie müssen den folgenden Befehl ausführen:

 sudo nano /etc/apt/sources.list 

Und kommentieren Sie die Zeile aus:

 deb cdrom:[Ubuntu-Server 16.04.5 LTS … 


Abbildung 6. Korrektur eines möglichen Fehlers

Speichern Sie als Nächstes die Datei wie zuvor: Strg + X, Ja, Eingabetaste

Nachdem Sie einen möglichen Fehler behoben haben, führen Sie den Befehl update erneut aus. Daher sollte Folgendes angezeigt werden:


Abbildung 7. Ubuntu-Update

Installieren Sie IBM Cloud Private


Bevor Sie ICP installieren, müssen Sie die Hosts-Datei bearbeiten:

 nano /etc/hosts 

Ersetzen Sie die Zeichenfolge 127.0.1.1 ubuntu durch Ihre IP-Adresse und einen geeigneten Hostnamen.

Stellen Sie sicher, dass der Hostname und der Alias ​​in der Zeile durch eine Registerkarte oder ein Leerzeichen getrennt sind:

Abbildung 8. Ändern der Hosts-Datei

Speichern Sie die Datei: Strg + X, Ja, Eingabetaste

Mit den folgenden 2 Befehlen können Sie das System aktualisieren und zusätzliche Module installieren.

 apt update apt-get install apt-transport-https ca-certificates curl software-properties-common python-minimal jq 

Überprüfen Sie das Terminal auf Fehler:


Abbildung 9. Zusätzliche Komponenten installieren

Erhöhen Sie den maximalen virtuellen Speicher mit dem folgenden Befehl:

 sysctl -w vm.max_map_count=262144 

K8s starten nicht mit aktiviertem Swap. Sie können es mit dem folgenden Befehl deaktivieren:

 swapoff –a 

Hinweis: Die beiden vorherigen Befehle funktionieren in der aktuellen Sitzung. Beim Neustart gehen diese Parameter verloren und Sie müssen sie erneut registrieren.

Die Anwendung dieser Parameter beim Laden des Betriebssystems kann mit den folgenden Befehlen aktiviert werden:

 sed -i '/ swap / s/^/#/' /etc/fstab echo "vm.max_map_count=262144" >> /etc/sysctl.conf 

Hinzufügen eines GPG-Schlüssels


Wir verwenden den folgenden Befehl:

 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - 

Hinzufügen eines Repositorys zur Installation von Docker


Um die Repository-Installation abzuschließen, müssen Sie die folgenden 2 Befehle ausführen:

 add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" apt-get update 

Installieren Sie Docker


Verwenden Sie den folgenden Befehl, um Docker zu installieren (Docker Version 17.12.1 ist die maximal unterstützte Version für IBM Cloud Private 2.1.0.3):

 apt-get install docker-ce=17.12.1~ce-0~ubuntu 


Abbildung 10. Docker-Installationsprozess

Sie können die Funktionalität von Docker mit dem folgenden Befehl überprüfen:

 docker version 


Abbildung 11. Docker überprüfen

Laden Sie IBM Cloud Private herunter


Um das ICP-ce-Image (Community Edition) von der dockerHub-Ressource herunterzuladen, müssen Sie das Docker-Toolkit verwenden. Sie können dies mit dem folgenden Befehl tun:

 docker pull ibmcom/icp-inception:2.1.0.3 


Abbildung 12. Laden Sie ICP herunter

IBM hat alle für die Installation erforderlichen Komponenten in einem Paket zusammengefasst (beachten Sie, dass Sie die Version bei Bedarf auf eine neuere Version ändern können). Der Pull-Befehl lädt das Image in das lokale Dateisystem hoch (das Image wird gestartet, um ICP zu installieren).

Erstellen Sie ein Verzeichnis und navigieren Sie dorthin:

 mkdir /opt/icp cd /opt/icp 

Kopieren Sie das ICP-Paket in dieses Verzeichnis:

 docker run -e LICENSE=accept -v "$(pwd)":/data ibmcom/icp-inception:2.1.0.3 cp -r cluster /data 

Hinweis: Dieser Docker-Toolkit-Befehl führt den Linux-Befehl copy (cp) aus dem angegebenen Verzeichnis aus (Option -v). Das Clusterverzeichnis wird in / opt / icp mit allen erforderlichen Dateien erstellt.

Konfigurieren Sie SSH-Schlüssel


Erstellen Sie neue SSH-Schlüssel im Verzeichnis / opt / icp / cluster:

 ssh-keygen -b 4096 -f ~/.ssh/id_rsa -N "" cat ~/.ssh/id_rsa.pub | sudo tee -a ~/.ssh/authorized_keys systemctl restart sshd cp ~/.ssh/id_rsa ./cluster/ssh_key 

Überprüfen Sie, ob der Schlüssel erstellt und im Ordner / opt / icp / cluster gespeichert ist:

 ls /opt/icp/cluster 


Abbildung 13. Der Inhalt des Clusterordners

ICP-Setup


Fügen Sie die IP-Adresse jedes Knotens im Cluster zur Datei / opt / icp / cluster / hosts hinzu (in unserem Fall verwenden wir für jede Komponente, die wir in / etc / hosts angegeben haben, dieselbe IP-Adresse). Wir machen das mit dem folgenden Befehl:

 nano /opt/icp/cluster/hosts 


Abbildung 14. Der Inhalt der Hosts-Datei

Speichern Sie die Datei: Strg + X, Ja, Eingabetaste

Detaillierte Informationen zu den Installationsoptionen finden Sie in der Konfigurationsdatei:

 more /opt/icp/cluster/config.yaml 

Es wird nicht empfohlen, die Standardinstallationseinstellungen zu ändern.
Hinweis: Die beiden wichtigsten Installationsdateien sind Hosts und config.yaml, in denen die ICP-Installationsoptionen beschrieben werden. In einer Multi-Worker-Konfiguration müssen Sie im Worker-Abschnitt eine Liste der IP-Adressen angeben. Bei der Installation der aktuellen ICP-Version im Einzelknotenmodus ändern sich nur die IP-Adressen in der Hosts-Datei.

ICP-Installation


Wechseln Sie in das Clusterverzeichnis und führen Sie die Installation aus:

 cd /opt/icp/cluster docker run -e LICENSE=accept --net=host -t -v "$(pwd)":/installer/cluster ibmcom/icp-inception:2.1.0.3 install 

Abhängig von den verfügbaren Ressourcen kann die Installation 20 bis 60 Minuten dauern. Wenn Fehler auftreten (rote Meldungen), nehmen Sie die entsprechenden Änderungen an den Konfigurationsdateien vor. Manchmal verlangsamt sich die Installation etwas, weil versucht wird, die Verbindung zu Komponenten wiederherzustellen, die noch nicht gestartet wurden (z. B. beim Starten von Cloudant oder IAM).

Die Installation sollte folgendermaßen aussehen:

Abbildung 15. ICP-Installationsergebnis

Im Fehlerfall kann die Deinstallation von ICP erforderlich sein:

 docker run -e LICENSE=accept --net=host -t -v "$(pwd)":/installer/cluster ibmcom/icp-inception:2.1.0.3 uninstall 

Warten Sie etwa 5 Minuten, bis alle ICP-Komponenten erfolgreich gestartet wurden, bevor Sie mit dem nächsten Schritt fortfahren.

Folgen Sie dem Link nach Abschluss der Installation und rufen Sie die ICP-Konsole (admin / admin) auf:

 https://<ip_address>:8443 


Abbildung 16. Die Anmeldeseite des Bedienfelds

ICP-Begrüßungsseite:

Abbildung 17. Weboberfläche des Bedienfelds

Wählen Sie oben rechts das Menü Katalog. Eine Liste der verfügbaren Anwendungen wird angezeigt:

Abbildung 18. Komponentenkatalog

Dieses Verzeichnis enthält eine Liste von Anwendungen und Software, deren Beschreibung Sie nach Belieben studieren können, die Sie jedoch bisher nicht schnell bereitstellen müssen.
Wir müssen noch lernen, wie Sie mit dem neu installierten ICP (nicht nur über die Webschnittstelle, sondern auch über die Konsole in Form der CLI - Befehlszeilenschnittstelle) richtig umgehen, dauerhaften Speicher verbinden und kleine Einstellungen vornehmen.

Abschließend


Zusammenfassend.

Wir haben die IBM Cloud Private Community Edition (Version 2.1.0.3) erfolgreich auf einem Host in einer virtuellen Maschine unter Ubuntu Server OS 16.04.05 bereitgestellt. Im Moment haben wir die Installation auf VMware- und Hyper-V-Hypervisoren persönlich überprüft. Sie funktioniert definitiv auf XenServer und es sollte keine Schwierigkeiten für VirtualBox und KVM geben.

Wer wirklich gerne weiter in das Studium des ICP eintauchen möchte, das heißt, eine hervorragende Auswahl der Laborarbeit unseres Kollegen hier: github.com/phthom/IBMCloudPrivate

Von den bevorstehenden Schritten - nach einer Neuinstallation müssen wir ICP nur ein wenig konfigurieren und es mit etwas Nützlichem füllen, das den praktischen Aufgaben nahe kommt.

Wenn die Habr-Community diese Initiative positiv unterstützt, werden wir im Verlauf unserer Forschung und Experimente den Kern der Plattform mit den erforderlichen Komponenten für die Telemetrieerfassung, Datenspeicherung, -verarbeitung, -analyse, -prognose, die Bildung externer Programmschnittstellen und die Erstellung von Benutzeranwendungen füllen. Dementsprechend entwickelt sich eine Reihe solcher Artikel.

Warten auf Ihr Feedback und Ihre Vorschläge!

Außerdem haben unsere Gleichgesinnten von AIXportal.ru einen wunderbaren Videoclip zur Installation von IBM Cloud Private auf ihrem Youtube-Kanal vorbereitet. Jemand wird sich so wohler fühlen: youtu.be/eQwOOTzjM24

Links und nützliche Materialien


Produktseite in russischer Sprache
• Wer Englisch üben möchte, das Buch „ ICP for Dummies “ 2018. (40 Seiten)
Whitepaper zu ICP 2.1.0.3 im IBM Knowledge Center
• Öffnen Sie die ICP- Community in IBM developerWorks
ICP-Rezepte für Entwickler

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


All Articles