RAPPORT D'ERREUR
version de kubeadm (utilisez kubeadm version
): 1.9.0
Environnement :
kubectl version
): 1.9.0uname -a
): Linux 4.9.35-v7+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...
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.)
Voir connexe : https://github.com/kubernetes/kubernetes/issues/53533
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.
Commentaire le plus utile
swapoff -a