Ảo hóa

Nested virtualisation là gì?

Định nghĩa

Nested virtualisation lets a virtual machine itself run virtual machines, by exposing the processor virtualisation extensions to the guest. It is required for Proxmox VE, VM-based CI jobs and some Docker configurations. Many providers disable it, which is the usual reason those workloads fail elsewhere.

Tại sao Nested virtualisation quan trọng

Cần thiết cho Proxmox VE, các tác vụ CI dựa trên VM và một số cấu hình Docker. Nhiều nhà cung cấp vô hiệu hóa tính năng này, đó là lý do thường khiến các tác vụ đó thất bại ở nơi khác.

Nested virtualisation trong thực tế

Khi bạn chạy ảo hóa lồng nhau, bạn khởi động một hypervisor bên trong một máy khách KVM và chuyển các phần mở rộng ảo hóa của CPU máy chủ qua. Bạn sẽ kiểm tra /proc/cpuinfo trong máy khách để tìm cờ svm hoặc vmx. Nếu chúng vắng mặt, hypervisor bên trong của bạn sẽ chuyển sang mô phỏng bằng phần mềm, có thể cắt giảm hiệu suất đi một bậc độ lớn. Bạn cũng có thể cần bật loại CPU 'host' thay vì một mô hình chung để có được các cờ đó. Làm sai và khối lượng công việc Proxmox hoặc CI của bạn sẽ chạy chậm chạp.

Điều mọi người hiểu sai về Nested virtualisation

Mọi người cho rằng ảo hóa lồng nhau chỉ quan trọng để chạy các hệ điều hành đầy đủ như Windows trong một VM. Sửa lại: nó cũng phá vỡ mạng overlay mặc định của Docker và một số module kernel nhất định, vì những thứ đó phụ thuộc vào các tính năng ảo hóa bên trong máy khách. Vì vậy, một khối lượng công việc container có thể thất bại trên một nhà cung cấp vô hiệu hóa tính năng lồng nhau, ngay cả khi bạn không bao giờ có ý định chạy một VM.

Nested virtualisation — các câu hỏi thường gặp

Tôi có thể chạy Docker bên trong một VM lồng nhau không?

Có, và đây là lý do phổ biến nhất khiến mọi người cần ảo hóa lồng nhau. Mạng bridge mặc định của Docker sử dụng iptables và các module kernel có thể hoạt động khác đi mà không có các phần mở rộng ảo hóa CPU được hiển thị. Các gói KVM của chúng tôi bao gồm ảo hóa lồng nhau, vì vậy các container Docker của bạn chạy như mong đợi.

Làm thế nào để kiểm tra xem ảo hóa lồng nhau có được bật không?

Bên trong VM của bạn, chạy grep -E '(svm|vmx)' /proc/cpuinfo. Nếu bạn thấy các cờ, tính năng lồng nhau có sẵn. Nếu không, hypervisor không hiển thị chúng, điều đó thường có nghĩa là nhà cung cấp đã vô hiệu hóa nó.

Thêm từ ảo hóa

KVM
KVM là ảo hóa phần cứng đầy đủ được tích hợp trong nhân Linux, cho mỗi máy khách nhân riêng và cô lập được bảo đảm bằng phần cứng khỏi các người thuê khác.
OpenVZ
OpenVZ là ảo hóa dựa trên container trong đó mọi phiên bản chia sẻ nhân máy chủ, vì vậy máy khách không thể nạp mô-đun nhân hoặc chạy hệ điều hành khác.
LXC
LXC là container hóa gốc Linux cô lập các tiến trình với namespace và cgroups trong khi chia sẻ nhân máy chủ.
Hypervisor
Hypervisor là lớp phần mềm tạo và chạy máy ảo, phân bổ CPU vật lý, bộ nhớ và IO giữa chúng.
vCPU
vCPU là bộ xử lý ảo được cung cấp cho máy khách, được hỗ trợ bởi thời gian lập lịch trên một lõi hoặc luồng vật lý.
cloud-init
cloud-init là cơ chế tiêu chuẩn để cấu hình máy ảo trong lần khởi động đầu tiên, sử dụng siêu dữ liệu do nền tảng cung cấp.