เอกสารภาษารัสเซียสำหรับ Ubuntu การทำงานกับเครื่องเสมือน KVM การแนะนำ

ฉันกำลังเขียนบันทึกนี้เพื่อสาธิต การติดตั้งทีละขั้นตอนและการตั้งค่า เครื่องเสมือนใน Linux ที่ใช้ KVM ก่อนหน้านี้ฉันเคยเขียนเกี่ยวกับการจำลองเสมือนซึ่งฉันใช้ไฟล์ .

ตอนนี้ฉันประสบปัญหาเรื่องการเช่า เซิร์ฟเวอร์ที่ดีกับ ปริมาณมาก RAM และฮาร์ดไดรฟ์ขนาดใหญ่ แต่ฉันไม่ต้องการรันโปรเจ็กต์บนเครื่องโฮสต์โดยตรง ดังนั้นฉันจะแยกโปรเจ็กต์ออกเป็นเซิร์ฟเวอร์เสมือนขนาดเล็กแยกกันที่ใช้ Linux หรือคอนเทนเนอร์ Docker (ฉันจะพูดถึงพวกมันในบทความอื่น)

โฮสติ้งคลาวด์สมัยใหม่ทั้งหมดทำงานบนหลักการเดียวกัน นั่นคือ เปิดโฮสต์แล้ว ต่อมที่ดียกเซิร์ฟเวอร์เสมือนจำนวนหนึ่งซึ่งเราใช้เรียก VPS/VDS และแจกจ่ายให้กับผู้ใช้ หรือทำให้กระบวนการนี้เป็นไปโดยอัตโนมัติ (สวัสดี DigitalOcean)

KVM (เครื่องเสมือนที่ใช้เคอร์เนล) คือ ซอฟต์แวร์สำหรับ Linux โดยใช้ฮาร์ดแวร์โปรเซสเซอร์ที่รองรับ x86 เพื่อทำงานร่วมกับเทคโนโลยีการจำลองเสมือน Intel VT/AMD SVM

การติดตั้ง KVM

ฉันจะดำเนินการสร้างเครื่องเสมือนบน Ubuntu 16.04.1 LTS OS ทั้งหมด หากต้องการตรวจสอบว่ากระบวนการของคุณรองรับฮาร์ดแวร์เสมือนจริงที่ใช้ Intel VT/AMD SVM หรือไม่ ให้รัน:

Grep -E "(vmx|svm)" /proc/cpuinfo

หากเทอร์มินัลไม่ว่างเปล่า แสดงว่าทุกอย่างเป็นไปตามลำดับและสามารถติดตั้ง KVM ได้ Ubuntu รองรับเฉพาะไฮเปอร์ไวเซอร์ KVM อย่างเป็นทางการ (ส่วนหนึ่งของเคอร์เนล Linux) และแนะนำให้ใช้ไลบรารี libvirt เป็นเครื่องมือในการจัดการ ซึ่งเป็นสิ่งที่เราจะทำต่อไป

คุณสามารถตรวจสอบการสนับสนุนการจำลองเสมือนของฮาร์ดแวร์ใน Ubuntu ได้โดยใช้คำสั่ง:

หากสำเร็จคุณจะเห็นสิ่งนี้:

ข้อมูล: /dev/kvm มีอยู่ สามารถใช้การเร่งความเร็ว KVM ได้

ติดตั้งแพ็คเกจสำหรับการทำงานกับ KVM:

Sudo apt-get ติดตั้ง qemu-kvm libvirt-bin ubuntu-vm-builder สะพาน-utils

หากคุณมีสิทธิ์เข้าถึงเชลล์กราฟิกของระบบ คุณสามารถติดตั้งได้ ผู้จัดการ GUI libvirt:

Sudo apt-get ติดตั้ง virt-manager

การใช้ virt-manager นั้นค่อนข้างง่าย (ไม่ยากไปกว่า VirtualBox) ดังนั้นในบทความนี้เราจะพูดถึงเวอร์ชันคอนโซลของการติดตั้งและการกำหนดค่า เซิร์ฟเวอร์เสมือน.

การติดตั้งและกำหนดค่าเซิร์ฟเวอร์เสมือน

ในการติดตั้ง การกำหนดค่า และการจัดการระบบเวอร์ชันคอนโซล เครื่องมือที่ขาดไม่ได้คือยูทิลิตี้ virsh (ส่วนเสริมสำหรับไลบรารี libvirt) มีตัวเลือกและพารามิเตอร์จำนวนมาก สามารถรับคำอธิบายโดยละเอียดได้ดังนี้:

แมน เวอร์ช

หรือเรียกมาตรฐาน "ช่วยเหลือ":

เวียร์ช่วยด้วย

ฉันมักจะติดที่จะ กฎต่อไปนี้เมื่อทำงานกับเซิร์ฟเวอร์เสมือน:

  1. ฉันเก็บ ภาพไอโซ OS ในไดเร็กทอรี /var/lib/libvirt/boot
  2. ฉันจัดเก็บอิมเมจเครื่องเสมือนไว้ในไดเร็กทอรี /var/lib/libvirt/images
  3. ฉันกำหนดที่อยู่ IP แบบคงที่ให้กับเครื่องเสมือนใหม่แต่ละเครื่องอย่างชัดเจนผ่านทาง เซิร์ฟเวอร์ DHCPไฮเปอร์ไวเซอร์

มาเริ่มการติดตั้งเครื่องเสมือนเครื่องแรกกัน (เซิร์ฟเวอร์ 64 บิต Ubuntu 16.04 LTS):

ซีดี /var/lib/libvirt/boot sudo wget http://releases.ubuntu.com/16.04/ubuntu-16.04.1-desktop-amd64.iso

หลังจากดาวน์โหลดอิมเมจแล้ว ให้เริ่มการติดตั้ง:

Sudo virt-install \ --virt-type=kvm \ --name ubuntu1604\ --ram 1024 \ --vcpus=1 \ --os-variant=ubuntu16.04 \ --hvm \ --cdrom=/var/ lib/libvirt/boot/ubuntu-16.04.1-server-amd64.iso \ --network network=default,model=virtio \ --graphics vnc \ --disk path=/var/lib/libvirt/images/ubuntu1604 img,size=20,bus=virtio

แปลพารามิเตอร์ทั้งหมดเหล่านี้เป็น " ภาษามนุษย์" ปรากฎว่าเรากำลังสร้างเครื่องเสมือนด้วย Ubuntu 16.04 OS, RAM 1024 MB, โปรเซสเซอร์ 1 ตัว, การ์ดเครือข่ายมาตรฐาน (เครื่องเสมือนจะเข้าถึงอินเทอร์เน็ตราวกับว่าเป็นเพราะ NAT), HDD 20 GB

ควรให้ความสนใจกับพารามิเตอร์ --os-ตัวแปรโดยจะแจ้งไฮเปอร์ไวเซอร์ว่าควรปรับการตั้งค่าระบบปฏิบัติการใด
สามารถรับรายการตัวเลือกระบบปฏิบัติการที่มีอยู่ได้โดยการรันคำสั่ง:

Osinfo-แบบสอบถามระบบปฏิบัติการ

หากยูทิลิตี้ดังกล่าวไม่ได้อยู่ในระบบของคุณ ให้ติดตั้ง:

Sudo apt-get ติดตั้ง libosinfo-bin

หลังจากเริ่มการติดตั้ง ข้อความต่อไปนี้จะปรากฏขึ้นในคอนโซล:

การติดตั้งโดเมนยังคงอยู่ในระหว่างดำเนินการ คุณสามารถเชื่อมต่อกับคอนโซลอีกครั้งเพื่อให้กระบวนการติดตั้งเสร็จสมบูรณ์

นี่เป็นสถานการณ์ปกติ เราจะดำเนินการติดตั้งผ่าน VNC ต่อไป
มาดูกันว่าพอร์ตใดถูกยกขึ้นบนเครื่องเสมือนของเรา (เช่นในเทอร์มินัลถัดไป):

Virsh dumpxml ubuntu1604... ...

พอร์ต 5900 ตามที่อยู่ในท้องถิ่น 127.0.0.1 หากต้องการเชื่อมต่อกับ VNC คุณต้องใช้การส่งต่อพอร์ตผ่าน ssh ก่อนดำเนินการนี้ ตรวจสอบให้แน่ใจว่าได้เปิดใช้งานการส่งต่อ TCP ใน ssh daemon แล้ว โดยไปที่การตั้งค่า sshd:

แมว /etc/ssh/sshd_config | grep อนุญาต TcpForwarding

หากไม่พบสิ่งใดหรือคุณเห็น:

อนุญาตหมายเลขการส่งต่อ Tcp

จากนั้นเราแก้ไขการกำหนดค่าเป็น

อนุญาต TcpForwarding ใช่

และรีบูต sshd

การตั้งค่าการส่งต่อพอร์ต

เราดำเนินการคำสั่งบนเครื่องท้องถิ่น:

Ssh -fN -l เข้าสู่ระบบ -L 127.0.0.1:5900:localhost:5900 server_ip

ที่นี่เราได้กำหนดค่า ssh แล้ว การส่งต่อพอร์ตจากพอร์ตโลคัล 5900 ไปยังพอร์ตเซิร์ฟเวอร์ 5900 ตอนนี้คุณสามารถเชื่อมต่อกับ VNC โดยใช้ไคลเอนต์ VNC ใดก็ได้ ฉันชอบ UltraVNC เพราะมันเรียบง่ายและสะดวกสบาย

หลังจากเชื่อมต่อสำเร็จ หน้าจอจะแสดงขึ้นมา หน้าต่างมาตรฐานคำทักทายสำหรับการเริ่มการติดตั้ง Ubuntu:

หลังจากการติดตั้งเสร็จสมบูรณ์และรีบูตตามปกติ หน้าต่างเข้าสู่ระบบจะปรากฏขึ้น หลังจากเข้าสู่ระบบ เราจะกำหนดที่อยู่ IP ของเครื่องเสมือนที่สร้างขึ้นใหม่เพื่อที่จะทำให้มันคงที่ในภายหลัง:

ถ้ากำหนดค่า

เราจำได้และไปที่เครื่องโฮสต์ เราดึงที่อยู่ mac ของการ์ด "เครือข่าย" ของเครื่องเสมือนออก:

Virsh dumpxml ubuntu1604 | grep "ที่อยู่ mac"

จำที่อยู่ mac ของเรา:

การแก้ไข การตั้งค่าเครือข่ายไฮเปอร์ไวเซอร์:

Sudo virsh net-edit ค่าเริ่มต้น

เรามองหา DHCP และเพิ่มสิ่งนี้:

มันควรมีลักษณะดังนี้:

เพื่อให้การตั้งค่ามีผล คุณต้องรีสตาร์ทเซิร์ฟเวอร์ DHCP ของไฮเปอร์ไวเซอร์:

Sudo virsh net-destroy เริ่มต้น sudo virsh net-start เริ่มต้น sudo service libvirt-bin รีสตาร์ท

หลังจากนี้เราจะรีบูทเครื่องเสมือนตอนนี้จะมีที่อยู่ IP ที่กำหนดไว้เสมอ - 192.168.122.131

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

หากต้องการเชื่อมต่อกับเทอร์มินัลเครื่องเสมือน ให้รัน:

เอสเอสเอช 192.168.122.131

รถพร้อมสำหรับการรบ

Virsh: รายการคำสั่ง

หากต้องการดูโฮสต์เสมือนที่ทำงานอยู่ (สามารถรับได้ทั้งหมดโดยการเพิ่ม --all):

รายการ Sudo virsh

คุณสามารถรีบูตโฮสต์ได้:

Sudo virsh รีบูต $VM_NAME

หยุดเครื่องเสมือน:

Sudo virsh หยุด $VM_NAME

ดำเนินการหยุด:

Sudo virsh ทำลาย $VM_NAME

Sudo virsh เริ่มต้น $VM_NAME

ปิดการใช้งาน:

Sudo virsh ปิดระบบ $VM_NAME

เพิ่มในการทำงานอัตโนมัติ:

Sudo virsh เริ่มอัตโนมัติ $VM_NAME

บ่อยครั้งที่จำเป็นต้องโคลนระบบเพื่อใช้เป็นเฟรมเวิร์กสำหรับระบบปฏิบัติการเสมือนอื่น ๆ ในอนาคต สำหรับสิ่งนี้จึงใช้ยูทิลิตี้ virt-clone

Virt-clone -- ช่วยด้วย

โดยจะโคลนเครื่องเสมือนที่มีอยู่และเปลี่ยนแปลงข้อมูลที่ละเอียดอ่อนของโฮสต์ เช่น ที่อยู่ Mac รหัสผ่าน ไฟล์ และข้อมูลเฉพาะของผู้ใช้อื่นๆ ในโคลนยังคงเหมือนเดิม หากที่อยู่ IP บนเครื่องเสมือนที่โคลนถูกลงทะเบียนด้วยตนเอง ปัญหาเกี่ยวกับการเข้าถึง SSH สำหรับโคลนอาจเกิดขึ้นเนื่องจากข้อขัดแย้ง (2 โฮสต์ที่มี IP เดียวกัน)

นอกเหนือจากการติดตั้งเครื่องเสมือนผ่าน VNC แล้ว ยังสามารถใช้ X11Forwarding ผ่านยูทิลิตี้ virt-manager ได้อีกด้วย ตัวอย่างเช่น บน Windows คุณสามารถใช้ Xming และ PuTTY ได้

เมื่อเลือกอัตราภาษี ผู้ใช้จะเลือกวิธีการจำลองเสมือนสำหรับเซิร์ฟเวอร์ด้วย เรานำเสนอทางเลือกของการจำลองเสมือนที่ระดับระบบปฏิบัติการ OpenVZ และการจำลองเสมือนสำหรับฮาร์ดแวร์ KVM

เป็นไปไม่ได้ที่จะเปลี่ยนประเภทของการจำลองเสมือนหลังจากเปิดตัว เนื่องจากเซิร์ฟเวอร์อยู่บนแพลตฟอร์มฮาร์ดแวร์ที่แตกต่างกัน คุณจะต้องสั่งซื้อเซิร์ฟเวอร์ใหม่ โอนโครงการ และละทิ้งเซิร์ฟเวอร์เก่า

การเปรียบเทียบประเภทการจำลองเสมือน

OpenVZ เควีเอ็ม
ระบบปฏิบัติการจากข้อเสนอจำนวนหนึ่ง: Debian, CentOS, UbuntuLinux, Windows, FreeBSD, การติดตั้ง การกระจายสินค้าของตัวเอง
การเปลี่ยนทรัพยากรโดยไม่ต้องรีบูตเครื่อง ( ฮาร์ดไดรฟ์, หน่วยความจำ, โปรเซสเซอร์)หน่วยความจำและโปรเซสเซอร์จะเปลี่ยนหลังจากการรีบูตฮาร์ดไดรฟ์ - หลังจากติดต่อฝ่ายสนับสนุนเท่านั้น (ไม่สามารถเปลี่ยนหน่วยความจำในแผนสำเร็จรูป)
เปลี่ยน แผนภาษีโดยไม่ต้องรีบูต

การเปลี่ยนแผนภาษี เซิร์ฟเวอร์จะไม่สามารถใช้งานได้เป็นเวลา 1-2 ชั่วโมง

ขีดจำกัดซอฟท์: ประสิทธิภาพสูงสุดเซิร์ฟเวอร์อาจเบี่ยงเบนขึ้นหรือลงขีดจำกัดฮาร์ด: แต่ละเซิร์ฟเวอร์ได้รับทรัพยากรที่ประกาศ
ข้อจำกัดในการเปิดตัวโครงการที่มีภาระงานสูง ห้ามมิให้เรียกใช้แอปพลิเคชัน Java การส่งจดหมายจำนวนมาก หรือการรับส่งข้อมูลพร็อกซี TUN/TAP ถูกปิดใช้งานความสามารถในการดำเนินโครงการใด ๆ (ยกเว้นระบบคอมพิวเตอร์แบบกระจาย)

การจำลองเสมือนของ OpenVZ

OpenVZ - การจำลองเสมือนระดับระบบปฏิบัติการ เทคโนโลยีนี้ใช้เคอร์เนล Linux OS และช่วยให้คุณสร้างและรันได้ สำเนาที่แยกออกจากกันระบบปฏิบัติการที่เลือก (Debian, CentOS, Ubuntu) ไม่สามารถติดตั้งระบบปฏิบัติการอื่นได้ เนื่องจากใช้เซิร์ฟเวอร์เสมือน แกนกลางทั่วไปลินุกซ์.

เทคโนโลยีนี้โดดเด่นด้วยความสะดวกในการจัดการเซิร์ฟเวอร์: ผู้ใช้สามารถ เพิ่มจำนวนทรัพยากรด้วยตัวคุณเอง(หน่วยความจำ, โปรเซสเซอร์, ฮาร์ดไดรฟ์) หรือเปลี่ยนไปใช้อัตราค่าไฟฟ้าอื่นด้วยการจำลองเสมือนเดียวกัน การเปลี่ยนแปลงทรัพยากรจะถูกนำไปใช้โดยอัตโนมัติ โดยไม่ต้องรีบูตเซิร์ฟเวอร์

บนเซิร์ฟเวอร์ที่มีการจำลองเสมือน OpenVZ ต้องห้ามวิ่ง:

  • บริการสำหรับการจัดระเบียบการรับส่งข้อมูลทุกประเภท
  • บริการสตรีมมิ่ง
  • เซิร์ฟเวอร์เกม
  • ระบบหรือองค์ประกอบของระบบคอมพิวเตอร์แบบกระจาย (เช่น การขุด bitcoin)
  • บริการส่งไปรษณีย์จำนวนมาก แม้ว่าจะใช้เพื่อวัตถุประสงค์ทางกฎหมายก็ตาม
  • แอปพลิเคชันจาวา
  • แอปพลิเคชันอื่น ๆ ที่ใช้ทรัพยากรมาก

โปรเจ็กต์ดังกล่าวสร้างโหลดที่ไม่สม่ำเสมอบนเซิร์ฟเวอร์หลัก และอาจรบกวนเครื่องเสมือนที่อยู่ใกล้เคียงได้

การจำลองเสมือน KVM

KVM (เครื่องเสมือนที่ใช้เคอร์เนล) เป็นเทคโนโลยีการจำลองเสมือนสำหรับฮาร์ดแวร์ที่ให้คุณสร้างสรรค์ได้ อะนาล็อกเสมือนเต็มรูปแบบ ฟิสิคัลเซิร์ฟเวอร์ - KVM ช่วยให้คุณสร้างเซิร์ฟเวอร์เสมือนที่แยกออกจาก "เพื่อนบ้าน" ได้อย่างสมบูรณ์ แกนของตัวเอง OS ที่ผู้ใช้สามารถปรับแต่งและแก้ไขให้เหมาะกับความต้องการของตนเองได้โดยไม่มีข้อจำกัด แต่ละเซิร์ฟเวอร์ดังกล่าวจะได้รับการจัดสรรพื้นที่ของตนเองใน RAM และพื้นที่ฮาร์ดดิสก์ ซึ่งจะเพิ่มความน่าเชื่อถือโดยรวมของเซิร์ฟเวอร์ดังกล่าว

สามารถติดตั้งได้ ระบบปฏิบัติการใดๆให้เลือก (Debian, CentOS, Ubuntu, FreeBSD, วินโดวส์เซิร์ฟเวอร์) หรือติดตั้งการแจกจ่ายของคุณเอง (ในแผง VMmanager ในส่วนอิมเมจ ISO ให้คลิกปุ่มสร้างและเพิ่มอิมเมจ ISO ของระบบ)

การเปลี่ยนแปลงอัตราภาษีแผนสามารถทำได้เฉพาะใน ด้านใหญ่และเฉพาะภายในกรอบของบรรทัดภาษีพื้นฐานเท่านั้น (Start, Acceleration, Breakaway, Fly away) หากโครงการของคุณ "เติบโต" เกินอัตรา ให้เขียนคำร้องขอการสนับสนุนจาก บัญชีส่วนตัว- ผู้ดูแลระบบจะเปลี่ยนอัตราภาษีเป็นอัตราที่กำหนดโดยไม่เสียค่าใช้จ่าย เปลี่ยนอัตราค่าไฟฟ้า ลงคุณสามารถถ่ายโอนไปยังเซิร์ฟเวอร์ใหม่ได้เท่านั้น สั่งซื้อเซิร์ฟเวอร์ใหม่และถ่ายโอนข้อมูลด้วยตนเองหรือผู้เชี่ยวชาญ การสนับสนุนด้านเทคนิคพวกเขาจะช่วยเหลือในการโอน 1 คำขอสำหรับแพ็คเกจการดูแลระบบหรือ 250 รูเบิล

โปรดจำไว้ว่าภาษี VDS-Forsazh และ VDS-Atlant คุณสามารถทำได้ เปลี่ยนทรัพยากรแทนที่จะเปลี่ยนอัตราค่าไฟฟ้า: จำนวนคอร์โปรเซสเซอร์และ RAM ที่ใช้งานได้อย่างเป็นอิสระในแผงควบคุม และขนาด ฮาร์ดไดรฟ์- หลังจากติดต่อฝ่ายสนับสนุน (เป็นส่วนหนึ่งของการบริหารหรือ 250 รูเบิล)

เมื่อพิจารณาถึงคุณสมบัติและข้อดีที่ KVM virtualization มอบให้ ภาษีมีราคาแพงกว่าอัตราภาษีที่คล้ายกันกับการจำลองเสมือนของ OpenVZ

บนเซิร์ฟเวอร์ที่มีการจำลองเสมือน KVM สมาชิกไม่ได้รับอนุญาตให้วางระบบหรือองค์ประกอบของระบบคอมพิวเตอร์แบบกระจาย (เช่น การขุด bitcoin)

การเปลี่ยนการจำลองเสมือนบนเซิร์ฟเวอร์

เป็นไปไม่ได้ที่จะเปลี่ยนการจำลองเสมือนจาก OpenVZ เป็น KVM และในทางกลับกันภายในเซิร์ฟเวอร์เดียวกัน

1. สั่งซื้อเซิร์ฟเวอร์ตัวที่สองด้วย การจำลองเสมือนที่จำเป็นในแผง BILLmanager ส่วน เซิร์ฟเวอร์เสมือน → คำสั่งซื้อ

2. ถ่ายโอนข้อมูลไปที่มัน

3. หลังจากโอนและตรวจสอบแล้ว เซิร์ฟเวอร์เก่าสามารถลบได้ (เซิร์ฟเวอร์เสมือน → ลบ)


