Wie man

Ausführen von Linux-Containern mit LXC/LXD auf CentOS 8

Ausführen von Linux-Containern mit LXC/LXD auf CentOS 8

„Nicht das, was wir über unsere Segnungen sagen, sondern wie wir sie verwenden, ist das wahre Maß unserer Danksagung.”
W. T. Purkiser

Entmystifizierung von LXC

Das Linux-Container-Projekt (LXC) ist eine Open-Source-Container-Plattform, die eine Reihe von Tools, Vorlagen, Bibliotheken und Sprachbindungen bereitstellt. Es liefert Container, die ein komplettes Linux-System enthalten, ähnlich wie eine VM, mit eigenem Dateisystem, Netzwerk und mehreren Anwendungen. LXC verfügt über eine einfache Befehlszeilenschnittstelle, die die Benutzererfahrung beim Starten von Containern verbessert (RedHat, 2020). Durch eine leistungsstarke API und einfache Tools können Linux-Benutzer problemlos System- oder Anwendungscontainer erstellen und verwalten manage. Vor containerd wurde Docker auf LXC aufgebaut, ist aber seitdem auf containerd umgezogen.

Merkmale von LXC

Aktuelles LXC verwendet die folgenden Kernel-Features, um Prozesse einzuschließen: Quelle: LinuxContainers

Entmystifizierung von LXD

LXD ist ein Systemcontainer-Manager der nächsten Generation. Es ist eine erstaunliche Schnittstelle zur Verwaltung von LXC-Systemcontainern und sollte nicht als Plattform oder Containertyp missverstanden werden. Zu den Funktionen von LXD gehören Schnappschüsse und Bildsteuerung. Wie Sie sich vorstellen können, erhöht LXD die Fähigkeiten der LXC-Technologie. Es bietet eine Benutzererfahrung, die der von virtuellen Maschinen ähnelt, aber stattdessen Linux-Container verwendet.

Funktionen von LXD Quelle: LinuxContainers

Einige der größten Funktionen von LXD sind:

Installation von LXC/LXD auf CentOS 8

Wenn Sie LXC/LXD auf Ihrem CentOS 8-Server ausprobieren möchten, um einige Anwendungen auszuführen, helfen Ihnen die folgenden Schritte dabei, die Plattform so schnell wie möglich einsatzbereit zu machen.

Schritt 1: Server aktualisieren und vorbereiten

Dies ist ein sehr wichtiger Schritt, bei dem wir sicherstellen, dass unser Haus gut ausgestattet ist, indem wir sicherstellen, dass die neuesten Patches und Pakete installiert sind. Fahren Sie mit der Ausführung der folgenden Befehle fort, um Ihren Server vorzubereiten.

sudo dnf update -y && sudo dnf upgrade -y sudo dnf install -y vim curl nano 

SELinux deaktivieren

Dies ist ein optionaler Schritt, wenn Sie gut darin sind, SELinux-Kontexte zu verwalten. Führen Sie die folgenden Befehle aus, um es freizugeben:

sudo setenforce 0 sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config

Schritt 2: EPEL-Repository aktivieren und konfigurieren

Führen Sie den folgenden Befehl aus, um das EPEL-Repo auf einem CentOS 8 zu installieren und zu aktivieren und dann den Server zu aktualisieren, um die neuesten Pakete von Epel zu erhalten.

sudo yum installieren https://dl.fedoraprojekt.org/pub/epel/epel-release-latest-8.noarch.rpm sudo dnf update

Schritt 3: Installieren Sie snapd auf CentOS 8

In diesem Setup werden wir das LXD-Paket von Snappy aufgrund seiner Einfachheit und Unterstützung installieren, die Snap-Pakete genießen. Aus diesem Grund müssen wir snapd wie folgt auf unserem Server installieren:

sudo yum install snapd -y

Nach der Installation muss die systemd-Einheit, die den Haupt-Snap-Kommunikationssocket verwaltet, aktiviert werden:

sudo systemctl enable --now snapd.Steckdose

