Vagrant + VMware Workstation: Combo “hủy diệt” cho môi trường Lab DevOps

VMware tutorial - IT technology blog
VMware tutorial - IT technology blog

Tại sao mình bỏ VirtualBox để sang dùng VMware?

Nếu anh em làm DevOps hay Backend, chắc không lạ gì Vagrant. Đây là công cụ tuyệt vời để “code hóa” việc dựng máy ảo. Đa số tutorial trên mạng đều dùng VirtualBox vì nó miễn phí. Tuy nhiên, sau thời gian dài quản lý cụm 8 host ESXi tại công ty, mình nhận ra VMware Workstation ở đẳng cấp khác hẳn. Nó vượt trội về tốc độ đọc ghi (I/O) và khả năng quản lý tài nguyên cực kỳ ổn định.

Dùng VMware mang lại cảm giác “mượt” hơn nhiều. Máy ảo khởi động chỉ mất tầm 15-20 giây thay vì cả phút như trên VirtualBox. Các lỗi vặt khi mount folder (shared folder) cũng gần như biến mất. Trước đây, plugin VMware cho Vagrant có giá 79$, nhưng giờ HashiCorp đã cho dùng miễn phí. Đây là cơ hội quá tốt để anh em nâng cấp hạ tầng Lab cá nhân.

Cài đặt các thành phần cần thiết

Trước tiên, máy anh em cần có sẵn VMware Workstation Pro hoặc Player. Tiếp theo, chúng ta cần cài thêm hai thành phần để Vagrant có thể điều khiển được VMware.

1. Cài đặt Vagrant VMware Utility

Đây là dịch vụ chạy ngầm giúp Vagrant tương tác với các API của VMware. Anh em chỉ cần lên trang chủ HashiCorp, tải bản cài đặt phù hợp với OS (Windows/Linux) và cài như app bình thường.

2. Cài đặt Plugin Vagrant VMware Desktop

Mở terminal lên và gõ lệnh cài đặt plugin. Quá trình này diễn ra khá nhanh:

vagrant plugin install vagrant-vmware-desktop

Cài xong, anh em hãy chạy vagrant plugin list để chắc chắn mọi thứ đã sẵn sàng.

Cấu hình Vagrantfile chuẩn cho VMware

Khi dùng VMware, cách khai báo provider trong Vagrantfile sẽ hơi khác một chút. Mình khuyên anh em nên dùng các box từ Bento. Chúng được build cực chuẩn cho cả VMware và VirtualBox.

Dưới đây là mẫu Vagrantfile mình thường dùng để dựng Lab Ubuntu 22.04:

Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-22.04"

  config.vm.provider "vmware_desktop" do |v|
    v.gui = false              # Chạy ngầm, không hiện cửa sổ VMware
    v.cpus = 2                 # Cấp 2 nhân CPU
    v.memory = 4096            # Cấp 4GB RAM
    v.linked_clone = true      # Tính năng cực quan trọng
  end

  config.vm.network "private_network", ip: "192.168.56.10"
  config.vm.synced_folder ".", "/var/www/html", type: "nfs"
end

Mẹo nhỏ: Option v.linked_clone = true là cứu cánh cho ổ cứng. Thay vì copy nguyên cục 10GB-20GB, VMware chỉ tạo một bản clone dạng link. Việc này giúp máy ảo sẵn sàng trong vài giây và chỉ tốn vài trăm MB dung lượng lúc mới tạo.

Khởi chạy và trải nghiệm

Để khởi động, anh em dùng lệnh kèm tên provider:

vagrant up --provider vmware_desktop

Nếu lười gõ --provider mỗi lần, hãy set biến môi trường VAGRANT_DEFAULT_PROVIDER=vmware_desktop trong máy. Khi máy đã lên, anh em SSH vào như bình thường bằng lệnh vagrant ssh.

Mở VMware Workstation lên, anh em sẽ thấy một folder máy ảo mới xuất hiện. Mọi thông số từ RAM đến Snapshot đều đồng bộ hoàn hảo giữa Vagrant và giao diện VMware.

Kinh nghiệm xử lý lỗi (Troubleshooting)

Trong quá trình vận hành, mình đúc kết được vài chi tiết kỹ thuật quan trọng sau:

  • Xung đột IP: Nếu máy ảo không nhận IP, hãy kiểm tra lại Virtual Network Editor. Đảm bảo VMnet1 và VMnet8 không bị trùng dải IP với VPN công ty.
  • Tăng tốc CPU: Nếu thấy máy ảo hơi lag, hãy tắt “Side channel mitigations” trong phần Processors của VMware. Việc này có thể giúp tăng hiệu năng thêm khoảng 10-15%.
  • Check Log: Khi vagrant up bị lỗi treo, hãy vào thư mục ~/.vagrant.d/ để tìm log của plugin. Đa số lỗi xuất phát từ việc VMware Utility chưa được khởi động đúng cách.

Thực tế khi mình test cụm Kubernetes 3 node, độ trễ mạng giữa các VM trên VMware thấp hơn hẳn VirtualBox. Điều này giúp các bài test về microservices chính xác hơn nhiều. Anh em cứ thử combo này, chắc chắn sẽ không muốn quay lại VirtualBox đâu.

Share: