Kubeadm: [ERREUR Swap] : l'exécution avec swap activé n'est pas prise en charge. Veuillez désactiver l'échange

Créé le 21 déc. 2017  ·  11Commentaires  ·  Source: kubernetes/kubeadm

S'agit-il d'un rapport de bogue ou d'une demande de fonctionnalité ?

RAPPORT D'ERREUR

Versions

version de kubeadm (utilisez kubeadm version ): 1.9.0

Environnement :

  • Version Kubernetes (utilisez kubectl version ): 1.9.0
  • Fournisseur cloud ou configuration matérielle : Raspberry Pi
  • OS (par exemple depuis /etc/os-release) : Raspbian GNU/Linux 8 (jessie)
  • Noyau (par exemple uname -a ): Linux 4.9.35-v7+
  • Autres :

Que s'est-il passé?

Lorsque vous faites kubeadm init l'erreur apparaît [ERROR Swap]: running with swap on is not supported. Please disable swap . Le correctif suggéré est d'utiliser le drapeau de kubelet donc en gros :

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

Mais au final, l'erreur est toujours là. Peut-être s'agit-il plutôt d'un problème de Kubelet ou peut-être que je configure mal quelque chose...

Commentaire le plus utile

swapoff -a

Tous les 11 commentaires

Si vous définissez le drapeau kubelet, vous pouvez le faire en toute sécurité kubeadm init --ignore-preflight-errors Swap , mais je vous recommande de simplement désactiver le swap à la place, car vous entrez ici dans un territoire non pris en charge.

pas besoin de rouvrir cela mais je pense toujours que c'est un peu contre-intuitif. Si vous définissez le drapeau kubelet, je m'attendrais à ce que je n'aie pas besoin d'ignorer les erreurs de contrôle en amont. Si --ignore-preflight-errors n'est pas transmis, le message d'erreur reste le même, que le drapeau kubelet soit activé ou non, et c'est trompeur.

Quelle est la commande pour désactiver le swap ?

swapoff -a

Il est vrai que swapoff -a est une solution miracle dans la plupart des cas, cependant, certaines configurations de k8 peuvent vraiment nécessiter un échange. Par exemple, j'ai une machine virtuelle très petite et bon marché avec seulement 1 Go de RAM, que j'utilise pour un GitLab Runner personnel qui gère rarement de courtes tâches CI/CD. Si j'augmente la taille de la machine, je paierai plus pour une ressource inutilisée à 99 %. Si je désactive le swap, npm install et d'autres scripts à l'intérieur des pods buid peuvent se bloquer car ils nécessitent beaucoup de mémoire, bien que pendant de courtes périodes. Ainsi, un cluster kubeadm à nœud unique avec

Voici comment je pourrais faire fonctionner mon mini-cluster :

UPD : la solution de contournement ci-dessous s'applique uniquement à k8s 1.10 - pour 1.11+, voir https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ (TLDR : vous pouvez spécifier kubeletConfiguration:\n failSwapOn: false dans votre kubeadm est config.yaml puis 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-

Les paragraphes ci-dessous s'appliquent uniquement au k8s 1.10-
La raison pour laquelle j'ai utilisé sed -i '9s/^/... au lieu de echo 'Environment="..."' >> ... comme mentionné par @cjdcordeiro est que dans ce dernier cas, les lignes de 10-kubeadm.conf empilées dans le mauvais ordre :

...
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"

Comme KUBELET_EXTRA_ARGS est apparu après ExecStart , il semblait qu'il ne décrochait pas. Avec sed -i '9s/^/... , le fichier /etc/systemd/system/kubelet.service.d/10-kubeadm.conf se termine ainsi et fonctionne :

...
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$

Ce serait formidable si l'activation de l'échange dans kubeadm était plus facile qu'aujourd'hui – cela permettrait aux gens du monde entier d'économiser des tonnes d'heures. Faire fonctionner mon mini-cluster après la mise à niveau vers la 1.8 a été une vraie galère car je suis assez inexpérimenté en administration Linux et je pense que ce serait génial si d'autres n'avaient pas à suivre le même chemin. La solution idéale ressemblerait à cette IMO :

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

kubeadm init --config /tmp/config.yaml

Bien sûr, l'activation de l'échange devrait rester un cas limite car cela peut mordre dans de nombreuses circonstances. Cependant, ce serait formidable si les utilisateurs de kubeadm avaient le choix. Jusque-là, ce serait formidable s'il y avait un problème ouvert concernant l'activation de l'échange.

+1 pour avoir une option pour un indicateur de "fonctionnalité" expérimental/alpha/etc pour activer l'échange qui l'ajoute au drop-in kubeadm dans kubelet.service.d et désactive cette vérification avant vol. Certainement un cas limite, d'accord, mais ce serait bien si c'était plus facile.

(Cependant, rechercher sur Google et trouver rapidement ce problème aide beaucoup.)

J'ai désactivé mon swap mais j'ai toujours cette erreur.

Juste pour mémoire, au moins dans un système basé sur Ubuntu, je suppose que l'endroit pour ajouter le drapeau _--fail-swap-on=false_ est dans le fichier _/etc/default/kubelet_ ; pas dans le fichier _systemd_ conf lui-même.

Juste pour mémoire, au moins dans un système basé sur Ubuntu, je suppose que l'endroit pour ajouter le drapeau --fail-swap-on=false est dans le fichier /etc/default/kubelet ; pas dans le fichier de configuration systemd lui-même.

pour 1.11+ c'est vrai.

Pour le désactiver définitivement, insérez simplement <strong i="5">@reboot</strong> /sbin/swapoff -a avec un saut de ligne à la fin dans sudo crontab -e .

Testé sur Ubuntu 16.04 et 18.04.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

mlevesquedion picture mlevesquedion  ·  3Commentaires

jessfraz picture jessfraz  ·  3Commentaires

ep4eg picture ep4eg  ·  3Commentaires

chuckha picture chuckha  ·  3Commentaires

jbrandes picture jbrandes  ·  4Commentaires