hoatranlab.io.vn Zalo: 0917516878 Hotline: 0917516878 [email protected]
HoaTranLab HoaTranLab
Buổi 5 / 14

VM Management, Templates & Snapshots

Module 6: VM creation · VMware Tools · Content Library · Templates · Guest Customization · Snapshots

Tiến độ khóa học5 / 14 buổi
~4 giờ Intermediate Module 6 VM Templates Snapshots
Nội dung thực hành trên ESXi 8.0 Update 3 & vCenter Server 8.0 Update 3 (Build 24022515)

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 VersionESXi VersionMax vCPUMax vRAMNotable Features
146.71286 TBTPM 2.0 support
177.02566 TBPrecise memory mgmt
197.0 U12566 TBNVMe controller
208.02568 TBvTPM default
218.0 U2 / 8.0.32568 TBEnhanced 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

TypeDisk FormatBoot timeSpaceUse case
ThinThinNhanhTiết kiệmDev/Test
Thick Lazy ZeroedThickNhanhĐầyProduction
Thick Eager ZeroedThickChậm hơnĐầyMission-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
TemplateOS / VersionvHW VersionDiskPatchesTools
tmpl-ubuntu2404-baseUbuntu 24.04 LTSHW2140 GB thinMonthlyLatest
tmpl-rhel9-baseRHEL 9.xHW2160 GB thinMonthlyLatest
tmpl-windows2022-baseWindows Server 2022HW2180 GB thinPatch TuesdayLatest

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 VersionESXi tương ứngTính năng mớiKhuyến nghị
HW 17ESXi 6.7 U2+vPMem, Precision ClockLegacy
HW 19ESXi 7.0 U2+vTPM 2.0, 256 vCPUsMinimum mới
HW 20ESXi 8.0NVMe boot, 512 vCPUs, 24 TB RAMKhuyến nghị 2024
HW 21ESXi 8.0 U2+ / 8.0.3DirectPath I/O improvements, vDPDK — max version cho ESXi 8.0.3Latest 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