Kubeadm: [ERROR Swap]: no se admite la ejecución con swap activado. Desactive el intercambio

Creado en 21 dic. 2017  ·  11Comentarios  ·  Fuente: kubernetes/kubeadm

¿Es este un INFORME DE ERROR o una SOLICITUD DE FUNCIÓN?

INFORME DE ERROR

Versiones

versión kubeadm (use kubeadm version ): 1.9.0

Medio ambiente :

  • Versión de Kubernetes (use kubectl version ): 1.9.0
  • Proveedor de nube o configuración de hardware : Raspberry Pi
  • SO (por ejemplo, de / etc / os-release): Raspbian GNU / Linux 8 (jessie)
  • Kernel (por ejemplo, uname -a ): Linux 4.9.35-v7 +
  • Otros :

¿Qué sucedió?

Al hacer kubeadm init aparece el error [ERROR Swap]: running with swap on is not supported. Please disable swap . La solución sugerida es usar la bandera de kubelet, así que básicamente:

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

Pero al final, el error sigue ahí. Tal vez este sea un problema de Kubelet o tal vez estoy configurando mal algo ...

Comentario más útil

swapoff -a

Todos 11 comentarios

Si configura el indicador de kubelet, puede hacerlo con seguridad kubeadm init --ignore-preflight-errors Swap , pero le recomiendo que simplemente desactive el intercambio, ya que se adentrará en un territorio no admitido aquí.

no es necesario volver a abrir esto, pero todavía siento que esto es un poco contrario a la intuición. Si configura la bandera de kubelet, entonces esperaría no tener que ignorar los errores de verificación previa. Si no se pasa --ignore-preflight-errors , el mensaje de error sigue siendo el mismo si la bandera de kubelet está habilitada o no, y eso es engañoso.

¿Cuál es el comando para desactivar el intercambio?

swapoff -a

Es cierto que swapoff -a es una solución milagrosa en la mayoría de los casos, sin embargo, ciertas configuraciones de k8s pueden requerir un intercambio. Por ejemplo, tengo una máquina virtual muy pequeña y barata con solo 1 GB de RAM, que uso para un GitLab Runner personal que rara vez maneja tareas cortas de CI / CD. Si aumento el tamaño de la máquina, pagaré más por un recurso que está inactivo en un 99%. Si desactivo el intercambio, npm install y otros scripts dentro de los pods comprados pueden bloquearse porque requieren bastante memoria, aunque por períodos cortos de tiempo. Por lo tanto, un clúster kubeadm un solo nodo con un gráfico de corredor de gitlab y un intercambio es lo que más me conviene.

Así es como podría poner en funcionamiento mi mini-clúster:

UPD: la siguiente solución se aplica solo a k8s 1.10- para 1.11+ consulte https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ (TLDR: puede especificar kubeletConfiguration:\n failSwapOn: false en config.yaml su kubeadm y luego 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-

Los siguientes párrafos se aplican solo a k8s 1.10
La razón por la que usé sed -i '9s/^/... lugar de echo 'Environment="..."' >> ... como lo menciona @cjdcordeiro es porque en el último caso las líneas en 10-kubeadm.conf apiladas en el orden incorrecto:

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

Debido a que KUBELET_EXTRA_ARGS apareció después de ExecStart , parecía que no se estaba recuperando. Con sed -i '9s/^/... , el archivo /etc/systemd/system/kubelet.service.d/10-kubeadm.conf termina así y funciona:

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

Sería genial si habilitar el intercambio en kubeadm fuera más fácil que ahora; esto ahorraría a las personas de todo el mundo toneladas de horas. Hacer que mi mini-clúster funcione después de actualizar a 1.8 fue una verdadera molestia porque no tengo mucha experiencia en administración de Linux y creo que sería genial si otros no tuvieran que tomar el mismo camino. La solución ideal se vería así en mi opinión:

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

kubeadm init --config /tmp/config.yaml

Por supuesto, habilitar el intercambio debería seguir siendo un caso marginal porque puede afectar en muchas circunstancias. Sin embargo, sería genial si los usuarios de kubeadm tuvieran una opción. Hasta entonces, sería genial si hubiera un problema abierto sobre la habilitación del intercambio.

+1 por tener una opción para un indicador de "función" experimental / alpha / etc para habilitar el intercambio que lo agrega al kubeadm drop-in en kubelet.service.d y deshabilita esa verificación previa al vuelo. Definitivamente un caso marginal, de acuerdo, pero sería bueno si fuera más fácil.

(Sin embargo, buscar en Google y poder encontrar rápidamente este problema ayuda mucho).

Apagué mi intercambio, pero sigo recibiendo este error.

Solo para que conste, al menos en un sistema basado en ubuntu, supongo que el lugar para agregar el indicador _-- fail-swap-on = false_ está en el archivo _ / etc / default / kubelet_; no en el archivo _systemd_ conf.

Solo para que conste, al menos en un sistema basado en ubuntu, supongo que el lugar para agregar el indicador --fail-swap-on = false está en el archivo / etc / default / kubelet; no en el archivo conf de systemd.

para 1.11+ esto es cierto.

Para deshabilitarlo permanentemente, simplemente inserte <strong i="5">@reboot</strong> /sbin/swapoff -a con un salto de línea al final en sudo crontab -e .

Probado en Ubuntu 16.04 y 18.04.

¿Fue útil esta página
0 / 5 - 0 calificaciones