โดยส่วนตัวแล้ว มันง่ายที่สุดสำหรับฉันที่จะนึกถึง KVM (เครื่องเสมือนที่ใช้เคอร์เนล) ว่าเป็นระดับนามธรรมเหนือเทคโนโลยีการจำลองเสมือนสำหรับฮาร์ดแวร์ Intel VT-x และ AMD-V เราใช้เครื่องที่มีโปรเซสเซอร์ที่รองรับหนึ่งในเทคโนโลยีเหล่านี้และเดิมพันสิ่งนี้ เครื่องลินุกซ์ใน Linux เราติดตั้ง KVM ด้วยเหตุนี้เราจึงได้รับโอกาสในการสร้างเครื่องเสมือน นี่คือวิธีการทำงานของคลาวด์โฮสติ้งโดยประมาณ เช่น Amazon Web Services นอกเหนือจาก KVM แล้ว บางครั้งยังใช้ Xen ด้วย แต่การสนทนาเกี่ยวกับเทคโนโลยีนี้อยู่นอกเหนือขอบเขตของโพสต์นี้ ต่างจากเทคโนโลยีการจำลองเสมือนของคอนเทนเนอร์ เช่น Docker KVM อนุญาตให้คุณเรียกใช้ระบบปฏิบัติการใด ๆ ในฐานะระบบเกสต์ แต่ก็มี โอค่าใช้จ่ายที่สูงขึ้นสำหรับการจำลองเสมือน

บันทึก:ขั้นตอนที่อธิบายด้านล่างนี้ได้รับการทดสอบโดยฉันบน Ubuntu Linux 14.04 แต่ในทางทฤษฎีแล้วพวกเขาจะเหมือนกับขั้นตอนอื่น ๆ เป็นอย่างมาก เวอร์ชันของอูบุนตูและอื่น ๆ การแจกแจงลินุกซ์- ทุกอย่างควรทำงานได้ทั้งบนเดสก์ท็อปและบนเซิร์ฟเวอร์ที่เข้าถึงได้ผ่าน SSH

การติดตั้ง KVM

เราตรวจสอบว่าโปรเซสเซอร์ของเรารองรับ Intel VT-x หรือ AMD-V หรือไม่:

grep -E "(vmx|svm)" /proc/cpuinfo

หากมีสิ่งใดร้อนขึ้น แสดงว่าได้รับการรองรับ และคุณก็สามารถเดินหน้าต่อไปได้

การติดตั้ง KVM:

อัปเดต sudo apt-get
sudo apt-get ติดตั้ง qemu-kvm libvirt-bin virtinst bridge-utils

โดยปกติจะจัดเก็บอะไรไว้ที่:

  • /var/lib/libvirt/boot/ - อิมเมจ ISO สำหรับการติดตั้งระบบเกสต์
  • /var/lib/libvirt/images/ - รูปภาพ ฮาร์ดไดรฟ์ระบบแขก
  • /var/log/libvirt/ - คุณควรมองหาบันทึกทั้งหมดที่นี่
  • /etc/libvirt/ - ไดเร็กทอรีพร้อมไฟล์คอนฟิกูเรชัน;

เมื่อติดตั้ง KVM แล้ว มาสร้างเครื่องเสมือนเครื่องแรกของเรากันดีกว่า

การสร้างเครื่องเสมือนเครื่องแรก

ฉันเลือก FreeBSD เป็นระบบแขก ดาวน์โหลดอิมเมจ ISO ของระบบ:

ซีดี /var/lib/libvirt/boot/
sudo wget http:// ftp.freebsd.org/ เส้นทาง/ ถึง/ some-freebsd-disk.iso

ควบคุม เครื่องเสมือนในกรณีส่วนใหญ่ ทำได้โดยใช้ยูทิลิตี้ virsh:

sudo virsh --help

ก่อนที่จะเปิดตัวเครื่องเสมือน เราจะต้องรวบรวมข้อมูลเพิ่มเติมบางอย่าง

เราดูรายการเครือข่ายที่มีอยู่:

sudo virsh net-list

ดูข้อมูลเกี่ยวกับ เครือข่ายเฉพาะ(ตั้งชื่อเป็นค่าเริ่มต้น):

sudo virsh net-info เป็นค่าเริ่มต้น

ลองดูรายการการปรับให้เหมาะสมสำหรับระบบปฏิบัติการของแขก:

sudo virt-install --os-variant รายการ

ตอนนี้เราสร้างเครื่องเสมือนที่มี 1 CPU, RAM 1 GB และพื้นที่ดิสก์ 32 GB ซึ่งเชื่อมต่อกับเครือข่ายเริ่มต้น:

sudo virt-ติดตั้ง\
--virt-type = kvm \
--ชื่อ freebsd10\
--แรม 1024\
--vcpus=1\
--os-variant =freebsd8 \
--hvm\
--cdrom =/ var/ lib/ libvirt/ boot/ FreeBSD-10.2 -RELEASE-amd64-disc1.iso \
--เครือข่ายเครือข่าย =ค่าเริ่มต้น รุ่น =virtio \
--กราฟิก vnc\
--disk path =/ var/ lib/ libvirt/images/ freebsd10.img,size =32 ,bus =virtio

คุณสามารถดู:

คำเตือน ไม่สามารถเชื่อมต่อกับคอนโซลกราฟิกได้: virt-viewer ไม่ใช่
ติดตั้งแล้ว กรุณาติดตั้งแพ็คเกจ "virt-viewer"

การติดตั้งโดเมนยังคงอยู่ในระหว่างดำเนินการ คุณสามารถเชื่อมต่อกับคอนโซลอีกครั้งได้
เพื่อเสร็จสิ้นกระบวนการติดตั้ง

นี่เป็นเรื่องปกติ นี่คือวิธีที่มันควรจะเป็น

จากนั้นดูคุณสมบัติของเครื่องเสมือนในรูปแบบ XML:

sudo virsh dumpxml ฟรีbsd10

นี่คือมากที่สุด ข้อมูลครบถ้วน- ซึ่งรวมถึงที่อยู่ MAC ซึ่งเราจะต้องใช้ในภายหลัง ขณะนี้เรากำลังค้นหาข้อมูลเกี่ยวกับ VNC ในกรณีของฉัน:

ด้วยไคลเอนต์ที่คุณชื่นชอบ (ฉันใช้ Ramina เป็นการส่วนตัว) เราเข้าสู่ระบบผ่าน VNC โดยใช้การส่งต่อพอร์ต SSH หากจำเป็น เราเข้าสู่โปรแกรมติดตั้ง FreeBSD ทันที จากนั้นทุกอย่างก็เป็นไปตามปกติ - ถัดไป, ถัดไป, ถัดไป เราจะได้ระบบที่ติดตั้ง

คำสั่งพื้นฐาน

ตอนนี้เรามาดูคำสั่งพื้นฐานสำหรับการทำงานกับ KVM

รับรายการเครื่องเสมือนทั้งหมด:

รายการ sudo virsh --all

การรับข้อมูลเกี่ยวกับเครื่องเสมือนเฉพาะ:

sudo virsh dominfo ฟรี bsd10

เปิดตัวเครื่องเสมือน:

sudo virsh เริ่ม freebsd10

หยุดเครื่องเสมือน:

sudo virsh ปิดเครื่อง freebsd10

แทบจะตอกย้ำเครื่องเสมือน (แม้จะชื่อนี้ก็ตาม ไม่การลบ):

sudo virsh ทำลาย freebsd10

รีบูทเครื่องเสมือน:

sudo virsh รีบูต freebsd10

โคลนเครื่องเสมือน:

sudo virt-clone -o freebsd10 -n freebsd10-clone \
--file /var/lib/libvirt/images/freebsd10-clone.img

เปิด/ปิดการทำงานอัตโนมัติ:

sudo virsh เริ่มอัตโนมัติ freebsd10
sudo virsh เริ่มอัตโนมัติ -- ปิดการใช้งาน freebsd10

การรัน virsh ในโหมดไดอะล็อก (คำสั่งทั้งหมดในโหมดไดอะล็อก - ตามที่อธิบายไว้ข้างต้น):

ซูโด เวอร์ช

การแก้ไขคุณสมบัติของเครื่องเสมือนในรูปแบบ XML รวมถึงที่นี่คุณสามารถเปลี่ยนขีด จำกัด ของจำนวนหน่วยความจำ ฯลฯ :

sudo virsh แก้ไข freebsd10

สำคัญ!ความคิดเห็นจาก XML ที่แก้ไขถูกลบออกอย่างน่าเสียดาย

เมื่อเครื่องเสมือนหยุดทำงาน ดิสก์ยังสามารถปรับขนาดได้:

sudo qemu-img ปรับขนาด /var/ lib/ libvirt/ image/ freebsd10.img -2G
ข้อมูล sudo qemu-img /var/lib/libvirt/images/freebsd10.img

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

การสำรองและกู้คืนข้อมูลนั้นค่อนข้างง่าย ก็เพียงพอแล้วที่จะบันทึกเอาต์พุต dumpxml ไว้ที่ไหนสักแห่งรวมถึงดิสก์อิมเมจแล้วกู้คืน บน YouTube จัดการเพื่อค้นหาวิดีโอด้วยการสาธิตกระบวนการนี้ทุกอย่างก็ไม่ใช่เรื่องยากจริงๆ

การตั้งค่าเครือข่าย

คำถามที่น่าสนใจ - จะทราบที่อยู่ IP ใดที่เครื่องเสมือนได้รับหลังจากโหลดได้อย่างไร KVM ทำสิ่งนี้ด้วยวิธีที่ชาญฉลาด ฉันลงเอยด้วยการเขียนสคริปต์นี้ใน Python:

#!/usr/bin/env python3

# สคริปต์ virt-ip.py
# (c) 2016 อเล็กซานเดอร์ อเล็กเซเยฟ
# http://site/

ระบบนำเข้า
นำเข้าอีกครั้ง
นำเข้าระบบปฏิบัติการ
กระบวนการย่อยการนำเข้า
จาก xml .etree นำเข้า ElementTree

def eprint(str) :
พิมพ์ (str, ไฟล์ = sys.stderr)

ถ้าเลน (sys.argv)< 2 :
eprint ("การใช้งาน: " + sys .argv [ 0 ] + " " )
eprint("ตัวอย่าง: " + sys .argv [ 0 ] + " freebsd10" )
sys.ออก(1)

ถ้า os .geteuid() != 0 :
eprint("ข้อผิดพลาด: คุณควรเป็น root")
eprint("คำแนะนำ: run `sudo " + sys .argv [ 0 ] + " ...`" ) ;
sys.ออก(1)

ถ้าประมวลผลย่อย .call ( "ซึ่ง arping 2>&1 >/dev/null", เชลล์ = จริง ) != 0 :
eprint("ข้อผิดพลาด: arping ไม่พบ" )
พิมพ์( "คำแนะนำ: เรียกใช้ `sudo apt-get install arping`")
sys.ออก(1)

โดเมน = sys.argv[1]

หากไม่ใช่ .match อีกครั้ง ("^*$" , โดเมน) :
พิมพ์( "ข้อผิดพลาด: อักขระที่ไม่ถูกต้องในชื่อโดเมน")
sys.ออก(1)

Domout = กระบวนการย่อย .check_output ("virsh dumpxml " +domain+" || true" ,
เปลือก = จริง)
domout = domout.decode("utf-8").strip()

ถ้า domout == "" :
# ข้อความแสดงข้อผิดพลาดพิมพ์โดย dumpxml แล้ว
sys.ออก(1)

Doc = ElementTree.fromstring (domout)

# 1. แสดงรายการอินเทอร์เฟซเครือข่ายทั้งหมด
# 2. เรียกใช้ `arping` ในทุกอินเทอร์เฟซแบบขนาน
#3.grep ตอบกลับ
คำสั่ง = "(ifconfig | cut -d " " -f 1 | grep -E "." | " + \
"xargs -P0 -I IFACE arping -i IFACE -c 1 () 2>&1 | " + \
"grep "ไบต์จาก") || จริง"

สำหรับเด็กใน doc.iter() :
ถ้า child.tag == "mac" :
macaddr = child.attrib["ที่อยู่"]
macout = กระบวนการย่อย .check_output (cmd .format (macaddr) ,
เปลือก = จริง)
พิมพ์ (macout.decode ("utf-8"))

สคริปต์ทำงานได้กับทั้งเครือข่ายเริ่มต้นและเครือข่ายบริดจ์ การกำหนดค่าที่เราจะพิจารณาในภายหลัง อย่างไรก็ตาม ในทางปฏิบัติ จะสะดวกกว่ามากในการกำหนดค่า KVM เพื่อที่จะกำหนดที่อยู่ IP เดียวกันให้กับระบบเกสต์เสมอ เมื่อต้องการทำเช่นนี้ ให้แก้ไขการตั้งค่าเครือข่าย:

sudo virsh net-edit ค่าเริ่มต้น

... บางอย่างเช่นนี้:

>



>

หลังจากทำการเปลี่ยนแปลงเหล่านี้แล้ว


>

... และแทนที่ด้วยสิ่งที่ชอบ:




>

เรารีบูทระบบเกสต์และตรวจสอบว่าได้รับ IP ผ่าน DHCP จากเราเตอร์ หากคุณต้องการ ระบบแขกมี ที่อยู่ IP แบบคงที่ซึ่งได้รับการกำหนดค่าตามปกติภายในระบบเกสต์เอง

โปรแกรม virt-manager

คุณอาจสนใจโปรแกรม virt-manager:

sudo apt-get ติดตั้ง virt-manager
sudo usermod -a -G libvirtd ชื่อผู้ใช้

นี่คือลักษณะของหน้าต่างหลัก:

อย่างที่คุณเห็น virt-manager ไม่ได้เป็นเพียง GUI สำหรับเครื่องเสมือนที่ทำงานในเครื่องเท่านั้น ด้วยความช่วยเหลือนี้ คุณสามารถจัดการเครื่องเสมือนที่ทำงานบนโฮสต์อื่นได้ เช่นเดียวกับการดูกราฟิกที่สวยงามแบบเรียลไทม์ โดยส่วนตัวแล้วฉันพบว่ามันสะดวกเป็นพิเศษใน virt-manager ที่คุณไม่จำเป็นต้องค้นหาผ่านการกำหนดค่าเพื่อดูว่าพอร์ต VNC ใดที่ทำงานบนระบบเกสต์เฉพาะ คุณเพียงแค่พบเครื่องเสมือนในรายการ ดับเบิลคลิก และเข้าถึงจอภาพได้

ด้วยความช่วยเหลือจาก virt-manager ทำให้สะดวกมากในการทำสิ่งต่าง ๆ ที่ต้องใช้การแก้ไขไฟล์ XML ที่ใช้แรงงานเข้มข้น และในบางกรณี การดำเนินการ คำสั่งเพิ่มเติม- ตัวอย่างเช่น การเปลี่ยนชื่อเครื่องเสมือน การตั้งค่าความสัมพันธ์ของ CPU และสิ่งที่คล้ายกัน อนึ่ง, การใช้งานซีพียู affinity ช่วยลดผลกระทบของเพื่อนบ้านที่มีเสียงดังและผลกระทบของเครื่องเสมือนบนระบบโฮสต์ได้อย่างมาก ใช้มันทุกครั้งที่เป็นไปได้

หากคุณตัดสินใจใช้ KVM แทน VirtualBox โปรดทราบว่าพวกเขาจะไม่สามารถแชร์การจำลองเสมือนสำหรับฮาร์ดแวร์ระหว่างกันได้ เพื่อให้ KVM ทำงานบนเดสก์ท็อปของคุณ คุณไม่เพียงต้องหยุดเครื่องเสมือนทั้งหมดใน VirtualBox และ Vagrant เท่านั้น แต่ยังต้องรีบูทระบบด้วย โดยส่วนตัวแล้วฉันพบว่า KVM สะดวกกว่า VirtualBox มาก อย่างน้อยก็เพราะมันไม่ต้องการให้คุณเรียกใช้คำสั่ง การตั้งค่า sudo /sbin/rcvboxdrvหลังจากการอัปเดตเคอร์เนลแต่ละครั้ง มันจะทำงานร่วมกับ Unity ได้อย่างเพียงพอ และโดยทั่วไปจะอนุญาตให้คุณซ่อนหน้าต่างทั้งหมดได้

ไฮเปอร์ไวเซอร์ การจำลองเสมือน และคลาวด์

การวิเคราะห์ไฮเปอร์ไวเซอร์ KVM

ซีรี่ส์เนื้อหา:

เกี่ยวกับบทความชุดนี้

ซีรีส์นี้เริ่มต้นด้วยภาพรวมของประเภทของไฮเปอร์ไวเซอร์และการจำลองเสมือนของระบบ จากนั้นตรวจสอบคุณสมบัติของไฮเปอร์ไวเซอร์ทั้งห้า กระบวนการติดตั้ง และปัญหาการจัดการที่อาจเกิดขึ้น

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

สิ่งที่คุณต้องรู้เพื่อเริ่มต้น

Kernel-based Virtual Machine (KVM) คือ โซลูชั่นที่สมบูรณ์การจำลองเสมือนที่ขึ้นกับแพลตฟอร์มสำหรับ Linux บนโปรเซสเซอร์ x86 พร้อมส่วนขยายการจำลองเสมือน (Intel VT หรือ AMD-V) การสนับสนุน paravirtualization แบบจำกัดสำหรับ Linux และ Windows ยังมีให้สำหรับผู้เยี่ยมชมในรูปแบบของไดรเวอร์เครือข่าย paravirtual

ปัจจุบัน KVM สื่อสารกับเคอร์เนลผ่านโมดูลเคอร์เนลที่โหลดได้ รองรับระบบปฏิบัติการเกสต์ที่หลากหลาย เช่น Linux, BSD, Solaris, Windows, Haiku, ReactOS และ AROS Research ระบบปฏิบัติการ- KVM เวอร์ชันแก้ไข (qemu) สามารถทำงานบน Mac OS X ได้

หมายเหตุ: KVM จะไม่ดำเนินการจำลองตัวเองใดๆ แต่โปรแกรมที่ทำงานในพื้นที่ผู้ใช้จะใช้อินเทอร์เฟซ /dev/kvm เพื่อกำหนดค่าพื้นที่ที่อยู่ของเซิร์ฟเวอร์เสมือนของแขก ใช้ทรัพยากร I/O จำลอง และแมปอิมเมจกับอิมเมจโฮสต์

สถาปัตยกรรม KVM แสดงในรูปที่ 1

รูปที่ 1. สถาปัตยกรรม KVM
พาราเวอร์ชวลไลเซชัน

Paravirtualization เป็นเทคนิคการจำลองเสมือนที่ให้เครื่องเสมือนมีอินเทอร์เฟซซอฟต์แวร์ที่คล้ายกัน แต่ไม่เหมือนกันกับฮาร์ดแวร์พื้นฐาน วัตถุประสงค์ของอินเทอร์เฟซที่ได้รับการปรับเปลี่ยนนี้คือเพื่อลดเวลาที่ใช้โดยระบบปฏิบัติการเกสต์ในการดำเนินการที่ยากต่อการดำเนินการในสภาพแวดล้อมเสมือนจริงมากกว่าในสภาพแวดล้อมที่ไม่เสมือนจริง

มี "ตะขอ" พิเศษที่ช่วยให้แขกและระบบโฮสต์สามารถร้องขอและยืนยันวิธีแก้ปัญหาของงานที่ซับซ้อนเหล่านี้ที่สามารถทำได้ในสภาพแวดล้อมเสมือนจริง แต่ในอัตราที่ช้ากว่ามาก

ในสถาปัตยกรรม KVM เครื่องเสมือนจะทำงานเป็นกระบวนการ Linux ปกติตามกำหนดเวลาตามมาตรฐาน ตัวกำหนดเวลาลินุกซ์- อันที่จริงแล้ว โปรเซสเซอร์เสมือนแต่ละตัวจะปรากฏเป็นกระบวนการ Linux ทั่วไป สิ่งนี้ทำให้ KVM สามารถใช้ประโยชน์จากคุณสมบัติทั้งหมดของเคอร์เนล Linux

การควบคุมการจำลองอุปกรณ์ เวอร์ชันที่แก้ไขแล้ว qemu ซึ่งมีให้ การจำลองไบออส, บัส PCI, บัส USB ตลอดจน ชุดมาตรฐานอุปกรณ์เช่นตัวควบคุมดิสก์ IDE และ SCSI การ์ดเครือข่ายฯลฯ

ฟังก์ชั่นการทำงาน

คุณสมบัติหลักของ KVM มีดังต่อไปนี้

ความปลอดภัย

เนื่องจากเครื่องเสมือนถูกนำมาใช้เป็นกระบวนการ Linux จึงใช้ รุ่นมาตรฐานการรักษาความปลอดภัยของ Linux สำหรับการแยกและการจัดการทรัพยากร ด้วย SELinux (Security-Enhanced Linux) เคอร์เนล Linux จะเพิ่มการควบคุมการเข้าถึงที่จำเป็น การรักษาความปลอดภัยแบบหลายชั้นและหลายชั้น และจัดการนโยบายความปลอดภัย SELinux ให้การแยกทรัพยากรที่เข้มงวดและจำกัดความคล่องตัวของกระบวนการที่ทำงานอยู่ เคอร์เนลลินุกซ์.

โครงการ SVirt เป็นความพยายามของชุมชนในการรวมคุณสมบัติด้านความปลอดภัย Mandatory Access Control (MAC) และการจำลองเสมือน บนพื้นฐานลินุกซ์(KVM) - สร้างบน SELinux เพื่อจัดเตรียมโครงสร้างพื้นฐานที่ช่วยให้ผู้ดูแลระบบสามารถกำหนดนโยบายการแยกเครื่องเสมือนได้ SVirt ได้รับการออกแบบมาเพื่อให้แน่ใจว่าทรัพยากรเครื่องเสมือนไม่สามารถเข้าถึงได้โดยกระบวนการอื่น (หรือเครื่องเสมือน) ผู้ดูแลระบบสามารถขยายนโยบายนี้ได้โดยการกำหนดสิทธิ์แบบละเอียด ตัวอย่างเช่น ต้องการให้กลุ่มของเครื่องเสมือนใช้ทรัพยากรเดียวกันร่วมกัน

การจัดการหน่วยความจำ

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

รองรับ KVM คุณสมบัติล่าสุดการจำลองเสมือนหน่วยความจำจากผู้ผลิตโปรเซสเซอร์ โดยเฉพาะอย่างยิ่ง Intel Extended Page Table (EPT) และ AMD Rapid Virtualization Indexing (RVI) เพื่อลดภาระของโปรเซสเซอร์ให้เหลือน้อยที่สุดและให้ประสิทธิภาพสูง แบนด์วิธ.

