Kubeadm: [ERROR Swap]: Die Ausführung mit aktiviertem Swap wird nicht unterstützt. Bitte Swap deaktivieren

Erstellt am 21. Dez. 2017  ·  11Kommentare  ·  Quelle: kubernetes/kubeadm

Ist dies ein FEHLERBERICHT oder eine FEATURE-ANFRAGE?

FEHLERBERICHT

Versionen

kubeadm-Version (verwenden Sie kubeadm version ): 1.9.0

Umgebung :

  • Kubernetes-Version (verwenden Sie kubectl version ): 1.9.0
  • Cloud-Anbieter oder Hardwarekonfiguration : Raspberry Pi
  • Betriebssystem (zB aus /etc/os-release): Raspbian GNU/Linux 8 (jessie)
  • Kernel (zB uname -a ): Linux 4.9.35-v7+
  • Andere :

Was ist passiert?

Beim Ausführen von kubeadm init der Fehler [ERROR Swap]: running with swap on is not supported. Please disable swap . Die vorgeschlagene Lösung besteht darin, das Flag von kubelet zu verwenden, also im Grunde:

kubeadm reset 
echo 'Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"' >> /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

systemctl daemon-reload
systemctl restart kubelet

kubeadm init

Aber am Ende ist der Fehler immer noch da. Vielleicht ist dies stattdessen ein Kubelet-Problem oder vielleicht konfiguriere ich etwas falsch ...

Hilfreichster Kommentar

swapoff -a

Alle 11 Kommentare

Wenn Sie das Kubelet-Flag setzen, können Sie dies sicher tun kubeadm init --ignore-preflight-errors Swap , aber ich würde Ihnen empfehlen, stattdessen einfach den Swap zu deaktivieren, da Sie hier in nicht unterstütztes Gebiet vordringen.

Sie müssen dies nicht erneut öffnen, aber ich habe immer noch das Gefühl, dass dies ein bisschen kontraintuitiv ist. Wenn Sie das kubelet-Flag setzen, gehe ich davon aus, dass ich die Preflight-Fehler nicht ignorieren muss. Wenn --ignore-preflight-errors nicht übergeben wird, bleibt die Fehlermeldung gleich, ob das Kubelet-Flag aktiviert ist oder nicht, und das ist irreführend.

Wie lautet der Befehl, um den Swap auszuschalten?

swapoff -a

Es ist wahr, dass swapoff -a in den meisten Fällen eine Wunderwaffe ist, jedoch können bestimmte k8s-Setups wirklich einen Austausch erfordern. Ich habe zum Beispiel eine sehr kleine und günstige VM mit nur 1 GB RAM, die ich für einen persönlichen GitLab Runner verwende, der selten kurze CI/CD-Aufgaben erledigt. Wenn ich die Größe der Maschine erhöhe, bezahle ich mehr für eine Ressource, die zu 99% inaktiv ist. Wenn ich Swap deaktiviere, können npm install und andere Skripte in den Build-Pods hängen bleiben, da sie ziemlich viel Speicher benötigen, wenn auch nur für kurze Zeit. Daher ist ein Single-Node- kubeadm Cluster mit Gitlab-Runner-Diagramm und Swap für mich am besten

So könnte ich meinen Mini-Cluster zum Laufen bringen:

UPD: Der folgende Workaround gilt nur für https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ (TLDR: Sie können kubeletConfiguration:\n failSwapOn: false in . angeben config.yaml deines kubeadms und dann kubeadm init --config config.yaml --ignore-preflight-errors Swap ).

kubeadm reset 

## ↓ see explanation below
sed -i '9s/^/Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"\n/' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

systemctl daemon-reload
systemctl restart kubelet

echo "
kind: MasterConfiguration
apiVersion: kubeadm.k8s.io/v1alpha1
api:
  bindPort: ${K8S_API_PORT}
apiServerCertSANs: ${K8S_API_EXTRA_HOSTS}
" > /tmp/config.yaml

kubeadm init --config /tmp/config.yaml --ignore-preflight-errors Swap

## make possible to run workload on master
kubectl taint nodes --all node-role.kubernetes.io/master-

Die folgenden Absätze gelten nur für k8s 1.10-
Der Grund, warum ich sed -i '9s/^/... anstelle von echo 'Environment="..."' >> ... wie von @cjdcordeiro erwähnt, ist, dass im letzteren Fall die Zeilen in 10-kubeadm.conf in der falschen Reihenfolge gestapelt sind:

...
Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ$
Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"

Da KUBELET_EXTRA_ARGS nach ExecStart KUBELET_EXTRA_ARGS auftauchte, sah es so aus, als würde es nicht abheben. Mit sed -i '9s/^/... /etc/systemd/system/kubelet.service.d/10-kubeadm.conf endet die Datei

...
Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki"
Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ$

Es wäre großartig, wenn die Aktivierung von Swap in kubeadm einfacher wäre als jetzt – dies würde Menschen auf der ganzen Welt Stunden sparen. Meinen Mini-Cluster nach dem Upgrade auf 1.8 zum Laufen zu bringen, war eine echte Qual, weil ich in der Linux-Administration ziemlich unerfahren bin und ich denke, es wäre großartig, wenn andere nicht denselben Weg einschlagen müssten. Die ideale Lösung würde so IMO aussehen:

echo "
kind: MasterConfiguration
apiVersion: kubeadm.k8s.io/v1alpha1
kubeletConfiguration:
  allowSwap: true
" > /tmp/config.yaml

kubeadm init --config /tmp/config.yaml

Natürlich sollte die Aktivierung des Swaps ein Randfall bleiben, da er unter vielen Umständen beißen kann. Es wäre jedoch großartig, wenn kubeadm-Benutzer die Wahl hätten. Bis dahin wäre es großartig, wenn es ein offenes Problem zur Aktivierung des Swaps gäbe.

+1 für eine Option für ein experimentelles/alpha/etc-"Feature"-Flag, um den Swap zu aktivieren, der ihn zum kubeadm-Drop-In in kubelet.service.d hinzufügt und diesen Pre-Flight-Check deaktiviert. Definitiv ein Grenzfall, stimmt, aber es wäre schön, wenn es einfacher wäre.

(Googeln und in der Lage zu sein, dieses Problem schnell zu finden, hilft jedoch sehr.)

Ich habe meinen Swap deaktiviert, aber ich erhalte immer noch diese Fehlermeldung.

Nur fürs Protokoll, zumindest in einem Ubuntu-basierten System, denke ich, dass der Ort zum Hinzufügen des _--fail-swap-on=false_ Flags in der Datei _/etc/default/kubelet_ ist; nicht in der _systemd_conf-Datei selbst.

Nur für die Aufzeichnung, zumindest in einem Ubuntu-basierten System, denke ich, dass der Ort zum Hinzufügen des --fail-swap-on=false-Flags in der Datei /etc/default/kubelet ist; nicht in der systemd conf-Datei selbst.

für 1.11+ ist dies wahr.

Um es dauerhaft zu deaktivieren, fügen Sie einfach <strong i="5">@reboot</strong> /sbin/swapoff -a mit einem Zeilenumbruch am Ende in sudo crontab -e .

Getestet auf Ubuntu 16.04 und 18.04.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen