Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีจำกัดทรัพยากรที่ LXD Container สามารถใช้ได้

วิธีจำกัดทรัพยากรที่ LXD Container สามารถใช้ได้

ในบทความก่อนหน้า คุณสามารถสำรวจว่า LXD คืออะไรและวิธีเริ่มต้นใช้งาน หากคุณไม่คุ้นเคยกับแพลตฟอร์ม

ในส่วนใหญ่ คุณจะใช้หลาย containers บนระบบเดียวกันเพื่อแยกส่วนที่ใหญ่กว่าออกเป็นส่วนประกอบย่อยๆ ถือเป็นเหตุผลที่สมเหตุสมผลที่จะจำกัดปริมาณทรัพยากรที่แต่ละส่วนประกอบสามารถใช้ได้ แต่ทำไม? จำนวนเหตุผลก็ไม่มีขีดจำกัดเหมือนกับสถานการณ์ที่คุณสามารถใช้ containers ได้

เมื่อขีดจำกัดบน LXD Containers มีประโยชน์

  • ให้บริการและให้แต่ละลูกค้าได้ instance LXD แยกกัน ตัวอย่างเช่น อาจเป็นเซิร์ฟเวอร์ใหญ่ และคุณโฮสต์เว็บไซต์ลูกค้าแต่ละคนใน container แยกกัน หากเว็บไซต์หนึ่งได้รับ traffic แบบฉับพลัน อาจทำให้ instances อื่นช้าลง ด้วย limits เฉพาะ container นั้นจะช้า ส่วนที่เหลือทำงานปกติ
  • ในสถานการณ์คล้ายกัน คุณสามารถขายแผนบริการที่ต่างกันได้ง่าย ลูกค้าคนหนึ่งจ่ายสำหรับทรัพยากร X และอีกคนจ่ายสำหรับ Y และคุณสามารถปรับได้ง่ายด้วยคำสั่งไม่กี่คำสั่ง
  • คุณสามารถป้องกันตัวเองจากรูปแบบพื้นฐานของการโจมตี Denial of Service เมื่อ container หนึ่งถูกโจมตี จะถึงขีดจำกัดการใช้ทรัพยากร Container อื่นๆ จะไม่ได้รับผลกระทบ
  • คุณมีสอง containers ที่แต่ละตัวจะใช้ 100% ของ CPU time ที่มี อย่างไรก็ตาม คุณต้องการให้ตัวหนึ่งเสร็จเร็วกว่าอีกตัว ตัวอย่างเช่น ตัวหนึ่งอาจ render วิดีโอสำหรับโปรเจกต์ที่คุณต้องการพรุ่งนี้ คุณสามารถกำหนด 90% ของ CPU time ให้ตัวแรก และ 10% ให้ตัวที่สอง

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

วิธีตั้งค่าขีดจำกัดทรัพยากรบน LXD Containers

การควบคุมทรัพยากรที่เกี่ยวกับการดำเนินการดิสก์จะต้องมี ZFS ติดตั้ง หากคุณทำตามบทช่วยสอนที่นี่ มันติดตั้งแล้ว มิฉะนั้น ติดตั้ง ZFS utilities ตามที่แนะนำในบทช่วยสอน และรันคำสั่งด้านล่างอีกครั้ง เลือก ZFS เมื่อถูกถามเกี่ยวกับ storage backend

sudo lxd init

จำกัดการใช้หน่วยความจำ (Memory)

ในคำสั่งด้านล่าง แทนที่ "container_name" ด้วยชื่อจริงของ container ของคุณ การตั้งค่าขีดจำกัดหน่วยความจำง่ายเพียงแค่พิมพ์:

lxc config set container_name limits.memory 100MB

พิมพ์ "GB" แทน "MB" หากคุณต้องการใช้ gigabytes แทน megabytes

จำกัดการใช้ CPU

เมื่อคุณต้องการจำกัดจำนวน CPU cores ที่ container สามารถใช้ ให้พิมพ์:

lxc config set container_name limits.cpu 2

เพื่อ "pin" ไปที่ CPU cores เฉพาะ ใช้:

lxc config set container_name limits.cpu 0-0

นี่จะทำให้ container ใช้แค่ CPU แรก เพื่อใช้ CPU ที่สอง คุณพิมพ์ 1-1 เพื่อใช้ CPU cores ทั้งหมดจากตัวแรกถึงตัวที่สาม คุณพิมพ์ 0-3

อีกประเภทของขีดจำกัดคือ CPU time ที่ container สามารถใช้ได้

lxc config set container_name limits.cpu.allowance 10ms/100ms

นี่จะให้ container ใช้เพียง 10 มิลลิวินาทีของ CPU time ทุก 100 มิลลิวินาที ประมาณ 10% ของ CPU core หนึ่ง

จำกัดการใช้ดิสก์ (Disk)

เพื่อจำกัดทรัพยากรที่เกี่ยวกับดิสก์ คุณต้องเพิ่ม root disk device ให้ container ก่อน มันมีอยู่แล้วโดยค่าเริ่มต้น สืบทอดจาก default LXD profile แต่คุณไม่สามารถเปลี่ยนการตั้งค่าบน basis ต่อ container จนกว่าคุณจะทำสิ่งนี้

lxc config device add container_name root disk pool=default path=/

หากคุณตั้งชื่อ pool แตกต่าง ให้แทนที่ "default" ด้วยชื่อ storage pool ของคุณ หากคุณลืมชื่อ คุณสามารถแสดงได้ด้วย:

lxc storage list

เพื่อจำกัดพื้นที่ดิสก์ที่ instance LXD สามารถใช้:

lxc config device set container_name root size 7GB

น่าเสียดายที่ขีดจำกัด I/O (ความเร็ว "read/write" และ IOPS) ไม่ทำงานในขณะนี้

จำกัดการใช้เครือข่าย (Network)

เหมือนกับดิสก์ คุณต้องเพิ่ม virtual ethernet device ที่คุณสามารถตั้งค่าได้ก่อน หาชื่อ network bridge ที่เชื่อมต่อ instances LXD ของคุณกับโลกภายนอก

lxc network list

แทนที่ "lxdbr0" หากจำเป็น (หาก bridge ชื่อต่างออกไปในกรณีของคุณ) หากคุณไม่เลือก network type เป็น bridged (คำตอบค่าเริ่มต้น) ในขั้นตอนการตั้งค่า "lxd init" คุณอาจต้องปรับคำสั่งด้านล่างให้สะท้อนการเลือกของคุณ ตัวอย่างเช่น คุณอาจต้องแทนที่ "nictype" ด้วยด้วยสิ่งที่คุณใช้สำหรับเครือข่าย LXD

lxc config device add container_name eth0 nic name=eth0 nictype=bridged parent=lxdbr0

สุดท้าย ตั้งขีดจำกัด network ingress (ดาวน์โหลด) และ/หรือ egress (อัปโหลด)

lxc config device set container_name eth0 limits.ingress 1Mbit

1Mbit คือหนึ่งเมกะบิต (ไม่ใช่เมกะไบต์) หนึ่งไบต์มี 8 บิต หมายความว่านี่จะจำกัดดาวน์โหลดที่ประมาณ 1/8=0.125Mbits ต่อวินาที ประมาณ 120 กิโลไบต์ ดังนั้น หากคุณต้องการให้ดาวน์โหลด 1MB/s (เมกะไบต์) คูณด้วย 8 และตั้ง ingress limit เป็น 8Mbit

สำหรับ egress ใช้:

lxc config device set container_name eth0 limits.egress 1Mbit

สรุป

นี่ครอบคลุมคุณสมบัติที่ใช้บ่อยที่สุดเกี่ยวกับขีดจำกัดทรัพยากร แต่มีตัวแปรอีกมากมายที่คุณสามารถตั้งค่าด้วย lxc config device set และ lxc config set คุณสามารถอ่านเพิ่มเติมเกี่ยวกับคุณสมบัติ container ที่ปรับได้บนหน้า GitHub ของ LXD