Khởi Động Nhanh: Chạy MaaS Trong 5 Phút
Nếu bạn có hơn hai máy vật lý trong HomeLab, chắc bạn đã biết cái cảm giác khổ sở đó — rút USB ra, boot vào trình cài đặt, bấm qua hàng chục màn hình y chang nhau lần này qua lần khác. Tôi đã làm cái nghi lễ đó nhiều lần hơn mức muốn thừa nhận. MaaS (Metal as a Service) của Canonical là công cụ giúp tôi nghỉ hưu cái USB đó vĩnh viễn.
Bạn chỉ cần gắn máy vào rack, bật nguồn, MaaS lo hết phần còn lại — PXE boot, phân vùng ổ cứng, cài OS, cấu hình mạng, thậm chí chạy script sau khi cài xong. Đây là thứ các data center dùng ở quy mô lớn. Hóa ra nó chạy khá tốt trên phần cứng HomeLab khiêm tốn.
Đây là con đường nhanh nhất để có một MaaS region controller hoạt động trên Ubuntu 22.04:
# Cài MaaS từ snap chính thức
sudo snap install maas
# Khởi tạo MaaS với vai trò region+rack controller kết hợp
sudo maas init region+rack \
--database-uri "postgres://maas:maaspassword@localhost/maasdb" \
--maas-url "http://192.168.1.10:5240/MAAS"
# Tạo tài khoản admin
sudo maas createadmin \
--username admin \
--email [email protected] \
--password yourpassword
Mở http://192.168.1.10:5240/MAAS trên trình duyệt. Nếu dashboard hiện ra, bạn đã đi được phần lớn chặng đường rồi.
Tìm Hiểu Sâu: Kiến Trúc Của MaaS
Trước khi enlist máy đầu tiên, hiểu rõ những gì đang xảy ra bên dưới sẽ rất có ích. MaaS có hai thành phần chính quan trọng khi dùng trong HomeLab:
- Region Controller — bộ não. Chạy API, database và giao diện web. Bạn chỉ cần một cái.
- Rack Controller — đôi tay. Xử lý DHCP, TFTP và PXE trên một subnet cụ thể. Cần một cái cho mỗi segment mạng vật lý.
Với hầu hết HomeLab, một máy chạy cả hai vai trò là hoàn toàn ổn.
Yêu Cầu Trước Khi Cài và Thiết Lập Mạng
MaaS cần kiểm soát DHCP trên subnet nơi các máy bare-metal của bạn hoạt động. Đây là chỗ mà mọi người hay bị vấp nhất. Đang chạy pfSense hay OPNsense rồi? Bạn có hai lựa chọn: tắt DHCP trên subnet đó hoàn toàn, hoặc tách ra một VLAN riêng cho MaaS provisioning. Tôi chọn cách dùng VLAN — giữ MaaS tách biệt mà không ảnh hưởng gì đến phần còn lại.
Hệ thống của tôi dùng một VLAN provisioning riêng là 192.168.50.0/24. MaaS quản lý DHCP ở đó, còn mạng LAN chính vẫn nguyên vẹn.
Thiết Lập Database
MaaS cần PostgreSQL. Cài và cấu hình trước khi khởi tạo MaaS:
# Cài PostgreSQL
sudo apt update && sudo apt install -y postgresql
# Tạo database và user cho MaaS
sudo -u postgres psql <<EOF
CREATE USER maas WITH PASSWORD 'maaspassword';
CREATE DATABASE maasdb OWNER maas;
\q
EOF
Tải Ảnh OS
Ngay sau khi đăng nhập, vào Images trên thanh sidebar. MaaS phải tải ảnh OS về trước khi có thể cài cho bất kỳ máy nào. Chọn phiên bản Ubuntu bạn muốn — 22.04 LTS là lựa chọn an toàn — nhấn Update source và chờ đồng bộ. Với kết nối 100 Mbps, lần tải đầu mất khoảng 10–15 phút; đường truyền chậm hơn có thể mất đến 20+ phút.
# Bạn cũng có thể kích hoạt đồng bộ ảnh từ CLI
maas admin boot-resources import
# Kiểm tra trạng thái đồng bộ
maas admin boot-resources read
Cấu Hình DHCP và DNS
Vào Networking → Subnets trong giao diện MaaS. Tìm subnet provisioning của bạn và bật DHCP do MaaS quản lý. Đặt gateway và DNS server khớp với mạng của bạn. Từ đó trở đi, MaaS xử lý việc cấp IP cho mọi máy PXE-boot vào nó.
Enlist Máy Đầu Tiên
Đây là lúc phép màu xảy ra. Trên máy đích, đặt thứ tự boot trong BIOS ưu tiên PXE trước. Bật nguồn lên. Trong vòng 30 giây, MaaS phát hiện nó — máy xuất hiện trong dashboard dưới mục Machines với trạng thái New.
Click vào đó, rồi nhấn Commission. MaaS khởi động một RAM disk nhỏ, kiểm kê phần cứng (CPU, RAM, ổ cứng, card mạng), rồi tắt máy. Trạng thái chuyển thành Ready. Máy đó giờ sẵn sàng để triển khai.
Nâng Cao: Deploy Máy và Dùng Cloud-Init
Commissioning cho MaaS biết máy có gì. Deployment mới là bước thực sự cài OS. Bạn có thể kích hoạt từ giao diện web vài cú click, hoặc dùng CLI — đây là chỗ MaaS thực sự chứng minh giá trị trong tự động hóa.
Deploy Qua CLI
# Liệt kê tất cả máy đang ở trạng thái sẵn sàng
maas admin machines read | jq '.[] | select(.status_name == "Ready") | {hostname, system_id}'
# Deploy Ubuntu 22.04 lên một máy cụ thể
maas admin machine deploy <system_id> \
distro_series=jammy \
hwe_kernel=ga-22.04
Thay <system_id> bằng ID lấy từ lệnh trước. Quá trình deploy thường hoàn tất trong 5–10 phút. Máy khởi động lên với SSH key đã được cài sẵn, dùng được ngay.
Cloud-Init Để Tự Động Hóa Sau Cài Đặt
MaaS hỗ trợ cloud-init user data, nghĩa là bạn có thể chạy script tự động sau khi cài OS xong. Đây là cách tôi thiết lập máy mới với các gói cần thiết và cấu hình SSH của mình:
maas admin machine deploy <system_id> \
distro_series=jammy \
user_data=$(base64 -w 0 <<'EOF'
#cloud-config
packages:
- vim
- htop
- curl
- git
- docker.io
runcmd:
- systemctl enable docker
- usermod -aG docker ubuntu
- echo 'Đã được provisioning bởi MaaS' > /etc/motd
EOF
)
Gắn Tag Cho Máy Theo Vai Trò
Tag trở nên thiết yếu khi HomeLab của bạn vượt quá vài chục node. Tôi gắn tag cho máy theo vai trò — storage, compute, k8s-worker — để có thể nhắm đúng phần cứng mà không phải đi tìm system ID mỗi lần.
# Thêm tag cho một máy
maas admin tag create name=k8s-worker
maas admin machine add-tag <system_id> k8s-worker
# Liệt kê tất cả máy có tag cụ thể
maas admin machines read | jq '.[] | select(.tag_names[] == "k8s-worker") | .hostname'
Tích Hợp MaaS Với Ansible
MaaS và Ansible là cặp đôi ăn ý. Sau khi MaaS hoàn tất deploy, bạn có một máy sạch với IP đã biết trước, sẵn sàng để Ansible cấu hình. Tôi dùng một script polling nhỏ chờ trạng thái Deployed, rồi tự động chạy playbook:
import subprocess
import time
import json
SYSTEM_ID = "abc123"
while True:
result = subprocess.run(
["maas", "admin", "machine", "read", SYSTEM_ID],
capture_output=True, text=True
)
data = json.loads(result.stdout)
if data["status_name"] == "Deployed":
ip = data["ip_addresses"][0]
print(f"Máy đã deploy tại {ip}, đang chạy Ansible...")
subprocess.run(["ansible-playbook", "-i", f"{ip},", "site.yml"])
break
print(f"Trạng thái: {data['status_name']}, đang chờ...")
time.sleep(15)
Mẹo Thực Tế Từ Kinh Nghiệm Dùng HomeLab Thực Tế
Chạy MaaS trong môi trường thực — dù chỉ là HomeLab — sẽ lộ ra một số cạm bẫy mà tài liệu chính thức hay bỏ qua. Đây là những thứ đã từng làm tôi vấp:
IPMI / BMC Là Thứ Thay Đổi Cuộc Chơi
MaaS hỗ trợ IPMI sẵn. Nếu máy chủ của bạn có IPMI hoặc iDRAC, đăng ký chúng trong phần cài đặt Power của máy. MaaS khi đó có thể tự bật/tắt máy trong quá trình commissioning và deployment — không cần can thiệp vật lý. Đây là thứ làm cho tự động hóa lights-out thực sự trở thành hiện thực.
# Cài đặt thông số IPMI cho một máy
maas admin machine update <system_id> \
power_type=ipmi \
power_parameters_power_address=192.168.50.101 \
power_parameters_power_user=admin \
power_parameters_power_pass=ipmiadminpass
Lưu Ý Về Subnet và Fabric
MaaS tự phát hiện VLAN và subnet. Nếu bạn đang chạy nhiều VLAN, hãy xác nhận MaaS đã map đúng từng subnet vào đúng fabric. Fabric bị map sai khiến PXE thất bại âm thầm — máy boot vào PXE, yêu cầu IP nhưng không nhận được phản hồi từ MaaS.
Release Trước Khi Deploy Lại
Xong việc với một máy và muốn cài OS khác lên? Hãy release nó trước. Thao tác đó xóa ổ cứng và đưa máy về trạng thái Ready. Deploy đè lên máy đã deploy rồi sẽ không hoạt động — bước release là bắt buộc.
maas admin machine release <system_id>
# Chờ trạng thái về "Ready" rồi mới deploy lại
Snap So Với Gói APT
Cài qua snap dễ quản lý hơn — nâng cấp chỉ cần một lệnh sudo snap refresh maas. Nhược điểm: snap chạy MaaS trong môi trường bị giới hạn quyền. Nếu bạn gặp lỗi quyền truy cập với script tùy chỉnh hay công cụ ngoài, cài qua apt linh hoạt hơn nhưng phải tự quản lý việc nâng cấp.
Kiểm Soát Phân Vùng Ổ Cứng
Mặc định, MaaS giao toàn bộ ổ cứng đầu tiên cho OS. Để kiểm soát chi tiết hơn — phân vùng /data riêng, LVM, ZFS — hãy cấu hình storage layout tùy chỉnh trong trang chi tiết máy trước khi deploy. Nó nằm khuất trong mục Storage, nhưng nhớ kiểm tra trước khi vô tình xóa ổ cứng còn dữ liệu quan trọng.
Khi MaaS đã chạy ổn định, việc cài lại một máy giảm từ 45 phút lầy lội thủ công xuống còn một lệnh CLI và một tách cà phê. Với HomeLab đang chạy Kubernetes, TrueNAS và một mớ VM, đó không phải chuyện nhỏ.

