Cài đặt máy ảo Ubuntu bằng Multipass với Hyper-V trên Windows

Multipass là một tiện tích do chính các nhà phát triển Ubuntu tạo ra nhằm giúp người dùng có thể nhanh chóng tạo ra các máy chủ Ubuntu trên các nền tảng ảo hoá. Người dùng cũng có thể dùng Multipass để cấu hình các máy ảo Ubuntu bằng cloud-init giống như cách bạn hay thấy ở các nhà cung cấp dịch vụ điện toán đám mây (public cloud) như AWS, Azure, Google, IBM và Oracle. Multipass hiện hỗ trợ tất cả các hệ điều hành phổ biến hiện nay như Windows, MacOS và Linux.

Điểm mạnh của Multipass là nó sử dụng công nghệ ảo hóa phần cứng trên tất cả các hệ điều hành mà nó hỗ trợ. Có nghĩa là Multipass sẽ sử dụng Hyper-V trên Windows,, QEMU và HyperKit trên macOS và LXD trên Linux cho hiệu năng vượt trội so với sử dụng các hệ thống ảo hóa hệ điều hành như VMWare, VirtualBox…

Do mình sẽ sử dụng Multipass trên máy desktop đang chạy hệ điều hành Windows nên mình sẽ chỉ hướng dẫn cách cài đặt máy ảo Ubuntu bằng Multipass với Hyper-V trên Windows, đối với những hệ điều hành khác bạn có thể tham khảo trên trang hướng dẫn cài đặt bằng tiếng Anh của Multipass.

1. Cài đặt Hyper-V trên Windows 10

Nếu bạn chưa cài đặt Hyper-V trên máy thì có thể xem bài viết hướng dẫn cài đặt Hyper-V trên Windows của mình.

2. Cài đặt Multipass

Trước khi cài đặt Multipass, bạn phải chắc chắn rằng Network của máy bạn hiện đang để ở chế độ Private. Multipass sẽ không thể chạy ở chế độ Public

  • Bạn có thể kiểm tra bằng cách vào Setting, mở mục “Network & Internet”

Nếu không phải Private thì bạn nhấn tiếp “Properties” để thay dổi thành “Private”

  • Sau khi tải về thành công, tiến hành cài đặt Multipass và giữ nguyên các lựa chọn mặc định.
  • Lưu ý khi cài đặt Multipass cho Windows 10 Home với Hyper-V: Vì Hyper-V chỉ được Microsoft hỗ trợ chính thức cho Windows 10 Pro và Enterprise nên khi cài đặt Multipass trên Windows 10 Home sẽ không thể chọn “Hyper-V” mà chỉ chọn được “VirtualBox”. Do đó, sau khi cài đặt Multipass thì bạn mở Command Prompt (nhấn tổ hợp phím “Windows+R” gõ “cmd”) và thực hiện lệnh sau để chuyển sang dùng Hyper-V:
C:\Users\Username>multipass set local.driver=hyperv

3. Tạo máy ảo Ubuntu bằng Multipass

Để tạo máy ảo Ubuntu, bạn mở Command Prompt bằng cách nhấn tổ hợp phím “Windows+R” rồi gõ vào “cmd” và nhấn “Enter”

3.1 Tạo máy ảo Ubuntu có cấu hình mặc định

$ multipass launch --name NAME
// Ví dụ: Để tạo ra 1 máy ảo Ubuntu có tên example
$ multipass launch --name example

Khi mình thực hiện lệnh trên ở máy của mình thì Multipass sẽ tạo ra một máy ảo với cấu hình như sau:

  • Tên: example
  • IPv4: 172.26.224.170
  • Phiên bản Ubuntu: Ubuntu 22.04.3 LTS
  • CPU(s): 1
  • Dung lượng lưu trữ: 5GB
  • RAM: 1GB

Lưu ý: địa chỉ IPv4 có thể sẽ khác khi thực hiện ở máy của bạn.

3.2 Tạo máy ảo với phiên bản Ubuntu cụ thể

Nếu bạn không muốn sử dụng phiên bản mặc định thì bạn có thể dùng lệnh sau để tìm phiên bản mình mong muốn:

$ multipass find

...
18.04                       bionic            20220523         Ubuntu 18.04 LTS
20.04                       focal,lts         20220505         Ubuntu 20.04 LTS
21.10                       impish            20220309         Ubuntu 21.10
22.04                       jammy             20220506         Ubuntu 22.04 LTS
...

Multipass sẽ liệt kê ra tất cả các phiên bản Ubuntu để bạn chọn lựa. Sau đo nếu bạn muốn tạo máy ảo với phiên bản nào thì sử dụng lệnh:

$ multipass launch VERSION-NAME --name NAME

// Ví dụ: Để tạo ra máy ảo với phiên bản Ubuntu 22.04 có tên example
$ multipass launch jammy --name example

3.3 Xem cấu hình máy ảo

Để xem cấu hình hiện tại của máy ảo

