Führen Sie Kubernetes in LXC aus


In diesem Artikel werde ich Ihnen erklären, wie Sie kubernetes master in einem LXC-Container ausführen.
Diese Methode funktioniert sehr gut mit Proxmox und kann als Alternative zur klassischen Bereitstellung von Kubernetes mit mehreren Assistenten betrachtet werden.


Warum Proxmox?


Weil proxmox out of the box viele nützliche Funktionen bietet.
Proxmox umfasst Hochverfügbarkeitsfunktionen, Migration, automatische Sicherungen, Zugriffskontrolle und all dies ist über eine einfache grafische Oberfläche zugänglich.


Sie können die einfachste Kubernet-Konfiguration auch mit einem einzigen Assistenten bereitstellen. Proxmox bietet hohe Verfügbarkeit.
Diese Methode eignet sich hervorragend für die Bereitstellung von Test- oder kleinen Clustern.


Für größere Bereitstellungen wird empfohlen, etcd in separaten Containern zu platzieren, die schnelle lokale Festplatten verwenden und diese zu einem Cluster kombinieren.
Trotzdem kann kubernetes-master selbst ein gewöhnlicher ha-Container bleiben, es muss kein schneller Speicher vorhanden sein.


Wenn Sie diesen Artikel lesen, gehe ich außerdem davon aus, dass Sie in den meisten Fällen bereits über eine Infrastruktur in Proxmox verfügen und möglicherweise eine einzige Schnittstelle für die Verwaltung Ihrer Dienste benötigen.


Warum LXC?


Kubernetes startet problemlos in einer normalen virtuellen Maschine. LXC-Container bieten jedoch die Flexibilität, die mit herkömmlichen virtuellen Maschinen nicht verfügbar ist.


Tatsächlich bieten LXC-Container keine vollständige Isolierung von Containern vom Host. Im Gegenteil, alle Prozesse in den Containern beginnen als normale Host-Prozesse, nur in einem separaten Namespace.


Diese Methode bietet Ihnen eine gute Leistung, unterliegt jedoch in unserem Fall einigen Einschränkungen.


Ich werde diese Einschränkungen und den Umgang damit in diesem Artikel diskutieren.


Konfiguration


Da Container standardmäßig keine Kernelmodule selbst laden dürfen, müssen Sie sie so konfigurieren, dass sie direkt auf Hypervisoren geladen werden.


Wir werden den overlay Treiber für Docker verwenden, das ist also alles, was wir brauchen:


 echo overlay >> /etc/modules 

Jetzt müssen wir weitere Berechtigungen für unseren Container hinzufügen, damit andere Container darin ausgeführt werden können. Fügen Sie diese Zeilen zur Konfiguration Ihres Containers hinzu:


 lxc.apparmor.profile: unconfined lxc.cap.drop: lxc.cgroup.devices.allow: a lxc.mount.auto: proc:rw sys:rw 

Ab Version v11.0 benötigt kubelet einen freigegebenen Modus für alle Bereitstellungen vom Host.


Mit diesem schmutzigen Hack können Sie Folgendes erreichen: Führen Sie im LXC-Container Folgendes aus:


 echo '#!/bin/sh -e mount --make-rshared /' > /etc/rc.local 

Diese Aktion fügt den mount --make-rshared / zu /etc/rc.local und führt ihn jedes Mal aus, wenn der Container /etc/rc.local .


Wenn Sie HA-Manager in proxmox verwenden möchten, beachten Sie außerdem, dass derzeit ein unangenehmer Fehler # 1842 vorliegt, der Containerprozesse während der Migration zwangsweise beendet, wodurch Zombie-Prozesse entstehen oder sogar Ihr Speicher blockiert werden kann.


Das ist nicht gut, zum Glück gibt es eine einfache Lösung:


 sed -i 's/forceStop => 1/forceStop => 0/' /usr/share/perl5/PVE/HA/Resources/PVECT.pm 

Darüber hinaus können Sie Ihrem Docker folgende Optionen hinzufügen:


 --storage-driver overlay2 --iptables=false --ip-masq=false 

Kopieren Sie docker.service von /lib nach /etc , um die Optionen zu überschreiben:


 cp /{lib,etc}/systemd/system/docker.service 

ExecStart Sie diese Optionen nun dem Abschnitt ExecStart .


Das ist alles, nach diesen Schritten sollte die Standard- Kubeadm-Installation ohne Probleme funktionieren.

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


All Articles