Mục Tiêu Buổi Học
- Tạo VM từ đầu với cấu hình chuẩn production (PVSCSI, VMXNET3, vTPM)
- Cài đặt VMware Tools bằng open-vm-tools (Linux) và GUI (Windows)
- Tạo Golden Image và convert sang Template
- Quản lý Content Library để chia sẻ templates giữa các vCenter
- Tạo Guest Customization Specification cho deployment tự động
- Nắm vững best practices về Snapshots (không phải backup)
LÝ THUYẾT — MODULE 6
6.1 VM File Structure
VM-Name/ ├── VM-Name.vmx ← VM configuration ├── VM-Name.vmdk ← Virtual disk descriptor ├── VM-Name-flat.vmdk ← Actual disk data (thin/thick) ├── VM-Name.nvram ← BIOS/UEFI settings ├── VM-Name.vmsd ← Snapshot metadata ├── VM-Name-Snapshot1.vmdk ← Snapshot delta disk ├── VM-Name.vswp ← VM swap file (= vRAM) └── vmware.log ← VM event log
VM Hardware Versions
| HW Version | ESXi Version | Max vCPU | Max vRAM | Notable Features |
|---|---|---|---|---|
| 14 | 6.7 | 128 | 6 TB | TPM 2.0 support |
| 17 | 7.0 | 256 | 6 TB | Precise memory mgmt |
| 19 | 7.0 U1 | 256 | 6 TB | NVMe controller |
| 20 | 8.0 | 256 | 8 TB | vTPM default |
| 21 | 8.0 U2 / 8.0.3 | 256 | 8 TB | Enhanced security — Max HW version cho ESXi 8.0.3 |
VMware Tools — Tầm Quan Trọng
- Improved driver (memory ballooning, VMXNET3, PVSCSI)
- Quiesced snapshots (application-consistent)
- Guest OS heartbeat monitoring
- Time synchronization
- VMware Tools scripts (pre/post snapshot)
- Version 12.x cho vSphere 8.x (open-vm-tools tương đương — khuyến nghị cho Linux)
VM Provisioning Types
| Type | Disk Format | Boot time | Space | Use case |
|---|---|---|---|---|
| Thin | Thin | Nhanh | Tiết kiệm | Dev/Test |
| Thick Lazy Zeroed | Thick | Nhanh | Đầy | Production |
| Thick Eager Zeroed | Thick | Chậm hơn | Đầy | Mission-critical, FT |
LAB THỰC HÀNH — MODULE 6
Lab 6.1 — Tạo VM Từ Đầu
vSphere Client → New Virtual Machine → Create a New VM 1. Configuration: Name: web-server-01 Location: DC-HaNoi/Production 2. Compute Resource: Cluster: Cluster-Production Resource Pool: RP-Production 3. Storage: DS-iSCSI-VMFS6-01 VM Storage Policy: Gold-Tier-Encrypted 4. Compatibility: ESXi 8.0 and later (HW v21) 5. Guest OS: Family: Linux Version: Red Hat Enterprise Linux 9 (64-bit) 6. Customize Hardware: CPU: 2 vCPU, Cores per socket: 1 Memory: 4 GB Hard Disk: 50 GB, Thin Provision SCSI Controller: VMware Paravirtual (PVSCSI) Network: DPG-VM-Production (VMXNET3) CD/DVD: ISO file từ datastore (rhel-9.iso) ✓ Add TPM (Trusted Platform Module) 7. Finish → Power On → Install OS
Lab 6.2 — Cài Đặt VMware Tools
# Trên RHEL/CentOS/Rocky Linux VM: # VMware Tools 12.x cho vSphere 8.x — open-vm-tools là phương thức khuyến nghị cho Linux # Phương thức 1: Open VM Tools (khuyến nghị cho vSphere 8.x) sudo dnf install open-vm-tools -y sudo systemctl enable --now vmtoolsd # Phương thức 2: VMware Tools từ ISO # VM → Actions → Guest OS → Install VMware Tools mount /dev/cdrom /mnt/cdrom cp /mnt/cdrom/VMwareTools-*.tar.gz /tmp/ cd /tmp && tar xzf VMwareTools-*.tar.gz cd vmware-tools-distrib && sudo ./vmware-install.pl # Windows VM: sử dụng vSphere Client GUI # VM → Actions → Guest OS → Install/Upgrade VMware Tools
Lab 6.3 — VM Templates và Content Library
Tạo Template từ VM: 1. Chuẩn bị "golden image" VM: - Cài OS sạch + VMware Tools + base packages - Sysprep (Windows) hoặc cloud-init (Linux): # Linux cloud-init generalization: sudo cloud-init clean --logs sudo truncate -s 0 /etc/machine-id sudo rm -f /etc/ssh/ssh_host_* sudo history -c 2. Convert to Template: Right-click VM → Template → Convert to Template Template: tmpl-rhel9-base 3. Tạo Content Library (để share across vCenters): Menu → Content Libraries → Create Name: CL-Templates Type: Local (hoặc Subscribed từ vCenter khác) Datastore: DS-NFS-Templates Import template vào Content Library: Content Library → Import Item → OVF/OVA hoặc VM Template Deploy OVF/OVA trực tiếp (không qua Content Library): vSphere Client → Actions → Deploy OVF Template → chọn file OVF/OVA 4. Deploy từ Template: Content Library → tmpl-rhel9-base → Actions → New VM from This Template Customize: Hostname, IP (dùng Guest Customization Spec)
Lab 6.4 — Guest Customization Specification
vSphere Client → Policies and Profiles → Guest Customization Specs
New Spec:
Name: Linux-Static-IP
Target OS: Linux
Computer Name: Use VM Name
Network:
Use custom settings:
IPv4: Prompt user
DNS: 10.100.100.1
DNS Search: lab.local
Commands to run (post-deploy):
/usr/local/bin/register-cmdb.sh
Deploy VM với Spec này:
Clone/Deploy → Customize OS → Linux-Static-IP
Lab 6.5 — Snapshots
# Tạo snapshot qua vSphere Client: Right-click VM → Snapshots → Take Snapshot Name: Pre-upgrade-2024-01 Description: Before kernel upgrade ✓ Quiesce guest file system (cần VMware Tools) # Quản lý Snapshot Tree: VM → Snapshots → Manage Snapshots Thấy snapshot tree và disk space usage # Revert: Right-click snapshot → Revert to Snapshot # Xóa (commit delta disk vào base): Right-click snapshot → Delete # Best Practices: - Snapshot KHÔNG phải backup! - Khuyến nghị tối đa 3 snapshot per VM, không giữ quá 72 giờ - Hệ thống hỗ trợ tối đa 32 snapshot/chain nhưng KHÔNG nên đến giới hạn này - Snapshot làm giảm I/O performance (delta disk overhead) - Xóa snapshot ngay sau khi không còn cần — chạy "Consolidate" nếu orphaned delta
ỨNG DỤNG DOANH NGHIỆP — MODULE 6
Các pattern quản lý VM thực tế tại doanh nghiệp — từ template library, OVF automation, VM hardware policy đến snapshot governance và VMware Tools rollout.
1. VM Template Library Design — Content Library Architecture
Thiết kế Content Library tập trung cho phép tất cả sites dùng chung golden images — đảm bảo đồng nhất và giảm bandwidth transfer.
### TOPOLOGY — Content Library Multi-Site ┌─────────────────────────────────────────────────────────────┐ │ Content Library Architecture │ │ │ │ vCenter HÀ NỘI (Primary) │ │ ┌───────────────────────────────────────────────┐ │ │ │ CL-Publisher-HN (Published Library) │ │ │ │ DS: DS-NFS41-Templates-HN-01 (1 TB) │ │ │ │ Content: │ │ │ │ tmpl-ubuntu2404-base-v2.2 (OVF) │ │ │ │ tmpl-rhel9-base-v1.5 (OVF) │ │ │ │ tmpl-windows2022-base-v1.3 (OVF) │ │ │ │ ova-packer-ubuntu-golden (OVA) │ │ │ └───────────────────────────────────────────────┘ │ │ ↓ Auto-Sync (HTTPS, scheduled daily) │ │ vCenter HỒ CHÍ MINH (Subscriber) │ │ ┌───────────────────────────────────────────────┐ │ │ │ CL-Subscriber-HCM (Subscribed Library) │ │ │ │ On-demand download khi deploy │ │ │ └───────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ### Template Naming Convention: tmpl-[OS]-[role]-v[major].[minor] tmpl-ubuntu2404-base-v2.2 tmpl-rhel9-webserver-v1.0 tmpl-windows2022-adfs-v1.1
| Template | OS / Version | vHW Version | Disk | Patches | Tools |
|---|---|---|---|---|---|
| tmpl-ubuntu2404-base | Ubuntu 24.04 LTS | HW21 | 40 GB thin | Monthly | Latest |
| tmpl-rhel9-base | RHEL 9.x | HW21 | 60 GB thin | Monthly | Latest |
| tmpl-windows2022-base | Windows Server 2022 | HW21 | 80 GB thin | Patch Tuesday | Latest |
2. OVF/OVA Deployment Automation — Packer + PowerCLI
Quy trình tạo golden image tự động hóa hoàn toàn — mỗi tháng tạo template mới có patches mới nhất mà không can thiệp thủ công.
### PowerCLI — Deploy VM từ Template với customization
Connect-VIServer vcsa-hn-prod.hoatranlab.io.local
# 1. Lấy template từ Content Library
$template = Get-ContentLibraryItem -Name "tmpl-ubuntu2404-base-v2.2"
# 2. Tạo OS Customization Spec
$custSpec = New-OSCustomizationSpec -Name "Linux-DHCP-Spec" `
-OSType Linux `
-NamingScheme fixed -NamingPrefix "lnxapp-crm-prd" `
-Domain hoatranlab.io.local `
-DnsServer 10.100.10.53, 10.100.10.54 `
-Type NonPersistent
# 3. Deploy VM từ template
$vm = New-VM -Name "LNXAPP-CRM-PRD-01" `
-ContentLibraryItem $template `
-ResourcePool (Get-ResourcePool "RP-PROD-Critical") `
-Datastore (Get-Datastore "DS-VMFS6-iSCSI-Gold-HN-01") `
-OSCustomizationSpec $custSpec
# 4. Đặt hardware config
$vm | Set-VM -NumCpu 4 -MemoryGB 8 -Confirm:$false
# 5. Gán vDS Port Group
$nic = $vm | Get-NetworkAdapter
$pg = Get-VDPortgroup "DPG-VLAN100-Production"
$nic | Set-NetworkAdapter -Portgroup $pg -Confirm:$false
# 6. Power on và chờ VMware Tools ready
$vm | Start-VM
Wait-Tools -VM $vm -TimeoutSeconds 300
Write-Host "VM $($vm.Name) deployed and ready: $((Get-VM $vm.Name).Guest.IPAddress)"
### Pipeline Packer + Ansible → Golden OVA → Content Library
# .gitlab-ci.yml (hoặc GitHub Actions)
golden-image-build:
schedule: "0 2 1 * *" # Mỗi ngày 1 hàng tháng lúc 2AM
script:
- packer build ubuntu2404-base.pkr.hcl # Build VM từ ISO
- ansible-playbook harden-cis.yml # CIS hardening
- ansible-playbook install-agents.yml # Zabbix, Qualys, etc.
- packer post-processor convert-ovf # Export OVA
- govc library.import CL-Publisher-HN ./ubuntu2404-base.ova
- slack-notify "Template tmpl-ubuntu2404-base updated"
3. VM Hardware Version Policy
Hardware version quyết định tính năng VM có thể dùng — nên chuẩn hóa toàn cluster dùng cùng version.
| HW Version | ESXi tương ứng | Tính năng mới | Khuyến nghị |
|---|---|---|---|
| HW 17 | ESXi 6.7 U2+ | vPMem, Precision Clock | Legacy |
| HW 19 | ESXi 7.0 U2+ | vTPM 2.0, 256 vCPUs | Minimum mới |
| HW 20 | ESXi 8.0 | NVMe boot, 512 vCPUs, 24 TB RAM | Khuyến nghị 2024 |
| HW 21 | ESXi 8.0 U2+ / 8.0.3 | DirectPath I/O improvements, vDPDK — max version cho ESXi 8.0.3 | Latest cho vSphere 8 |
Lưu ý khi nâng cấp Hardware Version
- Upgrade HW version không thể rollback — snapshot trước khi upgrade
- VM phải được tắt hoàn toàn (powered off) trước khi nâng cấp HW version
- Kiểm tra Guest OS compatibility — một số OS cũ có vấn đề với HW version mới
- Nâng cấp VMware Tools trước khi nâng HW version
4. Snapshot Lifecycle Management Policy
Snapshot không phải backup — chính sách rõ ràng tránh tình huống snapshot cũ làm cạn disk và gây performance degradation.
### PowerCLI — Audit và xóa snapshots cũ (script chạy daily)
# Script: snapshot-cleanup.ps1
# Schedule: Daily 22:00 via Windows Task Scheduler hoặc GitLab CI
param([int]$MaxAgeDays = 3, [switch]$DryRun)
Connect-VIServer vcsa-hn-prod.hoatranlab.io.local -Credential (Get-Credential)
$cutoff = (Get-Date).AddDays(-$MaxAgeDays)
$oldSnaps = Get-VM | Get-Snapshot | Where {$_.Created -lt $cutoff}
foreach ($snap in $oldSnaps) {
$age = [int]((Get-Date) - $snap.Created).TotalDays
Write-Host "[$age days] $($snap.VM.Name) → '$($snap.Name)' created $($snap.Created)"
if (-not $DryRun) {
Remove-Snapshot -Snapshot $snap -Confirm:$false
Write-Host " Removed."
}
}
# Gửi report qua email/Slack
$report = $oldSnaps | Select @{N="VM";E={$_.VM.Name}}, Name, @{N="Age(days)";E={[int]((Get-Date)-$_.Created).TotalDays}}, SizeGB
$report | ConvertTo-Json | Invoke-RestMethod -Uri $env:SLACK_WEBHOOK -Method POST -Body (@{text=($report | ft | Out-String)} | ConvertTo-Json)
Snapshot Anti-Patterns — Tuyệt đối tránh
- Snapshot tồn tại > 72 giờ trong production — delta disk phình to, performance giảm
- Nhiều hơn 3 snapshot chains (max hỗ trợ: 32, nhưng không nên vượt 3) — quản lý phức tạp, consolidation lâu
- Dùng snapshot thay backup — snapshot không bảo vệ khỏi host/storage failure
- Snapshot database VMs mà không dùng quiescing (VMware Tools) — inconsistent state
5. VMware Tools Deployment Automation
VMware Tools phải luôn được cài và cập nhật — ảnh hưởng trực tiếp đến vMotion speed, snapshot quiescing và guest metrics.
### PowerCLI — Bulk VMware Tools Update
# Cập nhật tools cho tất cả VMs đang chạy, không power off
$vms = Get-VM | Where {$_.PowerState -eq "PoweredOn"} |
Where {$_.Guest.ToolsVersionStatus -in "guestToolsNeedUpgrade", "guestToolsNotInstalled"}
foreach ($vm in $vms) {
Write-Host "Updating VMware Tools: $($vm.Name) [Current: $($vm.Guest.ToolsVersion)]"
# Update với auto-reboot cho Linux, reboot manual cho Windows
if ($vm.Guest.OSFullName -match "Windows") {
Update-Tools -VM $vm -NoReboot
Write-Host " Windows VM — schedule reboot via Change Request"
} else {
Update-Tools -VM $vm
Write-Host " Linux VM — Tools updated, no reboot required"
}
}
### Linux: Dùng open-vm-tools (được khuyến nghị cho RHEL/Ubuntu)
# Không cần mount ISO, tự update qua OS package manager:
# Ubuntu/Debian:
apt-get install -y open-vm-tools # hoặc open-vm-tools-desktop
# RHEL/CentOS:
dnf install -y open-vm-tools
# Tự update khi có patch OS: cài qua package manager → tự động update
6. Resource Pool Hierarchy — Tổ Chức Tài Nguyên Doanh Nghiệp
Resource Pool phân chia và ưu tiên tài nguyên CPU/Memory giữa các business units — đảm bảo SLA cho mỗi nhóm workload.
### RESOURCE POOL HIERARCHY — Enterprise Design
Cluster-HN-Production
├── RP-CRITICAL (CPU: High 4000 / Mem: High 163840)
│ ├── RP-Database (Oracle, SQL — Eager Zeroed vDisk)
│ └── RP-CoreApp (ERP, CRM production)
├── RP-STANDARD (CPU: Normal 2000 / Mem: Normal 81920)
│ ├── RP-WebApp (Web servers, API gateways)
│ └── RP-FileServer (Print, File sharing)
└── RP-DEVELOPMENT (CPU: Low 1000 / Mem: Low 40960)
├── RP-Dev-TeamA (Team A sandbox)
└── RP-Dev-TeamB (Team B sandbox)
### PowerCLI — Tạo Resource Pool Hierarchy
$cluster = Get-Cluster "Cluster-HN-Production"
# Critical tier
$rpCritical = New-ResourcePool -Location $cluster `
-Name "RP-CRITICAL" `
-CpuSharesLevel High -MemSharesLevel High `
-CpuExpandableReservation $true `
-MemExpandableReservation $true
# Standard tier
New-ResourcePool -Location $cluster `
-Name "RP-STANDARD" `
-CpuSharesLevel Normal -MemSharesLevel Normal `
-CpuExpandableReservation $true
# Dev tier — giới hạn để không ảnh hưởng production
New-ResourcePool -Location $cluster `
-Name "RP-DEVELOPMENT" `
-CpuSharesLevel Low -MemSharesLevel Low `
-CpuLimitMHz 8000 -MemLimitMB 32768 # Hard limit cho dev
Khi nào dùng Resource Pool
- Phân biệt SLA giữa production và dev/test
- Chargeback/showback theo business unit
- Giới hạn tài nguyên cho tenant trong multi-tenant
- Đảm bảo critical workloads được ưu tiên khi tải cao
Resource Pool Anti-Patterns
- Tạo 1 Resource Pool per VM — overhead không cần thiết
- Tất cả VMs trong root Resource Pool — mất kiểm soát ưu tiên
- Set limit quá thấp cho production — gây starvation
- Không dùng expandable reservation — VMs không thể burst