$ multipass info NAME

// Ví du: Xem thông tin máy áo có tên example
$ multipass info example
Name:           example
State:          Running
Snapshots:      0
IPv4:           172.26.224.170
Release:        Ubuntu 22.04.3 LTS
Image hash:     6d6af17f28c8 (Ubuntu 22.04 LTS)
CPU(s):         1
Load:           0.00 0.01 0.00
Disk usage:     1.4GiB out of 4.8GiB
Memory usage:   209.9MiB out of 892.2MiB
Mounts:         --

3.4 Tạo máy ảo với cấu hình tự chọn

Để tạo máy ảo với cấu hình chi tiết, có thể dùng lệnh sau:

// Ví dụ tạo máy ảo 4 cpus, 20GB lưu trữ và 8GB RAM
$ multipass launch --name example --cpus 4 --disk 20G --memory 8G

3.5 Tạo máy ảo có giao diện mạng cầu nối (bridged network)

Mặc định thì Multipass sẽ tạo ra máy ảo Ubuntu có 1 giao diện mạng nội bộ (internal interface) kết nối với 1 switch ảo. Muốn có thêm 1 giao diện mạng cầu nối (bridged interface) đến giao diện mạng vật lý (physical interface) của máy host để nhận được IP trực tiếp từ router thì thực hiện như sau:

  • Tìm tên giao diện mạng vật lý của máy chủ (host) bằng lệnh:
$ multipass networks
Name             Type       Description
Default Switch   switch     Virtual Switch with internal networking
Ethernet         ethernet   Realtek PCIe GbE Family Controller

Lệnh này cho biết hiện máy host của mình có 2 giao diện mạng là mạng ảo “Default Switch” và mạng vật lý “Ethernet” (Lưu ý là khi chạy trên máy của bạn có thể sẽ ra kết quả khác).

  • Như vậy để tạo ra máy ảo có thêm giao diện mạng cầu nối đến mạng vật lý ‘Ethernet’ của máy host thì mình dùng lệnh sau:
$ multipass launch --name example --network Ethernet
  • Hoặc bạn cũng có thể cài đặt giao diện mạng ‘Ethernet’ làm bridged interface mặc định cho Multipass như sau:
$ multipass set local.bridged-network=Ethernet
  • Sau đó để tạo máy ảo có sẳn bridged interface thì chỉ cần sử dụng lệnh sau:
$ multipass launch --name example --bridged
  • Để thêm mạng câu nối vào một máy ảo Ubuntu đã có sẵn:
$ multipass set local.bridged-network=<ethernet-name>
# thay <ethernet-name> với tên giao diện mạng vật lý của máy host

$ multipass set local.<instance-name>.bridged=true
# thay <instance-name> với tên của máy ảo đã tạo
  • Để kiểm tra lại cấu hình network của một máy ảo có thể sử dụng lệnh sau:
$ multipass exec example -- ip -br address show scope global
eth0             UP             172.26.224.170/20 metric 100
eth1             UP             192.168.68.101/24 metric 200

(địa chỉ IP có thể sẽ khác khi chạy ở máy của bạn)

Trong đó:

  • eth0 — là giao diện mạng nội bộ mặc định
  • eth1 — là giao diện mạng cầu nối với giao diện mạng vật lý

Lưu ý khi tạo máy ảo Ubuntu có mạng cầu nối bằng Multipass: Multipass sẽ cấu hình giao diện mạng cầu nối này trong file “/etc/netplan/50-cloud-init.yaml”. Tuy nhiên cấu hình mặc định này sẽ không cho phép máy ảo được truy cập từ internet hay WAN IP. Nếu bạn chỉ sử dụng máy ảo trong mạng nội bộ thì sẽ không có vấn đề gì và không cần làm bước bên dưới.

  • Trường hợp nếu bạn muốn máy ảo có thể được truy cập trực tiếp từ internet hay WAN IP, bạn cần phải sửa file cấu hình đó lại như sau:
$ sudo nano /etc/netplan/50-cloud-init.yaml

# tìm extra0 và thay thế nội dung của nó như bên dưới
# và giữ nguyên địa chỉ MAC đã có sẳn
    extra0:
        dhcp4: true
        dhcp4-overrides:
            route-metric: 50
        match:
            macaddress: <xx:xx:xx:xx:xx:xx>
        #optional: true
  • Sau đó thực hiện lệnh sau để lưu cấu hình:
$ sudo netplan apply

4. Đăng nhập vào máy ảo Ubuntu

Bạn có thể đăng nhập vào máy ảo bằng 2 cách, hoặc bằng Multipass, hoặc bằng SSH. Tuy nhiên trước khi có thể đăng nhập bằng SSH, bạn cần phải đăng nhập bằng Multipass, sau đó tạo mật khẩu cho người dùng quản trị rồi mới có thể đăng nhập được bằng SSH.

4.1 Đăng nhập vào máy ảo bằng Multipass

$ multipass shell NAME

// Ví dụ: Đăng nhập vào máy ảo tên example
$ multipass shell example

4.2 Tạo mật khẩu cho người dùng mặc định

Mặc định thì Multipass sẽ tạo ra một tài khoản người dùng quản trị có tên “ubuntu”. Bạn sẽ phải tạo mật khẩu co người dùng này trước khi có thể sử dụng bằng giao thức SSH

$ sudo passwd ubuntu

Hệ thống sẽ yêu cầu bạn nhập mật khẩu cho người dùng này.

4.3 Đăng nhập bằng SSH (OpenSSH, Putty…)

Bạn có thể đăng nhập vào máy ảo bằng IP hoặc bằng tên miền mà Windows cung cấp sẳn. Tên miền được tạo ra sau khi bạn tạo máy ảo và có định dạng như sau:

NAME.mshome.net

// Ví dụ tên máy ảo bạn tạo là "example" thì tên miền của máy ảo sẽ là:
example.mshome.net

Như vậy để đăng nhập vào máy ảo bằng SSH bạn có thể sử dụng lệnh sau:

$ ssh [email protected]

// hoặc nếu IP của máy ảo là 172.26.224.170
$ ssh [email protected]

5. Thay đổi cấu hình máy ảo

Nếu bạn đã tạo máy ảo nhưng sau đó muốn thay đổi cấu hình của nó. Bạn có thể thực hiện như sau:

$ multipass stop NAME
$ multipass set local.NAME.cpus=<NUM_CPU>
$ multipass set local.NAME.disk=<NUM_DISK_SIZE>
$ multipass set local.NAME.memory=<NUM_RAM_SIZE>

// Ví dụ: để thay đổi cho máy ảo có tên example với 4 cpus, 60GB dung lượng và 6GB RAM
$ multipass stop example 
$ multipass set local.example.cpus=4
$ multipass set local.example.disk=60G
$ multipass set local.example.memory=7G

6. Khởi chạy, tắt và tạm ngưng máy ảo

Mặc định khi bạn sử dụng lệnh “multipass launch” thì Multipass cũng sẽ khởi chạy máy ảo sau khi cài đặt.

  • Để chủ động trong việc khởi chạy, bạn có thể dùng lệnh sau:
$ multipass start NAME
  • Để tắt máy ảo, bạn sử dụng lệnh:
$ multipass stop NAME

hoặc

$ multipass stop --force NAME
  • Để tạm ngưng máy ảo đang chạy, bạn sử dụng lệnh:
$ multipass suspend NAME

7. Xem danh sách và xóa máy ảo

  • Để xem danh sách các máy ảo đã tạo, bạn có thể sử dụng lệnh
$ multipass list
  • Để bỏ máy ảo vào thùng rác, sử dụng lệnh:
$ multipass delete NAME
  • Nếu sau khi xóa mà bạn muốn khôi phục lại máy ảo, sử dụng lệnh
$ multipass recover NAME
  • Để xóa máy ảo vĩnh viễn (không thể khôi phục) thực hiện lệnh:
$ multipass purge

Để biết thêm chi tiết bạn có thể tham khảo tại đường link: https://multipass.run/docs/how-to-guides

8. Tạo snapshot cho máy ảo

Snapshot cho phép ghi lại toàn bộ dữ liệu và cấu hình của máy ảo ở một thời điểm nào đó và sau đó cho phép máy ảo có thể được phục hồi trở lại thời điểm đó. Việc này rất hữu ích trước khi thực hiện các thay đổi quan trọng mang tính rủi ro cao.

  • Để tạo snapshot cho máy ảo thực hiện lệnh sau:
$ multipass snapshot <instance-name> -m <comment>
# VD: multipass snapshot example -m "truoc khi thuc hien thay doi abc"

Lệnh này tự động tạo các snapshot với tên <instance-name>.snapshot<N> (N sẽ tự tăng 1 sau mỗi lần tạo). VD: example.snapshot1

  • Tạo snapshot với tên cụ thể
$ multipass snapshot <instance-name> -n <name> -m <comment>
  • Để khôi phục snapshot:
$ multipass restore <instance-name>.snapshot<N>
# VD: multipass restore example.snapshot1
  • Để xem thông tin snapshot:
$ multipass info <instance-name>.snapshot<N>
VD: multipass info example.snapshot1
  • Để xem danh sách các snapshot đã tạo:
$ multipass list --snapshots
  • Để xoá snapshot
$ multipass dekete <instance-name>.snapshot<N>
VD: multipass dekete example.snapshot1

9. Các lỗi thường gặp

  • shell failed: cannot connect to the multipass socket

Lý do: Lỗi này do “Multipass Service” chưa được chạy

Cách sửa: Nhấn tổ hợp phím “Windows-R”, nhập vào: “services.msc”

Nhấp chuột vào “Multipass Service” và nhấn “Start” để khởi động dịch vụ

Chúc bạn thành công!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *