Kubeadm: [ERROR Swap]: работа с включенной подкачкой не поддерживается. Пожалуйста, отключите своп

Созданный на 21 дек. 2017  ·  11Комментарии  ·  Источник: kubernetes/kubeadm

Это ОТЧЕТ ОБ ОШИБКЕ или ЗАПРОС О ФУНКЦИОНИРОВАНИИ?

СООБЩЕНИЕ ОБ ОШИБКЕ

Версии

версия kubeadm (используйте kubeadm version ): 1.9.0

Окружающая среда :

  • Версия Kubernetes (используйте kubectl version ): 1.9.0
  • Облачный провайдер или конфигурация оборудования : Raspberry Pi
  • ОС (например, из / etc / os-release): Raspbian GNU / Linux 8 (jessie)
  • Ядро (например, uname -a ): Linux 4.9.35-v7 +
  • Другие :

Что случилось?

При выполнении kubeadm init выскакивает ошибка [ERROR Swap]: running with swap on is not supported. Please disable swap . Предлагаемое исправление заключается в использовании флага kubelet в основном:

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

Но, в конце концов, ошибка все еще существует. Может быть, это проблема с Kubelet, а может я что-то неправильно настраиваю ...

Самый полезный комментарий

swapoff -a

Все 11 Комментарий

Если вы установите флаг kubelet, вы можете безопасно сделать это kubeadm init --ignore-preflight-errors Swap , но я бы порекомендовал вам просто отключить своп вместо этого, так как вы здесь попадаете на неподдерживаемую территорию.

нет необходимости повторно открывать это, но я все еще чувствую, что это немного противоречит интуиции. Если вы установите флаг kubelet, я ожидаю, что мне не нужно игнорировать ошибки предполетной проверки. Если --ignore-preflight-errors не передается, сообщение об ошибке остается неизменным независимо от того, включен флаг kubelet или нет, и это вводит в заблуждение.

Какая команда отключает своп?

swapoff -a

Это правда, что в большинстве случаев swapoff -a - серебряная пуля, однако для некоторых настроек k8s действительно может потребоваться замена. Например, у меня есть очень маленькая и дешевая виртуальная машина всего с 1 ГБ ОЗУ, которую я использую для личного GitLab Runner, который редко обрабатывает короткие задачи CI / CD. Если я увеличу размер машины, я буду платить больше за ресурс, который простаивает на 99%. Если я отключу своп, npm install и другие скрипты внутри сборных модулей могут зависнуть, потому что они требуют довольно много памяти, хотя и на короткие периоды времени. Таким образом, одноузловой кластер kubeadm с диаграммой бегуна gitlab и

Вот как я могу запустить и запустить свой мини-кластер:

UPD: обходной путь ниже применяется только для k8s 1.10 - для 1.11+ см. Https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ (TL; DR: вы можете указать kubeletConfiguration:\n failSwapOn: false в config.yaml вашего kubeadm, а затем 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-

Пункты ниже относятся только к k8s 1.10-
Причина, по которой я использовал sed -i '9s/^/... вместо echo 'Environment="..."' >> ... как упоминалось @cjdcordeiro, заключается в том, что в последнем случае строки в 10-kubeadm.conf сложены в неправильном порядке:

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

Поскольку KUBELET_EXTRA_ARGS появился после ExecStart , похоже, что он не работает. С sed -i '9s/^/... файл /etc/systemd/system/kubelet.service.d/10-kubeadm.conf заканчивается так и работает:

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

Было бы здорово, если бы включить подкачку в kubeadm было проще, чем сейчас - это сэкономило бы людям во всем мире кучу часов. Заставить мой мини-кластер работать после обновления до 1.8 было настоящей головной болью, потому что у меня нет опыта в администрировании Linux, и я думаю, было бы здорово, если бы другим не пришлось пойти по тому же пути. Идеальное решение будет выглядеть так: IMO:

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

kubeadm init --config /tmp/config.yaml

Конечно, включение подкачки должно оставаться крайним случаем, потому что во многих обстоятельствах это может укусить. Однако было бы здорово, если бы у пользователей kubeadm был выбор. А до тех пор было бы здорово, если бы возникла проблема с включением подкачки.

+1 за наличие опции для экспериментального / alpha / etc "флага" для включения свопа, который добавляет его в выпадающий файл kubeadm в kubelet.service.d и отключает эту предполетную проверку. Определенно крайний случай, согласен, но было бы неплохо, если бы было проще.

(Однако поиск в Google и возможность быстро найти эту проблему очень помогает.)

Я отключил своп, но все еще получаю эту ошибку.

Просто для записи, по крайней мере, в системе на основе ubuntu, я полагаю, что место для добавления флага _-- fail-swap-on = false_ находится в файле _ / etc / default / kubelet_; не в самом файле _systemd_ conf.

Просто для записи, по крайней мере, в системе на основе ubuntu, я полагаю, что место для добавления флага --fail-swap-on = false находится в файле / etc / default / kubelet; не в самом файле systemd conf.

для 1.11+ это правда.

Чтобы отключить его навсегда, просто вставьте <strong i="5">@reboot</strong> /sbin/swapoff -a с разрывом строки в конце в sudo crontab -e .

Проверено на Ubuntu 16.04 и 18.04.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги