バグレポート
kubeadmバージョン( kubeadm version
):1.9.0
環境:
kubectl version
):1.9.0uname -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の問題であるか、何かを誤って構成している可能性があります...
あなたは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_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でスワップを有効にすることが今よりも簡単になれば、それは素晴らしいことです。これにより、世界中の人々が何時間も節約できるようになります。 私は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でテスト済み。
最も参考になるコメント
swapoff -a