ในบทความก่อนหน้านี้ คุณสามารถสำรวจว่า LXD คืออะไรและจะเริ่มต้นอย่างไร ในกรณีที่คุณไม่คุ้นเคยกับแพลตฟอร์ม
ในกรณีส่วนใหญ่ คุณจะใช้คอนเทนเนอร์หลายตัวบนระบบเดียวกันเพื่อแยกส่วนประกอบทั้งหมดที่มีขนาดใหญ่กว่าออกเป็นส่วนประกอบที่เล็กกว่า เป็นการเหมาะสมที่จะจำกัดจำนวนทรัพยากรที่แต่ละองค์ประกอบสามารถใช้ได้ แต่ทำไม? แน่นอน เหตุผลหลายประการไม่จำกัดเท่าสถานการณ์ที่คุณสามารถใช้คอนเทนเนอร์ได้
เมื่อข้อจำกัดในคอนเทนเนอร์ LXD อาจมีประโยชน์
- ให้บริการและมอบอินสแตนซ์ LXD ให้กับลูกค้าแต่ละราย ตัวอย่างเช่น นี่อาจเป็นเซิร์ฟเวอร์ขนาดใหญ่ และคุณโฮสต์เว็บไซต์ของลูกค้าแต่ละรายไว้ในคอนเทนเนอร์ที่แยกจากกัน หากเว็บไซต์มีปริมาณการใช้งานเพิ่มขึ้นอย่างกะทันหัน อาจทำให้อินสแตนซ์อื่นๆ ช้าลง ด้วยข้อจำกัด คอนเทนเนอร์เดียวเท่านั้นที่จะทำงานช้าลง และที่เหลือจะทำงานได้ตามปกติ
- ในสถานการณ์ที่คล้ายกัน คุณสามารถขายแผนบริการต่างๆ ได้อย่างง่ายดาย ลูกค้ารายหนึ่งสามารถชำระค่าทรัพยากรจำนวน X และอีกรายหนึ่งสามารถชำระเป็นจำนวนเงิน Y ได้ และคุณสามารถปรับเปลี่ยนสิ่งนี้ได้อย่างง่ายดายด้วยคำสั่งง่ายๆ ไม่กี่คำสั่ง
- คุณสามารถป้องกันตัวเองจากการโจมตี Denial of Service ในรูปแบบที่ง่ายกว่าได้ เมื่อคอนเทนเนอร์หนึ่งถูกทิ้งระเบิด มันจะถึงขีดจำกัดการใช้ทรัพยากร คอนเทนเนอร์อื่นๆ จะไม่ได้รับผลกระทบ
- คุณมีคอนเทนเนอร์สองคอนเทนเนอร์ซึ่งแต่ละคอนเทนเนอร์จะใช้เวลา CPU ที่มีอยู่ 100% อย่างไรก็ตาม คุณต้องการให้คนหนึ่งทำงานให้เสร็จเร็วกว่าอีกคนหนึ่ง ตัวอย่างเช่น เราอาจสร้างวิดีโอสำหรับโครงการที่คุณต้องการในวันพรุ่งนี้ คุณสามารถกำหนดเวลา CPU 90% ให้กับตัวแรกและ 10% ให้กับวินาที
แน่นอน คุณอาจมีเหตุผลของคุณเอง และหากคุณใช้คอนเทนเนอร์เพียงคอนเทนเนอร์เดียวในทั้งระบบ คุณอาจไม่ต้องการสิ่งนี้ด้วยซ้ำ แต่หากคุณใช้หลายคอนเทนเนอร์ คุณจะต้องกำหนดขีดจำกัดบางประเภทแทบทุกครั้ง เนื่องจากการโจมตี บั๊ก หรือรูปแบบอื่นของพฤติกรรมที่ไม่เหมาะสมในอินสแตนซ์ LXD เดียวสามารถส่งผลกระทบต่อทั้งระบบและทำให้ช้าลง ยิ่งคุณมีคอนเทนเนอร์มากเท่าใด โอกาสที่สถานการณ์ดังกล่าวจะเพิ่มขึ้นมากเท่านั้น
วิธีตั้งค่าขีดจำกัดทรัพยากรบนคอนเทนเนอร์ LXD
การควบคุมทรัพยากรที่เกี่ยวข้องกับการทำงานของดิสก์จะต้องติดตั้ง ZFS หากคุณติดตามบทช่วยสอนที่นี่ แสดงว่ามีการติดตั้งไว้แล้ว มิฉะนั้น ให้ติดตั้งยูทิลิตี้ ZFS ตามคำแนะนำในบทช่วยสอน จากนั้นรันคำสั่งด้านล่างอีกครั้ง เลือก ZFS เมื่อระบบถามว่าจะใช้พื้นที่เก็บข้อมูลแบ็กเอนด์ใด
sudo lxd init
จำกัดการใช้หน่วยความจำ
ในคำสั่งด้านล่าง ให้แทนที่ “container_name” ด้วยชื่อจริงของคอนเทนเนอร์ของคุณ การตั้งค่าขีดจำกัดหน่วยความจำทำได้ง่ายเพียงแค่ป้อน:
lxc config set container_name limits.memory 100MB
พิมพ์ “GB” แทน “MB” หากคุณต้องการใช้กิกะไบต์แทนเมกะไบต์
จำกัดการใช้งาน CPU
เมื่อต้องการจำกัดจำนวนคอร์ของ CPU ที่คอนเทนเนอร์สามารถใช้ได้ ให้พิมพ์:
lxc config set container_name limits.cpu 2
หากต้องการ "ตรึง" กับแกน CPU ที่เฉพาะเจาะจง ให้ใช้:
lxc config set container_name limits.cpu 0-0
ซึ่งจะทำให้คอนเทนเนอร์ใช้ CPU ตัวแรกเท่านั้น หากต้องการใช้อันที่สอง ให้พิมพ์ 1-1 หากต้องการใช้คอร์ CPU ทั้งหมดตั้งแต่ตัวแรกถึงตัวที่สาม คุณจะต้องพิมพ์ 0-3
ขีดจำกัดอีกประเภทหนึ่งคือเวลา CPU ที่คอนเทนเนอร์สามารถใช้ได้
lxc config set container_name limits.cpu.allowance 10ms/100ms
ซึ่งจะทำให้คอนเทนเนอร์ใช้เวลา CPU ได้เพียง 10 มิลลิวินาทีจากทุกๆ 100 มิลลิวินาที ดังนั้นประมาณ 10% ของคอร์ CPU หนึ่งคอร์
จำกัดการใช้งานดิสก์
ในการจำกัดทรัพยากรที่เกี่ยวข้องกับดิสก์ คุณต้องเพิ่มอุปกรณ์ดิสก์รูทในคอนเทนเนอร์ของคุณก่อน มีอยู่แล้วโดยค่าเริ่มต้น ซึ่งสืบทอดมาจากโปรไฟล์ LXD เริ่มต้น แต่คุณไม่สามารถเปลี่ยนการตั้งค่าสำหรับแต่ละคอนเทนเนอร์ได้จนกว่าคุณจะทำสิ่งนี้
lxc config device add container_name root disk pool=default path=/
หากคุณตั้งชื่อพูลของคุณแตกต่างกัน ให้แทนที่ “default” ด้วยชื่อพูลหน่วยเก็บข้อมูลของคุณ หากคุณลืมชื่อ คุณสามารถแสดงด้วย:
lxc storage list
ในการจำกัดพื้นที่ดิสก์ อินสแตนซ์ LXD สามารถใช้:
lxc config device set container_name root size 7GB
ขออภัย ขีดจำกัด I/O ( "ความเร็ว" การอ่าน/เขียนและ IOPS) ใช้งานไม่ได้ในขณะนี้
จำกัดการใช้งานเครือข่าย
เช่นเดียวกับดิสก์ คุณต้องเพิ่มอุปกรณ์อีเทอร์เน็ตเสมือนก่อนที่คุณกำหนดค่าได้ ค้นหาชื่อบริดจ์เครือข่ายของคุณที่เชื่อมต่ออินสแตนซ์ LXD ของคุณกับโลกภายนอก
lxc network list
แทนที่ “lxdbr0” หากจำเป็น (หากชื่อบริดจ์ต่างกันในกรณีของคุณ) หากคุณไม่ได้เลือกประเภทเครือข่ายเป็นแบบเชื่อมต่อ (คำตอบเริ่มต้น) ในขั้นตอนการกำหนดค่า "lxd init" คุณอาจต้องปรับคำสั่งด้านล่างเพื่อให้สอดคล้องกับตัวเลือกของคุณ ตัวอย่างเช่น คุณอาจต้องแทนที่ “nictype” ด้วยสิ่งที่คุณใช้สำหรับเครือข่าย LXD ของคุณ
lxc config device add container_name eth0 nic name=eth0 nictype=bridged parent=lxdbr0
สุดท้าย กำหนดขีดจำกัดของเครือข่ายขาเข้า (ดาวน์โหลด) และ/หรือขาออก (อัปโหลด)
lxc config device set container_name eth0 limits.ingress 1Mbit
1Mbit คือหนึ่งเมกะบิต (ไม่ใช่เมกะไบต์) หนึ่งไบต์มี 8 บิต ซึ่งหมายความว่าจะจำกัดการดาวน์โหลดไว้ที่ประมาณ 1/8=0.125 เมกะบิตต่อวินาที หรือประมาณ 120 กิโลไบต์ ดังนั้น หากคุณต้องการให้ดาวน์โหลดด้วย 1MB/s (เมกะไบต์) ให้คูณด้วย 8 และตั้งค่าขีดจำกัดการเข้าเป็น 8Mbit
สำหรับขาออก ให้ใช้:
lxc config device set container_name eth0 limits.egress 1Mbit
บทสรุป
ซึ่งครอบคลุมคุณสมบัติที่ใช้บ่อยที่สุดที่เกี่ยวข้องกับการจำกัดทรัพยากร แต่มีตัวแปรอีกมากมายที่คุณสามารถตั้งค่าได้ด้วย lxc config device set
และ lxc config set
. คุณสามารถอ่านเพิ่มเติมเกี่ยวกับคุณสมบัติของคอนเทนเนอร์ที่ปรับได้เหล่านี้ในหน้า GitHub ของ LXD