Um die klassische Fangunterstützung zu aktivieren, geben Sie Folgendes ein, um eine symbolische Verknüpfung zwischen . zu erstellen /var/lib/snapd/snap und /schnapp:

sudo ln -s /var/lib/snapd/snap /snap

Melden Sie sich entweder ab und wieder an oder starten Sie Ihr System neu, um sicherzustellen, dass die Pfade von snap korrekt aktualisiert werden. Sobald wir Snap installiert haben, fahren wir mit dem nächsten Schritt fort.

Schritt 4: Kernel-Parameter hinzufügen

Es gibt einige wichtige Kernel-Optionen, die von LXD benötigt werden und wir werden auf dem Server aktiviert. Konfigurieren Sie sie, indem Sie die folgenden Befehle auf Ihrem Terminal ausführen als Wurzel.

$ sudo su - # grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)" # grubby --args="namespace.unpriv_enable=1" --update-kernel="$(grubby --default-kernel)" # echo "user.max_user_namespaces=3883" | sudo tee -a /etc/sysctl.d/99-Benutzern.conf

Nachdem diese Einstellungen konfiguriert wurden, muss der Server neu gestartet werden, da die Kernfunktionen des Kernels geändert wurden. Starten Sie Ihren Server neu.

sudo neu starten

Schritt 5: Installieren Sie den lxd-Snap auf CentOS 8

Schließlich, nachdem Ihr Server gesichert ist, ist es an der Zeit, das interessierende Paket, LXD, aus dem Snap-Store zu installieren. So einfach wie Snap gemacht wurde, müssen wir einfach den folgenden Befehl ausführen und unser LXD wird installiert.

$ sudo snap install --classic lxd

Schritt 6: Starten eines Test-LXD-Containers

Bisher haben wir LXC/LXD bereits installiert, aber wir haben noch keine Container, die die Anwendungen enthalten, an deren Bereitstellung wir interessiert sind. Bevor wir einige Container starten können, fügen wir daher unser Benutzerkonto der Gruppe lxd hinzu, damit es LXD-Container ohne Berechtigungsbeschränkungen verwalten kann.

sudo usermod -aG lxd  newgrp lxd

Hinweis: Das neugrp Befehl wird verwendet, um die aktuelle Gruppen-ID während einer Login-Sitzung zu ändern. Wenn das optionale Flag - angegeben ist, wird die Umgebung des Benutzers neu initialisiert, als ob sich der Benutzer angemeldet hätte, andernfalls bleibt die aktuelle Umgebung, einschließlich des aktuellen Arbeitsverzeichnisses, unverändert. newgrp ändert die aktuelle reale Gruppen-ID in die benannte Gruppe.

Als nächstes lassen wir uns die LXD-Umgebung konfigurieren oder „initialisieren” es durch Ausführen des folgenden Befehls. Es wird Sie durch ein paar Fragen führen. Bitte beantworten Sie diese entsprechend den Bedürfnissen Ihrer Umgebung. Ich habe Standardwerte für die leeren verwendet.

$ lxd init Möchten Sie LXD-Clustering verwenden?? (yes/no) [default=no]: Möchten Sie einen neuen Speicherpool konfigurieren? (yes/no) [default=yes]: Name des neuen Speicherpools [default=default]: Name des zu verwendenden Speicher-Backends (btrfs, dir, lvm, ceph) [default=btrfs]: lvm Erstellen Sie einen neuen LVM-Pool? (ja/nein) [default=yes]: Möchten Sie ein vorhandenes leeres Blockgerät verwenden (e.G. eine Festplatte oder Partition)? (yes/no) [default=no]: Größe in GB des neuen Loop-Devices (mindestens 1GB) [default=9GB]: 5GB Möchten Sie sich mit einem MAAS-Server verbinden? (ja/nein) [default=no]: Möchten Sie eine neue lokale Netzwerkbrücke erstellen? (yes/no) [default=yes]: Wie soll die neue Bridge heißen? [default=lxdbr0]: Welche IPv4-Adresse soll verwendet werden? (CIDR-Subnetz-Notation, „auto“ oder „none“) [default=auto]: Welche IPv6-Adresse soll verwendet werden? (CIDR-Subnetz-Notation, „auto“ oder „none“) [default=auto]: Möchten Sie, dass LXD über das Netzwerk verfügbar ist? (ja/nein) [default=no]: Möchten Sie, dass veraltete zwischengespeicherte Bilder automatisch aktualisiert werden?? (ja/nein) [default=yes] Möchten Sie, dass ein YAML "lxd init"-Preseed gedruckt wird?? (ja/nein) [Standard=nein]:

Der obige Befehl erstellt eine Brücke lxdbr0. Wir werden diese Bridge-Schnittstelle zur vertrauenswürdigen Zone hinzufügen, damit die Verbindungen durchlaufen werden. Mit anderen Worten, wir werden den gesamten eingehenden Verkehr über lxdbr0. Führen Sie die folgenden Firewall-Befehle aus

sudo Firewall-cmd --add-interface=lxdbr0 --zone=trusted --permanent sudo Firewall-cmd --reload

Container erstellen

Sobald lxd initialisiert ist und Ihr Benutzer die Berechtigung zum Starten und Verwalten von Containern über das lxc Befehl, lassen Sie uns einen Container erstellen. Als Anhaltspunkt kann die folgende Syntax verwendet werden:

lxc-Startimages:[Distro]/[Version]/[Architektur] [Ihr-Container-Name]

Wir sind jetzt aufgeklärt genug und lassen uns kurzerhand einen Test erstellen CentOS 8 und Ubuntu 20.04 Container, indem Sie die folgenden Befehle ausführen:

$ lxc start images:centos/8/amd64 cent8 cent8 erstellen Image abrufen: Entpacken: 100% (4.22GB/s) ab Cent8

Starten Sie den Ubuntu-Container, indem Sie Folgendes ausführen:

$ lxc Ubuntu starten: 20.04 ubuntu20 Ubuntu20 erstellen Ubuntu20 starten

Nach dem Start können Sie Ihre Container so einfach auflisten:

$ lxc-Liste +-------+---------+---------------------+------ ------------------------------------------+-------- ---+-----------+ | NAME | ZUSTAND | IPV4 | IPv6 | TYP | SCHNAPPSCHÜSSE | +-------+----------+---------------------+--------- --------------------------------------+------------ +-----------+ | Cent8 | LAUFEN | 10.80.35.177 (eth0) | fd42:b3a2:efa8:5aa5:216:3eff:fe1d:38c3 (eth0) | BEHÄLTER | 0 | +-------+---------+---------------------+-----------------------------------------------+-----------+-----------+

Du kannst auch Stoppen, starten, neu starten, löschen, Überprüfen Sie auch weitere Informationen zu Ihrem Container wie unten, wo ist der Name des Containers, wie im Befehl lxc list angezeigt.

lxc starten  lxc halt  lxc neu starten  lxc löschen 

Beispielsweise

lxc ubuntu20 stoppen lxc ubuntu20 löschen

Beachten Sie, dass Sie einen laufenden Container stoppen müssen, bevor Sie ihn löschen können.

Abrufen von Informationen zu einem Container mit der info-Befehlsoption

$ lxc info container ##Zum Beispiel $ lxc info cent8

Beispiel für eine brillante Ausgabe:

Name: cent8 Ort: keiner Remote: unix:// Architektur: x86_64 Erstellt: 07.11.2020 11:25 UTC Status: Wird ausgeführt Typ: Container Profile: default Pid: 2724 Ips: eth0: inet 10.80.35.177 veth975e84ff eth0: inet6 fd42:b3a2:efa8:5aa5:216:3eff:fe1d:38c3 veth975e84ff eth0: inet6 fe80::216:3eff:fe1d:38c3 veth975e84ff lo: inet 127.0.0.1 lo: inet6 ::1 Ressourcen: Prozesse: 13 Festplattennutzung: root: 737.98 MB CPU-Auslastung: CPU-Auslastung (in Sekunden): 1 Speicherauslastung: Arbeitsspeicher (aktuell): 93.32 MB Speicher (Spitze): 98.56 MB Netzwerknutzung: eth0: Empfangene Bytes: 3.57kB gesendete Bytes: 2.22kB Pakete empfangen: 30 Pakete gesendet: 22 lo: Bytes empfangen: 0B Bytes gesendet: 0B Pakete empfangen: 0 Pakete gesendet: 0

