Photon OS là gì và tại sao mình chuyển sang dùng nó?
Mình quản lý cluster VMware với 8 host ESXi tại công ty, và chuyện chạy container workload trên VM Ubuntu/CentOS thông thường thực ra tốn khá nhiều tài nguyên không cần thiết. Một VM Ubuntu Server mặc định ngốm khoảng 1–1.5 GB RAM chỉ để boot, chưa kể các service không dùng đến vẫn chạy ngầm.
VMware Photon OS giải quyết đúng vấn đề đó. Đây là distro Linux tối giản do VMware tự phát triển, với một mục tiêu duy nhất: chạy container (Docker, containerd, Kubernetes) và ứng dụng cloud-native trên vSphere. Không bloatware, không service dư.
So sánh thực tế trên lab của mình:
- Ubuntu 22.04 Server: ~850 MB RAM khi idle, image OVA ~2.5 GB
- Photon OS 5.0: ~180 MB RAM khi idle, image OVA ~380 MB
Với cluster 35 VM container host, tiết kiệm được khoảng 23 GB RAM — đủ để spin thêm 10–12 node nữa mà không cần mua thêm phần cứng.
Cài đặt Photon OS trên vSphere
Tải OVA và deploy lên ESXi/vCenter
VMware cung cấp sẵn file OVA — đây là cách nhanh nhất, không cần cài từ ISO. Truy cập trang chính thức của VMware để tải bản Photon OS mới nhất (hiện tại là 5.0). Có 3 loại image:
- OVA: Dùng cho vSphere/ESXi — khuyến nghị
- ISO: Cài thủ công, linh hoạt hơn nhưng mất thêm 10–15 phút
- AMI/GCE: Dành cho AWS/GCP
Sau khi có file OVA, deploy lên vCenter:
# Hoặc dùng govc CLI thay vì kéo thả qua UI
govc import.ova \
-name="photon-node-01" \
-ds="datastore1" \
-net="VM Network" \
photon-5.0-xxxxxxx.ova
Nếu chưa có govc, cài nhanh bằng:
curl -L -o govc https://github.com/vmware/govmomi/releases/latest/download/govc_Linux_x86_64.tar.gz
tar -xzf govc_Linux_x86_64.tar.gz govc
chmod +x govc
mv govc /usr/local/bin/
export GOVC_URL=https://vcenter.yourdomain.com
export [email protected]
export GOVC_PASSWORD=YourPassword
export GOVC_INSECURE=1
Mình dùng govc để script hóa việc deploy hàng loạt — rất tiện khi cần spin up 5–10 node Kubernetes cùng lúc.
Cấu hình VM hardware trước khi boot lần đầu
Trước khi power on, mình thường điều chỉnh một số thông số trong VM Settings:
- CPU: Tối thiểu 2 vCPU (Docker cần ít nhất 2 để chạy ổn)
- RAM: 2 GB trở lên cho production, 1 GB cho lab
- Disk: Thin provisioning, 20 GB là đủ cho base + vài container image
- VMware Tools: Photon OS tích hợp sẵn open-vm-tools — không cần cài thêm
Đăng nhập lần đầu và đổi mật khẩu
# Tài khoản mặc định
username: root
password: changeme
# Hệ thống yêu cầu đổi password ngay lần đầu
# Nhập password cũ → password mới → xác nhận
Cấu hình chi tiết sau khi cài đặt
Cấu hình network tĩnh
Khác với Ubuntu hay CentOS thường dùng NetworkManager, Photon OS chọn systemd-networkd làm network stack. Cú pháp config khác một chút, nhưng file khai báo gọn hơn nhiều. Tất cả nằm ở /etc/systemd/network/:
# Xem tên interface
ip link show
# Tạo file cấu hình static IP
cat > /etc/systemd/network/10-static.network <<'EOF'
[Match]
Name=eth0
[Network]
Address=192.168.10.101/24
Gateway=192.168.10.1
DNS=8.8.8.8
DNS=1.1.1.1
EOF
# Áp dụng
systemctl restart systemd-networkd
# Kiểm tra
ip addr show eth0
Một lưu ý từ kinh nghiệm thực tế: nếu VM có nhiều interface (ví dụ eth0 cho management, eth1 cho data), tạo riêng file 10-eth0.network và 20-eth1.network — con số prefix xác định thứ tự áp dụng.
Cập nhật hệ thống và cài package với tdnf
Package manager của Photon OS là tdnf (Tiny DNF) — nhẹ hơn nhiều so với dnf đầy đủ, nhưng cú pháp gần như y hệt:
# Cập nhật toàn bộ hệ thống
tdnf update -y
# Tìm kiếm package
tdnf search curl
# Cài package
tdnf install -y curl wget vim git
# Xem danh sách đã cài
tdnf list installed
# Xóa package
tdnf remove vim
Repo mặc định không phong phú như Ubuntu — đó là đánh đổi có chủ ý. Tool chuyên biệt đôi khi phải kéo binary về hoặc build từ source. Với mình không thành vấn đề: Photon OS chỉ dùng để chạy container. Mọi thứ cần đều nằm trong image rồi.
Bật và cấu hình Docker
# Docker có sẵn trong repo, cài và enable
tdnf install -y docker
systemctl enable docker
systemctl start docker
# Kiểm tra
docker version
docker info
# Cho phép user non-root chạy docker (tùy chọn)
usermod -aG docker yourusername
Mình thường custom thêm Docker daemon config để tối ưu cho môi trường vSphere:
cat > /etc/docker/daemon.json <<'EOF'
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"live-restore": true,
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 64000,
"Soft": 64000
}
}
}
EOF
systemctl restart docker
Option live-restore: true quan trọng — nó cho phép container tiếp tục chạy khi Docker daemon restart (ví dụ khi update). Tránh được downtime không đáng có.
Hardening bảo mật cơ bản
Mặc định Photon OS đã có security baseline tốt — số port mở tối thiểu, ít service dư. Mình vẫn siết thêm vài cái:
# Tắt SSH password auth, chỉ dùng key
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config
# Copy SSH public key vào (làm từ máy local)
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
# Restart SSH
systemctl restart sshd
# Bật firewall (iptables)
tdnf install -y iptables
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j DROP
Kiểm tra & Monitoring
Kiểm tra sức khỏe hệ thống
# Xem resource usage
free -h
df -h
top
# Check các service quan trọng
systemctl status docker
systemctl status systemd-networkd
systemctl status sshd
# Xem log hệ thống (journald)
journalctl -u docker -f # Log Docker realtime
journalctl --since "1 hour ago" # Log 1 giờ gần nhất
journalctl -p err # Chỉ xem error
# Kiểm tra container đang chạy
docker ps
docker stats --no-stream # Snapshot resource usage
Theo dõi tài nguyên với vmstat và iostat
# Cài sysstat
tdnf install -y sysstat procps-ng
# CPU/memory mỗi 2 giây
vmstat 2 10
# Disk I/O
iostat -x 2 5
# Network stats
ss -tulnp # Xem port đang listen
netstat -i # Interface stats
Tích hợp với vSphere Monitoring
Cái hay nhất khi chạy Photon OS trên vSphere: open-vm-tools đã có sẵn, không phải loay hoay cài tay như trên Ubuntu. vCenter nhận đầy đủ metrics (CPU, RAM, network, disk) ngay lập tức:
# Kiểm tra open-vm-tools
systemctl status vmtoolsd
# Xem IP từ vCenter guest info
vmware-rpctool "info-get guestinfo.ip"
# Đọc custom guestinfo (hữu ích khi dùng vApp properties)
vmware-rpctool "info-get guestinfo.hostname"
Từ vCenter, vào Monitor → Performance → Advanced là thấy đầy đủ biểu đồ. Mình còn kết hợp với Grafana + vSphere exporter để có dashboard tập trung cho cả 8 host ESXi — nhưng đó là câu chuyện của bài khác.
Script kiểm tra nhanh health check
Mình để script này trong /usr/local/bin/ trên tất cả node Photon, chạy mỗi khi troubleshoot hoặc sau khi reboot:
#!/bin/bash
# photon-health-check.sh
echo "=== Photon OS Health Check ==="
echo "Hostname: $(hostname)"
echo "Uptime: $(uptime -p)"
echo ""
echo "--- Memory ---"
free -h | grep -E 'Mem|Swap'
echo ""
echo "--- Disk ---"
df -h / /var/lib/docker 2>/dev/null
echo ""
echo "--- Docker ---"
if systemctl is-active docker >/dev/null 2>&1; then
echo "Docker: RUNNING"
echo "Containers: $(docker ps -q | wc -l) running"
else
echo "Docker: STOPPED"
fi
echo ""
echo "--- Network ---"
ip -br addr show
chmod +x photon-health-check.sh
./photon-health-check.sh
Một vài mẹo từ thực tế vận hành
Sau vài tháng dùng Photon OS trong production, mình rút ra mấy điểm quan trọng:
- Dùng template VM: Deploy xong 1 VM Photon OS đã cấu hình sạch → convert thành template vCenter → clone ra khi cần. Tiết kiệm 80% thời gian setup.
- Cloud-init: Photon OS hỗ trợ cloud-init native. Kết hợp với Terraform, mình deploy xong 10 node — từ lúc chạy
terraform applyđến lúc Docker sẵn sàng — chưa tới 5 phút. - Không cài thừa: Điểm mạnh là footprint nhỏ — đừng biến Photon OS thành Ubuntu bằng cách cài đầy package. Thứ gì cần thì đưa vào container.
- Update thường xuyên: Photon OS release security patch khá nhanh. Đặt lịch
tdnf update -yhàng tuần trong cron là thói quen tốt.

