Kubeadm: [ERROR Swap]: menjalankan dengan swap aktif tidak didukung. Harap nonaktifkan swap

Dibuat pada 21 Des 2017  ·  11Komentar  ·  Sumber: kubernetes/kubeadm

Apakah ini LAPORAN BUG atau PERMINTAAN FITUR?

LAPORAN BUG

Versi

versi kubeadm (gunakan kubeadm version ): 1.9.0

Lingkungan :

  • Versi Kubernetes (gunakan kubectl version ): 1.9.0
  • Penyedia cloud atau konfigurasi perangkat keras : Raspberry Pi
  • OS (mis. dari /etc/os-release): Raspbian GNU/Linux 8 (jessie)
  • Kernel (misalnya uname -a ): Linux 4.9.35-v7+
  • Lainnya :

Apa yang terjadi?

Saat melakukan kubeadm init kesalahan muncul [ERROR Swap]: running with swap on is not supported. Please disable swap . Perbaikan yang disarankan adalah menggunakan flag kubelet jadi pada dasarnya:

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

Namun pada akhirnya, kesalahan itu tetap ada. Mungkin ini masalah Kubelet atau mungkin saya salah mengonfigurasi sesuatu...

Komentar yang paling membantu

swapoff -a

Semua 11 komentar

Jika Anda menyetel flag kubelet, Anda aman melakukannya kubeadm init --ignore-preflight-errors Swap , tetapi saya sarankan Anda untuk menonaktifkan swap saja, karena Anda akan memasuki wilayah yang tidak didukung di sini.

tidak perlu membuka kembali ini tetapi saya masih merasa ini sedikit kontra intuitif. Jika Anda mengatur flag kubelet, maka saya berharap saya tidak perlu mengabaikan kesalahan preflight. Jika --ignore-preflight-errors tidak lolos, pesan kesalahan tetap sama apakah flag kubelet diaktifkan atau tidak, dan itu menyesatkan.

Apa perintah untuk mematikan swap?

swapoff -a

Memang benar bahwa swapoff -a adalah peluru perak dalam banyak kasus, namun, pengaturan k8s tertentu mungkin benar-benar memerlukan swap. Misalnya, saya memiliki VM yang sangat kecil dan murah dengan hanya 1GB RAM, yang saya gunakan untuk GitLab Runner pribadi yang jarang menangani tugas CI/CD singkat. Jika saya meningkatkan ukuran mesin, saya akan membayar lebih untuk sumber daya yang 99% menganggur. Jika saya menonaktifkan swap, npm install dan skrip lain di dalam buid pod mungkin hang karena membutuhkan cukup banyak memori, meskipun untuk waktu yang singkat. Jadi, cluster kubeadm single-node dengan grafik runner gitlab dan swap adalah yang paling cocok untuk saya.

Inilah cara saya mengaktifkan dan menjalankan mini-cluster:

UPD: Solusi di bawah ini hanya berlaku untuk k8s 1.10- - untuk 1.11+ lihat https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ (TLDR: Anda dapat menentukan kubeletConfiguration:\n failSwapOn: false di config.yaml kubeadm Anda dan kemudian 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-

Paragraf di bawah ini berlaku untuk k8s 1.10- saja
Alasan mengapa saya menggunakan sed -i '9s/^/... alih-alih echo 'Environment="..."' >> ... seperti yang disebutkan oleh @cjdcordeiro adalah karena dalam kasus terakhir baris di 10-kubeadm.conf ditumpuk dalam urutan yang salah:

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

Karena KUBELET_EXTRA_ARGS muncul setelah ExecStart , sepertinya tidak diangkat. Dengan sed -i '9s/^/... , file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf berakhir seperti itu dan berfungsi:

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

Akan sangat bagus jika mengaktifkan swap di kubeadm lebih mudah dari sekarang – ini akan menghemat banyak waktu orang di seluruh dunia. Membuat mini-cluster saya berfungsi setelah memutakhirkan ke 1,8 sangat merepotkan karena saya tidak berpengalaman dalam administrasi Linux dan saya pikir akan lebih bagus jika orang lain tidak harus mengambil jalan yang sama. Solusi ideal akan terlihat seperti IMO ini:

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

kubeadm init --config /tmp/config.yaml

Tentu saja, mengaktifkan swap harus tetap menjadi kasus tepi karena dapat menggigit dalam banyak situasi. Namun, alangkah baiknya jika pengguna kubeadm punya pilihan. Sampai saat itu, alangkah baiknya jika ada masalah terbuka tentang mengaktifkan swap.

+1 karena memiliki opsi untuk flag "fitur" eksperimental/alpha/etc untuk mengaktifkan swap yang menambahkannya ke drop-in kubeadm di kubelet.service.d dan menonaktifkan pemeriksaan pra-penerbangan itu. Jelas kasus tepi, setuju, tapi alangkah baiknya jika lebih mudah.

(Googling dan dapat dengan cepat menemukan masalah ini sangat membantu.)

Saya mematikan swap saya tetapi saya masih mendapatkan kesalahan ini.

Sekadar catatan, setidaknya dalam sistem berbasis ubuntu, saya kira tempat untuk menambahkan flag _--fail-swap-on=false_ ada di file _/etc/default/kubelet_; tidak dalam file _systemd_ conf itu sendiri.

Sebagai catatan, setidaknya dalam sistem berbasis ubuntu, saya kira tempat untuk menambahkan flag --fail-swap-on=false ada di file /etc/default/kubelet; tidak dalam file conf systemd itu sendiri.

untuk 1,11+ ini benar.

Untuk menonaktifkannya secara permanen, cukup masukkan <strong i="5">@reboot</strong> /sbin/swapoff -a dengan jeda baris di akhir sudo crontab -e .

Diuji pada Ubuntu 16.04 dan 18.04.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat