Kubeadm: [エラースワップ]:スワップをオンにして実行することはサポートされていません。 スワップを無効にしてください

作成日 2017年12月21日  ·  11コメント  ·  ソース: kubernetes/kubeadm

これはバグレポートですか、それとも機能リクエストですか?

バグレポート

バージョン

kubeadmバージョンkubeadm version ):1.9.0

環境

  • Kubernetesバージョンkubectl version ):1.9.0
  • クラウドプロバイダーまたはハードウェア構成:Raspberry Pi
  • OS (例:/ 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セットアップでは実際にスワップが必要になる場合があります。 たとえば、RAMがわずか1GBの非常に小型で安価なVMがあります。これは、短いCI / CDタスクをほとんど処理しない個人用GitLabランナーに使用します。 マシンのサイズを大きくすると、99%アイドル状態のリソースにもっとお金を払うことになります。 スワップを無効にすると、buidポッド内のnpm installおよびその他のスクリプトは、短時間ではありますが、かなりの量のメモリを必要とするため、ハングする可能性があります。 したがって、 gitlabランナーチャートとスワップをkubeadmクラスターが私に最も適しています。

ミニクラスターを起動して実行する方法は次のとおりです。

UPD:以下の回避策はk8s1.10にのみ適用されます-1.11以降についてはhttps://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/を参照してkubeletConfiguration:\n failSwapOn: falseを指定できますkubeadmのconfig.yaml 、次に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-

以下の段落はk8s1.10-のみに適用されます
@cjdcordeiroが述べたようにecho 'Environment="..."' >> ... sed -i '9s/^/...代わりに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_ARGSExecStart後に表示されたため、ピックアップされていないように見えました。 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でスワップを有効にすることが今よりも簡単になれば、それは素晴らしいことです。これにより、世界中の人々が何時間も節約できるようになります。 私はLinuxの管理にかなり不慣れであり、他の人が同じ道をたどる必要がなければ素晴らしいと思うので、1.8にアップグレードした後にミニクラスターを機能させるのは本当に苦痛でした。 理想的なソリューションは、次のIMOのようになります。

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

kubeadm init --config /tmp/config.yaml

もちろん、スワップを有効にすることは、多くの状況で噛み付く可能性があるため、エッジケースのままである必要があります。 ただし、kubeadmユーザーに選択肢があれば素晴らしいと思います。 それまでは、スワップの有効化に関して未解決の問題があったとしたら、それは素晴らしいことです。

+1は、experimental / alpha / etcの「機能」フラグのオプションを使用してスワップを有効にし、それをkubelet.service.dのkubeadmドロップインに追加し、その飛行前チェックを無効にします。 確かにエッジケースであることに同意しましたが、もっと簡単であればいいのですが。

(ただし、グーグルでこの問題をすばやく見つけることができると、非常に役立ちます。)

関連項目を参照してください: https

スワップをオフにしましたが、それでもこのエラーが発生します。

念のために言っておきますが、少なくともubuntuベースのシステムでは、_-- fail-swap-on = false_フラグを追加する場所は_ / etc / default / kubelet_ファイルにあると思います。 _systemd_confファイル自体にはありません。

念のために言っておきますが、少なくともubuntuベースのシステムでは、-fail-swap-on = falseフラグを追加する場所は/ etc / default / kubeletファイルにあると思います。 systemdconfファイル自体にはありません。

1.11以降の場合、これは当てはまります。

永続的に無効にするには、 sudo crontab -e最後に改行を入れて<strong i="5">@reboot</strong> /sbin/swapoff -aを挿入します。

Ubuntu16.04および18.04でテスト済み。

このページは役に立ちましたか?
0 / 5 - 0 評価