Schritt 7: Ausführen von Ad-hoc-Befehlen in Containern:

So wie Sie es können“ausführender” in einen Docker-Container, Sie können auch Befehle in lxd-Containern ausführen run. Die Syntax ist so.

$ lxc ausführen  

Beispiele für die Ausführung von Befehlen sind wie folgt:

$ lxc exec cent8 -- yum -y Update CentOS-8 - AppStream 538 kB/s | 5.8 MB 00:11 CentOS-8 - Basis 619 kB/s | 2.2 MB 00:03 CentOS-8 - Extras 8.1 kB/s | 8.1 kB 00:01 Abhängigkeiten aufgelöst. Nichts zu tun. Komplett! 

Lassen Sie uns Apache im Container installieren

$ lxc exec cent8 -- yum -y install httpd Letzte Überprüfung des Ablaufs der Metadaten: vor 0:00:41 am Sa. Nov. 12:56:38 2020. Abhängigkeiten gelöst. ================================================ ================================================ ================================== Paketarchitektur Version Repository-Größe =========== ================================================ ================================================ =======================Installieren: httpd x86_64 2.4.37-21.module_el8.2.0+494+1df74eae AppStream 1.7 M Abhängigkeiten installieren: apr x86_64 1.6.3-9.el8 AppStream 125 k apr-util x86_64 1.6.1-6.el8 AppStream 105 k

Nach der Installation können wir uns in den Container einloggen, eine Beispielseite erstellen, den Webserver starten und seinen Status überprüfen

$ lxc exec cent8 -- /bin/bash ##Wir befinden uns jetzt im Container [[email protected] ~]# systemctl start httpd [[email protected] ~]# systemctl status httpd ● httpd.service - Der Apache HTTP Server Geladen: geladen (/usr/lib/systemd/system/httpd.Bedienung; deaktiviert; Herstellervoreinstellung: deaktiviert) Aktiv: aktiv (läuft) seit Sa 07.11.2020 12:58:09 UTC; vor 5s Docs: man:httpd.service(8) Main PID: 175 (httpd) Status: "Gestartet, lauschen auf: Port 80" Aufgaben: 213 (Limit: 11069) Speicher: 27.6M CGroup: /system.Slice/httpd.service 175 /usr/sbin/httpd -DFOREGROUND 176 /usr/sbin/httpd -DFOREGROUND 177 /usr/sbin/httpd -DFOREGROUND 178 /usr/sbin/httpd -DFOREGROUND └─179 /usr /sbin/httpd -DFOREGROUND

Erstellen Sie zu Demonstrationszwecken eine Beispielseite im Container, die von Apache bereitgestellt werden soll

[[email protected] ~]# vi /var/www/html/index.html     Löffelmesser     

Über SELinux


SELinux bietet Ihnen die Möglichkeit, die mit der Ausführung von Prozessen verbundenen Berechtigungen einzuschränken und den Schaden zu reduzieren, der durch die Ausnutzung von System- und Anwendungsschwachstellen entstehen könnte. Aus diesem Grund wird empfohlen, SELinux im Erzwingungsmodus zu belassen, es sei denn, Sie haben einen guten Grund, es zu deaktivieren.

Modi


Der andere verfügbare Modus zum Ausführen von SELinux im aktivierten Zustand ist Permissive. In diesem Modus wird die SELinux-Richtlinie nicht erzwungen und der Zugriff wird nicht verweigert, aber Verweigerungen werden für Aktionen protokolliert, die im Erzwingungsmodus verweigert worden wären.

Dann Apache im Container neu starten und beenden.

[[email protected] ~]# systemctl Neustart httpd

Schritt 8: Externer Zugriff auf Ihre Anwendungen in Containern

Nun, da Sie Ihre Anwendung in einem bestimmten Container bereitgestellt haben (z. B. Apache aus dem obigen Befehl), wie genau wird Ihre Zielgruppe von außen auf das zugreifen, was Sie hosten?? Sie können entweder Firewall-Regeln verwenden oder eleganter einen Reverse-Proxy bereitstellen, um den Datenverkehr an Ihre Anwendungen weiterzuleiten.

Verwenden eines Reverse-Proxy-Servers wie Nginx

Installieren Sie den Nginx-Webserver auf Ihrem CentOS 8-Hostsystem:

sudo yum -y installiere vim nginx

Richten Sie den Nginx-HTTP-Proxy für den Dienst ein

Erstellen Sie eine neue Konfigurationsdatei.

sudo nano /etc/nginx/conf.d/app1.conf

Passen Sie dieses Konfigurations-Snippet an Ihr Setup an. Beachten Sie, dass Nginx auf Port 9090 lauscht und den Datenverkehr dann an den Container umleitet, auf dem Apache auf Port 80 ausgeführt wird.

##App1 Upstreams Upstream-App1  Server 10.80.35.177:80; ##Beachte die IP des Containers hier.  Server  hören 9090; server_name app1.Computerforgeeks.com; access_log /var/log/nginx/app1_access.Log; error_log /var/log/nginx/app1_error.Log; # Proxy-Einstellungen proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $schema; proxy_set_header X-Real-IP $remote_addr; # Anforderung des Root-Domain-Standorts /  proxy_redirect off; proxy_pass http://app1;  # Gzip gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript; gzip an; 

Für den externen (öffentlichen) Zugriff auf Ihre Anwendung ist ein gültiger DNS-Eintrag erforderlich.

Überprüfen Sie Ihre Konfigurationssyntax:

$ sudo nginx -t nginx: die Konfigurationsdatei /etc/nginx/nginx.conf-Syntax ist in Ordnung nginx: Konfigurationsdatei /etc/nginx/nginx.conf-Test ist erfolgreich

Wenn die Einstellungen ein positives Feedback liefern, starten Sie den nginx-Dienst neu.

sudo systemctl Neustart nginx

Port 9090 auf der Firewall zulassen

sudo Firewall-cmd --permanent --add-port=9090/tcp sudo Firewall-cmd --reload

Wir sind jetzt bereit, auf unsere Anwendung zuzugreifen. Öffnen Sie Ihren bevorzugten Browser und verweisen Sie ihn auf den FQDN oder die IP-Adresse und den Port des Nginx-Proxys, den wir gerade fertig konfiguriert haben. http://:9090. Sie sollten eine Seite wie unten sehen.

Fazit

Wir haben es endlich geschafft zu installieren, zu verwalten und zu administrieren lxd/lxc Container zusammen mit dem Hosten einer einfachen Anwendung in einem von ihnen. Wir hoffen, die Anleitung war so informativ, wie Sie es erwartet haben und alles hat gut für Sie funktioniert. Dich auf dem Blog zu sehen reicht uns, um unsere Anerkennung für den Besuch und die tolle Unterstützung zu erwidern. Unten findest du weitere schöne Guides.

So stellen Sie LXD auf CentOS 7 mit Snap bereit

Ausführen von Docker-Containern mit Podman und Libpod

So führen Sie Docker/Podman-Container als Systemd-Dienst aus

Facebook will Kryptowährungsanzeigen verbieten und nennt sie „irreführend oder irreführend“
Wenn Sie immer noch entscheiden, ob Sie in Kryptowährung investieren möchten oder nicht, hat Facebook gerade einen weiteren Schraubenschlüssel in die ...
Facebook wird weniger genutzt, aber sie sind nicht besorgt
Verbringst du immer noch die gleiche Zeit damit, auf Facebook zu surfen?? Oder stellen Sie fest, dass Sie die Social-Media-Plattform besuchen und viel...
Neue Studien deuten darauf hin, dass Handystrahlung nicht so gefährlich ist, wie man früher dachte
Wir leben jetzt in einer Welt, in der wir häufig über all die verschiedenen Dinge informiert werden, die wir seit Jahren verwenden und die für uns jet...