รองรับการแชร์เพจหน่วยความจำโดยใช้ฟังก์ชันเคอร์เนล Kernel Same-page Merging (KSM) KSM สแกนหน่วยความจำของเครื่องเสมือนแต่ละเครื่อง และหากหน้าหน่วยความจำบางหน้าของเครื่องเสมือนเหมือนกัน ก็จะรวมหน้าเหล่านั้นเป็นหน้าเดียว ซึ่งจะกลายเป็นเรื่องธรรมดาสำหรับเครื่องเสมือนเหล่านี้และจะถูกจัดเก็บไว้ในสำเนาเดียว หากแขกพยายามแก้ไขเพจที่แชร์นี้ ก็จะได้รับสำเนาของตัวเอง

การจัดเก็บข้อมูล

KVM สามารถใช้สื่อที่รองรับ Linux เพื่อจัดเก็บอิมเมจเครื่องเสมือนได้ รวมถึง ดิสก์ในเครื่องพร้อมอินเทอร์เฟซ IDE, SCSI และ SATA, Network Attached Storage (NAS) รวมถึง NFS และ SAMBA/CIFS หรือ SAN พร้อมรองรับ iSCSI และ Fibre Channel I/O แบบมัลติเธรดสามารถใช้เพื่อปรับปรุงปริมาณงานการจัดเก็บข้อมูลและความซ้ำซ้อน

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

KVM รองรับอิมเมจเครื่องเสมือนบนระบบไฟล์แบบกระจายเช่น Global ระบบไฟล์(GFS2) เพื่อให้สามารถแชร์ผ่านหลายโฮสต์หรือรวมเข้าด้วยกันโดยใช้โลจิคัลวอลุ่ม สนับสนุน การปรับแต่งอย่างละเอียด(การจัดเตรียมแบบบาง) ของดิสก์อิมเมจช่วยให้คุณสามารถเพิ่มประสิทธิภาพการใช้ทรัพยากรการจัดเก็บข้อมูล โดยไม่ได้จัดสรรทั้งหมดล่วงหน้าในครั้งเดียว แต่จะเฉพาะเมื่อเครื่องเสมือนต้องการเท่านั้น รูปแบบของตัวเองไดรฟ์สำหรับ KVM - QCOW2 - ให้การสนับสนุนสแน็ปช็อต สถานะปัจจุบันและจัดเตรียมสแน็ปช็อตดังกล่าวหลายชั้น เช่นเดียวกับการบีบอัดและการเข้ารหัส

การโยกย้ายสด

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

นอกเหนือจากการย้ายข้อมูลแบบสดแล้ว KVM ยังสนับสนุนการบันทึกสำเนาของสถานะปัจจุบันของเครื่องเสมือนลงในดิสก์ ซึ่งช่วยให้คุณสามารถจัดเก็บและกู้คืนได้ในภายหลัง

ไดรเวอร์อุปกรณ์

KVM รองรับการจำลองเสมือนแบบไฮบริดเมื่อมีการติดตั้งไดรเวอร์พาราเวอร์ชวลไลซ์ในระบบปฏิบัติการเกสต์ ทำให้เครื่องเสมือนใช้อินเทอร์เฟซ I/O ที่ปรับให้เหมาะสมแทนที่จะใช้อุปกรณ์จำลอง ประสิทธิภาพสูง I/O สำหรับอุปกรณ์เครือข่ายและบล็อก

ไฮเปอร์ไวเซอร์ KVM ใช้มาตรฐาน VirtIO ที่พัฒนาโดย IBM และ หมวกแดงในความร่วมมือกับชุมชน Linux สำหรับไดรเวอร์พาราเวอร์ชวลไลซ์ เป็นอินเทอร์เฟซที่ไม่ขึ้นกับไฮเปอร์ไวเซอร์สำหรับสร้างไดรเวอร์อุปกรณ์ ช่วยให้ไฮเปอร์ไวเซอร์หลายรายแชร์ไดรเวอร์อุปกรณ์ชุดเดียวกันได้ ปรับปรุงการทำงานร่วมกันระหว่างแขก

ไดรเวอร์ VirtIO รวมอยู่ด้วย รุ่นที่ทันสมัยเคอร์เนล Linux (2.6.25 ล่าสุด) รวมอยู่ใน Red Hat Enterprise Linux 4.8+ และ 5.3+ และยังพร้อมใช้งานสำหรับ Red Hat Enterprise Linux 3 อีกด้วย Red Hat ได้พัฒนาไดรเวอร์ VirtIO สำหรับระบบปฏิบัติการเกสต์ ไมโครซอฟต์ วินโดวส์เพิ่มประสิทธิภาพการทำงานของเครือข่ายและดิสก์ I/O ไดรเวอร์เหล่านี้ได้รับการรับรองโดยโปรแกรมการรับรอง Microsoft Windows Hardware Quality Labs (WHQL)

ประสิทธิภาพและความสามารถในการขยายขนาด

KVM สืบทอดประสิทธิภาพและความสามารถในการปรับขนาดของ Linux โดยรองรับเครื่องเสมือนที่มีโปรเซสเซอร์เสมือน 16 ตัวและ RAM ขนาด 256 GB รวมถึงระบบโฮสต์ที่มี 256 คอร์และ RAM มากกว่า 1 TB มันสามารถให้:

  • ประสิทธิภาพ 95-135% เมื่อเทียบกับ Bare Metal ในแอปพลิเคชันระดับองค์กรจริง เช่น SAP, Oracle, LAMP และ Microsoft Exchange
  • มากกว่าหนึ่งล้านข้อความต่อวินาทีและเวลาแฝงน้อยกว่า 200 ไมโครวินาทีในเครื่องเสมือนที่ทำงานบนเซิร์ฟเวอร์มาตรฐาน
  • ระดับการรวมสูงสุดด้วยเครื่องเสมือนมากกว่า 600 เครื่องที่ทำงานอยู่ แอปพลิเคชันระดับองค์กรบนเซิร์ฟเวอร์เดียว

ซึ่งหมายความว่า KVM สามารถจำลองเวิร์กโหลดที่มีความต้องการมากที่สุดได้

การปรับใช้ระบบเสมือนจริง

การปรับใช้ KVM เป็นกระบวนการที่ค่อนข้างซับซ้อนและเสร็จสมบูรณ์ ข้อกำหนดพิเศษไปยังการกำหนดค่า โปรดดูส่วนนี้สำหรับข้อมูลเพิ่มเติม

การจัดการเครื่องเสมือน

มีผู้จัดการเครื่องเสมือนหลายเครื่อง ในหมู่พวกเขา:

  • ผู้จัดการเสมือนของ Univention;
  • qemu/KVM: ทำงานโดยตรงจากบรรทัดคำสั่งในเครื่อง KVM
  • Virsh: เชลล์ขั้นต่ำสำหรับการจัดการเครื่องเสมือน
  • Virtual Machine Manager: อย่างอื่น - virt-manager ส่วนต่อประสานกับผู้ใช้สำหรับการจัดการเครื่องเสมือน

การเลือก KVM

ข้อดี:

  • แม้ว่า KVM จะเป็นไฮเปอร์ไวเซอร์ที่ค่อนข้างใหม่ก็ตาม โมดูลขนาดกะทัดรัดซึ่งเมื่อรวมกับเคอร์เนล Linux จะทำให้ง่ายต่อการใช้งานในขณะที่ยังคงรองรับรุ่นใหญ่ของ Linux
  • KVM มีความยืดหยุ่น เนื่องจากระบบปฏิบัติการของแขกสื่อสารกับไฮเปอร์ไวเซอร์ที่รวมอยู่ในเคอร์เนล Linux พวกเขาจึงสามารถเข้าถึงฮาร์ดแวร์ได้โดยตรงในทุกกรณีโดยไม่จำเป็นต้องแก้ไขระบบปฏิบัติการเสมือนจริง สิ่งนี้ทำให้ KVM มากขึ้น วิธีแก้ปัญหาอย่างรวดเร็วสำหรับเครื่องเสมือน
  • โปรแกรมแก้ไข KVM เข้ากันได้กับเคอร์เนล Linux KVM ถูกนำไปใช้ในเคอร์เนล Linux ซึ่งทำให้ง่ายต่อการจัดการกระบวนการเวอร์ช่วลไลเซชั่น

จุดด้อย:

  • เครื่องมืออันทรงพลังสำหรับเซิร์ฟเวอร์และการจัดการเสมือน เครื่องเควีเอ็มไม่มีอยู่จริง;
  • การสนับสนุน KVM จำเป็นต้องได้รับการปรับปรุง เครือข่ายเสมือนและระบบจัดเก็บข้อมูลเสมือน การรักษาความปลอดภัยที่แข็งแกร่งขึ้น การปรับปรุงความน่าเชื่อถือและความทนทานต่อข้อผิดพลาด การจัดการพลังงาน การสนับสนุน HPC/เรียลไทม์ ความสามารถในการปรับขนาดโปรเซสเซอร์เสมือน ความเข้ากันได้ของผู้จำหน่ายระหว่างกัน ความสามารถในการพกพา VM และการสร้างระบบนิเวศของบริการคลาวด์

ใน Ubuntu ขอแนะนำให้ใช้ไฮเปอร์ไวเซอร์ KVM (ตัวจัดการเครื่องเสมือน) และไลบรารี libvirt เป็นเครื่องมือการจัดการ Libvirt ประกอบด้วยชุดซอฟต์แวร์ API และแอปพลิเคชันผู้ใช้สำหรับการจัดการเครื่องเสมือน (VM) virt-manager (อินเทอร์เฟซแบบกราฟิก GUI) หรือ virsh ( บรรทัดคำสั่ง,คลี) เช่น ผู้จัดการทางเลือกคุณสามารถใช้ convirt (GUI) หรือ convirt2 (อินเทอร์เฟซเว็บ)

ปัจจุบันมีเพียงไฮเปอร์ไวเซอร์ KVM เท่านั้นที่ได้รับการสนับสนุนอย่างเป็นทางการบน Ubuntu ไฮเปอร์ไวเซอร์นี้เป็นส่วนหนึ่งของรหัสเคอร์เนลปฏิบัติการ ระบบลินุกซ์- KVM ไม่รองรับ Paravirtualization ซึ่งแตกต่างจาก Xen ซึ่งหมายความว่า CPU ของคุณต้องรองรับเทคโนโลยี VT เพื่อใช้งาน คุณสามารถตรวจสอบว่าโปรเซสเซอร์ของคุณรองรับเทคโนโลยีนี้หรือไม่โดยการรันคำสั่งในเทอร์มินัล:

หากคุณได้รับข้อความต่อไปนี้:

ข้อมูล: /dev/kvm มีอยู่ สามารถใช้การเร่งความเร็ว KVM ได้

ซึ่งหมายความว่า KVM จะทำงานได้โดยไม่มีปัญหา

หากคุณได้รับข้อความต่อไปนี้ที่ทางออก:

CPU ของคุณไม่รองรับส่วนขยาย KVM การเร่งความเร็ว KVM ไม่สามารถใช้งานได้

คุณยังคงสามารถใช้เครื่องเสมือนได้ แต่จะช้ากว่ามาก

    ติดตั้งระบบ 64 บิตในฐานะแขก

    จัดสรร RAM มากกว่า 2 GB ให้กับระบบของแขก

การติดตั้ง

Sudo apt-get ติดตั้ง qemu-kvm libvirt-bin ubuntu-vm-builder สะพาน-utils

นี่คือการติดตั้งบนเซิร์ฟเวอร์ที่ไม่มี X กล่าวคือ ไม่มีอินเทอร์เฟซแบบกราฟิก คุณสามารถติดตั้งได้ด้วยคำสั่ง

Sudo apt-get ติดตั้ง virt-manager

หลังจากนี้รายการ "Virtual Machine Manager" จะปรากฏในเมนูและทุกอย่างจะทำงานได้ด้วยความน่าจะเป็นระดับสูง หากยังคงเกิดปัญหาใดๆ คุณจะต้องอ่านคำแนะนำในวิกิภาษาอังกฤษ

การสร้างระบบแขก

ขั้นตอนการสร้างระบบเกสต์โดยใช้ GUI นั้นค่อนข้างง่าย

แต่สามารถอธิบายโหมดข้อความได้

qcow2

เมื่อสร้างระบบโดยใช้อินเทอร์เฟซแบบกราฟิกเป็นฮาร์ดดิสก์ คุณจะได้รับแจ้งให้เลือกไฟล์รูปภาพที่มีอยู่หรือบล็อกอุปกรณ์ หรือสร้าง ไฟล์ใหม่ด้วยข้อมูลดิบ (RAW) อย่างไรก็ตามนี่ยังห่างไกลจากสิ่งเดียวเท่านั้น รูปแบบที่มีอยู่ไฟล์. ในบรรดาดิสก์ทุกประเภทที่แสดงอยู่ใน man qemu-img ดิสก์ที่ยืดหยุ่นและทันสมัยที่สุดคือ qcow2 รองรับสแน็ปช็อต การเข้ารหัส และการบีบอัด ต้องสร้างขึ้นก่อนสร้างแขกใหม่

Qemu-img สร้าง -o การจัดสรรล่วงหน้า = ข้อมูลเมตา -f qcow2 qcow2.img 20G

ตามชายคนเดียวกัน qemu-img การจัดสรรข้อมูลเมตาล่วงหน้า (-o preallocation=metadata) ทำให้ดิสก์มีขนาดใหญ่ขึ้นเล็กน้อยในตอนแรก แต่ให้ ประสิทธิภาพที่ดีขึ้นในช่วงเวลาที่ภาพต้องการการเติบโต ในกรณีนี้ ตัวเลือกนี้ช่วยให้คุณหลีกเลี่ยงข้อผิดพลาดอันไม่พึงประสงค์ได้ รูปภาพที่สร้างขึ้นเริ่มแรกใช้พื้นที่น้อยกว่าหนึ่งเมกะไบต์และขยายเป็นขนาดที่ระบุตามความจำเป็น ระบบแขกควรเห็นขั้นตอนสุดท้ายนี้ทันที ขนาดที่ระบุอย่างไรก็ตาม ในระหว่างขั้นตอนการติดตั้ง เธอสามารถมองเห็นได้ ขนาดจริงไฟล์. โดยปกติแล้วจะปฏิเสธที่จะติดตั้งบนฮาร์ดไดรฟ์ขนาด 200 KB ข้อผิดพลาดไม่เฉพาะเจาะจงกับ Ubuntu อย่างน้อยก็ปรากฏใน RHEL

นอกจากประเภทของรูปภาพแล้ว คุณสามารถเลือกวิธีการเชื่อมต่อได้ในภายหลัง - IDE, SCSI หรือ Virtio Disk ประสิทธิภาพของระบบย่อยของดิสก์จะขึ้นอยู่กับตัวเลือกนี้ ไม่มีคำตอบที่ถูกต้องแน่นอน คุณต้องเลือกตามงานที่จะกำหนดให้กับระบบแขก หากระบบแขกถูกสร้างขึ้น "เพื่อดู" วิธีการใดๆ ก็ตามจะทำได้ โดยทั่วไป I/O มักเป็นจุดคอขวดของเครื่องเสมือน ดังนั้นเมื่อสร้างระบบที่มีการโหลดสูง ปัญหานี้จะต้องได้รับการปฏิบัติอย่างมีความรับผิดชอบมากที่สุด