Starten Sie die kubernetes im LXC

Ursprünglicher Autor: kvaps
  • Übersetzung


In diesem Artikel werde ich erklären, wie Sie den kubernetes Master im LXC-Container ausführen können.
Diese Methode funktioniert sehr gut mit Proxmox und kann als Alternative zum klassischen Einsatz von Kuberneten mit mehreren Assistenten betrachtet werden.


Warum proxmox?


Weil proxmox sofort einsatzbereit ist und viele nützliche Funktionen bietet.
Proxmox umfasst Hochverfügbarkeitsfunktionen, Migration, automatische Backups, Zugriffskontrolle und alles ist über eine einfache grafische Benutzeroberfläche verfügbar.


Sie können auch die einfachste Konfiguration mit einem Master-Kubernetes implementieren. Hohe Verfügbarkeit wird von der Proxmox selbst bereitgestellt.
Diese Methode ist ideal für die Bereitstellung von Testclustern oder kleinen Clustern.


Bei größeren Bereitstellungen wird empfohlen, dass Sie etcd in separaten Containern ablegen, die schnelle lokale Datenträger verwenden und diese in einem Cluster zusammenfassen.
Trotzdem kann der kubernetes-master selbst ein gewöhnlicher ha-Container bleiben, er braucht keine schnelle Lagerung.


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


Warum LXC?


Kubernetes laufen problemlos innerhalb einer normalen virtuellen Maschine. LXC-Container bieten jedoch die Flexibilität, die beim Einsatz herkömmlicher virtueller Maschinen nicht zur Verfügung steht.


Tatsächlich bieten LXC-Container keine vollständige Isolierung der Container vom Host, vielmehr werden alle Prozesse in Containern als normale Hostprozesse gestartet, nur in einem separaten Namespace.


Diese Methode bietet eine gute Leistung, hat jedoch in unserem Fall einige Einschränkungen.


Ich werde diese Einschränkungen und den Umgang mit ihnen in diesem Artikel besprechen.


Konfiguration


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


Wir werden den overlayTreiber für Docker verwenden, so dass wir alles brauchen, 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 11.0 erfordert kubelet den gemeinsamen Modus für alle Mounts vom Host.


Mit diesem schmutzigen Hack können Sie dies erreichen, indem Sie im LXC-Container Folgendes ausführen:


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

Dadurch wird den Befehl hinzufügen mount --make-rshared /zu /etc/rc.localund es wird jedes Mal , wenn Sie die Container laden laufen.


Wenn Sie planen, den HA-Manager in proxmox zu verwenden, sollten Sie wissen, dass es im Moment einen unangenehmen Fehler # 1842 gibt , der die Containerprozesse während der Migration zwangsweise beendet, wodurch Zombie-Prozesse entstehen oder der 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

Zusätzlich können Sie folgende Optionen für Ihr Docker hinzufügen:


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

Kopieren Sie docker.servicevon /libnach /etc, um die Parameter zu überschreiben:


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

Fügen Sie diese Optionen nun dem ExecStartAbschnitt hinzu.


Nach diesen Schritten sollte die Standardinstallation von kubeadm problemlos funktionieren.


Jetzt auch beliebt: