ทำไมต้องปิดการใช้งาน swap บน kubernetes


35

ตั้งแต่ Kubernetes 1.8 ดูเหมือนว่าฉันต้องปิดการใช้งาน swap บนโหนดของฉัน (หรือตั้งค่า--fail-swap-onเป็นfalse)

ฉันไม่พบเหตุผลทางเทคนิคว่าทำไม Kubernetes ยืนยันว่าการแลกเปลี่ยนถูกปิดใช้งาน นี่คือเหตุผลด้านประสิทธิภาพหรือไม่ เหตุผลด้านความปลอดภัย? เหตุใดจึงไม่มีเอกสารนี้

คำตอบ:


28

แนวคิดของ kubernetes คือการแพ็คอินสแตนซ์ให้แน่นจนใกล้เคียงกับ 100% ที่ใช้มากที่สุด การปรับใช้ทั้งหมดควรถูกตรึงด้วยขีด จำกัด ของ CPU / หน่วยความจำ ดังนั้นหากตัวกำหนดตารางเวลาส่งพ็อดไปที่เครื่องมันไม่ควรใช้ swap เลย คุณไม่ต้องการสลับเพราะมันจะทำให้สิ่งต่าง ๆ ช้าลง

มันเป็นเรื่องของประสิทธิภาพ


2
ya ความคิดคือถ้าโหนดมี 3gig ใช้งานฟรีเท่านั้น .. และพ็อดใหม่ของคุณต้องการ 4 .. มันจะไปยังโหนดอื่น
Mike

สิ่งนี้ไม่สมเหตุสมผลสำหรับฉันอย่างแน่นอนคุณสามารถแพ็คโหนดของคุณต่อไปอีกเล็กน้อยโดยให้ระบบปฏิบัติการใช้หน้าหน่วยความจำที่ใช้บ่อยในการแลกเปลี่ยนโดยไม่ทำให้ประสิทธิภาพการทำงานแย่ลง?
Frederik Baetens

13

เหตุผลที่ทำให้สิ่งนี้ตามที่ฉันเข้าใจคือว่า kubelet ไม่ได้ออกแบบมาเพื่อจัดการสถานการณ์การแลกเปลี่ยนและทีม Kubernetes ไม่ได้วางแผนที่จะใช้สิ่งนี้เนื่องจากเป้าหมายคือฝักควรจะพอดีกับหน่วยความจำของโฮสต์

จากปัญหานี้

การสนับสนุนการแลกเปลี่ยนนั้นไม่สำคัญ ฝักที่รับประกันได้ไม่ควรมีการแลกเปลี่ยน พ็อดที่ระเบิดได้ควรมีการร้องขอโดยไม่ต้องสลับ BestEffort พ็อดไม่มีการรับประกัน ตอนนี้ kubelet ขาด smarts เพื่อให้ได้พฤติกรรมที่สามารถคาดเดาได้ในปริมาณที่เหมาะสมที่นี่ในพ็อด


10

TL; DR ไม่ถูกต้องหากใช้ swap เป็นเพียงแฮ็คขี้เกียจที่แสดงให้เห็นถึงความเข้าใจที่ไม่ดีของระบบย่อยหน่วยความจำและขาดทักษะการบริหารระบบขั้นพื้นฐาน การออกแบบบริการโครงสร้างพื้นฐานและไม่เข้าใจระบบเหล่านี้จะสิ้นสุดลงในความล้มเหลว

ดังนั้นฉันมีความเห็นเกี่ยวกับเรื่องนี้ดูเหมือนว่าฉันจะขี้เกียจมากกว่าฟีเจอร์หรือข้อกำหนด เป็นไปได้อย่างแน่นอนที่จะจัดการ swap อย่างถูกต้องวิเคราะห์หน่วยความจำและกำหนดวิธีการใช้ระบบย่อยหน่วยความจำอย่างเหมาะสมโดยไม่ต้องกดปุ่ม swap มีเครื่องมือมากมายที่สร้างขึ้นรอบ ๆ นี้และคุณสามารถรับประกันได้ว่ากระบวนการจะไม่ใช้การสลับอย่างง่ายดายดังนั้นจุดของประสิทธิภาพไม่ถูกต้อง มันเป็นโค้ดที่ขี้เกียจที่จะไม่ใส่เครื่องมือนี้และการถอดการแลกเปลี่ยนโดยสมบูรณ์จะทำให้ประสิทธิภาพของระบบแย่ลง กุญแจสำคัญในที่นี้คือการใช้อย่างถูกต้อง ฉันจะยอมรับว่าการสลับไปยังดิสก์ฝักจะส่งผลกระทบต่อประสิทธิภาพการทำงาน แต่มีจำนวนของสิ่งที่ควรจะสลับออกไปยังดิสก์

นอกจากนี้เคอร์เนล linux ได้รับการออกแบบเพื่อใช้ swap และปิดการใช้งานอย่างสมบูรณ์มันจะมีผลกระทบเชิงลบ วิธีที่ดีกว่าในการจัดการสิ่งนี้คือการตรึงพ็อดลงในหน่วยความจำหลักและไม่อนุญาตให้สลับไปยังดิสก์ลดความดันแคช vfs เพื่อที่จะไม่สลับเว้นแต่ว่ามันจำเป็นจริงๆ MALLOC ล้มเหลวในกรณีที่หน่วยความจำหลักหมด

ทั้งนี้ขึ้นอยู่กับกระบวนการในภาชนะบรรจุที่มีความล้มเหลวอย่างหนักของภาชนะบรรจุหรือมีการฆ่าโดย OOM killer อาจส่งผลให้เกิดผลลัพธ์ที่หายนะ ฉันเข้าใจว่ากระบวนการที่ทำงานในภาชนะบรรจุเหล่านี้ควรเป็นแบบไร้รัฐและไม่ยั่งยืน แต่ใน 20 ปีของระบบการทำงานฉันไม่เคยเห็นทุกคนปฏิบัติตามการออกแบบตามความตั้งใจกับตัวอักษร 100% ของเวลา

นอกจากนี้ยังไม่ได้คำนึงถึงเทคโนโลยีในอนาคตเช่นหน่วยความจำแบบไม่ลบเลือนและระบบหน่วยความจำรุ่นใหม่เช่น intel xpoint ซึ่งสามารถนำมาใช้เพื่อขยายหน่วยความจำหลักอย่างมีนัยสำคัญโดยใช้ระบบไฮบริดดิสก์ / หน่วยความจำ ด้วยระบบประเภทนี้พวกเขาสามารถใช้พวกเขาโดยตรงเป็นหน่วยความจำหลักเสริมหรือใช้ไฟล์ swap เพื่อขยายหน่วยความจำหลักที่มีผลกระทบต่อประสิทธิภาพการทำงานเล็กน้อย


2
ฉันสงสัยอย่างมากว่าผู้ดูแลโครงการ kubernetes ขี้เกียจ ไม่มีข้อโต้แย้งใด ๆ ที่ดูเหมือนว่าจะอยู่ในบริบทของระบบนิเวศที่บรรจุอยู่ในตู้เอกสาร
spuder

-2

มีตั๋วสำหรับเปิดใช้งานอีกครั้งคุณจะได้รับข้อมูลเชิงลึกเพิ่มเติมที่นั่น

https://github.com/kubernetes/kubernetes/issues/53533


2
คำตอบแบบลิงก์เท่านั้นนี้ไม่ได้ช่วยอะไรใหม่ ปัญหา GitHub เป็นที่กล่าวถึงแล้วในเกือบสองปีนี้คำตอบเก่า
Andrew Savinykh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.