Mengapa menonaktifkan swap di kubernetes

35

Sejak Kubernetes 1.8, sepertinya saya perlu menonaktifkan swap pada node saya (atau set --fail-swap-onke false).

Saya tidak dapat menemukan alasan teknis mengapa Kubernetes bersikeras swap dinonaktifkan. Apakah ini karena alasan kinerja? Alasan keamanan? Mengapa alasan ini tidak didokumentasikan?

Jeroen Jacobs
sumber

Jawaban:

28

Gagasan kubernetes adalah untuk mengemas instance secara ketat hingga 100% digunakan semaksimal mungkin. Semua penyebaran harus disematkan dengan batas CPU / memori. Jadi, jika scheduler mengirim pod ke mesin, ia seharusnya tidak menggunakan swap sama sekali. Anda tidak ingin bertukar karena itu akan memperlambat segalanya.

Ini terutama untuk kinerja.

Mike
sumber
2
ya idenya adalah jika sebuah node hanya memiliki 3gig gratis untuk digunakan .. dan pod baru Anda ingin 4 .. itu akan pergi pada node lain.
Mike
Ini tidak masuk akal bagi saya, tentunya Anda dapat mengemas node Anda sedikit lebih jauh dengan membiarkan os menempatkan beberapa halaman memori yang jarang digunakan dalam swap tanpa merusak kinerja dengan cara yang mencolok?
Frederik Baetens
13

Alasan untuk ini, seperti yang saya mengerti, adalah bahwa kubelet tidak dirancang untuk menangani situasi swap dan tim Kubernetes tidak berencana untuk mengimplementasikan ini karena tujuannya adalah agar polong harus sesuai dengan memori host.

dari masalah ini

Dukungan untuk swap bersifat non-sepele. Polong yang dijamin tidak harus memerlukan swap. Pod yang dapat meledak harus memenuhi permintaan mereka tanpa perlu swap. Pod BestEffort tidak memiliki jaminan. Kubelet sekarang tidak memiliki kecerdasan untuk memberikan jumlah yang tepat dari perilaku yang dapat diprediksi di sini di seluruh polong.

Rory McCune
sumber
10

TL; DR yang tidak benar menggunakan swap hanyalah hack malas yang menunjukkan pemahaman yang buruk tentang subsistem memori dan kurangnya keterampilan administrasi sistem dasar. Merancang layanan infrastruktur dan tidak memahami sistem ini pasti berakhir dengan kegagalan.

Jadi, saya punya beberapa komentar tentang ini, ini tampaknya lebih seperti kemalasan bagi saya daripada fitur atau persyaratan. Sangat mungkin untuk menangani swap dengan benar, menganalisis memori, dan menentukan cara memanfaatkan subsistem memori dengan benar tanpa memukul swap. Ada sejumlah alat yang dibangun di sekitar ini dan Anda dapat menjamin suatu proses tidak akan menggunakan swap dengan mudah sehingga titik kinerja salah. Ini hanya coding malas untuk tidak memasukkan instrumentasi ini, dan secara keseluruhan penghapusan lengkap swap akan merugikan kinerja sistem. Kuncinya di sini adalah menggunakannya dengan benar. Saya setuju bahwa menukar pod ke disk akan memengaruhi kinerja, namun ada beberapa hal yang harus diganti ke disk.

Selain itu kernel linux dirancang untuk menggunakan swap, dan menonaktifkan sepenuhnya itu akan memiliki konsekuensi negatif. Cara yang lebih baik untuk menangani ini adalah dengan menyematkan pod ke dalam memori utama dan tidak memungkinkan mereka untuk bertukar ke disk, mengurangi tekanan cache vfs sehingga tidak bertukar kecuali itu benar-benar diperlukan, dan bahkan kemudian Anda dapat menyebabkan proses yang disematkan ke Gagal MALLOC jika memori utama habis.

Bergantung pada proses dalam wadah yang mengalami kegagalan yang sulit pada wadah atau dibunuh oleh pembunuh OOM dapat menghasilkan beberapa hasil yang cukup buruk. Namun saya mengerti bahwa proses yang berjalan dalam wadah ini idealnya adalah stateless dan fana, tetapi dalam 20 tahun menjalankan sistem, saya belum pernah melihat semua orang mengikuti desain yang dimaksud pada huruf 100% dari waktu.

Selain itu, ini tidak memperhitungkan teknologi masa depan seperti memori yang tidak mudah menguap, dan sistem memori yang lebih baru seperti intel xpoint yang dapat digunakan untuk memperluas memori utama secara signifikan menggunakan disk hybrid / sistem memori. Dengan jenis sistem ini mereka dapat menggunakannya secara langsung sebagai memori utama tambahan atau menggunakan file swap untuk memperpanjang memori utama dengan dampak kinerja yang dapat diabaikan.

Michael Rutledge
sumber
2
Saya sangat meragukan bahwa pemelihara proyek kubernetes itu malas. Tak satu pun dari argumen yang dimaksudkan tampaknya berada dalam konteks ekosistem kemas yang berjalan di kubernet.
Spuder